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());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ
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.
voidOnTick()
{
//---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; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
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...
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
È 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
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?
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.
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
o
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
E non dimenticate che lo sl deve essere calcolato PRIMA di cercare di calcolare la dimensione del lotto.
Fate in modo che...
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...
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
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).
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