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

 
STARIJ:
Versuchen Sie, Datum, Uhrzeit, Gebot und die Ergebnisse Ihrer Berechnungen für jeden Tick in die Datei zu schreiben. Laden Sie sie dann in Excel hoch und überprüfen Sie sie. Es macht kaum Sinn, alle Dutzend Zeilen des Programms abzustimmen!

Aber sehen Sie, Sie haben return in jedem Zweig des bedingten Operators, d.h. er wird immer ausgeführt. Wir nehmen ihn also aus dem bedingten Operator heraus:

Bid[1] - ist das so?


Ich danke Ihnen. Ich werde es jetzt versuchen. Ich habe das Wesentliche deines Codes verstanden und es ist schon ein großer Erfolg für mich :) Ich habe auch meine Fehler erkannt.

Was ist die SRC-Taste?

 
STARIJ:
Versuchen Sie, Datum, Uhrzeit, Gebot und die Ergebnisse Ihrer Berechnungen für jeden Tick in die Datei zu schreiben. Laden Sie sie dann in Excel hoch und überprüfen Sie sie. Es macht kaum Sinn, alle Dutzend Zeilen des Programms abzustimmen!

Aber sehen Sie, Sie haben return in jedem Zweig des bedingten Operators, d.h. er wird immer ausgeführt. Wir nehmen sie also aus dem Geltungsbereich des bedingten Operators heraus:

Bid[1] - ist das so?


Ich habe den Code in den "Konstruktor" des benutzerdefinierten Indikators eingefügt. Ich habe sie zusammengestellt. Der Compiler erzeugt 1 Warnung: Zwei OnCalculate sind definiert. Es wird die OHLC-Version verwendet (ich verstehe nicht, was das bedeutet).

Ich habe das Produkt zusammengestellt. Befestigen Sie es an der Tabelle. Das separate Fenster für das Diagramm wird geöffnet, aber es zeigt trotz der Ticks keine Informationen über das Histogramm an.

Was ist los? Bitte um Rat?

#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  clrDarkTurquoise
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

//- local variables
int Tick, Tick2;       // Для вставки программы используйте кнопку SRC
double Bid1;

//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   Bid1=Bid;
//---
   return(INIT_SUCCEEDED);
  }
  
 
    void start()   // Вместо start более модно писать OnTick
{
    if(Bid > Bid1) Tick++;                             
    else Tick2++;
    Bid1=Bid;                      
}
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
YarTrade:

Ich habe den Code in den "Konstruktor" des benutzerdefinierten Indikators eingefügt. Er hat sie zusammengestellt. Der Compiler gab mir 1 Warnung: zwei OnCalculate sind definiert. Es wird die OHLC-Version verwendet (ich verstehe nicht, was das bedeutet).

Ich habe das Produkt zusammengestellt. Befestigen Sie es an der Tabelle. Das separate Fenster für das Diagramm wird geöffnet, aber es zeigt trotz der Ticks keine Informationen über das Histogramm an.

Was ist los? Können Sie uns beraten?

Wenn Sie den Code hier einfügen, verwenden Sie die Schaltfläche des Nachrichteneditors SRC - am oberen Rand des Nachrichtenfeldes gibt es viele nützliche Dinge in der Nachrichtenformatierung Panel.

Es ist doch nicht schwer, die Augen über den Text zu heben, den Sie gerade tippen, oder? Und es ist doch viel angenehmer für die Leute, sich den normalen Code anzuschauen, statt den Schnickschnack, oder?

Ich habe Ihren Code für Sie in Ihrem Beitrag korrekt eingefügt (SRC)

 
Artyom Trishkin:

Wenn Sie den Code hier einfügen, verwenden Sie die SRC-Beitragseditor-Schaltfläche - es gibt viele nützliche Funktionen in der Beitragsformatierungsleiste oben im Beitragsfeld.

Es ist doch nicht schwer, die Augen über den Text zu heben, den Sie gerade tippen, oder? Und es ist doch viel angenehmer für die Leute, sich den normalen Code anzuschauen, anstatt den Schnickschnack, oder?

