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

 

Domanda come calcolare una serie di ordini perdenti ????

Voglio sapere quanti ordini di fila hanno chiuso a una fermata per controllare la tattica... e soprattutto l'ultimo

Ragazzi, ne ho davvero bisogno .....

 
VOLDEMAR:

Domanda come calcolare una serie di ordini perdenti ????

Voglio sapere quanti ordini di fila hanno chiuso a una fermata per controllare la tattica... e soprattutto l'ultimo

Ragazzi, ne ho davvero bisogno .....


Ecco come lo calcolo per me:

Iterazione = quante volte un ordine di fila ha chiuso a uno stop se uno stop nel tuo senso è una chiusura in perdita.

 //---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  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;
               }
            }
         }
      }
   }
 
Grazie! Ma da quanto ho capito questo codice trova l'intera serie nella storia, sia che si tratti di 100 compravendite fa o di 5 ....
 
VOLDEMAR:
Grazie! Ma da quanto ho capito, questo codice trova l'intera serie nella cronologia indipendentemente dal fatto che sia stato 100 trade fa o 5 .....

No. La selezione dal chiuso più vicino va in profondità nella storia, e quando un chiuso appare in profitto, la serie viene interrotta con l'uscita del numero di chiusi non redditizi in una fila = Iterazione.
 

Buon pomeriggio.

Sarebbe questa la giusta combinazione?

  // заполним значениями сигнальные массивы и посчитаем их количество
  for(i=DisplayBars;i>=0;i--) 
  {

    
if (Prz0 == 0) 
       {
           f= GetBarNumWithZerroDist(i);// на этом баре пересечение
        if (f!=-1)
          {
           Price01 = iClose(Symbol_1,0,f);
           Price02 = iClose(Symbol_2,0,f);
           Prz0 = 1;
           i=f;
           }
       } 
   }
int GetBarNumWithZerroDist(int i)
{
double Smb1Cl0 = NormalizeDouble(iClose(Symbol_1,0,0),Digits);
double Smb2Cl0 = NormalizeDouble(iClose(Symbol_2,0,0),Digits2);
double Smb1Pnt = MarketInfo(Symbol_1, MODE_POINT);
double Smb2Pnt = MarketInfo(Symbol_2, MODE_POINT);
int    mBars   = MathMin(iBars(Symbol_1,0), iBars(Symbol_2,0));

    for (int f=i;f>=0;f--) 
    {
        Price1 =   NormalizeDouble(Lot*(Smb1Cl0 - iClose(Symbol_1,0,f)) / Smb1Pnt,0);
        Price2 = NormalizeDouble(K*Lot2*H*(Smb2Cl0 - iClose(Symbol_2,0,f)) / Smb2Pnt,0);
        Spread = Price1 - Price2; 
        //Print ("Price1="+Price1, " Price2="+Price2);
        if(MathAbs(Spread)== 0) return(f);
    }
    return(-1);
}
 

Mi è piaciuto questo:)

if(MathAbs(Spread)== 0) return(f);
 
Roger:

Mi piace questo:)


C'è un errore qui?

Ho bisogno di restituire il valore della barra dove Spread==0,

Se non viene trovato un tale valore, restituisce -1.

 

Salve.

Domanda: OrderSend() può restituire un valore di "0", o meno di "-1" dopo l'esecuzione? Qualcuno ha incontrato qualcosa di simile? O le informazioni fornite nella "documentazione" sono corrette:

int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
Funzione di base usata per aprire una posizione o impostare un ordine pendente.
Restituisce il numero di biglietto assegnato all'ordine dal server commerciale, o -1 in caso di fallimento.
P.S.: lavorando come telepate, cercando un errore nel codice di qualcun altro...
 
Ho fatto una rete virtuale con linee orizzontali, nel tester funziona bene, ma durante l'ottimizzazione il tester apparentemente non funziona con queste linee, perché?
 
DimaMA:
Ho fatto un traino virtuale con linee orizzontali, funziona bene nel tester, ma durante l'ottimizzazione il tester probabilmente non funziona con queste linee, perché? e come risolvere il problema?

Perché avete bisogno di una linea orizzontale? Memorizza il valore della linea in una variabile e sarai felice!!! E l'Expert Advisor "penserà" più velocemente! E si può lasciare la linea orizzontale solo per l'effetto visivo.

E la ragione è la seguente: il tester lavora con oggetti grafici solo in modalità visiva! Quando si ottimizza, non c'è nessuna modalità visiva... Anche se, puoi provare a lasciare il grafico con "visual" tra parentesi dopo il nome del TF e della coppia... Ma non so se servirà o meno. Non ho controllato. Ho pensato che sarebbe stato utile, perché possiamo vedere gli ordini che appaiono e scompaiono su questo grafico (che è stato utilizzato per i test di visualizzazione prima) (anche se il grafico non è stato ancora attivato)... Forse qualcuno ce lo dirà!

Il mio consiglio è di non usare l'estrazione di parametri da oggetti grafici. Che questi parametri siano memorizzati in variabili... Non rendere l'oggetto grafico una variabile! :))))

Motivazione: