开拓者期货期权程序化系统交易论坛

标题: A_SendOrder与监控器 [打印本页]

作者: anniekorea    时间: 2013-8-28 11:11:08     标题: A_SendOrder与监控器

问题一:请问监控器是不是不能同步A_SendOrder的持仓,貌似系统持仓一直都是0?
问题二:请问A_SendOrder是不是在非交易时间也会下单?但是If条件里有引用行情数据,既然是在非交易时间,应该没有行情数据才对,为什么还会下单呢?
[attach]17046[/attach]
作者: ample    时间: 2013-8-28 11:27:33

1、监控器是监控图表持仓与账户持仓不匹配的,跟A_SendOrder的发单没有关系
2、A函数仅对实时行情有效,非交易时间不会下单,请检查本机时间。您贴出的图片是因为要平仓,可是实际的账户中没有仓位,所以平不了
作者: anniekorea    时间: 2013-8-28 13:55:33

本帖最后由 anniekorea 于 2013-8-28 13:57 编辑
ample 发表于 2013-8-28 11:27
1、监控器是监控图表持仓与账户持仓不匹配的,跟A_SendOrder的发单没有关系
2、A函数仅对实时行情有效,非 ...


1、图表中插入的公式中显示持多单2手,但是监控器里的“系统持仓”始终为0,所以一同步,总是把该有的持仓给平了,导致之后公式要平仓的时候无仓可平。
2、经核对,本机的时间没有问题,问题二的截图是想说明在12:08竟然发出了“卖平仓”的信号,重点不在于无仓可平。另外,再请教一个问题,是不是集合竞价时间也会出信号呢?但是怎么又提示是非交易时间?有点糊涂了。
今天早上9:14发出了开仓信号:[attach]17047[/attach]
作者: ample    时间: 2013-8-28 14:29:55

anniekorea 发表于 2013-8-28 13:55
1、图表中插入的公式中显示持多单2手,但是监控器里的“系统持仓”始终为0,所以一同步,总是把该有的持 ...

是否设置了交易助手,那些委托是交易助手发出来的?

另外,监控器中系统仓表示的就是图表仓位,不知道楼主所说的公式中持多单2手,这2手是哪里来的?图表中是否加载了多个公式?

作者: anniekorea    时间: 2013-8-28 14:33:54

ample 发表于 2013-8-28 14:29
是否设置了交易助手,那些委托是交易助手发出来的?

另外,监控器中系统仓表示的就是图表仓位,不知道楼 ...

