[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 8

 
TheXpert:

Lacompattezza compromette la leggibilità. Ad essere onesti, anche la versione di Roman non è esattamente buona, anche se si ignora la logica.

Qual è lo scopo di salvare le linee?

A ciascuno il suo... Per me è molto più comodo leggere il codice quando è tutto davanti ai miei occhi. Non cerco di salvare le battute: come è venuto fuori - così è venuto fuori...

È tutta una questione di gusti di ogni singolo individuo e decidere cosa è più conveniente e cosa no è vuoto...

La mia cosa principale è avere ogni linea al suo solito posto e non più... Penso che il resto di noi dovrebbe fare lo stesso, ma a propria discrezione.

Non ci sono colori e sapori, come sapete.

 

ma per progettare così... L'incubo di un codificatore.

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

       
      return (0);
 
artmedia70:
Già... Alexey, posso immaginare come sarebbe la linea 807 EA che ho appena dato a un cliente se fosse scritta nello stile di Roman... :))))
Congratulazioni! Se guardi il mio codice postato nel contesto della mia risposta alla domanda, cioè dal mio ultimo post su questa pagina, forse la tua idea di come sarebbe stato un EA di 807 linee sarebbe cambiata. Ho corretto il mio codice dal mio EA, dove si trovano molte cose, in particolare, nelle righe mancanti nel ciclo, nell'istruzione if e ulteriormente nelle parentesi graffe quando si esce dal ciclo, il fatto che la gestione dell'errore per la mancata cancellazione ritardata non è fatta - questo è anche nel contesto della mia domanda e la mia risposta ad essa, IMHO - è normale.
 
sergeev:

ma per progettare così... L'incubo di un codificatore.

Per me - un tale design è normale. Questo non è un EA personalizzato, ma la risposta alla domanda, e invece di OrderDelete() - avresti potuto scriverlo a parole - hai messo qui per cancellare un ordine e chiamare la funzione per gestire eventuali errori. La persona sta aspettando, ho aperto il mio codice, rimosso tutto il "non necessario", senza prestare attenzione alla presenza o assenza di spazi dopo le modifiche e gli ho dato una versione funzionante per il suo ulteriore collegamento al suo EA secondo le sue condizioni di trading. Penso che tutto sia nella norma, IMHO.
Ecco la stessa trama - l'originale - alla questione di un brutto sogno.

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

Non esiste il gusto o il colore.


Siamo tutti così diversi, ma siamo ancora insieme. ))) Siamo tutti nella stessa pentola cosmica. )))
 
tol64:

Siamo tutti così diversi, ma siamo ancora insieme. ))) Siamo nella stessa pentola cosmica. )))
Il mio perde già del brodo... Vado a fare un pisolino... Fino al mattino).
 

Visto che siamo in vena (scrivo il codice come voglio/posso), taglio l'ultimo cetriolo:

Scrivo tutti gli organi "esecutivi" e "legislativi" come funzioni separate (provato molte volte).

Dato che le funzioni e le loro capacità mi sono ben note, le ho messe lontano da qualche parte alla fine del codice.

Nella funzione start() prescrivo solo cosa dovrebbe innescare cosa.

Leggo solo l'inizio(), e tutto diventa subito chiaro.

È conveniente.

 
DhP:

Visto che siamo in vena (scrivo il codice come voglio/posso), taglio l'ultimo cetriolo:

Scrivo tutti gli organi "esecutivi" e "legislativi" come funzioni separate (provato molte volte).

Dato che le funzioni e le loro capacità mi sono ben note, le ho messe lontano da qualche parte alla fine del codice.

Nella funzione start() prescrivo solo cosa dovrebbe innescare cosa.

Leggo solo l'inizio(), e tutto diventa subito chiaro.

È conveniente.


Non si ottengono errori quando si compila il codice, perché prima si scrive una funzione per l'esecuzione, e poi da qualche parte alla fine si scrive il suo contenuto, naturalmente non uso funzioni, uso soprattutto commenti, ma con le variabili questo problema è presente
 
LazarevDenis:

Non c'è un errore quando si compila il codice? Si scrive prima la funzione per l'esecuzione e poi da qualche parte alla fine si scrive il contenuto.


Non ci possono essere errori in questo caso.

Durante la compilazione, ci può essere solo un'indicazione/segnalazione che qualche funzione non è usata.

In questo caso, o chiudo un occhio, o cancello la funzione inutilizzata.

 
LazarevDenis:

Non si ottengono errori quando si compila il codice, perché prima si scrive una funzione per l'esecuzione, e poi da qualche parte alla fine si scrive il suo contenuto, naturalmente non uso funzioni, uso soprattutto commenti, ma con le variabili questo problema è presente

Che cos'è? ))) È uno scherzo o cosa? Se è così, è una buona)).
Motivazione: