关于落实议员的讨论。 - 页 2

 
Georgiy Merts:

而且,这位网友在被问到这个问题时说,他已经不记得了,只是说这个代码已经被测试过很多次,可以信任。

好吧,如果我有机会用真正的if语句取代这些愚蠢的 "问题",我会想出办法的......就目前而言...

顺便说一下,今天看了一下这个恐怖的东西。

这就是它的含义。

ENUM_ORDER_TYPE_FILLING otfMyRes  = WRONG_VALUE;   

if(iFillingMode == 0 || (otfFilingType >= ORDER_FILLING_RETURN) || ((iFillingMode & (otfFilingType + 1)) != otfFilingType + 1))
	{
        if(steExeMode == SYMBOL_TRADE_EXECUTION_EXCHANGE || steExeMode == SYMBOL_TRADE_EXECUTION_INSTANT)
                otfMyRes = ORDER_FILLING_RETURN;
        else   
                if(iFillingMode == SYMBOL_FILLING_IOC)
                        otfMyRes = ORDER_FILLING_IOC;
                else
                        otfMyRes = ORDER_FILLING_FOK;
        }
   else      
        otfMyRes = otfFilingType;

return(otfMyRes);  

在我看来,没有这些 "问题",通过 "如果 "和缩进,会更清晰。虽然代码效率绝对是一样的。

顺便说一下,你可以马上看到,作者坚持使用iFillingMode和otfFilingType的数值,在我看来,这不是好的做法。

 
Georgiy Merts:

顺便说一下,今天看了一下这个恐怖的东西。

这就是它的含义。

在我看来,没有这些 "问题",通过 "如果 "和缩进,会更清晰。虽然代码效率绝对是一样的。

顺便说一下,你可以马上看到,作者坚持使用iFillingMode和otfFilingType的数值,在我看来,这不是一个好的做法。

在我的字典里,它是这样的。

#ifdef __MQL5__
   ENUM_ORDER_TYPE_FILLING COrder::GetFilling(ENUM_FILLING_MODE mFilling){
      if (!_fillingMode) return ORDER_FILLING_RETURN;
      else if (mFilling==FILLING_AUTO||mFilling==FILLING_FOK) return !(_fillingMode&SYMBOL_FILLING_FOK)?ORDER_FILLING_IOC:ORDER_FILLING_FOK;
      else return  !(_fillingMode&SYMBOL_FILLING_IOC)?ORDER_FILLING_FOK:ORDER_FILLING_IOC;}
#endif

_fillingMode是一个宏,可以扩展到该字段的解读。

fillingMode=(int)SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE);
 
Georgiy Merts:

这是另一件事。

仔细想想,我有时看着自己的代码,也不明白为什么会写在这个特殊的地方。 这就是为什么我试图对这种地方进行详细的评论,试图提到所有的细节。但我仍然经常看到,我没有考虑到一些事情。

此外,我使用下面的代码(确定执行的类型),这是由一个非常权威的论坛用户写的。

我不明白它是如何工作的。此外,这位网友在被问及时自己说,他已经不记得了,只是这个代码已经被测试过很多次,可以信任

好吧,如果我设法用真正的if语句取代这些愚蠢的 "问题",我会想出办法的......就目前而言...

黄色--非常奇怪,一个人不能立即理解他自己写的微不足道的代码。

红色--我没有太懒,又检查了一遍,在市场上执行时,不能ORDER_FILLING_RETURN,只对库存(码头有错误),这就是尊敬的论坛主人的回报))。

 
Vladimir Simakov:

黄--一个人不能理解他自己写的微不足道的代码,这非常奇怪。

红色--我没有感到懒惰,又检查了一遍,在市场上执行时,不能ORDER_FILLING_RETURN,它只适用于交换(在码头有一个错误),这就是尊敬的论坛成员的回报))。

我不知道,我不知道。在这样的条目中,这个代码是多么 "微不足道"。我至少花了15分钟才搞清楚它的逻辑,只有通过写出如果,我才觉得有意义。

关于 "文档中存在一个错误"--你能详细说明吗?

 
Georgiy Merts:

我不知道,我不知道这段代码在这样的帖子中是多么 "微不足道"。我至少花了15分钟才明白它的工作逻辑,只有通过写出如果的情况,我才明白了它。

关于 "在码头上的错误"--你能告诉我更多关于它的情况吗?

在交易所执行时

SymbolInfoInteger(symbol,SYMBOL_FILLING_MODE)

它返回0,但在市场上(我在Alpari检查)。

SYMBOL_FILLING_IOC | SYMBOL_FILLING_FOK

我用Alpari进行了检查,结果是0x3。如果你以这种方式进行尝试

MqlTradeRequest::filling_mode=ORDER_FILLING_RETURN

如果你试一下,它就打不开了。

 
Vladimir Simakov:

那么它就打不开了。

检查了原来的功能。

#include <MT4Orders.mqh>

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (!OrdersTotal())
  {
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, ORDER_FILLING_FOK, 0, 0);    
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, ORDER_FILLING_IOC, 0, 0);    
    OrderSend(_Symbol, OP_BUY, 0.1, Ask, ORDER_FILLING_RETURN, 0, 0);    
  }  
}

它是有效的。

 
fxsaber:

检查了原来的功能。

它是有效的。

市场执行 而不是交易所执行时尝试)

UPD: 更正,关于立即执行,那个

符号_交易_执行_instant

 
Vladimir Simakov:

尝试市场执行 而不是交易所执行)

UPD: 更正,关于立即执行,那个

符号_交易_执行_instant

测试上面的EA。试试吧。

 
Vladimir Simakov:

尝试市场执行 而不是交易所执行)

UPD: 更正,关于立即执行,那个

符号_交易_执行_instant

例如,这些是A-ri的标准类型账户,对吗?

而有交易的经纪人总是有这样的执行力,对吗?

只是要澄清一下。

 

何必呢?

使用标准类,不需要填充任何结构(MqlTradeRequest),不需要知道任何填充物和实例。


#include<Trade\SymbolInfo.mqh>
#include<Trade\AccountInfo.mqh>
#include<Trade\Trade.mqh>

CTrade  
CAccountInfo 
CPositionInfo