Equity-Oszillator von MQL5 bedeutet - Seite 2

 
DV2010: aber warum wird ein sich ändernder Aktienwert nicht auf dem Indikator angezeigt, obwohl sich ändernde Werte (geprüft!) in das Indikator-Array geschrieben werden?

Dort wird nichts geschrieben, die Schleife wird nicht aufgerufen. Prüfen Sie es selbst.
 

Das ist der Punkt: Die Schleife wird bei allen Ticks aufgerufen!

Überzeugen Sie sich selbst, denn ich habe die Ausgabe absichtlich in den Körper der Schleife gesetzt:

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[]){
   for (int i = prev_calculated; i <= rates_total-1; ++i){
      Print("Equity - OnCalculate - Cycle: prev_calculated=",prev_calculated,"   rates_total=",rates_total);
      Print("Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=", AccountInfoDouble(ACCOUNT_EQUITY));
      Values[i] = AccountInfoDouble(ACCOUNT_EQUITY);
   }
   return rates_total;
}

Und hier ist das Endergebnis:

2011.01.20 13:58:56     Core 1  OnTester result 0
2011.01.20 13:58:56     Core 1  2011.01.14 23:59:59   order performed sell 0.15 at 1.33829 [#13 sell 0.15 EURUSD at 1.33829]
2011.01.20 13:58:56     Core 1  2011.01.14 23:59:59   deal performed [#13 sell 0.15 EURUSD at 1.33829]
2011.01.20 13:58:56     Core 1  2011.01.14 23:59:59   deal #13 sell 0.15 EURUSD at 1.33829 done (based on order #13)
2011.01.20 13:58:56     Core 1  2011.01.14 23:59:59   position closed due end of test at 1.33829 [buy 0.15 EURUSD 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 22:00:00   Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=9949.299999999999
2011.01.20 13:58:56     Core 1  2011.01.14 22:00:00   Equity - OnCalculate - Cycle: prev_calculated=6418   rates_total=6419
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   CTrade::PositionOpen: instant buy 0.15 EURUSD at 1.33593 [done at 0.00000]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   order performed buy 0.15 at 1.33593 [#12 buy 0.15 EURUSD at 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   deal performed [#12 buy 0.15 EURUSD at 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   deal #12 buy 0.15 EURUSD at 1.33593 done (based on order #12)
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   instant buy 0.15 EURUSD at 1.33593 (1.33577 / 1.33593 / 1.33577)
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   CTrade::PositionClose: instant buy 0.15 EURUSD at 1.33593 [done at 0.00000]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   order performed buy 0.15 at 1.33593 [#11 buy 0.15 EURUSD at 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   deal performed [#11 buy 0.15 EURUSD at 1.33593]
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   deal #11 buy 0.15 EURUSD at 1.33593 done (based on order #11)
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   instant buy 0.15 EURUSD at 1.33593 (1.33577 / 1.33593 / 1.33577)
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=9929.65
2011.01.20 13:58:56     Core 1  2011.01.14 21:00:00   Equity - OnCalculate - Cycle: prev_calculated=6417   rates_total=6418
 
DV2010:

Das ist der Punkt: Die Schleife wird bei allen Ticks aufgerufen!

Überzeugen Sie sich selbst, denn ich habe die Ausgabe absichtlich in den Körper der Schleife gesetzt:

Und hier ist das Endergebnis:

Was hat die Prüfung damit zu tun? Führen Sie den Indikator auf dem Diagramm aus und Sie werden sehen. Vergessen Sie nur nicht, meine Korrekturen vorzunehmen.
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 

Der Grund für diesen Test ist, dass ich die Veränderung des Eigenkapitals innerhalb des getesteten Zeitraums in der Historie sehen muss.

Ich habe Ihre Korrekturen vorgenommen und den Indikator sowohl im Testmodus als auch durch Ziehen auf ein neues Diagramm ausgeführt.

Der Indikator funktioniert für den gesamten Zeitraum, bis hin zu den aktuellen Kursen, sowie für jeden beliebigen Zeitrahmen (oder was genau bedeutet es "Sie werden alles sehen"?)

Dennoch bleibt der Wert des Eigenkapitals konstant, obwohl die Ausgabe im Protokoll zeigt, dass er sich ändert.

( Wie können wir sonst feststellen, ob die Schleife funktioniert oder nicht, außer durch Print? )

... Nur für den Fall, hier ist das "Skelett" der Expert Advisor mit Indikator beigefügt:

#property copyright "Copyright 2010, Pavlov Sergei"
#property link      ""
#property version   "1.00"

#include <\..\Experts\_My\Classes\ClassExpert\ClassExpert.mqh>
ClassExpert Expert1;

int Equity1=0;
void OnInit(){
   Equity1 = iCustom(NULL,0,"Equity",
                          5,          // Период
                          0,          // Смещение
                          MODE_SMA,   // Метод рассчета
                          PRICE_CLOSE // считаем по ценам закрытия)
                          );
   Expert1.Init();
}
void OnTick(){
   Expert1.OnTick();
}
void OnDeinit(const int reason){
   Expert1.Deinit();
}
 
DV2010:

Die Prüfung besteht hier darin, dass ich die Änderung des Eigenkapitals innerhalb des geprüften Zeitraums in der Historie sehen muss.

Ich habe Ihre Korrekturen vorgenommen und den Indikator im Testmodus ausgeführt, indem ich ihn auf ein neues Diagramm gezogen und dort abgelegt habe.

Der Indikator funktioniert für den gesamten Zeitraum, bis hin zu den aktuellen Kursen, sowie für jeden beliebigen Zeitrahmen (oder was genau bedeutet es "Sie werden alles sehen"?)

Dennoch bleibt der Wert des Eigenkapitals konstant, obwohl die Ausgabe im Protokoll zeigt, dass er sich ändert.

( Wie können wir sonst feststellen, ob die Schleife funktioniert oder nicht, außer durch Print? )

... Nur für den Fall, hier ist das "Skelett" der Expert Advisor mit Indikator beigefügt:

Es hat keinen Sinn, den falschen Indikator in einen EA einzubauen, denn dadurch wird er nicht besser. Sie haben meine Option immer noch nicht geprüft?
 

Vielleicht irre ich mich, aber vergleichen Sie nicht das Erscheinungsbild des Indikators auf dem Diagramm, nachdem der Test abgeschlossen ist, mit den Berechnungen, die während des Tests durchgeführt wurden?

Der Punkt ist, dass die Ergebnisse (Berechnungsarrays) des benutzerdefinierten Indikators aus dem Tester in keiner Weise auf das Diagramm übertragen werden, sondern der angegebene Indikator einfach auf eine neue Berechnung auf dem Diagramm gestartet wird.

Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - Документация по MQL5
 

Lassen Sie diesen Indikator auf einem Minutenchart laufen (wenn Sie eine offene Position haben) und nach 10-15 Minuten erhalten Sie ein Bild wie dieses.


Code:

//+------------------------------------------------------------------+
//|                                             Equity_Indicator.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double Values[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Values,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,100);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArraySetAsSeries(Values,false);
   return(0);
  }
//+------------------------------------------------------------------+
//| 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[])
  {


   Print("prev_calculated=",prev_calculated,"   rates_total=",rates_total);
   int limit=prev_calculated;
   if(limit>0) limit--;

//---Блок заполнения Индикатора и журнала сообщений значениями
   for(int i=limit; i<rates_total;++i)
     {
      Values[i]=AccountInfoDouble(ACCOUNT_EQUITY);
     }
   return rates_total;
  }
//+------------------------------------------------------------------+
 

Roche, ich habe Sie bereits gefragt, was an meinem Indikator falsch ist, und ich habe Ihnen geschrieben, wie ich auch Ihre Variante überprüft habe . Und ich habe versucht, es Ihnen so detailliert wie möglich zu erklären, während Sie nur kurz über "die Schleife funktioniert nicht" und "Sie werden es selbst sehen" geschrieben haben...

...Renat, so wie ich es verstehe, wird der Indikator nach Abschluss des Tests auf der Grundlage der während des Tests durchgeführten Berechnungen und der Füllung des Indikator-Arrays auf dem Chart angezeigt. Aber was bedeutet es, dass die Ergebnisse aus dem Tester nicht in das Diagramm des benutzerdefinierten Indikators aus dem Tester übertragen werden?

Wozu brauchen sie dann und warum verschwindet die Indikatorlinie sofort, wenn ich die Zuweisung von Werten an ein Array aus dem Code entferne (auch wenn es eine konstante horizontale Linie ist, verschwindet sie)?

Ich dachte, dass die Korrespondenz zwischen dem Array der Indikatorwerte, die bei OnCalculated ausgefüllt werden ,und den Indikatorwerten auf dem Chart eindeutig ist, wie können die Indikatorwerte sonst initialisiert werden?

Es ist schwer zu verstehen... Es scheint eine triviale Aufgabe zu sein, aber ich kämpfe schon seit mehreren Tagen damit, und es ist schwierig, jemanden zu finden, der zumindest andeuten kann, wie sie anders gelöst werden kann als in der Geschichte und ob sie überhaupt gelöst ist.

Noch einmal, so wie ich es verstanden habe (korrigieren Sie mich, wenn ich falsch liege, wenn es Ihnen nichts ausmacht).

1.ich lege einen Testzeitraum im Tester fest und wähle einen Expert Advisor mit meinem Indikator aus.

2. dererste Aufruf OnCalculated wird mit den Parametern prev_calculated =0 und rates_total = Anzahl der Ticks (Balken), die dem Beginn des Tests entsprechen,aufgerufen . Innerhalb dieses Zeitraums bleibt der Wert des Gleichgewichts auf dem ursprünglichen und konstanten Niveau.

Dieaufeinanderfolgenden Aufrufe von OnCalculated by bar innerhalb des Testzeitraums erfolgen für jeden einzelnen Balken, und hier können wir ein Array von Indikatorwerten mit den Daten initialisieren, die sich ändern (z. B. den Preis duplizieren, den ich erhalten habe, aber warum dann nicht Equity mit den wechselnden Preisen initialisieren ?)

Und überhaupt, Sie sind ein Profi. Ich hoffe, diese einfache Aufgabe ist gelöst, oder hatMetaTradernoch nicht solche "Höhen" erreicht? :)))

Ich habe meine einfache Lösung für dieses Problem angeboten, aber sie funktioniert nicht.

Wie kann dann ein Aktienchart unterhalb des Preisdiagramms auf der Grundlage der Ergebnisse von Tests in der Historie implementiert werden?

 
Ich werde Ihnen eines sagen: Es wird nicht einfach sein, Ihr Problem zu lösen, solange der Visualisierungsmodus nicht gestartet ist. Es gibt eine Lösung: Schreiben Sie die Aktiendaten während des Tests in eine Datei. Schreiben Sie dann die Daten aus dieser Datei in den Indikatorpuffer und zeichnen Sie das Aktiendiagramm.
 

Rosh, die Variante für Online wurde bereits gepostet, aber als jemand, der hauptsächlich mit Geschichte arbeitet, brauche ich eine Variante, die mit historischen Daten arbeitet. Und es fällt mir immer noch schwer zu verstehen, worin die Hauptschwierigkeit bestehen könnte.

Der Händler hat aufgrund einer geringeren Anzahl von Geschäften eine Vorstellung von der Online-Gleichgewichtsgrafik (es sei denn, er ist ein Extraschläger, der kaum Zeit hat, auf Kaufen und Verkaufen zu drücken).

In der Tat wird die Equity-Dynamik bei einer langen Historie mit Hunderten oder gar Tausenden von Trades kritisch, aber die Grafik im Tester bietet keinen einfachen Vergleich dieser Dynamik mit der Preisdynamik im Prinzip (es sei denn, natürlich, MetaQuote hält die Hauptsache für Programmierer für eine schnelle Eliminierung von bereits vorbereiteten Experten ohne Analyse von separaten Serien von schwachen und starken Positionen).

Grund der Beschwerde: