[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 8

 
TheXpert:

紧凑性损害了可读性。公平地说,罗曼的版本也不完全好,即使你忽略了逻辑。

保存线路的意义何在?

每个人都有自己的想法...对我来说,当代码 都在我眼前的时候,阅读 它要方便得多。我不试图保存线:因为它出来了--所以它出来了......

这都是每个人的口味问题,决定什么更方便,什么不方便是空的。

我的主要工作是让每一行都在其通常的位置上,不再...我认为我们其他人也应该这样做,但要自己决定。

如你所知,没有颜色和味道。

 

但像这样的设计... 一个编码员的噩梦。

         
             if (ticket>0)                                               // 
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  
      
                             OrderDelete(ticket,CLR_NONE); // и удаляете их                       
                     
                            
                    }

       
      return (0);
 
artmedia70:
是啊...阿列克谢,我可以想象我刚刚给客户 的807行EA如果用罗曼的风格来写会是什么样子......:))))
祝贺你!如 果你在我回答问题的背景下看我发布的代码,即从我在本页 的最后一个帖子中看,也许你对807行的EA的想法会有所改变。我已经从我的EA中纠正了我的代码,其中有很多东西的位置,特别是在循环中缺少的几行,if语句和退出循环时进一步的大括号,没有删除延迟的错误处理的事实 - 这也是在我的问题和我的答案的背景下,IMHO - 是正常的。
 
sergeev:

但像这样的设计... 一个编码员的噩梦。

对我来说--这样的设计是正常的。这不是一个自定义的EA,而是问题的答案,而不是OrderDelete() - 你可以用文字来写 - 你把订单删除放在这里,并调用函数来处理可能的错误。那个人正在等待,我打开了我的代码,删除了所有 "不必要的",没有注意修改后是否有空格,给了他一个工作版本,让他根据自己的交易条件进一步连接到他的EA。我认为一切都在规范之内,IMHO
这里是同样的情节--原版--对一个恶梦 的问题。

          ....
          orderProfit = OrderProfit() + OrderSwap();       // Profit
          Price = OrderOpenTime();                        // Цена открытия рыночного ордера
          SL =  OrderStopLoss();                           // Значение StopLoss ордера
          TP = OrderTakeProfit();                          // Значение TakeProfit ордера
          
             if (ticket>0)                                               // Если позиция открылась
                    {
                             while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
                                 {
                                   Sleep(100);
                                 }
                                  double OpenPrice=OrderOpenPrice();                                   
                                  
                     //---------------------Запоминаем значения сл и тп ордера
                     // При количестве итераций выше 3-х увеличиваем уровень ТР для выхода в профит. 
                        if (orderType == OP_BUY) 
                           {
                            //if (Iteration == 4 ) TakeProfitPips = 400; if (Iteration >= 5 ) TakeProfitPips = 500;                
                            V_StopLossPips = NormalizeDouble(OpenPrice  - (StopLossPips * Point), Digits);
                            V_TakeProfitPips = NormalizeDouble(OpenPrice + (TakeProfitPips * Point), Digits);
                           }
            
                        if (orderType == OP_SELL) 
                           {
                            //if (Iteration == 4 ) TakeProfitPips = 400; if (Iteration >= 5 ) TakeProfitPips = 500;        
                            V_StopLossPips = NormalizeDouble(OpenPrice  + (StopLossPips * Point), Digits);
                            V_TakeProfitPips = NormalizeDouble(OpenPrice - (TakeProfitPips * Point), Digits);
                           }                               
                   }     
    
     // Проверка на предельную просадку
      
      double loss = - ((orderProfit * 100.0) / AccountBalance());
      if (loss > MaxLoss)
      {
         Print ("MaxLoss");
         CloseAllOrders(MagicNumber);
         IsExpertFailed = true;
         return (0);
      }
    
       // Проверка на необходимость закрытия открытой позиции (ордера) по стоп-лоссу      
     
      if ( V_StopLossPips != 0 )
        {
          if (orderType == OP_BUY && Bid <=  V_StopLossPips) 
             {
               CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips);
             }
             
          if (OrderType()== OP_SELL && Ask >=  V_StopLossPips) 
             {
               CloseAllOrders(MagicNumber); Print ("V_StopLossPips закрываем по сл = ", V_StopLossPips);
             }  
        }          
        // Проверка на необходимость закрытия открытой позиции (ордера) по тейку
        
        if ( V_TakeProfitPips != 0 )
        {
          if (orderType == OP_BUY && Bid >=  V_TakeProfitPips) 
             {
               CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips);
             }
             
          if (OrderType()== OP_SELL && Ask <=  V_TakeProfitPips) 
             {
               CloseAllOrders(MagicNumber); Print ("V_TakeProfitPips закрываем по ТР = ", V_TakeProfitPips);
             }  
        }      
     
       
   //-----------------------------------ВЫВОДИМ ТЕКУЩУЮ ИНФОРМАЦИЮ О ТОРГАХ НА ЭКРАН------------------------------------------------------------ 
     
      string messageLoss = "";
      if (orderProfit < 0.0)
      {
         messageLoss = "Просадка = " + DoubleToStr(loss, 1) + "% (макс. " + MaxLoss + "%)";
      }
   
      // Вывод текущего состояния
      Comment("Прибыль = ", DoubleToStr(orderProfit, 1), " (лот ", orderLots, ")  ", messageLoss, " Iteration= ", Iteration, "  Sum_Loss + Delta= ", MathAbs (Sum_Loss) +  Delta_Sum_Loss * 10 * orderLots, " Ширина канала = ", StopLossPips, " Профит по рыночному ордеру =   ", orderProfit, "  k = ", k);
      return (0);
   }
   
   Comment ("");   
 
