[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 86

 
BeerGod:

Tradurre la variabile da mappare in una stampa o un commento in stringa DoubleToStr( valore doppio, cifre int) e impostare la precisione desiderata.

https://docs.mql4.com/ru/convert/DoubleToStr

https://docs.mql4.com/ru/common/comment


Ok, grazie. Stavo anche pensando di farlo in questo modo, o di costruire attraverso ObjecCreate()...
 
okvseok:

per favore suggerite una funzione che conti il numero di ordini perdenti (dall'ultimo) all'ultimo take profit...

Grazie!

Si potrebbe provare così:
//+----------------------------------------------------------------------------+
// Убыточно ли закрылся последний ордер, и подсчет количества
int fHistory(){
  int loss = 0;
  for(int i=OrdersHistoryTotal()-1; i >= 0; i--){               // Выборка в истории
     if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true){    // Если есть следующий в истории
        if(OrderMagicNumber()!=magN) continue;                // Ордера не нашего эксперта

        if(OrderProfit() < 0 ) loss = loss++;                 // Если убыток по посл.ордеру - считаем
        
        if(OrderProfit() > 0 ) return(loss);                  // Если прибыль, вернем количество убыточных
     }
  }
  return(-1);
}
 

Quante volte ho bisogno di chiamareOrderSelect prima di usare OrderProfit(), OrderType() etc.? Una volta all'interno di Start è sufficiente o ogni volta prima di usare OrderProfit, OrderType etc... devo chiamareOrderSelect?

e OrderSelect deve essere chiamato immediatamente prima di OrderProfit o può essere chiamato ovunque all'inizio, basta che sia ?

 
hoz:

Ho scritto la domanda, ma nessuno sembrava accorgersene. Non volevo scrivere una domanda così lunga qui per non confondere tutti. Si prega di notare...

https://www.mql5.com/ru/forum/142983

Provate in questo modo:

int OrderCloseCount(double ordOpPrice, datetime ordOpTime)
{
  // slippage= Взять из OrderSend
  int timePlusMinus=20; // Пусть будет 20 сек.
  int count = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0 ; i--)
  {
    if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
      if (OrderSymbol() != Symbol()) continue;
          if (MathAbs(OrderOpenPrice()-ordOpPrice) <= slippage*Point && MathAbs(OrderOpenTime()-ordOpTime))< timePlusMinus)
              count++;
  }
  
   return (count);
}

Perché non c'è garanzia che i vostri ordini si siano aperti esattamente allo stesso prezzo e allo stesso tempo.

 
hoz:

Ho scritto la domanda, ma nessuno sembrava accorgersene. Non volevo scrivere una domanda così lunga qui per non confondere tutti. Si prega di notare...

https://www.mql5.com/ru/forum/142983

Ti ho già dato un algoritmo approssimativo in quel thread (leggermente corretto qui per una migliore comprensione di alcune sfumature) e non c'è bisogno di iniziare un orto:


L'algoritmo è semplice come un bagel.

La chiusura parziale non cambia il Magic. Il biglietto cambia, ma la magia no.

C'è una posa aperta e livelli in cui quella posa dovrebbe essere parzialmente chiusa.

Supponiamo che il livello 1, il livello 2 e il livello 3.

Se la posizione Buy è in profitto e Bid >= Level1 && Bid< Level2 ---> chiudiamo la prima parte della posizione (con il lotto che è più piccolo del lotto di questa posizione, purché il lotto rimanente non sia inferiore al lotto minimo), quindi:

Se Bid >= Level2 && Bid< Level3 ---> chiudere la seconda parte della posizione (di un lotto inferiore al lotto di questa posizione, a condizione che il lotto rimanente non sia inferiore al lotto minimo), oltre:

Se Bid >= Level3 && Bid<Level4 ---> chiudere la terza parte della posizione (di un lotto più piccolo del lotto di questa posizione, a condizione che il lotto rimanente non sia inferiore al lotto minimo), oltre:

1. Se alla chiusura parziale al livello Bid>=LevelX il lotto è diventato inferiore al lotto minimo ---> chiudere l'intera posizione

2) Se dopo la terza chiusura al livello Bid>=Livello3 c'è ancora una posizione, o accompagnare la posizione rimanente con un trawl dopo il superamento del Livello4, o chiudere tutto in una volta.

Questo è tutto.

Per vendere, guardiamo Ask: Ask<=Level1 && Ask>Level2 ... ecc...

Fate un ciclo su tutte le nostre posizioni, selezionate ciascuna di esse per indice, calcolate i suoi livelli e i lotti di chiusura per la posizione selezionata e godetevi l'algoritmo di lavoro... :)

Allo stesso tempo non c'è bisogno di memorizzare nella memoria dell'EA (nelle variabili) i valori di questi livelli, il che è molto conveniente - se l'EA per qualche motivo finisce il suo lavoro, dopo la ripresa non perderà i dati sui livelli - li ricalcolerà al volo per ogni posizione.

Un'altra cosa: dopo una chiusura parziale, non dimenticare di ritracciare lo stop protettivo. Dopo la chiusura al livello 1 - stop al pareggio, dopo la chiusura al livello 2 - stop al livello 1, dopo la chiusura al livello 3 - stop al livello 2, ecc.


 
Ciao a tutti, qualcuno ha un esempio di un Expert Advisor che usa un indicatore personalizzato?
 
dimarik0000:
Ciao a tutti, qualcuno ha un esempio di un EA che usa un indicatore personalizzato?
Qual è il problema?
 
artmedia70:
Qual è il problema?


Ho letto l'articolo sul trasferimento di un indicatore personalizzato nel codice di Expert Advisor e mi sono confuso. Devo farlo o è sufficiente specificare alcuni parametri dell'indicatore nel codice?
 
dimarik0000:

Ho letto l'articolo sul porting di un indicatore personalizzato nel codice di Expert Advisor e sono confuso, devo farlo o è sufficiente specificare solo alcuni parametri specifici dell'indicatore nel codice?
Se non avete molta esperienza, è meglio usare iCustom() o studiare a fondo e capire il principio di funzionamento dell'indicatore prima di aggiungere la sua logica all'Expert Advisor.
 

713
borilunad 15.01.2013 12:10

Potresti risolvere un mistero: perché quando ho inserito questa funzione || isCloseLastPosByTake() == True || l'esperto nel tester ha iniziato a rallentare molto, 10 volte! Questa è una delle 4 condizioni mutuamente esclusive, quindi non posso usare la catena if come nelle condizioni sommate per rendere il codice più veloce. Cosa può consigliarmi? Grazie in anticipo per i vostri consigli!

Motivazione: