全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
已解决
一个下单写法请教老师们,感谢(实时发单的条件没有运行成功)
2021-04-29 11:22

老师们好,想实现一个简单的实盘下单策略如下:

(ru2107买1价 - ru2105卖1价   小于150时;   ru2107买价+一跳挂单;)

目前写法如下:

Params
 //此处添加参数
    String SymbolA("ru2107.SHFE");
    String SymbolB("ru2105.SHFE");
    Numeric StopPrice(150);  
Vars
 //此处添加变量
    Integer cnt(0); //账户个数
    Integer i(0); //遍历数组
    Integer j(0); //遍历数组
    Integer nstatus(0);
    Integer ncount(0);
    Numeric MinPoint; // 一个最小变动单位,也就是一跳
    Numeric MyEntryPrice; // 开仓价格
    Tick tickdata;
    Global Integer K;
    Global Array<Tick> lastTickData; // 缓存的最新 Tick 数据
    Global Array<bool> tickDataValid; // Tick 数据是否有效标识
    Global Bool dataReady; // 检查数据是否正确的标识
Defs
 //确认tick数据有效
  bool CheckTickData(TickRef tickData)
  {
    /*
    Commentary("symbol="+tickData.symbol); //合约名
    Commentary("time="+text(tickData.datetime)); //时间
    Commentary("AskPrice="+text(tickData.bidask1.askP)); //申卖价 1
    Commentary("AskVol="+text(tickData.bidask1.askV)); //申卖量 1
    Commentary("BidPrice="+text(tickData.bidask1.bidP)); //申买价 1
    Commentary("BidVol="+text(tickData.bidask1.bidV)); //申买量 1
    Commentary("Last="+text(tickData.last)); //现价
    Commentary("Open="+text(tickData.open)); //开盘价
    Commentary("High="+text(tickData.high)); //最高价
    Commentary("Low="+text(tickData.low)); //最低价
    Commentary("Volume="+text(tickData.volume)); //现手
    Commentary("TotalVolume="+text(tickData.totalVolume)); //总成交
    Commentary("---------------separator---------------");
    */
    If(tickData.last > 0 && tickData.totalVolume > 0)
       Return True;
      Else
       Return False; 
   }
Events
     
  
 //初始化事件函数,订阅2个合约
 OnInit()
 {
  SubscribeBar(SymbolA,"tick");
  SubscribeBar(SymbolB,"tick"); 
        A_SubscribeTradeByCreateId(Enum_Trade_Source_ALL);//订阅账户的所有委托,默认只触发本策略发出的委托
     }
    OnBar(ArrayRef<Integer> indexs)
 {  
     For k=0 To GetArraySize(indexs)-1
     {
         Data[indexs[k]].GetTick(tickdata);
         if(CheckTickData(TickData))
             {
               tickDataValid[indexs[k]] = True;
               lastTickData[indexs[k]] = TickData;
             }
          } 
         dataReady = True;
         For k=0 To DataCount-1
         {
            If(!tickDataValid[indexs[k]])
            {
               dataReady = False;
               Break;
            }
          } 
     
     if (lastTickData[0].bidask1.bidP-lastTickData[1].bidask1.askP > StopPrice)
       {
        MinPoint = MinMove*PriceScale;
  MyEntryPrice = Q_BidPrice+MinPoint;
        Data0.A_SendOrder(Enum_Buy,Enum_Entry,1,MyEntryPrice);
    } 
      }  
       

 问题1 :下面这个条件,ru2107买1价 - ru2105卖1价   小于150时挂单,在运行程序的时候,这个条件不满足也会自动挂单,请问原因和程序问题在哪里呢?感谢老师!

 if (lastTickData[0].bidask1.bidP-lastTickData[1].bidask1.askP > StopPrice)   

问题2 :请问老师,A_SendOrder实时发单会满足条件后不停地发单,请问怎么样可以实现一次只发一个单

 

 

 

kyover

这个一时半会儿给不出解答

关于模型开发工作是一项很系统化的工作 论坛里只能回答零散的语法或者简单实例 

2021-04-30 11:33
您未登录,请先 登录注册 后发表评论
顶部