--  作者: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; } 
         
       |