全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
已解决
A函数发单成交但返回值为False
2022-11-19 17:20

老师:

  您好,我在OnBar运行两腿套利的程序发送信号到OnSignal,在OnSignal中用A函数发单开平仓,模拟交易已经有成交持仓了,但A_SendOrderEx()的返回值为False 。下面是OnSignal中的程序:

Onsignal(ArrayRef<Signal> sigs)

{

 signal mysig0;

 signal mysig1;

 SignalRef sig = sigs[i];

Integer i = 0;

  For i = 0 To GetArraySize(sigs) - 1

  {                                                                    

    If(sig.index==0)

     {

      mysig0=sig;

     If(!BitHas(sig.flag,Enum_Signal_NotSend)&&QuoteStatus==Enum_QuoteStatus_RealTime )

       {

        If(mysig0.side==1 and condition==0 )

         {

         Bool  ret0=data0.A_SendOrderEx(Enum_Buy,mysig0.combOffset,mysig0.volume, mytick.bidask1.bidP,myorderId);

          condition==1;      

          Print("data0.A_SendOrderEx:" + IIFString(ret0,"True","False");

          }

         If(mysig0.side==2 and condition==0)

          {

          Bool ret0=data0.A_SendOrderEx(Enum_Sell,mysig0.combOffset,mysig0.volume, mytick.bidask1.askP,myorderId);

             condition==1;

            Print("data0.A_SendOrderEx:" + IIFString(ret0,"True","False"));

           }

         }

        }

       If(sig.index==1)

       {

       mysig1=sig;

      If(!BitHas(sig.flag,Enum_Signal_NotSend)&&QuoteStatus==Enum_QuoteStatus_RealTime)

         {

           If(mysig1.side==1 and condition==0 )

           {

            Bool ret1=data1.A_SendOrderEx(Enum_Buy, mysig1.combOffset, mysig1.volume, mytick.bidask1.bidP,myorderId);

                condition==1;

              Print("data1.A_SendOrderEx:" + IIFString(ret1,"True","False"));

            }

            If(mysig1.side==2 and condition==0)

            {

            bool ret1=data1.A_SendOrderEx(Enum_Sell, mysig1.combOffset, mysig1.volume, mytick.bidask1.askP,myorderId);

               condition==1;

               Print("data1.A_SendOrderEx:" + IIFString(ret1,"True","False"))

              }

         }

       }

     }

   }

 

kyover

false一般两种原因。

第一 该命令执行在历史bar上

第二 最然是最新bar上,但是并没有开启自动交易

自行诊断下吧

2022-11-21 09:26
dgdrz2015

谢谢老师指教,我先查一下,不行的话再请教老师。

 

2022-11-21 21:28
dgdrz2015

老师,我查到OnSignal中收到的信号均标识为Enum_Signal_History (sig.flag==32),这应当是A_SendOrderEx返回值为False的原因。但为什么收到的信号都标识为Enum_Signal_History呢?明明都是从最后一个Bar上发出的信号啊!请老师指教

2022-11-24 21:56
dgdrz2015

@Kyover 请老师解答上面的问题

2022-11-25 21:23
kyover
@dgdrz2015

你开启自动交易了么?

2022-11-28 09:01
dgdrz2015

老师,我开启自动交易了

2022-11-29 21:22
dgdrz2015

今天观察到的Sig.Flag==0,  A_SendOrderEx()的返回值仍为False, 开启了自动交易的,而且成交了的。不明白是为什么

 

2022-11-29 22:21
kyover
@dgdrz2015

建议你多写几句print 把发单时的bar序号,bar日期时间,机器日期时间等等都输出了,找到信号是历史bar还是实时bar发的单

2022-11-30 08:51
dgdrz2015

@Kyover

好的,谢谢老师指导!

2022-12-02 21:53
dgdrz2015

@Kyover

老师,现在我发个截图给你,请你帮我诊断一下,我实在是找不到原因。谢谢老师!

2022-12-05 22:13
dgdrz2015

2022-12-05 22:18
dgdrz2015

2022-12-16 22:07
您未登录,请先 登录注册 后发表评论
顶部