没有设置交易助手。为了方便,我还是把公式都贴上来吧,麻烦看看是哪里出的问题,谢谢。
  1. Params
  2. Bool  bInitStatus(False);  // 初始化标志,修改初始仓位时需设置为True
  3. Numeric EveryLots(1);    // 每次交易数量手数
  4. Numeric LongEntryPrice(4); // 开多仓的触发价格
  5. Numeric LongExitPrice(5);  // 平多仓的触发价格
  6. Numeric ShortEntryPrice(5); // 开空仓的触发价格
  7. Numeric ShortExitPrice(4); // 平空仓的触发价格
  8. Numeric LongStartLots(0);    // 多仓的初始仓位(手数),必须是EveryLots的倍数
  9. Numeric LongEndLots(2);     // 多仓的最大仓位(手数),必须是EveryLots的倍数
  10. Numeric ShortStartLots(0);    // 空仓的初始仓位(手数),必须是EveryLots的倍数
  11. Numeric ShortEndLots(2);     // 空仓的最大仓位(手数),必须是EveryLots的倍数
  12. Numeric OffsetPoint(1);   // 委托价格的偏移值(点数)
  13. Vars  
  14. Numeric SpreadUpper;
  15. Numeric SpreadLower;
  16. Numeric longPosition;
  17. Numeric shortPosition;
  18. Bool bLongEntryCon;
  19. Bool bShortEntryCon;
  20. Bool bLongExitCon;
  21. Bool bShortExitCon;
  22. Bool bTimeCon;
  23. Numeric Data0Lots(1);
  24. Numeric Data1Lots(1);
  25. Begin
  26. longPosition = GetGlobalVar(0);
  27. shortPosition = GetGlobalVar(1);
  28. If (BarStatus == 0)
  29. {
  30.   If(longPosition == InvalidNumeric || bInitStatus)
  31.   {
  32.    longPosition = LongStartLots;
  33.    SetGlobalVar(0,longPosition);
  34.   }
  35.   If(shortPosition == InvalidNumeric || bInitStatus)
  36.   {
  37.    shortPosition = ShortStartLots;
  38.    SetGlobalVar(1,shortPosition);
  39.   }
  40. }Else If(BarStatus == 2 && A_AccountID!="")
  41. {
  42.   If(EveryLots < 1) Return;
  43.   If(Data0.Q_AskPrice <= 0 || Data0.Q_BidPrice <= 0 || Data1.Q_AskPrice <= 0 || Data1.Q_BidPrice <= 0) Return;
  44.   If(Data0.Q_BidPrice == Data0.Q_UpperLimit || Data0.Q_AskPrice == Data0.Q_LowerLimit) Return;
  45.   If(Data1.Q_BidPrice == Data1.Q_UpperLimit || Data1.Q_AskPrice == Data1.Q_LowerLimit) Return;

  46.   SpreadUpper = Round(Data0.Q_AskPrice-Data1.Q_BidPrice,1);
  47.   SpreadLower = Round(Data0.Q_BidPrice-Data1.Q_AskPrice,1);
  48.   FileAppend("E:\\低波动率套利"+Symbol+".txt",Text(CurrentTime)+"\t"+"SpreatUpper="+Text(SpreadUpper)+"\t"+"SpreadLower="+Text(SpreadLower));

  49.   bTimeCon = true;//Time>0.0903 ;//And (Time<0.1127 Or Time>0.1333) And Time<0.1456;
  50.   bLongEntryCon = (SpreadUpper<=LongEntryPrice) && (Data0.Q_AskVol>=EveryLots && Data1.Q_BidVol>=EveryLots);
  51.   bLongExitCon = (SpreadLower>=LongExitPrice) && (Data1.Q_AskVol>=EveryLots && Data0.Q_BidVol>=EveryLots);  
  52.   bShortEntryCon = (SpreadLower>=ShortEntryPrice) && (Data1.Q_AskVol>=EveryLots && Data0.Q_BidVol>=EveryLots);
  53.   bShortExitCon = (SpreadUpper<=ShortExitPrice) && (Data0.Q_AskVol>=EveryLots && Data1.Q_BidVol>=EveryLots);
  54.   If(((bLongExitCon And bTimeCon And longPosition>0) Or longPosition>LongEndLots ))
  55.   {
  56.    Data0.A_SendOrder(Enum_Sell,Enum_Exit,Data0Lots,Data0.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
  57.    Data1.A_SendOrder(Enum_Buy,Enum_Exit,Data1Lots,Data1.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
  58.    SetGlobalVar(0,longPosition - EveryLots);
  59.   }

  60.   If(((bShortExitCon And bTimeCon And shortPosition>0) Or shortPosition>ShortEndLots ))
  61.   {
  62.    Data0.A_SendOrder(Enum_Buy,Enum_Exit,Data0Lots,Data0.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
  63.    Data1.A_SendOrder(Enum_Sell,Enum_Exit,Data1Lots,Data1.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
  64.    SetGlobalVar(1,shortPosition - EveryLots);
  65.   }
  66. //
  67.   If((bLongEntryCon And bTimeCon And longPosition<LongEndLots))
  68.   {
  69.    Data0.A_SendOrder(Enum_Buy,Enum_Entry,Data0Lots,Data0.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
  70.    Data1.A_SendOrder(Enum_Sell,Enum_Entry,Data1Lots,Data1.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
  71.    SetGlobalVar(0,longPosition + EveryLots);
  72.   }
  73.   
  74.   If(( bShortEntryCon And bTimeCon And shortPosition<ShortEndLots))
  75.   {
  76.    Data0.A_SendOrder(Enum_Sell,Enum_Entry,Data0Lots,Data0.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
  77.    Data1.A_SendOrder(Enum_Buy,Enum_Entry,Data1Lots,Data1.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
  78.    SetGlobalVar(1,shortPosition + EveryLots);
  79.   }
  80. }
  81. Commentary("多头仓位="+Text(longPosition));
  82. Commentary("空头仓位="+Text(shortPosition));
  83. End
复制代码

作者: ample    时间: 2013-8-28 16:18:13

看了楼主的公式,是用A函数发单的,监控器不能监控同步A函数发单的。
之前我所说的账户仓和系统仓,都是针对的buy之类的交易指令,图表上有信号的。系统仓指的是图表中信号表示的仓位,账户仓是成交后账户的持仓。使用监控器,主要是因为图表上有信号,可是可能没有成交,导致账户仓和系统仓不匹配,这个时候才要同步
作者: anniekorea    时间: 2013-8-28 16:27:48

ample 发表于 2013-8-28 16:18
看了楼主的公式,是用A函数发单的,监控器不能监控同步A函数发单的。
之前我所说的账户仓和系统仓,都是针 ...

好的,监控器的问题明白了。但是非交易时间出信号的问题还是没明白。是不是把交易时间写进if条件里会更好?
作者: ample    时间: 2013-8-29 09:08:51

anniekorea 发表于 2013-8-28 16:27
好的,监控器的问题明白了。但是非交易时间出信号的问题还是没明白。是不是把交易时间写进if条件里会更好 ...

楼主的公式没有过滤集合竞价的时间。
作者: anniekorea    时间: 2013-8-29 10:03:12

ample 发表于 2013-8-29 09:08
楼主的公式没有过滤集合竞价的时间。

谢谢回答。那就是还是把交易时间(除去集合竞价时间)写进if条件里会更好。
作者: byronadams    时间: 2014-7-31 13:34:50

哎。留名吧




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2