Ich habe Ihren Code in Ihrer Nachricht für Sie richtig gesetzt (SRC)


Ja, danke. Das habe ich nicht gewusst.

 
YarTrade:

Gab 1 Warnung an den Compiler aus: zwei OnCalculate sind definiert. Es wird die OHLC-Version verwendet (ich weiß nicht, was das bedeutet).

Ich habe das Produkt zusammengestellt. Befestigen Sie es an der Tabelle. Das separate Fenster für das Diagramm wird geöffnet, aber es zeigt trotz der Ticks keine Informationen über das Histogramm an.

Was ist los? Bitte um Rat?

Die Funktion hieß früher Start, jetzt heißt sie OnTick im Expert Advisor und OnCalculate im Indikator. Der Compiler warnt: Sie haben die gleiche Funktion zweimal unter verschiedenen Namen. Verschieben Sie den Inhalt von Start nach OnCalculate und löschen Sie Start. Sie müssten auch in Ihrem Programm beschreiben, was und wie es angezeigt werden soll. Entscheiden Sie zunächst selbst, welches Bild dort zu sehen sein soll. Es ist besser, das Studium der MQL-Sprache mit dem Schreiben von Skripten zu beginnen. Ein Expert Advisor ist komplizierter, ein Indikator ist noch komplizierter

 
STARIJ:

Die Funktion hieß früher Start, jetzt heißt sie OnTick im EA und OnCalculate im Indikator. Der Compiler warnt: Sie haben die gleiche Funktion zweimal unter verschiedenen Namen. Verschieben Sie den Inhalt von Start nach OnCalculate und löschen Sie Start. Sie müssten auch in Ihrem Programm beschreiben, was und wie es angezeigt werden soll. Entscheiden Sie zunächst selbst, welches Bild dort zu sehen sein soll. Es ist besser, das Studium der MQL-Sprache mit dem Schreiben von Skripten zu beginnen. Der Expert Advisor ist schwieriger, der Indikator ist noch schwieriger.


Ich kann den Inhalt von Start nicht in OnCalculate einfügen und erhalte eine Menge Fehler

 
YarTrade: Ich kann den Inhalt von Start nicht in OnCalculate einfügen, sondern erzeuge eine Menge Fehler


Der Indikator zeigt nur Informationen ab dem Start an. Das Datenfenster (Ctrl-D) zeigt die Daten des Candlesticks, auf den der Cursor zeigt

//+------------------------------------------------------------------+
//|                                                     -Тики-07.mq4 |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
//  #property indicator_plots   2        в MQL-4 такое отсутствует
#property indicator_label1  "Вверх"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Salmon
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2

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

datetime Время=0;   // Время прошлого бара
double Bid1;

double   Buf_1[], Buf_2[]; // 2 буфера

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
{
   IndicatorDigits(0);
   SetIndexBuffer(0,Buf_1);
   SetIndexBuffer(1,Buf_2);
   Bid1=Bid;
}
 
 
//+------------------------------------------------------------------+
//| 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;         // и обнулить последний элемент буфера
      Buf_2[0]=0;
   }

   if(Bid > Bid1) Buf_1[0]++;                             
   else Buf_2[0]--;
   Bid1=Bid;                      

  return(rates_total);
}
 
Alexey Kozitsyn:

:)

und wie formulieren Sie die entstandene Situation mit den Namen der Funktionen?
 
STARIJ:
Und wie formulieren Sie die entstandene Situation mit Funktionsnamen?

start - veralteter Name. OnTick() ist der eigentliche Name der Tick-Handling-Funktion.

Wie auch immer, es macht keinen Unterschied, wie man es definiert, nur das Wort "trendy" hat mich zum Lächeln gebracht.

 
Alexey Kozitsyn:

start - veralteter Name. OnTick() ist der eigentliche Name der Tick-Handling-Funktion.

Wie auch immer, es spielt keine Rolle, wie Sie es definieren, es ist nur das Wort "trendy", das Sie zum Lächeln bringt.

Obsolete wird nicht mehr verwendet. Aber der Anfang lebt und wird weiterleben.
Grund der Beschwerde: