以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  交易策略发布专区  (http://weistock.com/bbs/list.asp?boardid=10)
----  [交易系统]MA策略  (http://weistock.com/bbs/dispbbs.asp?boardid=10&id=6108)

--  作者: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编辑过]

--  作者:a7777
--  发布时间:2013/1/29 21:14:43
--  
图片点击可在新窗口打开查看
--  作者:散兵
--  发布时间:2013/2/20 22:57:03
--  

测试没通过


--  作者:jyqh
--  发布时间:2013/2/21 15:57:05
--  

真是源代码啊 有待考察


--  作者:chinacc
--  发布时间:2013/2/28 0:41:58
--  
似乎不绩效不怎么样
--  作者:chinacc
--  发布时间:2013/3/2 10:46:36
--  
图片点击可在新窗口打开查看
--  作者:a1121648703
--  发布时间:2013/5/16 7:47:50
--  

骗子没法测试

 


--  作者:散兵
--  发布时间:2013/6/18 16:02:12
--  语句编写
没通过测试,哪位高手改下。。。。。。。。
--  作者:武田晴信
--  发布时间: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;
}