我如何正确地开立市场订单? - 页 8

 
Dmitry Fedoseev:
你不是那个需要暂停的人。
这只是它。
 
总之,底线,我认为是这样的。

在全球范围内,有两种方式。

1)分析环境(吸纳交易历史,检查未结头寸或头寸的数量)。

2)对交易的分析。

第一种工作速度较慢。但它更可靠。我们需要一个妥协。也许,我们需要看一下战略,并依赖它。

是的,FORTS有一个成熟的勾股器,所以不应该用勾股器工作,而是用 BookEvent 事件。

奇怪的是,瓦西里-索科洛夫 没有就这个问题发表评论。他的观点很有意思...
 
Dennis Kirichenko:
总之,底线,我认为是这样的。

在全球范围内,有两种方式。

1)分析环境(吸纳交易历史,检查未结头寸或头寸的数量)。

2)对交易的分析。

第一种工作速度较慢。但它更可靠。我们需要一个妥协。也许,我们需要看一下战略,并依赖它。

是的,FORTS有一个成熟的勾股器,所以不应该用勾股器工作,而是用 BookEvent 事件。

奇怪的是,瓦西里-索科洛夫 没有就这个问题发表评论。他的观点很有意思...
也许很快我就会改用玻璃,但现在....,用老方法。
 
Dennis Kirichenko:
总之,底线,我认为是这样的。

在全球范围内,有两种方式。

1)分析环境(吸纳交易历史,检查未结头寸或头寸的数量)。

2)对交易的分析。

第一种工作速度较慢。但它更可靠。我们需要一个妥协。也许,我们需要看一下战略,并依赖它。

是的,FORTS有一个成熟的勾股器,所以不应该用勾股器工作,而是用 BookEvent 事件。

奇怪的是,瓦西里-索科洛夫 没有就这个问题发表评论。他的观点很有意思...
顺便说一下,我有一个问题:我们能否像使用Tick或Timer一样使用BookEvent 事件?
也就是说,我可以把我的战略完全转移到那里吗?
 
刚想起这个话题...

我曾经为这个订单 工作过,写了CiOnTrade类。
class CiOnTrade : public CTrade
这是一项有趣的任务。我和我的客户彼此都很紧张,并且伤透了心。在我的记忆中,主要任务是买入/卖出保证量。如果部分交易量没有得到满足,我们不得不删除这些订单,并以不同的价格出售其余的订单......。

因此,我发现的最佳解决方案是在处理这些状态。而且有这么多的人。
enum ENUM_TRADE_STATE
  {
   TRADE_STATE_NONE=0,      // "ничего"
   TRADE_STATE_ORDERS=1,    // "только ордера"
   TRADE_STATE_POSITION=2,  // "только позиция"
   TRADE_STATE_ALL=3,       // "все"
  };
1) "无"--这是初始状态,此时什么都没做。

2) "仅有订单" - 这是下订单时的状态。

3) "仅持仓 "是订单完全执行时的状态。

4) "全部 "是指订单还没有完全执行,市场上已经有一个头寸的状态。

因此,每个州都必须进行处理。是的,顺便说一下,我承认也有中间状态。所以我的课可以改进。
 
Gennady Mazur:
顺便说一下,出现了一个问题:BookEvent 事件能否以与Tick或Timer相同的方式使用?
,也就是说,你的策略能否完全转移到那里?
是的,但请注意,BookEvent产生事件的频率更高。这就是为什么我们需要一些过滤器来筛除不必要的东西。例如,价格没有变化,只是一些投标的数量发生了变化。
 
Dennis Kirichenko:
是的!但考虑到玻璃更有可能产生事件。因此,你需要一些过滤器来筛除不必要的事件。例如,价格没有变化,但只有一些投标的数量。
我理解,谢谢......在某些情况下,成交量变化 比价格变化更重要,特别是在强势水平附近。
 
Dennis Kirichenko:
底线,我认为,是这样的。在全球范围内,有两种方法: 1)环境分析(吸纳交易历史,检查未结头寸或持仓量); 2)交易分析。







第一种工作速度较慢。但它更可靠。必须有一个妥协。也许我们必须看清战略并依靠它。
OrderSend+Sleep(0)变量的工作速度并不比OrderSend+OnTradeTransaction慢。我测量了一下。因此,我不使用第二个变体,不用于异步事务。
 
Dennis Kirichenko:
我想,关于交易的信息还没有到来。在这里(红色 标记),你依靠的是运气。她是一位任性的女士 :-))

bool OpenSellPosition(string symbol, double volume, string comment="", ulong deviation=10, ENUM_ORDER_TYPE_FILLING filling=ORDER_FILLING_FOK)
{
  MqlTradeRequest Request;
  MqlTradeResult Results;
  ZeroMemory(Request);
  ZeroMemory(Results);
  Request.price=SymbolInfoDouble(_Symbol,SYMBOL_BID);
  Request.action=TRADE_ACTION_DEAL;
  Request.type=ORDER_TYPE_SELL;
  Request.symbol=symbol;
  Request.volume=volume;      
  Request.deviation=deviation;
  Request.comment=comment;  
  Request.type_filling=filling;
  bool res=false;
  res=OrderSend(Request,Results);
  if(res)
  {
    if(Results.deal>0) return(true);
    else return(false);

  }
  return(false);
}

即使有ORDER_STATE_FILLED,Results.order也会有问题--Results.deal为零。在FXOpen-MT5服务器上实现了这种情况的100%重现。

我建议在不同的服务器上打开许多演示,实现代码的全部功能。我对MT4圣经是这样做的。这就是为什么子博弈没有问题的原因。

 
fxsaber:
OrderSend+Sleep(0)的速度不比OrderSend+OnTradeTransaction慢。我测量了一下。因此,我不使用第二个变体,不用于异步事务。

OrderSend+Sleep(0)的变体是暂时的,因为这是开发人员的一个缺点(不要把它作为一个例子:) )。

当它被纠正后,只有OrderSend将被保留。

原因: