设为首页收藏本站

 找回密码
 注册
查看: 1038|回复: 7

版主帮忙看下这段代码,为何止损有时满足了条件并没触发 [复制链接]

Rank: 2

精华
0
UID
250562
积分
105
帖子
76
主题
27
阅读权限
30
注册时间
2017-4-26
最后登录
2021-10-15
发表于 2019-12-3 15:02:52 |显示全部楼层
Params
        Numeric length1(1);
        Numeric length2(5);
        Numeric length3(8);
        Numeric length4(10);
        Numeric Sprice(1);
        Numeric stoppoint(0.5);

Vars
        bool condition1;
        bool condition2;
        Numeric Price1;
        Numeric Price2;
        Numeric price3;
        Numeric price4;
        Series<Numeric>  longstop(0);
        Series<Numeric>  shortstop(0);
        Global Numeric TT1;
        Global Numeric TT2;

       
Events
        OnBar(ArrayRef<Integer> indexs)
        {
                condition1 = Close[length3]<Close[length2] And Close[length2]<Close[length1];
                condition2 = Close[length3]>Close[length2] and Close[length2]>Close[length1];
               
       
                if (condition2 and A_SellPosition==A_BuyPosition and A_SellPosition>0 and A_GetOpenOrderCount()==0)
                {
                        A_SendOrder(Enum_Sell,Enum_Exit,5,Q_BidPrice);
                        SetGlobalVar(0,0);
                        }
                if (condition1 and A_BuyPosition==A_SellPosition And A_BuyPosition>0 And A_GetOpenOrderCount()==0)
                {
                        A_SendOrder(Enum_Buy,Enum_Exit,5,Q_AskPrice);
                        SetGlobalVar(1,0);
                        }
       
                longstop = A_OrderFilledPrice(0)-1.5;
                if (A_BuyPosition>A_SellPosition And A_GetOpenOrderCount()==0)//空头平仓锁仓
                {
       
                        A_SendOrder(Enum_Sell,Enum_Exit,5,A_OrderFilledPrice(0)+2);
                        TT1 = T();
                        SetGlobalVar(1,GetGlobalVar(1)+1);
                        }       
       
               
                shortstop = A_OrderFilledPrice(0)+1.5;
                if (A_SellPosition>A_BuyPosition And A_GetOpenOrderCount()==0)//多头平仓锁仓
                {

                        A_SendOrder(Enum_Buy,Enum_Exit,5,A_OrderFilledPrice(0)-2);
                        TT2 = T();
                        SetGlobalVar(0,GetGlobalVar(0)+1);
                        }

                if (barstatus==2 and High>= shortstop  and high>MA1 and A_GetOpenOrderCount()>0 and T()>=TT2+0.0001 And A_SellPosition>A_BuyPosition And A_SellPosition>0 And GetGlobalVar(0)<3)//
                {
                        A_DeleteOrder(A_OpenOrderContractNo(0));
                        A_SendOrder(Enum_Buy,Enum_Exit,5,Q_AskPrice);
                        SetGlobalVar(0,GetGlobalVar(0)+1);
                        }
                else if(barstatus==2 and Low <=longstop and Low<MA1 and A_GetOpenOrderCount()>0 and T()>=TT1+0.0001 And A_BuyPosition>A_SellPosition and A_BuyPosition>0 And GetGlobalVar(1)<3)
                {
                        A_DeleteOrder(A_OpenOrderContractNo(0));
                        A_SendOrder(Enum_Sell,Enum_Exit,5,Q_BidPrice);
                        SetGlobalVar(1,GetGlobalVar(1)+1);
                        }
        }

Rank: 2

