以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://www.weistock.com/bbs/list.asp?boardid=4)
----  [求助]请教一下止盈止损  (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=75948)

--  作者:渴望知识
--  发布时间:2015/2/27 11:40:44
--  [求助]请教一下止盈止损

老师好

下面是我写的一个止盈止损策略:

input:tq(10,3,60,1);
abb:=(time0-timetot0(dynainfo(207))<=tq) or not(islastbar);

KD:BUY(holding=0 and 做多条件 and abb and time<145500,1,limitr,c); //开多
KK:BUYSHORT(holding=0 and 做空条件 and abb and time<145500,1,limitr,c);//开空

 

//图表时使用的语句
kcwzl:=valuewhen(kd,low);//开多单时的最低价
kcwzh:=valuewhen(kk,high);//开空单时的最高价


 

//止损点差为最(高)低点的ZS个点,止赢点差为TP,追踪点差为DTP
ZS:=3;
TP:=3;
DTP:=8;
A:=mindiff;//取模组交易合约的最小变动价位

 

kdzs:=C<(kcwzl-zs);//多单止损条件
kkzs:=c>(kcwzh+zs);//空单止损条件

 


     sell(kdzs,0,marketr);
     buyshort(holding=0 && kdzs,1,marketr); //多单止损后反手
    
     sellshort(kkzs,0,marketr);
     buy(holding=0 && kkzs,1,marketr); //空单止损后反手

 

//多单止盈止损计算
HH:=HHV(H,enterbars+1);    //买开仓位置到现在最高价
A1:=ENTERPRICE+TP*A;       //止盈点差起始位置
A2:=A1+DTP*A;              //追踪点差起始位置
A3:=A1-2*A;                //最小止盈位置
A4:=HH-DTP*A;              //以上为根据止赢点差计算多单追踪止赢位置
if ((HH>=A1 && HH<=A2 && C<=A3)||(HH>A2 && C<=A4)) && holding>0 then sell(1,0,marketr);//多单止盈和追踪止盈

 

但是我发现实际跑盘时,这个好像都不执行,我单独看了一下他们的线,都是一条直线,而不随着行情的变动而变动。

请问一下,我这个策略的写法有没有问题?里面的那个ETERBARS这个函数加1是否是对的。

另外,我是否需要来声明:HH,A1,A2,A3,A4他们为全局变量呢?


--  作者:jinzhe
--  发布时间:2015/2/27 13:30:15
--  

KD:BUY(holding=0 and 做多条件 and abb and time<145500,1,limitr,c); //开多
KK:BUYSHORT(holding=0 and 做空条件 and abb and time<145500,1,limitr,c);//开空

 

//图表时使用的语句
kcwzl:=valuewhen(kd,low);//开多单时的最低价
kcwzh:=valuewhen(kk,high);//开空单时的最高价

 

这样是错的

 

开仓时的最高最低价用

ref(low,enterbars)

ref(high,enterbars)


--  作者:渴望知识
--  发布时间:2015/2/27 13:45:13
--  

谢谢回答,那其他的都没有错吧?

 


--  作者:jinzhe
--  发布时间:2015/2/27 13:53:20
--  
先改了这个最明显的错误,其他的要到实际运行之后才能看出是不是有逻辑错误
--  作者:渴望知识
--  发布时间:2015/2/27 13:55:06
--  

哦,那另外再请教一下,这个valuewhen语句是什么时候用比较合适呢?

 


--  作者:jinzhe
--  发布时间:2015/2/27 14:04:29
--  

你这样用是对的,但是kd和kk不对,用开多条件和开空条件来替代掉kd和kk

kd:buy.....

kk:buyshort...

这两句是没有任何意义的


--  作者:渴望知识
--  发布时间:2015/2/27 14:29:09
--  
不好意思,没太明白你说的这个代替掉是什么意思。
--  作者:jinzhe
--  发布时间:2015/2/27 14:31:17
--  
kcwzl:=valuewhen(做多条件,low);//开多单时的最低价
kcwzh:=valuewhen(做空条件,high);//开空单时的最高价
--  作者:渴望知识
--  发布时间:2015/2/27 14:39:22
--  

这样说吧,

开多条件:c>ma(c,5);

开空条件:c<ma(c,5);

 

这个是我基本的开仓策略。

我按照您前面说的那个:

开仓时的最高最低价用

ref(low,enterbars)

ref(high,enterbars)

 

我把这个加上了,但是现在跑实盘,还是不对,止损总是没有打掉。

正常来说,在最后一个KD出现后那个最低点的黄点上就应该打掉我的止损了,我的止损也就是最低点的3个点而已,但是账号和程序都不动作。

请看附图


图片点击可在新窗口打开查看此主题相关图片如下:qq截图20150227143801.png
图片点击可在新窗口打开查看

--  作者:jinzhe
--  发布时间:2015/2/27 14:44:49
--  

kcwzl:=valuewhen(做多条件 and ref(holding<=0,1) and holding>0,low);//开多单时的最低价
kcwzh:=valuewhen(做空条件  and ref(holding>=0,1) and holding<0,high);//开空单时的最高价

 

你的条件太简单所以导致了价格没有准确捕捉到,加了两个条件就行

这两句写在开仓语句后面