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
Wie wäre es, den gesamten Indikator bei 0 neu zu berechnen? Das scheint mir die beste Lösung zu sein.
:) Das ist es, was ich tue...
Für einen schweren Indikator mit vielen Grafiken ist das nicht die beste Lösung. Die Lösung ist einfach - verwenden Sie Ihre eigene Variable anstelle von prev_calculated, static oder global. Aber es ist eine Krücke und wir wollen etwas anderes.
Eine Person, die das Wort "Krücke" benutzt:
Für einen schweren Indikator mit vielen Grafiken - nicht das Beste. Nein, die Lösung ist einfach - eigene Variable anstelle von prev_calculated, statisch oder global zu verwenden. Aber es ist eine Krücke und wir wollen etwas anderes.
Und wenn die Historie vertauscht wurde, kann es neue Balken geben, die übersehen oder nicht berechnet wurden, d. h. die Indikatorwerte sind bereits falsch.
Wenn prev_calculated=0 ist, bedeutet dies, dass eine vollständige Neuberechnung durchgeführt werden muss. Alle Standardindikatoren werden in diesem Fall vollständig neu berechnet.
Es ist alles klar, aber leider wird das alles nicht aufgehoben:
Das ist alles nützlich, aber es kann nicht entsprechend seinem direkten Zweck verwendet werden - um zu zeigen, wie viele "Balken beim vorherigen Aufruf verarbeitet wurden" - prev_calculated
Einige brauchen überhaupt keine Balken für Berechnungen, andere brauchen nur Live-Ticks, wieder andere haben Einschränkungen bei der Konvertierungstiefe - ihnen ist es egal, was sich als nächstes in der Historie geändert hat, wieder andere müssen grafische Objekte verfolgen usw. Sie brauchen keine zusätzlichen Funktionen, um Änderungen in der Historie zu verfolgen, die an prev_calculated angehängt sind, sie brauchen nur dies - "verarbeitete Balken beim vorherigen Aufruf". Sie brauchen es nicht.
Wie dem auch sei, Herr Programmierer, bitte lenken Sie die Teilnehmer nicht davon ab, "das Ereignis zu erfassen".
Wie wäre es, wenn ich einfach den gesamten Indikator bei 0 neu berechne? Meiner Meinung nach ist das die beste Lösung.
Ich würde nicht sagen, dass das die beste Lösung ist. Zumindest noch nicht.
Ich habe beschlossen, einen Indikator zu schreiben, der den aktuellen Drawdown auf dem Konto registriert, damit ich nichts in der Historie neu berechnen muss. Die erste Zeile sah anfangs so aus.
Ich würde nicht sagen, dass das die beste Lösung ist. Zumindest noch nicht.
Ich habe beschlossen, einen Indikator zu schreiben, der den aktuellen Drawdown auf dem Konto registriert, damit ich nichts in der Historie neu berechnen muss. Zunächst sah die erste Zeile wie folgt aus.
"... ein Preis, von dem ich nicht weiß, woher er stammt... " - das ist Unsinn von UNINITIALISIERTEN Elementen des Indikatorpuffer-Arrays. Was sollte getan werden?
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wanzen, Wanzen, Fragen
Alexey Viktorov, 2016.10.17 09:58
Haben Sie verstanden, was Sie geschrieben haben?
Erklären Sie besser, wie man den Müll loswird ERSTER Lauf des Indikators. Woher kommt dieser Unsinn? Sollte es nicht eine Initialisierung geben, wenn der Puffer mit dem Array verknüpft wird, oder kommt während der Initialisierung der Speicherplatzmüll in das Array? Warum gibt es keinen solchen Müll in mql4?
Geben Sie mir ein Beispiel dafür, wie man den Müll von den normalen Werten trennt, ohne zusätzliche statische oder globale Variablen zu verwenden.
Jeder ist gut genug, um die Dokumentation zu zitieren.
Niemand ist jemandem etwas schuldig. Nach dem Binden befindet sich also Müll im Indikatorpuffer, bis Sie alle Elemente des Arrays selbst initialisiert haben.
Hinzugefügt:
Ich werde jetzt ein Beispiel erstellen...
//| prev_calculated.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrGray
#property indicator_label1 "prev_calculated"
//---- buffers
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,ExtBuffer,INDICATOR_DATA);
//---
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)
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
//--- пересчитываем самый правый бар или самый правый бар и один предыдущий при появлении нового бара
int limit=rates_total-prev_calculated+1;
for(int i=rates_total-limit;i<rates_total;i++)
{
//--- визуализация пересчёта самого правого бара
static bool drive=false;
if(!drive)
ExtBuffer[i]=1.03;
else
ExtBuffer[i]=1.02;
drive=!drive;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Niemand ist jemandem etwas schuldig. Nach dem Binden befindet sich also Müll im Indikatorpuffer, bis Sie alle Elemente des Arrays selbst initialisiert haben.
Hinzugefügt:
Ich werde jetzt ein Beispiel erstellen...
//| prev_calculated.mq5 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_type1 DRAW_LINE
#property indicator_color1 clrGray
#property indicator_label1 "prev_calculated"
//---- buffers
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,ExtBuffer,INDICATOR_DATA);
//---
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)
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
//--- пересчитываем самый правый бар или самый правый бар и один предыдущий при появлении нового бара
int limit=rates_total-prev_calculated+1;
for(int i=rates_total-limit;i<rates_total;i++)
{
//--- визуализация пересчёта самого правого бара
static bool drive=false;
if(!drive)
ExtBuffer[i]=1.03;
else
ExtBuffer[i]=1.02;
drive=!drive;
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Erstaunliche Fähigkeit, die falsche Frage zu beantworten...
Nun erklären Sie mir, was passiert, wenn:
1. Gezählte 100 Balken, eingetragen in Puffer von 0 bis einschließlich 99 (betrachten wir die Richtung als Zeitreihe) Wert 1.03
2. Plötzlich wird der Verlauf geladen und prev_calculated wird zu 0
Ab welchem Takt wird es 1,03 sein?