Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1332

 
DanilaMactep:

Ho fatto come mi hai consigliato con il codice. All'inizio del codice ho una condizione per scegliere il tipo di stop - atp o fisso

Poi ho commentato la mia normalizzazione e l'ho impostata in questo modo

Il calcolo del profitto è il prossimo nel codice. Nessun problema lì e dopo aver calcolato il profitto ho aggiunto la formula spaventosa che mi è stata consigliata.

Tutto è stato compilato senza errori. Ma quando ho eseguito il test l'errore appare nel log, è la divisione per zero per quanto ho capito e il test si ferma. Dove ho sbagliato o cosa ho fatto di sbagliato?


Basta cancellarlo.

     sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;// ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ
     //sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО  ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ
 
DanilaMactep:

Ho fatto come mi hai consigliato con il codice. All'inizio del codice ho una condizione per scegliere il tipo di stop - atp o fisso

Poi ho commentato la mia normalizzazione e l'ho impostata in questo modo

Il calcolo del profitto è il prossimo nel codice. Nessun problema lì e dopo aver calcolato il profitto ho aggiunto la formula spaventosa che mi è stata consigliata.

Tutto è stato compilato senza errori. Ma quando eseguo il test il log mostra un errore, che ottengo la divisione per zero e il test si ferma. Dove ho sbagliato o cosa non ho fatto bene?


Proprio quando ti vengono date due opzioni diverse, non dovresti applicarle entrambe in una volta sola.

Stai contando sl come due scelte diverse

sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА

o

sl= razmer_fikc_sl*Point; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ

si ottiene il valore in valori di prezzo. E la formula dovrebbe contenere punti da ... a ....

Così, lo stop ad una distanza dal prezzo è o iATR(.........)/_Point o razmer_fikc_sl ma usare due valori diversi nella funzione non è molto conveniente, quindi è meglio lasciare solo una variante

double lot =MathFloor((Free*MaxRisk/100)/(sl/Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА

E non dimenticate che lo sl deve essere calcolato PRIMA di cercare di calcolare la dimensione del lotto.

 
sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1)/Point;// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
Assicuratevi di
 

Fate in modo che...

void OnTick()
  {
//---
if(tip_sl==en_po_atr)
     { //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
     sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1)/Point;// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
     else //ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
     {
     sl= razmer_fikc_sl; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
 
MakarFX:

Basta cancellarlo.

Ho sistemato la linea e il test è iniziato - GRAZIE mille! Solo non ho capito perché quando si ottiene lo stoploss da iATR in una variabile, perché dividere per il punto alla fine? P/S Ho delle vere difficoltà con la matematica, non sto scherzando :-( Ma credo che il test sia andato bene e con un lotto da 100 ha messo il minimo, e con un lotto da 10000 diverso tutto il tempo, quindi funziona bene... Grazie ancora per l'aiuto...

 
DanilaMactep:

Ho sistemato la stringa e il test è iniziato - GRAZIE mille! Solo non ho capito perché quando si ottiene lo stoploss da iATR in una variabile, perché dividere per il punto alla fine? P/S Faccio fatica con i calcoli, non sto scherzando :-( Ma credo che il test sia andato bene e a 100 di deposito il lotto è minimo, e a 10000 di depo è sempre diverso, quindi funziona bene... Grazie ancora per l'aiuto...

ATR dà un numero decimale, come 0,00120

razmer_fikc_sl è un intero.

per calcolare il lotto, avete bisogno di punti, cioè di numeri interi

ATR/Point dà un numero intero

 
È un vecchio argomento, ma non riesco a trovare una soluzione. Come specificare l'intervallo di tempo (per esempio dalle 12:00 alle 14:00) e aprire un ordine solo una volta entro questo intervallo e che soddisfi qualche condizione (RSI<30 per esempio).

Oppure

Qualcosa di analogo a Sleep: aprire un ordine su una data condizione e non fare nulla per 2 ore. Ma Sleep non funziona nel tester.
 
Порт-моне тв:
Questo è un vecchio argomento, ma non riesco a trovare una soluzione. Come specificare la fascia oraria (per esempio, dalle 12:00 alle 14:00) e solo una volta in questa fascia aprire un ordine che soddisfa qualche condizione (RSI<30 per esempio).

Oppure

Qualcosa di analogo a Sleep: aprire un ordine su una data condizione e non fare nulla per 2 ore. Ma Sleep non funziona nel tester.

prima condizione - il tempo è arrivato
seconda condizione - rsi
terza condizione - non c'è un ordine simile nella storia al prezzo di apertura in intervalli

 

Buon pomeriggio.

C'è un indicatore Elliott Wave Oscillator, che dà valori numerici della variabile EWO. Ci sono EWO positivi che sono sopra lo zero e EWO negativi che sono sotto lo zero.

Dalle ultime 100 letture di EWO, è necessario calcolare il valore medio di EWO positivo e separatamente il valore medio di EWO negativo

Ottengo i valori dall'indicatore double EWO=iCustom(Symbol(),0, "Elliott Wave Oscillator",0,0);

Per favore consigliate quale codice mql4 può implementare questo in un EA?


Sono riuscito a trovare il modulo medio.

double avarage_EWO = 0;
for(int g=0;g<100;g++)
avarage_EWO = avarage_EWO + MathAbs( iCustom(Symbol(),0, "Elliott Wave Oscillator",0,g) ); // modulo media
avarage_EWO = avarage_EWO/100;


Ma come calcolare separatamente la media positiva e la media negativa dell'EWO?

Grazie!



 

Take Profit

Non riesco a capire come e a cosa serve ORDER_REASON_TP,

So come funzionaDEAL_REASON_TP, ma non so cosa succede con gli ordini qui