-- 作者:z7c9
-- 发布时间:2011/4/12 9:00:12
-- [交易系统]MA策略
runmode:0;
input:period(70,5,90,5); input:initialstop(2,0,3,1),coststop(2,1,3,1),trailingstop(3,1,6,1); input:money(0,0,10,1); input:slippage(1,0,1,1); input:debug(1,0,1,1);
variable:myasset=500000; variable:costprice=0,stopline=0;
begin if stricmp(marketlabel,\'sh\')=0 then begin commission:=0.001; stamptax:=0.001; transferfee:=0.001; end if stricmp(marketlabel,\'sz\')=0 then begin commission:=0.001; stamptax:=0.001; transferfee:=0; end ma1:ma(close,60); buycond:=ref(cross(close,ma1),1);
topband:=ref(hhv(high,period),1)+mindiff; atr:=ref(ma(tr,10),1); initialstopnum:=trimprice(initialstop*atr); coststopnum:=trimprice(coststop*atr); trailingstopnum:=trimprice(trailingstop*atr); slippagenum:=slippage*mindiff; end
if holding=0 then begin price:=0; lots:=0; if barpos>=period and buycond then price:=close+slippagenum; if price>0 then begin mycash:=cash(0); lots1:=intpart(mycash/(price*volunit))*volunit; if money=0 then begin lots:=lots1; end else begin lots2:=intpart(mycash*0.01*money/(initialstopnum*volunit))*volunit; lots:=min(lots1,lots2); end end if lots>=1 then begin buy(1,lots,limitr,price); if workmode=1 then tbuy(1,lots,limitr,price); end end
if holding>0 then begin price:=0; lots:=holding; if initialstop>0 then begin if stopline>0 and low<=stopline then price:=close-slippagenum; if stopline=0 then begin costprice:=trimprice((enterprice*(1+commission)+2*transferfee)/(1-commission-stamptax))+mindiff; stopline:=costprice-initialstopnum; end if stopline<costprice and high-coststopnum>=costprice then stopline:=costprice; if stopline>=costprice and high-trailingstopnum>stopline then stopline:=high-trailingstopnum; end if price>0 then begin sell(1,lots,limitr,price); costprice:=0; stopline:=0; myasset:=asset; if workmode=1 then tsell(1,lots,limitr,price); end end
partline(debug=1 and holding=0,topband,colorred,1);
if initialstop>0 then begin if holding>0 then begin drawicon(stopline<costprice,stopline,11); drawicon(stopline=costprice,stopline,12); drawicon(stopline>costprice,stopline,10); end end
if debug=1 then begin 盈亏:myasset,noaxis,colormagenta; 收益:(myasset-500000)/500000,linethick0; 次数:totaltrade,linethick0; 胜率:percentwin,linethick0; 连亏:maxseqloss,linethick0; 连赢:maxseqwin,linethick0; end
[此贴子已经被作者于2011-10-3 11:22:02编辑过]
|
-- 作者:武田晴信
-- 发布时间:2013/9/17 11:04:52
--
这个策略是因为刚开始他命名的变量是系统自带的函数input:period(70,5,90,5);其中 period 为系统返回值范围为0-19,分别表示 0:分笔成交、1:1分钟、2:5分钟、3:15分钟、4:30分钟、5:60分钟、 6:日、7:周、8:月、9:年、10:多日、11:多小时、12:季度
现在这个函数金字塔的内部函数系统用: DATATYPE 函数代替了 period
改成这样就能通过了:
//声明变量
runmode:0;
input:period123(70,5,90,5); input:initialstop(2,0,3,1),coststop(2,1,3,1),trailingstop(3,1,6,1); input:money(0,0,10,1); input:slippage(1,0,1,1); input:debug(1,0,1,1);
variable:myasset=500000; variable:costprice=0,stopline=0; //准备需要计算的变量 begin if stricmp(marketlabel,\'sh\')=0 then begin commission:=0.001; stamptax:=0.001; transferfee:=0.001; end if stricmp(marketlabel,\'sz\')=0 then begin commission:=0.001; stamptax:=0.001; transferfee:=0; end ma1:ma(close,60); buycond:=ref(cross(close,ma1),1);
topband:=ref(hhv(high,period123),1)+mindiff; atr:=ref(ma(tr,10),1); initialstopnum:=trimprice(initialstop*atr); coststopnum:=trimprice(coststop*atr); trailingstopnum:=trimprice(trailingstop*atr); slippagenum:=slippage*mindiff; end
if holding=0 then begin price:=0; lots:=0; if barpos>=period123 and buycond then price:=close+slippagenum; if price>0 then begin mycash:=cash(0); lots1:=intpart(mycash/(price*volunit))*volunit; if money=0 then begin lots:=lots1; end else begin lots2:=intpart(mycash*0.01*money/(initialstopnum*volunit))*volunit; lots:=min(lots1,lots2); end end if lots>=1 then begin buy(1,lots,limitr,price); if workmode=1 then tbuy(1,lots,limitr,price); end end
if holding>0 then begin price:=0; lots:=holding; if initialstop>0 then begin if stopline>0 and low<=stopline then price:=close-slippagenum; if stopline=0 then begin costprice:=trimprice((enterprice*(1+commission)+2*transferfee)/(1-commission-stamptax))+mindiff; stopline:=costprice-initialstopnum; end if stopline<costprice and high-coststopnum>=costprice then stopline:=costprice; if stopline>=costprice and high-trailingstopnum>stopline then stopline:=high-trailingstopnum; end if price>0 then begin sell(1,lots,limitr,price); costprice:=0; stopline:=0; myasset:=asset; if workmode=1 then tsell(1,lots,limitr,price); end end
partline(debug=1 and holding=0,topband,colorred,1);
if initialstop>0 then begin if holding>0 then begin drawicon(stopline<costprice,stopline,11); drawicon(stopline=costprice,stopline,12); drawicon(stopline>costprice,stopline,10); end end
if debug=1 then begin 盈亏:myasset,noaxis,colormagenta; 收益:(myasset-500000)/500000,linethick0; 次数:totaltrade,linethick0; 胜率:percentwin,linethick0; 连亏:maxseqloss,linethick0; 连赢:maxseqwin,linethick0; end
{ KD:=; //开多条件 PD:=; //平多条件 KK:=; //开空条件 PK:=; //平空条件
平空:SELLSHORT(PK,1,THISCLOSE); //平空信号 开多:BUY(KD AND HOLDING=0,1,THISCLOSE); //开多信号 平多:SELL(PD,1,THISCLOSE); //平多信号 开空:BUYSHORT(KK AND HOLDING=0,1,THISCLOSE); //开空信号
} { 信号语句排列规则——先平后开 “费率设置”按钮——用于合理设置模型“费率”,以便在图形上正确输出如下帐户信息:
持仓:holding,linethick0; 资产:asset,noaxis; 可用现金:cash(0),linethick0; }
|