Risposta

modifica del valore dei parametri

3 risposte

chengsmine

Abbonato, bbp_partecipante, comunità, 42 risposte.

Visita il profilo

10 anni fa #111615

All'avvio dell'EA ho un valore iniziale di un certo parametro DS impostato a 5 (input)). Dopo la chiusura di alcuni trade, DS viene aumentato a 10. Ma sembra che questo nuovo valore non abbia sostituito il valore originale di DS quando l'EA si riavvia. Ad esempio,

Ingresso: DS=5;

 

Regola 1:

PU= Apertura (0) + ConvetToRealPips(DS)

 

Dopo molte regole:

Chiudere tutti gli ordini

DS=DS+5

 

Quindi il nuovo valore di DS è ora 10, ma DS risulta ancora <=5 nella Regola 1 quando l'EA si riavvia (torna alla Regola 1).

 

Perché? Esiste una soluzione a questo problema?

 

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

10 anni fa #122729

Quando si riavvia un EA, questo dimenticherà tutti i valori memorizzati e utilizzerà nuovamente i valori predefiniti.

Non c'è una soluzione semplice, funziona semplicemente così.

 

L'unico modo per mantenere i valori precedenti al riavvio di EA sarebbe quello di salvarli in un file e poi caricarli di nuovo.

 

Oppure si può cercare di riconoscere il DS dai propri ordini: ad esempio, se si utilizzano dimensioni diverse per ogni ordine, si può utilizzare la dimensione dell'ordine effettivo per riconoscere il valore DS utilizzato l'ultima volta.

 

Marchio

Marchio
Architetto StrategyQuant

0

chengsmine

Abbonato, bbp_partecipante, comunità, 42 risposte.

Visita il profilo

10 anni fa #122733

Come si può ricordare la dimensione dell'ultimo ordine, visto che sopra si dice che tutti i valori memorizzati vengono cancellati una volta riavviato un EA?

0

Mark Fric

Amministratore, sq-ultimate, 2 risposte.

Visita il profilo

10 anni fa #122751

non è possibile ricordare il valore dell'ultimo ordine, ma è possibile ricavarlo dalla cronologia degli ordini.

 

Basta aggiungere questa funzione alla fine del file {EA Wizard}/code/CustomFunctions.mq4:

 

double sqGetLastPositionSize(int orderMagicNumber) {
   for(int i=OrdersHistoryTotal(); i>=0; i-) {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true && OrderSymbol() == Symbol()) {
         if(orderMagicNumber == 0 || OrderMagicNumber() == orderMagicNumber) {
            return(OrderLots());
         }
      }
   }
 
   ritorno(0);
}

 

Quindi è possibile utilizzarlo nelle condizioni richiamando la funzione personalizzata : sqGetLastPositionSize(YourMagicNumber)

 

Marchio

Marchio
Architetto StrategyQuant

0

Stai visualizzando 3 risposte - da 1 a 3 (di 3 totali)