C'è un problema. Usando la funzione (vedi sotto), possiamo ottenere i valori di TakeProfit e StopLoss per ID di posizione dallo storico (cioè quando la posizione è già chiusa), questa funzione funziona in tempo reale, ma nel tester della strategia, non può trovare TakeProfit e StopLoss, perché non vede gli ordini storici che impostano stop (importante, gli stop sono impostati dopo l'apertura della posizione)
Domanda: Come posso usare lo Strategy Tester per trovare il TP/Loss per una posizione chiusa basata su un ticket?
Ciao a tutti! Sto cercando di programmare EAs, e voglio iniziare scrivendo uno spread collector statistico. Voglio dire, cosa vorrei che facesse? Nel tester, un EA si avvia e raccoglie dati sulla storia dei tick per un certo periodo di tempo, ad esempio dieci giorni. E poi genera i seguenti dati in file csv o xlsx: Spread medio per un periodo di tempo: 00:00 - 09:00 sul server, 09:00 - 18:00, 18:00 - 00:00 (per tutti i dieci giorni), spread massimo per questo tempo, spread minimo e spread medio della coppia di valute per l'intero periodo di dieci giorni. Sono davvero stanco di raccogliere questi dati manualmente.
So che ci sono programmi che lo fanno da soli... Ma voglio il mio, come allenamento. Forse gli intenditori rispettati possono dirmi da dove cominciare? Ed è possibile scrivere un programma del genere?
Grazie in anticipo a tutti coloro che hanno risposto e sono stati comprensivi con un nuovo arrivato.
Ciao a tutti. Forse qualcuno ha un pezzo di codice pronto. Ci sono 2 parametri, deposito=3000 e lotto 0.01 cioè con deposito 3000 il lotto sarà 0.01, ora rigorosamente al raddoppio cioè quando depo sarà 6000 il lotto sarà 0.02 a 9000 sarà 0.03 come fare?
Ciao a tutti. Forse qualcuno ha un pezzo di codice pronto. Ci sono 2 parametri, deposito=3000 e lotto 0.01 cioè con deposito 3000 il lotto sarà 0.01, ora rigorosamente al raddoppio cioè quando depo sarà 6000 il lotto sarà 0.02 a 9000 sarà 0.03 come fare?
Per favore aiutatemi a trovare un bug... Copio i valori delle barre (BarsCount) dal buffer dell'indicatore nello script, poi faccio un loop dei valori, rilevo un segnale e li stampo a Print(); sembra semplice, ma non è così facile... Ricevo tutti i segnali come volevo, tranne che per l'attraversamento della linea dello zero.
CROSSOVER_OR_REVERSE
Forse lo script non dovrebbe fare così? Ho allegato il codice e uno screenshot del log... Grazie mille!
//+------------------------------------------------------------------+//| B_O_P_Signals.mq5 |//| Copyright 2021, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2021, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+enum enMaTypes
{
ma_sma, // Simple moving average
ma_ema, // Exponential moving average
ma_smma, // Smoothed MA
ma_lwma // Linear weighted MA
};
inputint inpSmoothPeriod = 14; // Result smoothing periodinput enMaTypes inpSmoothMethod = ma_sma; // Result smoothing typeinputdouble inpLevelUp = 0.2; // Level upinputdouble inpLevelDown = -0.2; // Level downinputint BarsCount = 100;
double Mid_line[1] = {0.0};
int handle=0;
double TREND_VAL[];
voidOnStart()
{
handle = iCustom(_Symbol,PERIOD_CURRENT,"Balance of Market Power",inpSmoothPeriod,inpSmoothMethod,inpLevelUp,inpLevelDown);
CopyBuffer(handle,2,0,BarsCount,TREND_VAL);
ArraySetAsSeries(TREND_VAL,true);
string Signal ="";
for (int i=ArraySize(TREND_VAL)-1; i>=0; i--)
{
int k=1;
if(TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] > Mid_line[0] && TREND_VAL[i] > inpLevelUp)
Signal = "TREND_UP";
elseif (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] > Mid_line[0] && TREND_VAL[i] < inpLevelUp)
Signal = "TREND_UP_ROLLBACK_OR_FLAT";
elseif(TREND_VAL[i] >= Mid_line[0] && TREND_VAL[i+k] <= Mid_line[0])
Signal ="CROSSOVER_OR_REVERSE_UP";
elseif (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] < Mid_line[0] && TREND_VAL[i] < inpLevelDown)
Signal = "TREND_DN";
elseif (TREND_VAL[i] != EMPTY_VALUE && TREND_VAL[i] < Mid_line[0] && TREND_VAL[i] > inpLevelDown)
Signal = "TREND_DN_ROLLBACK_OR_FLAT";
elseif(TREND_VAL[i] < Mid_line[0] && TREND_VAL[i+k] > Mid_line[0])
Signal = "CROSSOVER_OR_REVERSE_DN";
else Signal = "UNKNOWN_SIGNAL";
Print(string(i),"_", Signal);
}
}
//+------------------------------------------------------------------+
Vladimir Karputov, e io?)
Non posso dirlo con certezza, ma prova 0.0
Aggiunto: Sembra che non si possa cancellare 'INDICATOR_MINIMUM' e 'INDICATOR_MAXIMUM' con MQL5.
Non posso dirlo con certezza, ma prova 0.0
Aggiunto: Sembra che 'INDICATOR_MINIMUM' e 'INDICATOR_MAXIMUM' non possano essere cancellati da MQL5.
Ahimè...
Grazie per la vostra risposta.
(stesso problema con i livelli, in realtà; ma risolto impostando il numero di livelli)
Ahimè...
Grazie per la risposta.
(Il problema con i livelli è in realtà lo stesso; ma si risolve impostando il numero di livelli)
Sperimentate e tutto si risolverà.
Ho confrontato le proprietà che il grafico salva (usando l'indicatore'Stochastic Oscillator' come esempio)
Questa è chiaramente una proprietà di tipo 'bool', ma non c'è accesso a questa proprietà dal linguaggio MQL5.
Ho confrontato le proprietà che il grafico salva (usando l'indicatore'Stochastic Oscillator' come esempio)
È chiaramente una proprietà di tipo 'bool' ma non c'è accesso a questa proprietà da MQL5.
Sì, ahimè.
Grazie ancora)
C'è un problema. Usando la funzione (vedi sotto), possiamo ottenere i valori di TakeProfit e StopLoss per ID di posizione dallo storico (cioè quando la posizione è già chiusa), questa funzione funziona in tempo reale, ma nel tester della strategia, non può trovare TakeProfit e StopLoss, perché non vede gli ordini storici che impostano stop (importante, gli stop sono impostati dopo l'apertura della posizione)
Domanda: Come posso usare lo Strategy Tester per trovare il TP/Loss per una posizione chiusa basata su un ticket?
Sto cercando di programmare EAs, e voglio iniziare scrivendo uno spread collector statistico.
Voglio dire, cosa vorrei che facesse? Nel tester, un EA si avvia e raccoglie dati sulla storia dei tick per un certo periodo di tempo, ad esempio dieci giorni.
E poi genera i seguenti dati in file csv o xlsx:
Spread medio per un periodo di tempo: 00:00 - 09:00 sul server, 09:00 - 18:00, 18:00 - 00:00 (per tutti i dieci giorni), spread massimo per questo tempo, spread minimo e spread medio della coppia di valute per l'intero periodo di dieci giorni.
Sono davvero stanco di raccogliere questi dati manualmente.
So che ci sono programmi che lo fanno da soli... Ma voglio il mio, come allenamento.
Forse gli intenditori rispettati possono dirmi da dove cominciare? Ed è possibile scrivere un programma del genere?
Grazie in anticipo a tutti coloro che hanno risposto e sono stati comprensivi con un nuovo arrivato.
Ciao a tutti. Forse qualcuno ha un pezzo di codice pronto. Ci sono 2 parametri, deposito=3000 e lotto 0.01 cioè con deposito 3000 il lotto sarà 0.01, ora rigorosamente al raddoppio cioè quando depo sarà 6000 il lotto sarà 0.02 a 9000 sarà 0.03 come fare?
Ciao a tutti. Forse qualcuno ha un pezzo di codice pronto. Ci sono 2 parametri, deposito=3000 e lotto 0.01 cioè con deposito 3000 il lotto sarà 0.01, ora rigorosamente al raddoppio cioè quando depo sarà 6000 il lotto sarà 0.02 a 9000 sarà 0.03 come fare?
È più o meno così:
Risultato:
Buon pomeriggio,
Per favore aiutatemi a trovare un bug... Copio i valori delle barre (BarsCount) dal buffer dell'indicatore nello script, poi faccio un loop dei valori, rilevo un segnale e li stampo a Print(); sembra semplice, ma non è così facile... Ricevo tutti i segnali come volevo, tranne che per l'attraversamento della linea dello zero.
CROSSOVER_OR_REVERSEForse lo script non dovrebbe fare così? Ho allegato il codice e uno screenshot del log... Grazie mille!