artmedia70:

不存在所谓的味道或颜色。


我们都是如此不同,但我们仍然在一起。)))我们都在同一个宇宙锅里。)))
 
tol64:

我们都是如此不同,但我们仍然在一起。)))我们在同一个宇宙锅里。)))
我的已经在漏汤了......我要去打个盹......直到早上)。
 

既然我们有这样的心情(我以我想/可以的方式写代码),我就去切最后一根黄瓜。

我把所有的 "行政 "和 "立法 "机构都写成独立的(尝试过很多次)职能。

由于这些功能和它们的能力对我来说是众所周知的,所以我把它们远远地放在代码末尾的某个地方。

在start()函数中,我只规定了什么应该触发什么。

我只读了start(),一切一下子就清楚了。

这很方便。

 
DhP:

既然我们有这样的心情(我以我想/可以的方式写代码),我就去切最后一根黄瓜。

我把所有的 "行政 "和 "立法 "机构都写成独立的(尝试过很多次)职能。

由于这些功能和它们的能力对我来说是众所周知的,所以我把它们远远地放在代码末尾的某个地方。

在start()函数中,我只规定了什么应该触发什么。

我只读了start(),一切一下子就清楚了。

这很方便。


你在编译代码 时不会出错 吗,因为你先写了一个执行的函数,然后在最后的某个地方写了它的内容,当然我不使用函数,我主要使用注释,但对于变量,这个问题是存在的
 
LazarevDenis:

编译代码时不是有一个错误吗? 你先写要执行的函数,然后在最后的某个地方写内容。


在这种情况下不可能有任何错误。

在编译时,可能只有一个指示/提醒,说明某些功能没有被使用。

在这种情况下,我要么对它视而不见,要么删除不使用的功能。

 
LazarevDenis:

你在编译代码时不会出错吗,因为你先写了一个执行的函数,然后在最后的某个地方写了它的内容,当然我不使用函数,我主要使用注释,但对于变量,这个问题是存在的

它是什么?)))这是个笑话还是什么?如果是这样的话,这是个好主意))。