以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  问题代码求助老师帮助修正  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=143181)

--  作者:tmxker
--  发布时间:2016/11/22 15:49:15
--  问题代码求助老师帮助修正


我的问题策略模型代码要求说明:

1,非多即空;底仓交易手ss=2;
2,若平仓盈利时,不加仓;
3,若平仓亏损,则:亏1次,加仓1手ss+1,连亏2次,加仓2手ss+2... 直到连亏6次时,加仓6手ss+6;此后若再出现连亏,停止加仓,直到反向交易,从ss=2手开始交易。

我写的后台交易代码如下,经反复测试,或变通改写,均不能正确满足我的设计要求。出现的技术问题是,开多、开空起步交易正常,当出现多次连亏后,多空反手交易仅能前2次加仓正确,

多头仓到ss+1=3,空头仓到ss+2=-4,后面的连亏交易就不会增加加仓量了。求金老师及各位专家老师帮助修改正确之,谢谢!

-----------------------------

详细代码如下:

runmode:0;                     //以0逐K线模式运行(1系列模式)     

//声明参数
input:ss(2,1,10,1);            //底仓交易手数
//声明变量                          
globalvariable:kcs=0;           //连亏次数
globalvariable:jyss=0;          //交易手数(底仓+加仓)


////一、平空

   IF (平空条件) and tholding<0 then begin
   tsellshort(1,0,mkt);                        
   END                        
   if tnumprofit(1)>=0 or time=closetime(0) or time=opentime(1) then kcs:=0;            
   if tnumprofit(1)<0 then kcs:=kcs+1;

//连亏交易手数
   if kcs=0 then jyss:=ss;
   if kcs=1 then jyss:=ss+1;                                                       
   if kcs=2 then jyss:=ss+2;   
   if kcs=3 then jyss:=ss+3; 
   if kcs=4 then jyss:=ss+4;        
   if kcs=5 then jyss:=ss+5;  
   if kcs>=6 then jyss:=ss+6;

////开多加仓               
IF (开多条件) and tholding=0 then begin           
   tbuy(jyss>0,jyss,mkt);  
   kcs:=0;   
   jyss:=0;   
   END 

////二、平多
   IF(平多条件)and tholding>0 then begin
   tsell(1,0,mkt);                             //全平多,若有
   END
   if tnumprofit(1)>=0 or time=closetime(0) or time=opentime(1) then kcs:=0;            
   if tnumprofit(1)<0 then kcs:=kcs+1;

//连亏交易手数
   if kcs=0 then jyss:=ss;
   if kcs=1 then jyss:=ss+1;                                                       
   if kcs=2 then jyss:=ss+2;   
   if kcs=3 then jyss:=ss+3; 
   if kcs=4 then jyss:=ss+4;        
   if kcs=5 then jyss:=ss+5;  
   if kcs>=6 then jyss:=ss+6;

//开空加仓  
IF(开空条件)and tholding=0 then begin          
   tbuyshort(jyss>0,jyss,mkt);        
   kcs:=0;   
   jyss:=0;      
   END 

 

 


--  作者:tmxker
--  发布时间:2016/11/22 15:53:43
--  

TNUMSEQLOSS  //连亏次数

我还使用(TNUMSEQLOSS  //连亏次数)函数,也没有满足我的策略设计要求。


--  作者:jinzhe
--  发布时间:2016/11/22 16:03:03
--  

ss:=2;
globalvariable:n=0;

if tbuyholdingex(\'\',\'\',2)+TREMAINQTY(1,\'\',\'\')=0 and 开多条件 then begin
 if tnumprofit(1)>=0 then n:=0;
 if tnumprofit(1)<0 then n:=n+1;
 tbuy(1,ss+n,mkt);
end

if tsellholdingex(\'\',\'\',2)+TREMAINQTY(3,\'\',\'\')=0 and 开空条件 then begin
 if tnumprofit(1)>=0 then n:=0;
 if tnumprofit(1)<0 then n:=n+1;
 tbuyshort(1,ss+n,mkt);
end

我用开仓时计算全局变量的方法,你试试看
--  作者:tmxker
--  发布时间:2016/11/22 16:14:27
--  
谢谢金老师!我明天测试后,如有发现问题,将详细说明,再请指正。
--  作者:jinzhe
--  发布时间:2016/11/22 16:20:54
--  
好的
--  作者:tmxker
--  发布时间:2016/11/22 16:54:18
--  

金老师,从代码看,这是账户里已有多头/空头持仓后的追加开仓吧?

 

我的策略模型是,空头单平仓亏损 -->反手开多并+仓,多头单平仓亏损 -->反手开空并+仓。。。,


--  作者:jinzhe
--  发布时间:2016/11/22 17:01:12
--  
并不是,开仓条件就限定住了必须无持仓无未成交单
--  作者:tmxker
--  发布时间:2016/11/23 9:51:13
--  

金老师,我昨夜盘反复测试了你给出的“加仓代码”,结果是:反手多空加仓均无效果,没有加仓动作,只有底仓ss。

请你再研究一下我的这个问题,谢谢。


--  作者:jinzhe
--  发布时间:2016/11/23 10:07:45
--  
那么加仓时,有没有持仓判断的?
--  作者:tmxker
--  发布时间:2016/11/23 10:58:50
--  

没有,否则,就发生加仓了ss+1。

 

金老师,我贴的代码起步运行是正常的,如果连续亏损的话,正反手交易能发生加仓到ss+2,就停止了,总交易手数就在3和-4之间循环。不知问题出在代码的何处?应该框架是对的(此框架也是参照你在论坛里给出的代码写出的),麻烦你研究解决我的这个问题,我是付费专业版用户。我很需要这个策略模型的正常运行,拜托啦。