Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 378

 

Kann mir bitte jemand sagen, wie ich das Folgende schreiben soll?

Ich habe einen Trainingsindikator erstellt, der iVolume für jeden Tick zählt: iVolume ist positiv für diejenigen, die sich nach oben bewegt haben, und iVolume ist negativ für diejenigen, die sich nach unten bewegt haben. Um eine Kurve zu erstellen, addiere ich das gesamte iVolumen (positiv und negativ) und erhöhe die Summe von Takt zu Takt. Man erhält eine Kurve. Allerdings bin ich auf zwei Probleme gestoßen:

1) die Linie wird sehr gebrochen;

2) Es ist nicht möglich, den Expert Advisor zu testen, da das erhaltene iVolume-Diagramm nur ein reales Leben hat.

Frage:

1) Wie lässt sich der Code beschreiben, der es ermöglicht, ein Diagramm auf der Grundlage gemittelter Daten zu erstellen, die ich in den Puffer schreibe?

2) Ist es möglich, die Daten dieses Indikators (die im realen Modus empfangen werden) in eine bestimmte Datei zu schreiben, so dass wir später unter Bezugnahme auf diese Datei den Indikator auf den historischen Daten aufbauen können, indem wir die bereits gesammelten Tick-Volumen auf sie anwenden? Wenn möglich, wie kann man es programmatisch beschreiben? Oder gibt es eine andere Lösung, bei der die aktuellen iVolume-Informationen nicht in eine Datei geschrieben werden müssen?

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

#property indicator_label2  "Вниз"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2

datetime Время=0;   // Время прошлого бара
double Bid1;
double   Buf_1[];
long V1; // объем для текущего тика вверх
long V2; // накопленный объем для всех тиков вверх текущего бара
long V3; // объем текущего тика вниз
long V4; // накопленный объем для всех тиков вниз для текущего бара
long V5;  // отрицательные и положительные iVolume нарастающим итогом

void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   //SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
   V5 = 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[])
{
   datetime Вр=Time[0];   // Время текущего бара
   if(Вр>Время)           // Если новый бар
   {
      Время=Вр;           // Запомнить
//      Buf_1[0]=0;         // и обнулить последний элемент буфера
   }
   
      
   if(Bid >= Bid1) 
{
   if(Bid > Bid1) 
{   
   V1 = iVolume(NULL, 0, 0); // если повышающий цену тик
   V2 = V1 + V2;
}
  else
{
   V1 = 0;                // если Bid1 = Bid2, т.е. изменение цены = 0, то iVolume этого тика присваиваем 0;
   V2 = V1 + V2;      
}               
}              
   else 
{
   V3 = iVolume(NULL, 0, 0); // если понижающий цену тик 
   V4 = V3 + V4;
}
  
   V5 = V2-V4;
   Bid1=Bid;
   Buf_1[0]= V5; // в буфер сгружаем 
  
   
  return(rates_total);
}
 

Vielleicht am Ende des Codes hinzufügen:

double macurrent=iMAOnArray(Buf_1[0],0,5,0,MODE_LWMA,0);

Eh, nein! Der Compiler erzeugt den Fehler, dass es kein Array gibt.


 
Hallo, können Sie mir sagen, was die Ausrufezeichen in der Strategie "Toaster" bedeuten?
 

Anyone....., können Sie helfen? Die Sackgasse, in der ich mich befinde, finden Sie hier:https://www.mql5.com/ru/forum/160683/page378#comment_6053255

 
YarTrade: Ist es möglich, die Daten dieses Indikators (die im realen Modus erhalten werden) in eine Datei zu schreiben, so dass es später möglich wäre, anhand dieser Datei einen Indikator auf historischen Daten zu erstellen, indem die bereits gesammelten Tick-Volumina darauf angewendet werden? Wenn möglich, wie kann man es programmatisch beschreiben? Oder gibt es eine andere Lösung, bei der die aktuellen iVolume-Informationen nicht in die Datei geschrieben werden müssen?

Indikator basierend auf Daten aus der Datei - diese Zeile in die Suche eingegeben und gefunden

 

Eine Art Alptraum, ich verstehe nicht, warum er so ausgibt:
Code section :


line[0]=MathFloor(Low[1]*MathPow(10,D-1));
Print("Var ",DoubleToStr(line[0],D));
Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));

Output :

EURUSD,M15: Var 0.00000
EURUSD,M15: Code 11754.00000


Was geschieht mit dem Wert nach der Zuweisung?

 
LuckySith:   Codeabschnitt :

line[0]=MathFloor(Low[1]*MathPow(10,D-1));
Print("Var ",DoubleToStr(line[0],D));
Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));

Print :

EURUSD,M15: Var 0.00000
EURUSD,M15: Code 11754.00000

Was geschieht mit dem Wert nach der Zuweisung?

Drucken Sie den Wert der Variablen nach der Zuweisung und den Wert der Variablen D. Benutzen Sie Ihren Taschenrechner zum Rechnen.

 

Hallo zusammen. Leute, könntet ihr uns bitte ein wenig helfen? Könnte bitte jemand eine Zeile in den Indikator einfügen, in der man den Namen der Sounddatei angeben kann, so dass die Zeile in den Indikatoreinstellungen angezeigt wird.

Dateien:
Awesome-33.ex4  16 kb
 
STARIJ:

Drucken Sie die Werte der Variablen nach der Zuweisung und den Wert der Variablen D aus. Berechnen wir es mit einem Taschenrechner...


Ich gebe also den Wert der Variablen nach der Zuweisung aus. Der Code sieht also im Wesentlichen wie folgt aus:


a=b;

Drucken (a);

Drucken (b);

Aber a ist gleich Null und b wird richtig gedruckt

 
LuckySith:

So gebe ich den zugewiesenen Wert aus. Der Code sieht also im Wesentlichen wie folgt aus:


a=b;

Drucken (a);

Drucken (b);

Aber a ist gleich Null, während b korrekt gedruckt wird


Ich sehe keine Null, Sie haben irgendwo einen Fehler gemacht

   int D=5;
   double a=MathFloor(Low[1]*MathPow(10,D-1)); 
   Print("Var ",DoubleToStr(a,D)); 
   Print("Code ",DoubleToStr(MathFloor(Low[1]*MathPow(10,D-1)),D));