[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 8

 
TheXpert:

DieKompaktheit beeinträchtigt die Lesbarkeit. Um ehrlich zu sein, ist Romans Version auch nicht gerade gut, selbst wenn man die Logik außer Acht lässt.

Was bringt es, Zeilen zu sparen?

Jedem das Seine... Es ist viel einfacher für mich , den Code zu lesen, wenn ich ihn direkt vor Augen habe. Ich versuche nicht, Zeilen zu speichern: wie es herauskam - so ist es herausgekommen...

Es ist alles eine Frage des Geschmacks jedes Einzelnen und die Entscheidung, was bequemer ist und was nicht, ist leer...

Meine Hauptsache ist, dass jede Zeile an ihrem gewohnten Platz ist und nicht mehr... Ich denke, der Rest von uns sollte dasselbe tun, aber nach eigenem Ermessen.

Es gibt keine Farbe und keinen Geschmack, wie Sie wissen.

 

aber so zu gestalten... Der Albtraum eines Programmierers.

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

       
      return (0);
 
artmedia70:
Ja... Alexey, ich kann mir vorstellen, wie die 807 Zeilen EA , die ich gerade einem Kunden gegeben habe, aussehen würden, wenn sie im Stil von Roman geschrieben wären... :))))
Herzlichen Glückwunsch! Wenn Sie meinen geposteten Code im Zusammenhang mit meiner Antwort auf die Frage betrachten, nämlich in meinem letzten Beitrag auf dieser Seite, hätte sich Ihre Vorstellung davon, wie ein EA mit 807 Zeilen aussehen würde, vielleicht geändert. Ich habe meinen Code aus meinem EA korrigiert, in dem sich eine Menge Dinge befinden, insbesondere in den fehlenden Zeilen in der Schleife, if-Anweisung und weiter in geschweiften Klammern beim Verlassen der Schleife, die Tatsache, dass die Fehlerbehandlung für das Nicht-Löschen verzögert nicht getan wird - dies ist auch im Zusammenhang mit meiner Frage und meine Antwort darauf, IMHO - ist normal.
 
sergeev:

aber so zu gestalten... Der Albtraum eines Programmierers.

Für mich ist ein solches Design normal. Dies ist kein benutzerdefinierter EA, sondern die Antwort auf die Frage, und anstelle von OrderDelete() - Sie hätten es auch in Worten schreiben können - setzen Sie hier ein, um eine Bestellung zu löschen und die Funktion zur Behandlung möglicher Fehler aufzurufen. Die Person wartet, öffnete ich meinen Code, entfernt alle "unnötigen", ohne darauf zu achten, das Vorhandensein oder Fehlen von Leerzeichen nach den Änderungen und gab ihm eine funktionierende Version für seine weitere Verbindung zu seinem EA nach seinem Handel Bedingungen. Ich denke, dass alles im Rahmen der Norm liegt, IMHO.
Hier ist die gleiche Handlung - das Original - auf die Frage nach einem schlechten Traum.

          ....
          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:

So etwas wie Geschmack oder Farbe gibt es nicht.


Wir sind alle so unterschiedlich, aber wir sind trotzdem zusammen. ))) Wir sitzen alle im selben kosmischen Topf. )))
 
tol64:

Wir sind alle so unterschiedlich, aber wir sind trotzdem zusammen. ))) Wir sitzen im selben kosmischen Topf. )))
Bei mir läuft schon Brühe aus... Ich werde ein Nickerchen machen... Bis morgen.)
 

Da wir in der Stimmung sind (ich schreibe Code, wie ich will/kann), werde ich die letzte Gurke schneiden:

Ich schreibe alle "Exekutiv-" und "Legislativorgane" als getrennte (mehrfach versuchte) Funktionen.

Da mir die Funktionen und ihre Fähigkeiten gut bekannt sind, habe ich sie weit weg irgendwo am Ende des Codes untergebracht.

In der Funktion start() schreibe ich nur vor, was was auslösen soll.

Ich lese nur den Start(), und alles wird sofort klar.

Es ist praktisch.

 
DhP:

Da wir in der Stimmung sind (ich schreibe Code, wie ich will/kann), werde ich die letzte Gurke schneiden:

Ich schreibe alle "Exekutiv-" und "Legislativorgane" als getrennte (mehrfach versuchte) Funktionen.

Da mir die Funktionen und ihre Fähigkeiten gut bekannt sind, habe ich sie weit weg irgendwo am Ende des Codes untergebracht.

In der Funktion start() schreibe ich nur vor, was was auslösen soll.

Ich lese nur den Start(), und alles wird sofort klar.

Das ist praktisch.


Bekommen Sie keine Fehler beim Kompilieren von Code, weil Sie zuerst eine Funktion zur Ausführung schreiben, und dann irgendwo am Ende ihren Inhalt, natürlich benutze ich keine Funktionen, ich benutze meistens Kommentare, aber mit Variablen ist dieses Problem vorhanden
 
LazarevDenis:

Gibt es nicht einen Fehler beim Kompilieren von Code? Sie schreiben zuerst die Funktion zur Ausführung und dann irgendwo am Ende den Inhalt.


In diesem Fall kann es keine Fehler geben.

Beim Kompilieren kann es sein, dass nur ein Hinweis/Erinnerung erscheint, dass eine Funktion nicht verwendet wird.

In diesem Fall drücke ich entweder ein Auge zu, oder ich lösche die ungenutzte Funktion.

 
LazarevDenis:

Bekommen Sie keine Fehler beim Kompilieren von Code, weil Sie zuerst eine Funktion zur Ausführung schreiben, und dann irgendwo am Ende ihren Inhalt, natürlich benutze ich keine Funktionen, ich benutze meistens Kommentare, aber mit Variablen ist dieses Problem vorhanden

Was ist das? ))) Ist das ein Scherz oder was? Wenn ja, dann ist es ein guter)).