C-4: Cosa intende per 'allineare'? Normalizzare la mantissa per il numero di cifre decimali? - Ecco a cosa serve la funzione NormalizeDouble. Se c'è qualcos'altro, descrivilo in modo più dettagliato.
In ingresso qualsiasi doppio positivo, in uscita arrotondato al prezzo reale che può essere a questo strumento.
Se il passo di prezzo è 0,25, allora arrotonda a 0,25. Più o meno così:
Ma detto questo, se c'è un offset (come 0,13; 0,38; 0,63; 0,88), allora conta. Allora:
sull'ingresso 1.0 sull'uscita 1.13;
1,25 come ingresso e 1,38 come uscita;
1,5 ---> 1,63...
A livello di API, questo potrebbe essere codificato in un paio di comandi in linguaggio assembly ed è chiaramente una funzione di base. Pensavo ce ne fosse uno =/
Grazie per la risposta, faccio trading dal vivo e la MT5 è sempre attiva. Non sono sicuro se si aggiornerà automaticamente, ma se non è così, dov'è l'aggiornamento dal vivo?
Newalligator: Grazie per la risposta, faccio trading dal vivo e la MT5 è sempre attiva. Se il programma stesso mi chiede di aggiornare, va bene, ma se non lo fa, dov'è questo aggiornamento Live?
Quando ti connetti al tuo conto sul server MetaQuotes-Demo, la MetaTrader controllerà automaticamente gli aggiornamenti. Se c'è un aggiornamento, scaricherà automaticamente la nuova versione.
Buongiorno a tutti, c'è un problema: non posso usare le letture di un altro indicatore personalizzato in un indicatore personalizzato. Sono quasi sicuro che sto sbagliando, ma incollerò comunque il codice:
intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &price[]) {
if(rates_total < iPeriod ) {
return(0);
}
int first;
if ( prev_calculated == 0 ) {
first = iPeriod + begin;
} else {
first = prev_calculated - 1;
}
// Пользовательский индикатор ROC для EURUSD double aRocRatesEURUSD[];
int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC");
CopyBuffer(iRocHandleEURUSD, 0, 0, rates_total, aRocRatesEURUSD);
for(int bar = first; bar < rates_total; bar++) {
In questo codice, il buffer dell'indicatore Rate Of Changes(aRocRatesEURUSD) non è disponibile. Non capisco come collegare correttamente questo indicatore, per favore aiutatemi a capirlo.
C'è un problema: non posso usare le letture di un altro indicatore personalizzato in un indicatore personalizzato. Sono quasi sicuro che sto sbagliando, ma incollerò comunque il codice:
In questo codice, il buffer dell'indicatore Rate Of Changes(aRocRatesEURUSD) non è disponibile. Non riesco a capire come collegare correttamente questo indicatore, per favore aiutatemi a capirlo.
Le maniglie degli indicatori devono essere dichiarate in OnInit():
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
// Пользовательский индикатор ROC для EURUSD double aRocRatesEURUSD[];
int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC");
}
Altrimenti, risulta che si crea un nuovo indicatore personalizzato ogni volta che si chiama OnCalculate().
jommerbot: Anche questo non funziona. Come risultato, l'array con il buffer è vuoto o pieno di valori di sinistra.
Tuttavia, è corretto dichiarare le maniglie degli indicatori in OnInit(). Un'altra questione è perché dovete scrivere ogni volta che arriva un nuovo tick (la funzione OnCalculate())
rates_total, // размер входных таймсерий
al buffer
aRocRatesEURUSD
? Questo può davvero rallentare il terminale. E poi, è una storia molto profonda.
#property indicator_chart_window#property indicator_buffers1#property indicator_plots1#property indicator_type1 DRAW_LINE#property indicator_color1 Red
double ExtLineBuffer[];
int iRocHandleEURUSD;
int iPlotShift = 0;
int iPeriod = 6;
voidOnInit() {
SetIndexBuffer(0, ExtLineBuffer, INDICATOR_DATA);
PlotIndexSetInteger(0, PLOT_SHIFT, iPlotShift);
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, iPeriod - 1);
int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC");
if( iRocHandleEURUSD == INVALID_HANDLE )
{
Print("Не удалось получить хендл индикатора ROC EURUSD");
}
}
intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &price[]) {
if(rates_total < iPeriod ) {
return(0);
}
int first;
double aRocRatesEURUSD[];
if ( prev_calculated == 0 ) {
first = iPeriod + begin;
} else {
first = prev_calculated - 1;
}
for(int bar = first; bar < rates_total; bar++) {
CopyBuffer(iRocHandleEURUSD, 0, bar, 1, aRocRatesEURUSD);
Print(aRocRatesEURUSD[ 0 ]);
ExtLineBuffer[ bar ] = NormalizeDouble(aRocRatesEURUSD[ 0 ], SYMBOL_DIGITS);
}
return(rates_total);
}
Non capisco dove sia il mio errore. Copiare lo stesso buffer dell'indicatore nell'EA e nello script funziona, ma non nell'indicatore. La maniglia dell'indicatore viene inizializzata senza errori.
Cosa intende per 'allineare'? Normalizzare la mantissa per il numero di cifre decimali? - Ecco a cosa serve la funzione NormalizeDouble. Se c'è qualcos'altro, descrivilo in modo più dettagliato.
In ingresso qualsiasi doppio positivo, in uscita arrotondato al prezzo reale che può essere a questo strumento.
Se il passo di prezzo è 0,25, allora arrotonda a 0,25. Più o meno così:
Ma detto questo, se c'è un offset (come 0,13; 0,38; 0,63; 0,88), allora conta. Allora:
sull'ingresso 1.0 sull'uscita 1.13;
1,25 come ingresso e 1,38 come uscita;
1,5 ---> 1,63...
A livello di API, questo potrebbe essere codificato in un paio di comandi in linguaggio assembly ed è chiaramente una funzione di base. Pensavo ce ne fosse uno =/
come fare un aggiornamento alla nuova build tramite Live update. Dov'è questo aggiornamento dal vivo
Grazie per la risposta, faccio trading dal vivo e la MT5 è sempre attiva. Se il programma stesso mi chiede di aggiornare, va bene, ma se non lo fa, dov'è questo aggiornamento Live?
Buongiorno a tutti, c'è un problema: non posso usare le letture di un altro indicatore personalizzato in un indicatore personalizzato. Sono quasi sicuro che sto sbagliando, ma incollerò comunque il codice:
In questo codice, il buffer dell'indicatore Rate Of Changes(aRocRatesEURUSD) non è disponibile. Non capisco come collegare correttamente questo indicatore, per favore aiutatemi a capirlo.
C'è un problema: non posso usare le letture di un altro indicatore personalizzato in un indicatore personalizzato. Sono quasi sicuro che sto sbagliando, ma incollerò comunque il codice:
In questo codice, il buffer dell'indicatore Rate Of Changes(aRocRatesEURUSD) non è disponibile. Non riesco a capire come collegare correttamente questo indicatore, per favore aiutatemi a capirlo.
Le maniglie degli indicatori devono essere dichiarate in OnInit():
Altrimenti, risulta che si crea un nuovo indicatore personalizzato ogni volta che si chiama OnCalculate().Le maniglie degli indicatori dovrebbero essere dichiarate in OnInit():
Anche questo non funziona. Come risultato, l'array con il buffer è vuoto o pieno di valori di sinistra.
rates_total, // размер входных таймсерийal buffer
? Questo può davvero rallentare il terminale. E poi, è una storia molto profonda.
Penso che troverete interessante leggere l'articoloI principi del ricalcolo economico degli indicatori
E leggete anche l'aiuto sulla funzione OnCalculate().
Ok, anche nel caso più semplice non funziona:
Non capisco dove sia il mio errore. Copiare lo stesso buffer dell'indicatore nell'EA e nello script funziona, ma non nell'indicatore. La maniglia dell'indicatore viene inizializzata senza errori.