欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 请教老师:止损止盈不执行,写法错在哪?

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3306人关注过本帖树形打印复制链接

主题:请教老师:止损止盈不执行,写法错在哪?

帅哥哟,离线,有人找我吗?
我心飞翔
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:225 积分:0 威望:0 精华:0 注册:2016/5/6 10:40:32
请教老师:止损止盈不执行,写法错在哪?  发帖心情 Post By:2017/12/26 9:03:40    Post IP:222.241.167.168[只看该作者]

我的程序里有如下止损止盈语句,回测时不执行止损和止盈,请问错在哪?

//亏9点止损
IF (CLOSE-ENTERPRICE)<-9 THEN
    BEGIN
    SELL(HOLDING>0,1,MARKET);
    bj:=bj+1;
END

//赢15点止盈
IF (close-ENTERPRICE)>15 THEN 
    BEGIN
    SELL(HOLDING>0,1,MARKET);
    bj:=bj+1;
END

 回到顶部
帅哥哟,离线,有人找我吗?
qq代人发帖
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:18691 积分:0 威望:0 精华:0 注册:2013/7/15 9:22:16
  发帖心情 Post By:2017/12/26 9:41:01    Post IP:180.169.30.6[只看该作者]

代码写的没有问题,图上有止盈止损吗?


 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2017/12/26 9:42:16    Post IP:180.169.30.6[只看该作者]

把止盈止损的条件输出下看下?  这段代码看不出问题的。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
我心飞翔
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:225 积分:0 威望:0 精华:0 注册:2016/5/6 10:40:32
  发帖心情 Post By:2017/12/26 9:50:01    Post IP:222.241.167.168[只看该作者]

全部代码如下:

//参数设定
variable:bj=0;                  // 全局变量赋值,限定每天只交易一次
B1:=stkindi('','BBI',0,6,-1);   // 调用昨天的BBI值
ZK:=callstock('',vtopen,6,-1);  // 调用昨天的开盘价
ZS:=callstock('',vtclose,6,-1); // 调用昨天的收盘价
JK:=callstock('',vtopen,6,0);   // 调用今天的开盘价

//开空
if  ZS<ZK and  ZS<B1 and bj<1 then   // 如果昨天的BBI大于昨天的收盘价,且昨天收阴线,则今天开空
begin
buyshort(holding=0,1,limit,JK);
    bj:=bj+1;
end

//开多
if  ZS>ZK and  ZS>B1 and bj<1 then    // 如果昨天的BBI小于昨天的收盘价,且昨天收阳线,则今天开多
    begin
    buy(holding=0,1,limit,JK);
    bj:=bj+1;
    end
   
//亏9点止损
IF (CLOSE-ENTERPRICE)<-9 THEN
    BEGIN
    SELL(HOLDING>0,1,MARKET);
    bj:=bj+1;
END

//赢15点止盈
IF (close-ENTERPRICE)>15 THEN 
    BEGIN
    SELL(HOLDING>0,1,MARKET);
    bj:=bj+1;
END


//收盘前平仓
SELL(time=185800,1,MARKET);
SELLSHORT(time=185800,1,MARKET);
if time=closetime(0) then bj:=0;// 商品期货,收盘的同时,bj赋值为0。收盘bj不赋值为0,第二天就不再开仓了。


 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2017/12/26 10:32:13    Post IP:180.169.30.6[只看该作者]

我这边是看到触发了止盈和止损的。

 


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

 

止盈和止损地方的代码标记下,做法如下:

  止盈:sELL(HOLDING>0,1,MARKET);



命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26631 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2017/12/26 10:33:24    Post IP:180.169.30.6[只看该作者]

代码放到放到图表上,锁定k线位置,让它和回测时段一致。(注意是否使用除权数据)然后看有没有止盈止损信号。

你的测试代码没有问题。本地测试有正常触发止盈止损。

 

 


图片点击可在新窗口打开查看此主题相关图片如下:4.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2017/12/26 10:36:01编辑过]


编程无捷径,技巧靠积累。
 回到顶部