Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Vielleicht sollten sich die Entwickler mit dem Problem der Initialisierung von Indikatorpuffern befassen? Warum gibt es ein solches Problem nicht in MT4? Vielleicht ist es nicht das volle Verständnis? Das Problem ist, dass selbst nach der obligatorischen Initialisierung von Puffern, nachdem ein Indikator aus einem Diagramm in JEDEM von ihnen genommen wurde, nicht alle Puffer Müll enthalten, und Sie können ihn nicht aus ihnen herausholen...
Ich persönlich habe nichts gegen Krücken, aber nur, wenn diese Krücken nicht zu kompliziert sind und eine positive Wirkung haben. Aber in eine Datei zu schreiben und sie dann zu lesen, ist eine faule Krücke.
Wie stellen Sie sich das vor: "...nach dem Entfernen des Indikators aus dem Diagramm in einigen, nicht allen Puffern..."? Auf welche Weise haben Sie nach dem Löschen des Indikators aus dem Diagramm Zugriff auf seine Indikatorpuffer?
Lassen Sie uns versuchen, das Problem im Detail zu finden. Sie brauchen einen Standardsatz: Code + was Sie getan haben + was Sie bekommen haben...
Wie stellen Sie sich das vor: "...nach dem Entfernen des Indikators aus dem Diagramm in einigen, nicht allen Puffern..."? Auf welche Weise haben Sie nach dem Entfernen des Indikators aus dem Diagramm Zugang zu seinen Indikatorpuffern?
Lassen Sie uns versuchen, das Problem im Detail zu finden. Sie brauchen einen Standardsatz: Code + was Sie getan haben + was Sie bekommen haben...
Reine Vermutung: Es kann sein, dass er beim aktuellen Pufferzugriff in denselben Speicherbereich gelangt, der von den vorherigen Puffern belegt war.
Ich habe nicht in das Gespräch, nicht treten, Alexey will die Daten in Puffern zu bleiben bei Neustart (on / off-Schalter des Terminals) oder nur, wenn prev_calculated = 0 (im Falle, wenn prev_calculated > 0 früher)?
Wie stellen Sie sich das vor: "...nach dem Entfernen des Indikators aus dem Diagramm in einigen, nicht allen Puffern..."? Auf welche Weise haben Sie nach dem Entfernen des Indikators aus dem Diagramm Zugang zu seinen Indikatorpuffern?
Lassen Sie uns versuchen, das Problem im Detail zu finden. Sie brauchen einen Standardsatz: Code + was Sie getan haben + was Sie bekommen haben...
Hier ist der Code des Indikators
| BalansEquityTest.mq5 |
| Viktorov |
| v4forex@yandex.ru |
\********************************************************************/
#property copyright "Viktorov"
#property link "v4forex@yandex.ru"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots 3
#property indicator_type1 DRAW_COLOR_LINE
#property indicator_color1 clrGold, clrGreen, clrRed
#property indicator_width1 2
#property indicator_label1 "Balance"
#property indicator_type2 DRAW_HISTOGRAM2
#property indicator_color2 clrCrimson
#property indicator_width2 2
#property indicator_label2 "EquityMin"
#property indicator_type3 DRAW_HISTOGRAM2
#property indicator_color3 clrDarkViolet
#property indicator_width3 2
#property indicator_label3 "EquityMax"
double balance[];
double clrBalance[];
double equityMaxB[];
double equityMinB[];
double equityMax[];
double equityMin[];
double maxEquity, minEquity;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0, balance, INDICATOR_DATA);
SetIndexBuffer(1, clrBalance, INDICATOR_COLOR_INDEX);
SetIndexBuffer(2, equityMin, INDICATOR_DATA);
SetIndexBuffer(3, equityMinB, INDICATOR_DATA);
SetIndexBuffer(4, equityMax, INDICATOR_DATA);
SetIndexBuffer(5, equityMaxB, INDICATOR_DATA);
PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0.0);
PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0.0);
PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, 0.0);
PlotIndexSetDouble(3, PLOT_EMPTY_VALUE, 0.0);
PlotIndexSetDouble(4, PLOT_EMPTY_VALUE, 0.0);
ArrayInitialize(balance, 0.0); // принудительная
ArrayInitialize(equityMax, 0.0); // инициализация
ArrayInitialize(equityMaxB, 0.0); // всех
ArrayInitialize(equityMin, 0.0); // буферов
ArrayInitialize(equityMinB, 0.0); // индикатора
ArraySetAsSeries(balance, true); // все
ArraySetAsSeries(clrBalance, true); // буферы
ArraySetAsSeries(equityMax, true); // индикатора
ArraySetAsSeries(equityMaxB, true); // имеют
ArraySetAsSeries(equityMin, true); // флаг
ArraySetAsSeries(equityMinB, true); // AS_SERIES
IndicatorSetInteger(INDICATOR_DIGITS, 2);
IndicatorSetString(INDICATOR_SHORTNAME, "Show Money");
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
if(prev_calculated == 0)
return(rates_total);
double bal = AccountInfoDouble(ACCOUNT_BALANCE);
double equity = AccountInfoDouble(ACCOUNT_EQUITY);
if(rates_total > prev_calculated)
{
minEquity = 0;
maxEquity = 0;
}
minEquity = fmin((minEquity == 0 ? AccountInfoDouble(ACCOUNT_BALANCE) : minEquity), equity);
maxEquity = fmax(maxEquity, equity);
balance[0] = AccountInfoDouble(ACCOUNT_BALANCE);
clrBalance[0] = 0.0;
equityMinB[0] = balance[0];
equityMin[0] = minEquity;
equityMaxB[0] = balance[0];
equityMax[0] = maxEquity;
if(balance[0] > balance[1])
clrBalance[0] = 1.0;
if(balance[0] < balance[1])
clrBalance[0] = 2.0;
Comment(PositionsTotal());
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Ich werde später ein Video posten, dann wird es klar sein. Ich kann es auf meinen Fingern nicht besser erklären als vorher.
Ich hoffe, es macht Ihnen nichts aus, das Video herunterzuladen und zu entpacken.
Leider wurde die Tatsache, dass der Indikator aus dem Diagramm entfernt und an das Diagramm angehängt wurde, nicht aufgezeichnet, aber es gibt die Tatsache, dass der Indikator da ist, dann ist er weg und dann ist er wieder da. Es wird einfach gelöscht und wieder angehängt.
Achten Sie nach der Neuinstallation des Indikators auf das Datenfenster. Selbst nach der erzwungenen Initialisierung von Puffern gibt es dort immer noch Platzreste.
Hier ist der Code für den Indikator
Ich möchte ein Experiment machen: Lassen Sie nur ein Diagramm offen und verwenden Sie es, um den Indikator zu setzen und zu entfernen. Und Sie benötigen Informationen über das Terminal und das Betriebssystem (Registerkarte "Log" des Terminals).
Was hat eine Karte damit zu tun? Die Tatsache, dass der Indikator nur in einem Diagramm angezeigt wird, reicht nicht aus?
hinzugefügt:
Obwohl ich nicht glaube, dass das Betriebssystem das Verhalten des Indikators beeinflussen kann, finden Sie hier Informationen über das System und das Terminal
2016.10.16 20:56:34.904 Terminal Windows 7 Home Premium (x64 based PC), IE 11.00, UAC, AMD FX-4170 Quad-Core Processor , RAM: 10531 / 12255 Mb, HDD: 55167 / 244198 Mb, GMT+03:00
2016.10.16 20:56:34.904 Terminal MetaTrader 5 build 1455 started (MetaQuotes Software Corp.)
Was hat eine Karte damit zu tun? Reicht es nicht aus, dass der Indikator nur in einem Diagramm angezeigt wird?
2016.10.18 19:09:34.266 Terminal Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120 M @ 2.50 GHz, RAM: 3638 / 8077 Mb, HDD: 39824 / 233310 Mb, GMT+02:00
2016.10.18 19:09:34.266 Terminal C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\038 C9E8FAFF9EA373522ECC6D5159962
Also... Die Situation nimmt allmählich Gestalt an. Fügen Sie diesen Code hinzu:
//---
if(prev_calculated==0)
{
Print("prev_calculated==0");
return(rates_total);
}
double bal=AccountInfoDouble(ACCOUNT_BALANCE);
2016.10.18 19:09:34.266 Terminal Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120 M @ 2.50 GHz, RAM: 3638 / 8077 Mb, HDD: 39824 / 233310 Mb, GMT+02:00
2016.10.18 19:09:34.266 Terminal C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\038 C9E8FAFF9EA373522ECC6D5159962
Ich habe mit der Ausführung begonnen, aber wenn ich den Indikator starte, befinden sich in einem Puffer fast überall in der Geschichte Pestnummern.
Nach dem Herausnehmen des Indikators und dem Wiedereinsetzen nach einer Weile sind die Puffer leer.
Ich werde den Aus- und Einbau später wiederholen.
Vorläufige Schlussfolgerungen:
Also... Die Situation nimmt allmählich Gestalt an. Fügen Sie den folgenden Code hinzu:
//---
if(prev_calculated==0)
{
Print("prev_calculated==0");
return(rates_total);
}
double bal=AccountInfoDouble(ACCOUNT_BALANCE);
So hinzugefügt