EA: Diff_TF_MA_EA - 页 3

 
Rashid Umarov:
代码已经更新。

显然,他们这样写是有某种学说的

   int total=PositionsTotal();
   for(int i=total-1; i>=0; i--)
     {
      ulong ticket=PositionGetTicket(i);
      if(ticket==0) continue;
      if(PositionGetInteger(POSITION_MAGIC)!=InpMagic)   continue;
      if(PositionGetString(POSITION_SYMBOL)!=symb)       continue;
      ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
      double volume=PositionGetDouble(POSITION_VOLUME);
      if(type==POSITION_TYPE_BUY)
        {
         list_tickets_buy.Add(ticket);
         total_volume_buy+=volume;
        }
      else if(type==POSITION_TYPE_SELL)
        {
         list_tickets_sell.Add(ticket);
         total_volume_sell+=volume;
        }
     }
为什么不这样写?
  for(int i=PositionsTotal()-1; i>=0; i--)
    if (PositionGetTicket(i) &&
        (PositionGetInteger(POSITION_MAGIC)==InpMagic) &&
        (PositionGetString(POSITION_SYMBOL)==symb))  
    {
      double volume=PositionGetDouble(POSITION_VOLUME);
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         list_tickets_buy.Add(ticket);
         total_volume_buy+=volume;
        }
      else
        {
         list_tickets_sell.Add(ticket);
         total_volume_sell+=volume;
        }
    }


ZY

CorrectStopLoss(POSITION_TYPE_BUY,InpStopLoss)
 
fxsaber:

显然,这样写是某种学派的观点

为什么不这样写?
也许是因为在基础中需要代码,而不是为了逻辑推导和百倍嵌套,而是为了让初学者理解?
 
fxsaber:
...

ZY

CorrectStopLoss(POSITION_TYPE_BUY,InpStopLoss)

有什么区别?我没看代码,是那里有错别字,还是你的问题?

 
Artyom Trishkin:
也许是因为在基础中需要代码,而不是为了逻辑推导和百倍嵌套,而是为了让初学者理解?

反转在哪里?如果某个位置满足条件,我们就对其进行处理。继续 - 输出。

 
Artyom Trishkin:

有区别吗?我没看代码,是那里有错别字,还是你的问题?

//+------------------------------------------------------------------+
//| 返回相对于 StopLevel 的正确 StopLoss。
//+------------------------------------------------------------------+
double CorrectStopLoss(const ENUM_POSITION_TYPE position_type,const int stop_loss)
  {
   if(stop_loss==0) return 0;
   double pt = _Point;
   double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(_Symbol,SYMBOL_ASK) : SymbolInfoDouble(_Symbol,SYMBOL_BID));
   int lv=StopLevel();
   return(NormalizeDouble((position_type==POSITION_TYPE_BUY) ? fmin(price-lv*pt,price-stop_loss*pt)
                                                             : fmax(price+lv*pt,price+stop_loss*pt),_Digits));
  }     
 
fxsaber:

转折点在哪里?如果某个立场符合条件,我们就会与之合作。这是转移视线

啊...这只是某人的喜好而已

例如,伊戈尔-金的代码就有这样的嵌套。这样的代码可以写得更加简洁(奇怪的是,你对简洁的执着,却提出了代码块的多重嵌套,而这些嵌套是可以通过清理代码并使其更有说明性而轻易避免的):

您提出了这样的逻辑:

  • 检查条件 1,符合
    • 检查条件 2,符合
      • 检查条件 3,符合
        • 检查条件 4,符合
          • 工作
        • 条件 4 检查块结束
      • 条件 3 检查块结束
    • 条件 2 检查块结束
  • 条件 1 检查块结束

也可以这样做:

  • 条件 1 不适合 - 不需要
  • 条件 2 不适合 - 不需要
  • 条件 3 不适合 - 不需要
  • 条件 4 不适合 - 不需要
  • 条件都适合 - 我们可以工作。

第二个代码更清晰、更简短

 

fxsaber:

//+------------------------------------------------------------------+
//| 返回相对于 StopLevel 的正确 StopLoss。
//+------------------------------------------------------------------+
double CorrectStopLoss(const ENUM_POSITION_TYPE position_type,const int stop_loss)
  {
   if(stop_loss==0) return 0;
   double pt = _Point;
   double price=(position_type==POSITION_TYPE_BUY ? SymbolInfoDouble(_Symbol,SYMBOL_ASK) : SymbolInfoDouble(_Symbol,SYMBOL_BID));
   int lv=StopLevel();
   return(NormalizeDouble((position_type==POSITION_TYPE_BUY) ? fmin(price-lv*pt,price-stop_loss*pt)
                                                             : fmax(price+lv*pt,price+stop_loss*pt),_Digits));
  }     

怎么了?好吧,我猜他们决定修复它,这样就不会出现您之前遇到的问题了。

但现在,如果有人决定修改智能交易系统以使用挂单,他就必须来回修改,因为输入枚举会出错。

而 ORDER_TYPE_BUY == POSITION_TYPE_BUY 和 ORDER_TYPE_SELL ==POSITION_TYPE_SELL 分别为 0 和 1。因此没有区别。但输入 ENUM_ORDER_TYPE 可以更方便地修改其他类型的订单。

 
Artyom Trishkin:

啊哈这只是某人的喜好。

例如,Igor Kim 的代码就有这样的嵌套。这样的代码可以写得更加简洁(奇怪的是,你对简洁的执着,却建议代码块的多重嵌套,而这很容易通过清理代码和使其更有说明性来避免):

您提出了这样的逻辑:

  • 检查条件 1,符合
    • 检查条件 2,符合
      • 检查条件 3,符合
        • 检查条件 4,符合。
          • 工作
        • 条件 4 检查块结束
      • 条件 3 检查块结束
    • 条件结束校验块 2
  • 条件结束检查块 1

没有显示这样的内容。由于当时没有严格的指令,Kim 不得不这样做。

他提出了这个方案:

你可以这样做:

  • 条件 1 不符合 - 不需要
  • 条件 2 不合适--不需要
  • 条件 3 不合适--不需要
  • 条件 4 不合适--不需要
  • 所有条件都合适 - 我们工作。

第二个代码更清晰、更简短

 
fxsaber:

没有显示任何类似内容。金正日是被迫这样做的,因为当时没有任何指令。

这就是他的建议:

这个呢?

交易、自动交易系统和交易策略测试论坛。

智能交易系统: Diff_TF_MA_EA

fxsaber, 2018.02.02 09:36 pm.

反转在哪里?如果仓位满足条件,就与之合作。如果头寸满足条件,我们就与之合作。


 
fxsaber:

没有显示任何类似内容。金正日是被迫这样做的,因为当时没有任何指令。


真奇怪,当时我是如何在没有严格要求的情况下继续工作的?而且不光是我--当时是维蒂亚-尼古拉耶夫(文)让我这么做的。

所以,我不理解你对代码和程序员的某些偏好的抱怨。