//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)if(rates_total<4) return0;
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.if(limit>1)
// если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории// если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,// при подгрузке истории и на первом запуске - перерасчёт всей истории
{
limit=rates_total-1;
// здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
}
//--- Расчёт индикатораfor(int i=limit; i>=0 && !IsStopped(); i--)
{
// необходимые действия по расчёту индикатора
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
In alcuni casi, per qualche motivo, il prezzo supera la dimensione di due cifre significative dopo il punto in entrambe le direzioni.
E questo avviene senza alcun errore di calcolo, è solo l'output del valore del prezzo dal grafico base tmp1[i]=close[i];
C'è un modo per risolvere il problema o semplicemente ignorarlo?
Va bene. Per stampare numeri frazionari, usate semplicemente DoubleToString() con la precisione richiesta. In questo caso la precisione richiesta dovrebbe essere Digits()
In alcuni casi, per qualche motivo, il prezzo supera la dimensione di due cifre significative dopo il punto in entrambe le direzioni.
E questo accade senza alcun errore di calcolo, è solo l'output del valore del prezzo dal grafico base tmp1[i]=close[i];
Si può sconfiggere questo in qualche modo o semplicemente ignorarlo?
Questi sono valori normali per un numero reale. si può imparare a scrivere programmi, tutti iniziano lì - basta leggere molto e provare a scrivere e scrivere i propri codici.
L'accuratezza del numero reale, la mantissa, e il modo in cui è tutto immagazzinato nella memoria, puoi cercarlo su Google sul web, i principi di memorizzazione sono gli stessi ovunque.
questi sono valori normali per un numero reale, si può imparare a scrivere programmi, tutti iniziano lì - basta leggere molto e provare a scrivere e scrivere i propri codici
L'accuratezza del numero reale, la mantissa, e il modo in cui è tutto immagazzinato nella memoria, puoi cercarlo su Google sul web, i principi di memorizzazione sono gli stessi ovunque.
se volete un bell'output, usate DoubleToStr()
Quando è possibile utilizzare funzioni compatibili, è meglio offrirle per l'uso. Altrimenti questa epopea ricomincerà da capo. In questo caso: DoubleToString()
Come si può evitare che l'EA funzioni sugli stessi strumenti?
Per esempio, l'EA funziona nella finestra eur/usd, ma quando viene eseguito in altre finestre su eur/usd viene visualizzato qualche messaggio di avviso. Vi sarò molto grato per l'aiuto.
Come si può evitare che l'EA funzioni sugli stessi strumenti?
Per esempio, l'EA funziona nella finestra eur/usd, ma quando viene eseguito in altre finestre su eur/usd viene visualizzato qualche messaggio di avviso. Sarò molto grato per l'aiuto.
Hai bisogno di trasferire dati da un EA a un altro, cerca nel forum
o usare le variabili globali del terminale (questo è il modo più semplice) - lì si può scrivere il valore del primo EA, e le copie successive dell'EA leggeranno questo valore e non verranno eseguitehttps://www.mql5.com/ru/docs/globals
Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной.
hai bisogno di trasferire dati da un EA a un altro, cerca nel forum
o usare le variabili globali del terminale (questo è il modo più semplice) - lì si può scrivere il valore del primo EA, e le copie successive dell'EA leggeranno questo valore e non verranno eseguitehttps://www.mql5.com/ru/docs/globals
l'EA è lo stesso, è necessario proibirgli di funzionare sugli stessi strumenti
gans71: l'EA è lo stesso, non dovresti permettergli di funzionare sugli stessi simboli
e? non avresti potuto studiare la guida in 2 minuti
Se stai parlando specificamente di come passare una stringa a una variabile globale, l'unico modo è creare un nome per la variabile globale, cioè nel tuo caso esegui un EA su EURUSD, fai un controllo
if(GlobalVariableCheck(_Symbol)) .....
Se non c'è una tale variabile, allora createne una sovradimensionata, come questa
if(GlobalVariableSet(_Symbol,Magic)==0) Print("Error writing to global variable # ",GetLastError());
poi al completamento dell'Expert Advisor, cancellare la variabile glob.variable
così com'è, il terminale non è a portata di mano, e ho tipo indicato la direzione di ricerca
Dopo le ultime risposte il quadro è diventato più chiaro e il più ovvio è che non sono destinato a diventare un programmatore :-)
Finora ho iniziato con l'elenco più semplice e questo è quello che si è rivelato:
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.099999999999999999 2018.10.15 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999999999 2018.10.16 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00
In alcuni casi, per qualche motivo, il prezzo supera la dimensione di due cifre significative dopo il punto in entrambe le direzioni.
E questo avviene senza alcun errore di calcolo, è solo l'output del valore del prezzo dal grafico base tmp1[i]=close[i];
C'è un modo per risolvere il problema o semplicemente ignorarlo?
Si può togliere da esso tutto ciò che è rilevante per il cinque, e ottenere un modello per il quattro.
Questo può essere scritto da qualcuno che conosce la differenza tra un cinque e un quattro, e sicuramente non sono io :-)
Da dove viene il numero 4, qual è il suo significato sacro?
Questo può essere scritto da qualcuno che conosce la differenza tra un cinque e un quattro, e sicuramente non sono io :-)
Da dove viene il numero 4, che significato sacro ha?
Certamente non ascolti o leggi... Lo ero:
Forum sul trading, sistemi di trading automatico e test di strategia
Qualsiasi domanda, assistenza e discussione su algoritmi e codici per i principianti di MQL4
Artyom Trishkin, 2018.10.18 09:26
Dopo le ultime risposte il quadro è diventato più chiaro e il più ovvio è che non sono destinato a diventare un programmatore :-)
Finora ho iniziato con l'elenco più semplice e questo è quello che si è rivelato:
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.099999999999999999 2018.10.15 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999999999 2018.10.16 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00
In alcuni casi, per qualche motivo, il prezzo supera la dimensione di due cifre significative dopo il punto in entrambe le direzioni.
E questo avviene senza alcun errore di calcolo, è solo l'output del valore del prezzo dal grafico base tmp1[i]=close[i];
C'è un modo per risolvere il problema o semplicemente ignorarlo?
Va bene. Per stampare numeri frazionari, usate semplicemente DoubleToString() con la precisione richiesta. In questo caso la precisione richiesta dovrebbe essere Digits()
Dopo le ultime risposte il quadro è diventato più chiaro e il più ovvio è che non sono destinato a diventare un programmatore :-)
Finora ho iniziato con l'elenco più semplice e questo è quello che si è rivelato:
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.099999999999999999 2018.10.15 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999999999 2018.10.16 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00
In alcuni casi, per qualche motivo, il prezzo supera la dimensione di due cifre significative dopo il punto in entrambe le direzioni.
E questo accade senza alcun errore di calcolo, è solo l'output del valore del prezzo dal grafico base tmp1[i]=close[i];
Si può sconfiggere questo in qualche modo o semplicemente ignorarlo?
Questi sono valori normali per un numero reale. si può imparare a scrivere programmi, tutti iniziano lì - basta leggere molto e provare a scrivere e scrivere i propri codici.
L'accuratezza del numero reale, la mantissa, e il modo in cui è tutto immagazzinato nella memoria, puoi cercarlo su Google sul web, i principi di memorizzazione sono gli stessi ovunque.
se volete un bell'output usate DoubleToStr()
questi sono valori normali per un numero reale, si può imparare a scrivere programmi, tutti iniziano lì - basta leggere molto e provare a scrivere e scrivere i propri codici
L'accuratezza del numero reale, la mantissa, e il modo in cui è tutto immagazzinato nella memoria, puoi cercarlo su Google sul web, i principi di memorizzazione sono gli stessi ovunque.
se volete un bell'output, usate DoubleToStr()
Quando è possibile utilizzare funzioni compatibili, è meglio offrirle per l'uso. Altrimenti questa epopea ricomincerà da capo. In questo caso: DoubleToString()
Come si può evitare che l'EA funzioni sugli stessi strumenti?
Per esempio, l'EA funziona nella finestra eur/usd, ma quando viene eseguito in altre finestre su eur/usd viene visualizzato qualche messaggio di avviso. Vi sarò molto grato per l'aiuto.
Come si può evitare che l'EA funzioni sugli stessi strumenti?
Per esempio, l'EA funziona nella finestra eur/usd, ma quando viene eseguito in altre finestre su eur/usd viene visualizzato qualche messaggio di avviso. Sarò molto grato per l'aiuto.
Hai bisogno di trasferire dati da un EA a un altro, cerca nel forum
o usare le variabili globali del terminale (questo è il modo più semplice) - lì si può scrivere il valore del primo EA, e le copie successive dell'EA leggeranno questo valore e non verranno eseguitehttps://www.mql5.com/ru/docs/globals
hai bisogno di trasferire dati da un EA a un altro, cerca nel forum
o usare le variabili globali del terminale (questo è il modo più semplice) - lì si può scrivere il valore del primo EA, e le copie successive dell'EA leggeranno questo valore e non verranno eseguitehttps://www.mql5.com/ru/docs/globals
l'EA è lo stesso, non dovresti permettergli di funzionare sugli stessi simboli
e? non avresti potuto studiare la guida in 2 minuti
Se stai parlando specificamente di come passare una stringa a una variabile globale, l'unico modo è creare un nome per la variabile globale, cioè nel tuo caso esegui un EA su EURUSD, fai un controllo
if(GlobalVariableCheck(_Symbol)) .....
Se non c'è una tale variabile, allora createne una sovradimensionata, come questa
if(GlobalVariableSet(_Symbol,Magic)==0) Print("Error writing to global variable # ",GetLastError());
poi al completamento dell'Expert Advisor, cancellare la variabile glob.variable
così com'è, il terminale non è a portata di mano, e ho tipo indicato la direzione di ricerca