Bei einem gleitenden Zählalgorithmus sind zu Beginn nur zwei DBL_MAX-Preise erforderlich , damit der gesamte Puffer zu INF
DBL_MAX + DBL_MAX = INF
und dann wird die INF den Berechnungen nicht mehr entgehen
Diese Variante ist recht wahrscheinlich, da die DBL_MAX mit Werten unterhalb des MAA-Zeitraums gefüllt ist. Dann gibt es einen Fehler im rekurrenten Algorithmus Durchschnitt - MODE_SMA.
Es ist so! Ich habe einige Änderungen vorgenommen und es funktioniert!
// Вычисляем Машку от Машки через хэндл самого себя#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));
}
Man kann mit Sicherheit sagen, dass der rekurrente Algorithmus iMA den Fall nicht berücksichtigt, dass DBL_MAX an den Eingang gegeben wird. Fehler.
Warum wird die Auftrags-/Vorgangsnummer nicht in einem Pop-up-Fenster angezeigt, wenn man mit der Maus darüberfährt? Ich habe schon vor tausend Jahren danach gefragt, es fehlt so sehr!
Solche Konstruktionen sollten vermieden werden. Die Reihenfolge, in der die Operanden ausgeführt werden, ist in C++ nicht geregelt, so dass die Entscheidung darüber dem jeweiligen Compiler überlassen bleibt. Eine Ausnahme bilden die Operatoren && und ||, bei denen die Operanden immer von links nach rechts ausgeführt werden.
Solche Konstruktionen sollten vermieden werden. Die Reihenfolge, in der die Operanden ausgeführt werden, ist in C++ nicht geregelt, so dass die Entscheidung darüber dem jeweiligen Compiler überlassen bleibt. Die Ausnahmen sind && und ||, wo die Operanden immer von links nach rechts ausgeführt werden.
Hallo. Können Sie mir bitte sagen, welche Funktionen verwendet werden können, um die Liste der im Diagramm angezeigten Indikatoren und deren Parameter zu erhalten? Ich habe nur eine Funktion gefunden, die die Anzahl der Indikatoren im Diagramm zurückgibt
У каждого графика можно посмотреть списки наложенных объектов: индикаторов, аналитических объектов и советников. Там же можно можно редактировать их свойства и удалять их с графика. Список индикаторов Индикаторы сгруппированы на наложенные на основное окно графика и на те, что открыты в отдельных окнах. Выберите индикатор и нажмите "Свойства...
Hallo. Können Sie mir bitte sagen, welche Funktionen verwendet werden können, um die Liste der im Diagramm angezeigten Indikatoren und deren Parameter zu erhalten? Ich habe nur die Funktion gefunden, die die Anzahl der Indikatoren im Diagramm zurückgibt
Einstellung der Präprozessor-Direktiven in einer Zeile - wird aber bald abgeschaltet.
Ausführung der Operanden von links nach rechts.
OrderSend ist zu 99% mit der Handelsumgebung synchronisiert.
ChartApplyTemplate ist asynchron.
Und es gibt noch eine Menge anderer undokumentierter Feinheiten. Und dann gibt es Fälle, in denen die Dokumentation nicht mit der Realität übereinstimmt. Und das ist kein Fehler, sondern ein seltener Fehler, der einfach nicht erwähnt wird.
Der Präzedenzfall war eine Casting-Absage, aber es gab einen Grund dafür.
Etwas nicht zu verwenden, nur weil es nicht beschrieben ist, ist also eine fragwürdige Entscheidung.
Ich denke, dass ein solcher Code keine Zweifel bei den Programmierern hervorrufen würde.
int Replace( double &Array[], int );
return(prev_calculated + Replace(Buffer, CopyBuffer(handleMA, 0, prev_calculated, rates_total - prev_calculated, Buffer)));
Aber es ist nicht sehr schön. Es ist sinnvoll, MyCopyBuffer zu schreiben, aber es ist hässlich, in einem kurzen Code zu zeigen, dass man es braucht, um einen Fehler zu vermeiden. Die Verwendung einer undokumentierten Ausführungspriorität für Operanden ist also genau das Richtige, um zu zeigen, dass dies eine vorübergehende Lösung ist.
Der gesamte CopyBuffer ist dort INF.
Bei einem gleitenden Zählalgorithmus reichen bereits zwei DBL_MAX-Preise am Anfang aus , um den gesamten Puffer zu INF
DBL_MAX + DBL_MAX = INF
und dann wird INF die Berechnung nicht verlassen
Sie sollten den Code aller Indikatoren so ändern, dass EMPTY_VALUE ignoriert wird.Bei einem gleitenden Zählalgorithmus sind zu Beginn nur zwei DBL_MAX-Preise erforderlich , damit der gesamte Puffer zu INF
DBL_MAX + DBL_MAX = INF
und dann wird die INF den Berechnungen nicht mehr entgehen
Diese Variante ist recht wahrscheinlich, da die DBL_MAX mit Werten unterhalb des MAA-Zeitraums gefüllt ist. Dann gibt es einen Fehler im rekurrenten Algorithmus Durchschnitt - MODE_SMA.
Es ist so! Ich habe einige Änderungen vorgenommen und es funktioniert!
Man kann mit Sicherheit sagen, dass der rekurrente Algorithmus iMA den Fall nicht berücksichtigt, dass DBL_MAX an den Eingang gegeben wird. Fehler.
@A100, Danke!
MetaEditor bleibt beim Versuch, eine angehängte Datei zu kompilieren, hängen
Wenn er sich nicht sofort aufhängt, warten Sie eine Weile oder gehen Sie in die Zusammenfassungszeile und sehen Sie sich die Kompilierungszeit an
Warum wird die Auftrags-/Vorgangsnummer nicht in einem Pop-up-Fenster angezeigt, wenn man mit der Maus darüberfährt? Ich habe schon vor tausend Jahren danach gefragt, es fehlt so sehr!
Solche Konstruktionen sollten vermieden werden. Die Reihenfolge, in der die Operanden ausgeführt werden, ist in C++ nicht geregelt, so dass die Entscheidung darüber dem jeweiligen Compiler überlassen bleibt. Eine Ausnahme bilden die Operatoren && und ||, bei denen die Operanden immer von links nach rechts ausgeführt werden.
Solche Konstruktionen sollten vermieden werden. Die Reihenfolge, in der die Operanden ausgeführt werden, ist in C++ nicht geregelt, so dass die Entscheidung darüber dem jeweiligen Compiler überlassen bleibt. Die Ausnahmen sind && und ||, wo die Operanden immer von links nach rechts ausgeführt werden.
Nun, wir sind in MQL!
Nun, wir sind in MQL!
Nirgendwo in der Dokumentation steht etwas über eine bestimmte Reihenfolge. Sie können sie also jederzeit nach eigenem Ermessen ändern.
Ich habe mich bereits einmal mit dem Kundendienst in Verbindung gesetzt, um dieses Problem zu klären.
Hallo. Können Sie mir bitte sagen, welche Funktionen verwendet werden können, um die Liste der im Diagramm angezeigten Indikatoren und deren Parameter zu erhalten? Ich habe nur eine Funktion gefunden, die die Anzahl der Indikatoren im Diagramm zurückgibt
Hallo. Können Sie mir bitte sagen, welche Funktionen verwendet werden können, um die Liste der im Diagramm angezeigten Indikatoren und deren Parameter zu erhalten? Ich habe nur die Funktion gefunden, die die Anzahl der Indikatoren im Diagramm zurückgibt
IndikatorParameter (+ IndicatorRelease)
Nirgendwo in der Dokumentation steht etwas über eine bestimmte Reihenfolge. Sie können sie also jederzeit nach eigenem Ermessen ändern.
Ich kümmere mich nicht darum. Es gibt eine Menge Dinge, die dort nicht beschrieben sind.
Ohne lange nachzudenken
Der Präzedenzfall war eine Casting-Absage, aber es gab einen Grund dafür.
Etwas nicht zu verwenden, nur weil es nicht beschrieben ist, ist also eine fragwürdige Entscheidung.
Ich denke, dass ein solcher Code keine Zweifel bei den Programmierern hervorrufen würde.
Aber es ist nicht sehr schön. Es ist sinnvoll, MyCopyBuffer zu schreiben, aber es ist hässlich, in einem kurzen Code zu zeigen, dass man es braucht, um einen Fehler zu vermeiden. Die Verwendung einer undokumentierten Ausführungspriorität für Operanden ist also genau das Richtige, um zu zeigen, dass dies eine vorübergehende Lösung ist.