Con un algoritmo di conteggio a scorrimento, solo due prezzi DBL_MAX sono necessari all'inizio per far sì che l'intero buffer diventi INF
DBL_MAX + DBL_MAX = INF
e allora INF non sfuggirà più ai calcoli
Questa variante è abbastanza probabile perché è DBL_MAX che si riempie di valori inferiori al periodo MAA. Allora c'è un bug nella media dell'algoritmo ricorrente - MODE_SMA.
È così! Ho fatto alcune modifiche e funziona!
// Вычисляем Машку от Машки через хэндл самого себя#property indicator_separate_window#property indicator_buffers1#property indicator_plots1#property indicator_type1 DRAW_LINE#property indicator_color1 clrRed#property indicator_style1 STYLE_SOLID#property indicator_width1 1inputbool CustomData = false; // true - кастомный режим для iCustominputint MAPeriod = 1 e1; // Период МАшкиstring GetMyName( void )
{
constint Length = StringLen(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Indicators\\");
conststring Path = MQLInfoString(MQL_PROGRAM_PATH);
return(StringSubstr(Path, Length, StringLen(Path) - Length - 4));
}
double Buffer[];
constbool Init = SetIndexBuffer(0, Buffer, INDICATOR_DATA);
constint handleMA = CustomData ? iMA(NULL, PERIOD_CURRENT, 100, 0, MODE_SMA, PRICE_OPEN) // от этой МАшки будет брать другую Машку, но не напрямую, а кастомно
: iMA(NULL, PERIOD_CURRENT, MAPeriod, 0, MODE_SMA, iCustom(_Symbol, PERIOD_CURRENT, GetMyName(), true));
int Replace( double &Array[], constdouble NewValue = 1 e3, constdouble PrevValue = EMPTY_VALUE )
{
for (int i = ArraySize(Array) - 1; i >= 0; i--)
if (Array[i] == PrevValue)
Array[i] = NewValue;
return(0);
}intOnCalculate( constint rates_total, // размер входных таймсерий constint prev_calculated, // обработано баров на предыдущем вызовеconstdatetime& time[], // Time constdouble& open[], // Open constdouble& high[], // High constdouble& low[], // Low constdouble& close[], // Close constlong& tick_volume[], // Tick Volume constlong& volume[], // Real Volume constint& spread[] ) // Spread
{
return(prev_calculated + CopyBuffer(handleMA, 0, prev_calculated, rates_total - prev_calculated, Buffer) + Replace(Buffer));
}
Si può affermare con certezza che l'algoritmo ricorrente iMA non prende in considerazione il caso in cui DBL_MAX è alimentato all'ingresso. Bug.
Questi costrutti dovrebbero essere evitati. L'ordine di esecuzione degli operandi non è regolato in C++, quindi sta al compilatore individuale decidere. Le eccezioni sono gli operatori && e ||, dove gli operandi sono sempre eseguiti da sinistra a destra.
Questi costrutti dovrebbero essere evitati. L'ordine in cui gli operandi vengono eseguiti in C++ non è regolato, quindi sta al compilatore individuale decidere. Le eccezioni sono gli operatori && e ||, dove gli operandi sono sempre eseguiti da sinistra a destra.
Da nessuna parte nella documentazione si dice qualcosa di specifico su un ordine particolare. Quindi possono cambiarlo come meglio credono in qualsiasi momento.
Ho già contattato il service-desk una volta per chiarire questo problema.
Salve. Potete dirmi quali funzioni possono essere utilizzate per ottenere l'elenco degli indicatori visualizzati sul grafico e i loro parametri? Ho trovato solo una funzione che restituisce il numero di indicatori sul grafico
У каждого графика можно посмотреть списки наложенных объектов: индикаторов, аналитических объектов и советников. Там же можно можно редактировать их свойства и удалять их с графика. Список индикаторов Индикаторы сгруппированы на наложенные на основное окно графика и на те, что открыты в отдельных окнах. Выберите индикатор и нажмите "Свойства...
Salve. Potete dirmi quali funzioni possono essere utilizzate per ottenere l'elenco degli indicatori visualizzati sul grafico e i loro parametri? Ho trovato solo la funzione che restituisce il numero di indicatori nel grafico
Da nessuna parte nella documentazione si dice qualcosa di specifico su un ordine particolare. Quindi possono cambiarlo come meglio credono in qualsiasi momento.
Non mi preoccupo di questo. Ci sono molte cose che non sono descritte lì.
Sulla cima della mia testa
Ordinamento dei record della cronologia di trading in base al tempo in MT4/5.
Impostazione delle direttive del preprocessore in una riga - presto però sarà disabilitata.
Esecuzione degli operandi da sinistra a destra.
OrderSend è sincronizzato al 99% con l'ambiente di trading.
ChartApplyTemplate è asincrono.
E ci sono molte altre sottigliezze non documentate. E poi ci sono casi in cui la documentazione non corrisponde alla realtà. E questo non è un bug, ma un bug raro che semplicemente non viene menzionato.
Il precedente era un rifiuto del casting, ma c'era una ragione.
Quindi non usare qualcosa solo perché non è descritto è una decisione discutibile.
Penso che tale codice non causerebbe dubbi ai programmatori.
int Replace( double &Array[], int );
return(prev_calculated + Replace(Buffer, CopyBuffer(handleMA, 0, prev_calculated, rates_total - prev_calculated, Buffer)));
Tuttavia, non è molto bello. Ha senso scrivere MyCopyBuffer ma è brutto mostrare in un breve codice che ne avete bisogno per evitare un bug. Quindi l'uso della priorità di esecuzione degli operandi non documentata è giusto per mostrare che questa è una soluzione temporanea.
L'intero CopyBuffer è INF lì.
Con un algoritmo di conteggio a scorrimento, solo due prezzi DBL_MAX sono sufficienti all'inizio per rendere l'intero buffer INF
DBL_MAX + DBL_MAX = INF
e poi INF non lascerà il calcolo
Dovresti cambiare il codice di tutti gli indicatori per ignorare EMPTY_VALUECon un algoritmo di conteggio a scorrimento, solo due prezzi DBL_MAX sono necessari all'inizio per far sì che l'intero buffer diventi INF
DBL_MAX + DBL_MAX = INF
e allora INF non sfuggirà più ai calcoli
Questa variante è abbastanza probabile perché è DBL_MAX che si riempie di valori inferiori al periodo MAA. Allora c'è un bug nella media dell'algoritmo ricorrente - MODE_SMA.
È così! Ho fatto alcune modifiche e funziona!
Si può affermare con certezza che l'algoritmo ricorrente iMA non prende in considerazione il caso in cui DBL_MAX è alimentato all'ingresso. Bug.
@A100, grazie!
MetaEditor si blocca quando si cerca di compilare un file allegato
Se non si blocca subito, aspetta un po' o vai alla riga di riepilogo e vedi il tempo di compilazione
Perché non mostrare il numero dell'ordine/transazione in una finestra pop-up quando si passa con il mouse? L'ha chiesto mille anni fa, è così carente!
Questi costrutti dovrebbero essere evitati. L'ordine di esecuzione degli operandi non è regolato in C++, quindi sta al compilatore individuale decidere. Le eccezioni sono gli operatori && e ||, dove gli operandi sono sempre eseguiti da sinistra a destra.
Questi costrutti dovrebbero essere evitati. L'ordine in cui gli operandi vengono eseguiti in C++ non è regolato, quindi sta al compilatore individuale decidere. Le eccezioni sono gli operatori && e ||, dove gli operandi sono sempre eseguiti da sinistra a destra.
Bene, siamo in MQL!
Beh, siamo in MQL!
Da nessuna parte nella documentazione si dice qualcosa di specifico su un ordine particolare. Quindi possono cambiarlo come meglio credono in qualsiasi momento.
Ho già contattato il service-desk una volta per chiarire questo problema.
Salve. Potete dirmi quali funzioni possono essere utilizzate per ottenere l'elenco degli indicatori visualizzati sul grafico e i loro parametri? Ho trovato solo una funzione che restituisce il numero di indicatori sul grafico
Salve. Potete dirmi quali funzioni possono essere utilizzate per ottenere l'elenco degli indicatori visualizzati sul grafico e i loro parametri? Ho trovato solo la funzione che restituisce il numero di indicatori nel grafico
IndicatoreParametri (+ IndicatoreRilascio)
Da nessuna parte nella documentazione si dice qualcosa di specifico su un ordine particolare. Quindi possono cambiarlo come meglio credono in qualsiasi momento.
Non mi preoccupo di questo. Ci sono molte cose che non sono descritte lì.
Sulla cima della mia testa
Il precedente era un rifiuto del casting, ma c'era una ragione.
Quindi non usare qualcosa solo perché non è descritto è una decisione discutibile.
Penso che tale codice non causerebbe dubbi ai programmatori.
Tuttavia, non è molto bello. Ha senso scrivere MyCopyBuffer ma è brutto mostrare in un breve codice che ne avete bisogno per evitare un bug. Quindi l'uso della priorità di esecuzione degli operandi non documentata è giusto per mostrare che questa è una soluzione temporanea.