精华
0
UID
250562
积分
105
帖子
76
主题
27
阅读权限
30
注册时间
2017-4-26
最后登录
2021-10-15
发表于 2019-12-3 15:05:35 |显示全部楼层
这里的止损撤单有时在满足条件时却没有执行
if (barstatus==2 and High>= shortstop  and high>MA1 and A_GetOpenOrderCount()>0 and T()>=TT2+0.0001 And A_SellPosition>A_BuyPosition And A_SellPosition>0 And GetGlobalVar(0)<3)//
                {
                        A_DeleteOrder(A_OpenOrderContractNo(0));
                        A_SendOrder(Enum_Buy,Enum_Exit,5,Q_AskPrice);
                        SetGlobalVar(0,GetGlobalVar(0)+1);
                        }
                else if(barstatus==2 and Low <=longstop and Low<MA1 and A_GetOpenOrderCount()>0 and T()>=TT1+0.0001 And A_BuyPosition>A_SellPosition and A_BuyPosition>0 And GetGlobalVar(1)<3)
                {
                        A_DeleteOrder(A_OpenOrderContractNo(0));
                        A_SendOrder(Enum_Sell,Enum_Exit,5,Q_BidPrice);
                        SetGlobalVar(1,GetGlobalVar(1)+1);
                        }
        }

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
发表于 2019-12-4 16:46:24 |显示全部楼层
bcsongby 发表于 2019-12-3 15:05
这里的止损撤单有时在满足条件时却没有执行
if (barstatus==2 and High>= shortstop  and high>MA1 and A_ ...

写日志输出相关信息,这样才好跟踪排查问题。

使用道具 举报

Rank: 2

精华
0
UID
250562
积分
105
帖子
76
主题
27
阅读权限
30
注册时间
2017-4-26
最后登录
2021-10-15
发表于 2019-12-5 13:47:20 |显示全部楼层
小米 发表于 2019-12-4 16:46
写日志输出相关信息,这样才好跟踪排查问题。

看了日志:
1.策略一旦被修改,再重新开启,账户函数就无法获得上一笔成交价;用全局变量记录的上一次发单时间也没有了,全局变量是在策略停掉后会清除吗?
2.账户是否处于挂单的状态 被修改后重启仍是可以再次捕捉到的;
3.全局变量记录的发单次数日志显示为N/A是为什么?但设置后确实没有连续发单的情况了。
4.最后在满足最低价小于止损价,小于10日线的条件的情况下也没有执行撤单在发单的操作,很疑惑

使用道具 举报

Rank: 2

精华
0
UID
250562
积分
105
帖子
76
主题
27
阅读权限
30
注册时间
2017-4-26
最后登录
2021-10-15
发表于 2019-12-6 14:14:39 |显示全部楼层
小米 发表于 2019-12-4 16:46
写日志输出相关信息,这样才好跟踪排查问题。

找到原因,A_OrderFilledPrice(0)函数不够稳定,有时可以获得上一笔成交价,有时又不能,麻烦版主确定下是不是?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
发表于 2019-12-6 15:09:27 |显示全部楼层
bcsongby 发表于 2019-12-6 14:14
找到原因,A_OrderFilledPrice(0)函数不够稳定,有时可以获得上一笔成交价,有时又不能,麻烦版主确定下 ...

不是不稳定 。此函数是每10秒才刷新一次。
以此函数的取值来做为委托判断的标准,是不合适的。

使用道具 举报

Rank: 2

精华
0
UID
250562
积分
105
帖子
76
主题
27
阅读权限
30
注册时间
2017-4-26
最后登录
2021-10-15
发表于 2019-12-6 17:33:41 |显示全部楼层
小米 发表于 2019-12-6 15:09
不是不稳定 。此函数是每10秒才刷新一次。
以此函数的取值来做为委托判断的标准,是不合适的。 ...

TBQuant 不是实时刷新的吗

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
发表于 2019-12-9 09:08:47 |显示全部楼层
bcsongby 发表于 2019-12-6 17:33
TBQuant 不是实时刷新的吗

我的失误,因为问题已经隔了夜。我在回复当时忘了的在tbquant上面。而是以旗舰版的机制来回复的。
请忽略6#的回复。

如果质疑a_orderfilledprice(0)不稳定 ,可以自己写日志测试一下的。要注意此函数是成交后才能返回正确的值 。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-3-29 00:08

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部