Ciao, ho uno strano comportamento della funzione di sistema OrderCalcProfit, ho la sensazione che il parametro volume sia ignorato nel calcolo, cioè la dimensione del profitto è sempre calcolata per il volume 1.0
Sto cercando di verificarlo nel tester per diverse coppie di valute su diversi conti demo.
1. Il calcolo è corretto per 1.0, vedi calc_profi101.png.
2. La seconda e tutte le chiamate successive della funzione restituiscono un risultato di profitto basato su un volume di 1.0, il valore del volume è ignorato, vedi uno screenshot (calc_profit02.png) - volume passato 0.5, ma il risultato è ancora lo stesso che per 1.0
Potete dirmi quale potrebbe essere il problema. Grazie
Ciao, ho uno strano comportamento della funzione di sistema OrderCalcProfit, ho la sensazione che il parametro volume sia ignorato nel calcolo, cioè la dimensione del profitto è sempre calcolata per il volume 1.0
Sto cercando di verificarlo nel tester per diverse coppie di valute su diversi conti demo.
1. Il calcolo è corretto per 1.0, vedi calc_profi101.png.
2. La seconda e tutte le chiamate successive della funzione restituiscono un risultato di profitto basato su un volume di 1.0, il valore del volume è ignorato, vedi uno screenshot (calc_profit02.png) - volume passato 0.5, ma il risultato è ancora lo stesso che per 1.0
Puoi dirmi quale potrebbe essere il problema. Grazie
Penso che la risposta sia nella guida:
"... profitto
[out] Variabile che conterrà il valore di profitto calcolato se la funzione ha successo. Il valore della stima del profitto dipende da molti fattori e può cambiare quando cambia l'ambiente di mercato. ... "
Ciao, ho uno strano comportamento della funzione di sistema OrderCalcProfit, ho la sensazione che il parametro volume sia ignorato nel calcolo, cioè la dimensione del profitto è sempre calcolata per il volume 1.0
Sto cercando di verificarlo nel tester per diverse coppie di valute su diversi conti demo.
1. Il calcolo è corretto per 1.0, vedi calc_profi101.png.
2. La seconda e tutte le chiamate successive della funzione restituiscono un risultato di profitto basato su un volume di 1.0, il valore del volume è ignorato, vedi uno screenshot (calc_profit02.png) - volume passato 0.5, ma il risultato è ancora lo stesso che per 1.0
Potete dirmi quale potrebbe essere il problema. Grazie
Ecco l'esaminatore del test - tutto funziona correttamente:
Uladzimir Izerski: Puoi darmi un suggerimento. È possibile e come posso trovare programmaticamente la lingua del terminale in uso?
Determino questo o la lingua del terminale russo o se un altro - l'output è in inglese.
if(InpTrailingStop!=0 && InpTrailingStep==0)
{
string err_text=(TerminalInfoString(TERMINAL_LANGUAGE)=="Russian")?
"Трейлинг невозможен: параметр \"Trailing Step\" равен нулю!":
"Trailing is not possible: parameter \"Trailing Step\" is zero!";
//--- when testing, we will only output to the log about incorrect input parametersif(MQLInfoInteger(MQL_TESTER))
{
Print(__FILE__," ",__FUNCTION__,", ERROR: ",err_text);
return(INIT_FAILED);
}
else// if the Expert Advisor is run on the chart, tell the user about the error
{
Alert(__FILE__," ",__FUNCTION__,", ERROR: ",err_text);
return(INIT_PARAMETERS_INCORRECT);
}
}
Aggiunto: pensavo di aver salvato tutte le lingue dall'enumerazione TERMINAL_LANGUAGE - ma non lo trovo. Deve aver perso ...
Buon pomeriggio a tutti, qualcuno può aiutare ad aggiungere qui che a SL non sarebbe solo flip, ma anche aggiungere un sacco o più. E quando il TP viene attivato, torna indietro di un lotto.
Andrey990: Buon giorno a tutti, qualcuno può aiutare ad aggiungere qui che a SL non sarebbe solo un rollover ma anche aggiungere un sacco o più. E quando il TP viene attivato, restituisce un lotto.
1. Sconsiglio categoricamente l'uso di funzioni che selezionano una posizione in base a un carattere. Usa una funzione che seleziona una posizione per un indice in una lista.
2. Per sapere come è stata chiusa una posizione, l'enumerazioneENUM_DEAL_REASON deve essere vista in OnTradeTransaction.
Se si chiude con Stop loss - raddoppia il volume, se con Take Profit - imposta il volume minimo. Per rilevare che la negoziazione si è verificata come risultato dell'attivazione di Stop Loss o Take Profit, usate OnTradeTransaction. Dalla build 1625 c'è una bella enumerazione ENUM_DEAL_REASON: ENUM_DEAL_REASON Descrizione DEAL_REASON_SL Operazione fatta come risultato dell'attivazione dello Stop Loss DEAL_REASON_TP Operazione fatta come risultato dell'attivazione del Take Profit... che può essere tracciata in OnTradeTransaction. In altre parole, ora puoi facilmente e soprattutto, determinare in modo affidabile che questo trade è stato il risultato dell'attivazione del Take Profit o dello Stop Loss. Al momento (build 1626), questo EA può essere testato solo dal vivo - sia su un grafico che in modalità debug utilizzando dati reali (F5 in MetaEditor). Ho anche applicato un workaround per ora: determinare cosa ha innescato: Take Profit o Stop Loss nella procedura OnTradeTransaction: if (deal_symbol==m_symbol...
Se il primo buffer viene utilizzato per i calcoli, ecc. e il secondo deve essere tracciato, allora
Innanzitutto, è necessario impostare DRAW_NONE per il primo buffer se è già impostato su INDICATOR_CALCULATIONS nella funzione SetIndexBuffer() ?
PlotIndexSetInteger(?,PLOT_DRAW_TYPE,DRAW_NONE);
secondo, quale indice dovrei impostare in PlotIndexSetInteger() invece del punto interrogativo (?) se solo il secondo buffer dovrebbe essere disegnato?
In terzo luogo, se uso due stili di tipo DRAW_HISTOGRAM, posso impostare il colore per ciascuno di essi e ottenere un istogramma come nell'indicatore Volumes, dove le barre verdi e rosse si alternano, ma se uso DRAW_HISTOGRAM2, posso impostare anche due colori per una barra o solo un colore è impostato per questo stile?
Se il primo buffer viene utilizzato per i calcoli, ecc. e il secondo deve essere tracciato, allora
Innanzitutto, è necessario impostare DRAW_NONE per il primo buffer se è già impostato su INDICATOR_CALCULATIONS nella funzione SetIndexBuffer() ?
PlotIndexSetInteger(?,PLOT_DRAW_TYPE,DRAW_NONE);
secondo, quale indice dovrei impostare in PlotIndexSetInteger() invece del punto interrogativo (?) se solo il secondo buffer dovrebbe essere disegnato?
In terzo luogo, se uso due stili di tipo DRAW_HISTOGRAM, posso impostare il colore per ciascuno di essi e ottenere un istogramma come nell'indicatore Volumes, dove le barre verdi e rosse si alternano, ma se uso DRAW_HISTOGRAM 2, posso impostare anche due colori per una barra o solo un colore è impostato per questo stile?
Perché sei così duro con te stesso? Qual è il problema di assegnare prima i buffer di visualizzazione e poi quelli ausiliari?
Per DRAW_HISTOGRAМ2 sono definiti 3 buffer e la sequenza è obbligatoria, 2 buffer di valore prima, seguiti da un buffer di colore. Ma c'è una differenza tra DRAW_HISTOGRAM e DRAW_HISTOGRAM2 in quanto DRAW_HISTOGRAM è disegnato da zero al valore nel buffer, mentre DRAW_HISTOGRAM2 è disegnato dal valore di un buffer al valore di un altro buffer.
Ciao, ho uno strano comportamento della funzione di sistema OrderCalcProfit, ho la sensazione che il parametro volume sia ignorato nel calcolo, cioè la dimensione del profitto è sempre calcolata per il volume 1.0
Sto cercando di verificarlo nel tester per diverse coppie di valute su diversi conti demo.
1. Il calcolo è corretto per 1.0, vedi calc_profi101.png.
2. La seconda e tutte le chiamate successive della funzione restituiscono un risultato di profitto basato su un volume di 1.0, il valore del volume è ignorato, vedi uno screenshot (calc_profit02.png) - volume passato 0.5, ma il risultato è ancora lo stesso che per 1.0
Potete dirmi quale potrebbe essere il problema. Grazie
Ciao, ho uno strano comportamento della funzione di sistema OrderCalcProfit, ho la sensazione che il parametro volume sia ignorato nel calcolo, cioè la dimensione del profitto è sempre calcolata per il volume 1.0
Sto cercando di verificarlo nel tester per diverse coppie di valute su diversi conti demo.
1. Il calcolo è corretto per 1.0, vedi calc_profi101.png.
2. La seconda e tutte le chiamate successive della funzione restituiscono un risultato di profitto basato su un volume di 1.0, il valore del volume è ignorato, vedi uno screenshot (calc_profit02.png) - volume passato 0.5, ma il risultato è ancora lo stesso che per 1.0
Puoi dirmi quale potrebbe essere il problema. Grazie
Penso che la risposta sia nella guida:
"... profitto
[out] Variabile che conterrà il valore di profitto calcolato se la funzione ha successo. Il valore della stima del profitto dipende da molti fattori e può cambiare quando cambia l'ambiente di mercato. ... "
Aggiunto: anche se questa è solo un'ipotesi.
Ciao, ho uno strano comportamento della funzione di sistema OrderCalcProfit, ho la sensazione che il parametro volume sia ignorato nel calcolo, cioè la dimensione del profitto è sempre calcolata per il volume 1.0
Sto cercando di verificarlo nel tester per diverse coppie di valute su diversi conti demo.
1. Il calcolo è corretto per 1.0, vedi calc_profi101.png.
2. La seconda e tutte le chiamate successive della funzione restituiscono un risultato di profitto basato su un volume di 1.0, il valore del volume è ignorato, vedi uno screenshot (calc_profit02.png) - volume passato 0.5, ma il risultato è ancora lo stesso che per 1.0
Potete dirmi quale potrebbe essere il problema. Grazie
Ecco l'esaminatore del test - tutto funziona correttamente:
e il risultato:
Puoi darmi un suggerimento. È possibile e come posso trovare programmaticamente la lingua del terminale in uso?
Determino questo o la lingua del terminale russo o se un altro - l'output è in inglese.
Aggiunto: pensavo di aver salvato tutte le lingue dall'enumerazione TERMINAL_LANGUAGE - ma non lo trovo. Deve aver perso ...
Buon giorno a tutti, qualcuno può aiutare ad aggiungere qui che a SL non sarebbe solo un rollover ma anche aggiungere un sacco o più. E quando il TP viene attivato, restituisce un lotto.
1. Sconsiglio categoricamente l'uso di funzioni che selezionano una posizione in base a un carattere. Usa una funzione che seleziona una posizione per un indice in una lista.
2. Per sapere come è stata chiusa una posizione, l'enumerazioneENUM_DEAL_REASON deve essere vista in OnTradeTransaction.
Esempio con ENUM_DEAL_REASON:
Stop Loss Take Profit
CodeBase | 2017.07.13 07:42 |Vladimir Karputov| EAs | MetaTrader 5
È possibile inserire i dati di accesso al conto in un programma di terzi e gestire il conto e, sapete, aprire/chiudere posizioni?
O è solo attraverso un robot installato sull'account?
Sto trasferendo gli indicatori da MQL4 a MQL5, domanda sui buffer e le "trame". L'indicatore ha 2 buffer e 1 trama:
#proprietà indicator_buffers 2
#proprietà indicator_plots 1
SetIndexBuffer(0,Array1,INDICATOR_CALCULATIONS);
SetIndexBuffer(1,Array2,INDICATOR_DATA);
Se il primo buffer viene utilizzato per i calcoli, ecc. e il secondo deve essere tracciato, allora
Innanzitutto, è necessario impostare DRAW_NONE per il primo buffer se è già impostato su INDICATOR_CALCULATIONS nella funzione SetIndexBuffer() ?
PlotIndexSetInteger(?,PLOT_DRAW_TYPE,DRAW_NONE);
secondo, quale indice dovrei impostare in PlotIndexSetInteger() invece del punto interrogativo (?) se solo il secondo buffer dovrebbe essere disegnato?
PlotIndexSetInteger(?,PLOT_DRAW_TYPE,DRAW_HISTOGRAM);
In terzo luogo, se uso due stili di tipo DRAW_HISTOGRAM, posso impostare il colore per ciascuno di essi e ottenere un istogramma come nell'indicatore Volumes, dove le barre verdi e rosse si alternano, ma se uso DRAW_HISTOGRAM2, posso impostare anche due colori per una barra o solo un colore è impostato per questo stile?
Sto trasferendo gli indicatori da MQL4 a MQL5, domanda sui buffer e le "trame". L'indicatore ha 2 buffer e 1 trama:
#proprietà indicator_buffers 2
#proprietà indicator_plots 1
SetIndexBuffer(0,Array1,INDICATOR_CALCULATIONS);
SetIndexBuffer(1,Array2,INDICATOR_DATA);
Se il primo buffer viene utilizzato per i calcoli, ecc. e il secondo deve essere tracciato, allora
Innanzitutto, è necessario impostare DRAW_NONE per il primo buffer se è già impostato su INDICATOR_CALCULATIONS nella funzione SetIndexBuffer() ?
PlotIndexSetInteger(?,PLOT_DRAW_TYPE,DRAW_NONE);
secondo, quale indice dovrei impostare in PlotIndexSetInteger() invece del punto interrogativo (?) se solo il secondo buffer dovrebbe essere disegnato?
PlotIndexSetInteger(?,PLOT_DRAW_TYPE,DRAW_HISTOGRAM);
In terzo luogo, se uso due stili di tipo DRAW_HISTOGRAM, posso impostare il colore per ciascuno di essi e ottenere un istogramma come nell'indicatore Volumes, dove le barre verdi e rosse si alternano, ma se uso DRAW_HISTOGRAM 2, posso impostare anche due colori per una barra o solo un colore è impostato per questo stile?
Perché sei così duro con te stesso? Qual è il problema di assegnare prima i buffer di visualizzazione e poi quelli ausiliari?
Per DRAW_HISTOGRAМ2 sono definiti 3 buffer e la sequenza è obbligatoria, 2 buffer di valore prima, seguiti da un buffer di colore. Ma c'è una differenza tra DRAW_HISTOGRAM e DRAW_HISTOGRAM2 in quanto DRAW_HISTOGRAM è disegnato da zero al valore nel buffer, mentre DRAW_HISTOGRAM2 è disegnato dal valore di un buffer al valore di un altro buffer.