[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 186

 
Pyro:

Ciao a tutti. La mia ricerca storica non restituisce il volume dei lotti. È così che deve essere?


Restituisce 0,1 lotti, anche se i lotti sono cambiati dal programma. I biglietti si riflettono correttamente (cambiati).


Non cercate "bug e caratteristiche" in tutto - a volte la porta si apre molto semplicemente... :-)

Dov'è il ciclo dell'ordine?

 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)   
             Comment("\n\n\n",OrderLots()," ",OrderTicket());                        
         }
      }
   }
 
Pyro:

Ciao a tutti. La mia ricerca storica non restituisce il volume dei lotti. È questo il modo di farlo?


Restituisce il lotto 0.1, anche se i lotti vengono cambiati dal programma. i biglietti vengono visualizzati correttamente (cambiamento). un bug? un bug?


Vedi codice analogico, modifica, prova:

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;  
    
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }
 

Romano


Non ho bisogno di un ciclo. Ho bisogno di ottenere il LOTTO dell'ultimo ordine, non importa quale, non ho bisogno di filtrare. Non c'è niente su LOT nell'esempio. Sono perplesso.

 
Pyro:

Romano


Non ho bisogno di un ciclo. Ho bisogno di ottenere il LOTTO dell'ultimo ordine, non importa quale, non ho bisogno di filtrare. Non c'è niente su LOT nell'esempio. Sono perplesso.


Dai un'occhiata - ho fatto delle modifiche al mio post precedente...
 
Non capisco. Un ciclo è necessario quando avete bisogno di filtrare per alcuni criteri, come nel vostro caso. Il mio compito è più semplice: prendere l'ultimo ordine dalla storia. Per definizione, è chiuso, e per definizione, non ci sono posizioni aperte sul mercato. Gli ordini in sospeso non vengono utilizzati. Cioè, l'ultimo ordine sarà sicuramente quello del mercato. I biglietti vengono restituiti correttamente, i lotti no.
 
Pyro:
Non capisco. Un ciclo è necessario quando avete bisogno di filtrare per alcuni criteri, come nel vostro caso. Il mio compito è più semplice: prendere l'ultimo ordine dalla storia. Per definizione, è chiuso, e per definizione, non ci sono posizioni aperte sul mercato. I biglietti vengono restituiti correttamente, i lotti no.

Proprio! Impara a usare la ricerca! :-)
 
Grazie per questo :) Il problema era un altro.
 
MK07:

Grazie per avermi aiutato. Ho messo if (D_sig==0) { comando per il segnale ; }. I "passi" sono diventati meno, ma lo sono ancora.

Ho messo MathAbs per avere un "corridoio" di confronto, perché la probabilità che le linee di segnale siano assolutamente uguali è trascurabilmente piccola.

Forse qualcun altro ha delle idee sul mio problema?


L'ho scritto così e visualizza D_Sig nel commento.

         D_sig=MathAbs(Signal1Buffer[0]-Signa13Buffer[0]);                              // разница между сигнальными линиями 1-ого и 3-ого MACD на
                                                                                        // нулевом баре
if(D_sig==0)  {   D_sig_Last=D_sig; }
      
//       break;          
             
           
              
         
         j++;
         
}             
     
      Comment( "\n"," Баров = ",WindowBarsPerChart()-1, 
               "\n"," Macd1Buffer = ",DoubleToStr(Macd1Buffer[0],4),
               "\n"," Signal1Buffer = ",DoubleToStr(Signal1Buffer[0],4),
               "\n"," Macd3Buffer = ",DoubleToStr(Macd3Buffer[0],4),
               "\n"," Signa13Buffer = ",DoubleToStr(Signa13Buffer[0],4),
               "\n"," D_sig = ",DoubleToStr(D_sig,4));
 
Suggerire un "principio preferito" di formazione del nome EA - e che tenga conto del principio di funzionamento e della versione, ecc.
 

Ciao a tutti.

C'è una funzione bool NewBar().Per favore fate una funzione bool NewZZ() . Quando appare un nuovo ginocchio a zig zag -> true.