Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1308

 
Hallo!!! Können Sie mir sagen, wie ich einen Enum-Datentyp an Klassenmethoden übergeben kann? Nehmen wir an, ich möchte einen Zeitrahmen übergeben. Ich erstelle ein Enum in der Kopfzeile eines Beraters
   enum frame1 // перечисление именованных констант
     {
      PERIOD_M1,
      PERIOD_M5,
      PERIOD_M15,
      PERIOD_M30,
      PERIOD_H1,
      PERIOD_H4,
      PERIOD_D1,
      PERIOD_W1,
      PERIOD_MN1
     };


Dann deklariere ich eine Methode in einer Klasse.
public:
                     Signal_Line();
                    ~Signal_Line();
   double               Time_Frame(double &Trend_Line_Down[][], int Frame, int Down);

   int               Short_Proboy(double &Trend_Line_Down[][], string Name_Static, int Down, ENUM_TIMEFRAMES);
Und beim Aufrufen einer Methode aus einem EA, wenn ich den dritten Wert aus der Aufzählung übergeben müssen - Frame - PERIOD_M30, was sollte ich in den Code Fragen unten schreiben?
         Trend_Line_Down[Timer_Down][1]=Signal.Short_Proboy(Trend_Line_Down, Name_Static, ???);     // Флаг пробоя трендовой нулевой свечой
 
Wenn man darüber nachdenkt, ist es irgendwie verlockend, zu schreiben
 Trend_Line_Down[Timer_Down][1]=Signal.Short_Proboy(Trend_Line_Down, Name_Static, frame1 3);     // Флаг пробоя трендовой нулевой свечой

Aber beim Kompilieren wird ein Fehler geschrieben. Wo könnte der Haken sein?

 
Kira27:
Hallo!!! Können Sie mir sagen, wie man Aufzählung Datentyp in Klasse Methoden übergeben? Nehmen wir an, ich möchte einen Zeitrahmen übergeben. Ich erstellen in der Kopfzeile des EA der Aufzählung
Dann deklariere ich Methode in der Klasse.
Und beim Aufrufen einer Methode von einem EA, wenn ich den dritten Wert aus der Aufzählung übergeben müssen - Frame - PERIOD_M30, was sollte ich in den Code Fragen unten schreiben?

Frage 1: Warum sollte man eine eigene Aufzählung erstellen, wenn es die StandardaufzählungENUM_TIMEFRAMES gibt?

 

Frage nach den Kosten für eine Zecke.

Für welche Kontraktgröße (Losgröße) wird dieser Wert berechnet?

Für das Währungspaar EURUSD beispielsweise liefert dieses Skript die gleichen Werte, aber für Metalle beträgt der Unterschied das Zehnfache. Wie, warum, und woher weiß ich das?

int OnStart()
  {
//---
    // цена тика для символа
    double symb_tick_price = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
    // рассчитаная цена символа (для Forex, CFD - формула из справки)
    // Profit  = (close_price - open_price) * Contract_Size * Lots
    // т.е. берем размер тика и считаем по этой формуле
    // -> TickPrice  = TickSize * Contract_Size * Lots
    double symb_lot_size = 1.0;
    double symb_tick_size = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE);
    double symb_contract_size = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_CONTRACT_SIZE);
    double calc_symb_tick_price = symb_tick_size * symb_contract_size * symb_lot_size;
    PrintFormat("Цена тика SYMBOL_TRADE_TICK_VALUE=%f, Цена тика ВЫЧИСЛЕННАЯ=%f", symb_tick_price, calc_symb_tick_price);
//---
   return(INIT_SUCCEEDED);
  }


NG      0       13:31:42.450    testTickPrice (EURUSD,H1)       Цена тика SYMBOL_TRADE_TICK_VALUE=1.000000, Цена тика ВЫЧИСЛЕННАЯ=1.000000
OE      0       13:31:56.924    testTickPrice (XAGUSD,H1)       Цена тика SYMBOL_TRADE_TICK_VALUE=0.500000, Цена тика ВЫЧИСЛЕННАЯ=5.000000
CE      0       13:40:00.848    testTickPrice (XAUUSD,H1)       Цена тика SYMBOL_TRADE_TICK_VALUE=0.100000, Цена тика ВЫЧИСЛЕННАЯ=1.000000
 
Kira27:
Wenn man darüber nachdenkt, scheint es eine Aufforderung zu sein, zu schreiben

Aber beim Kompilieren wird ein Fehler geschrieben. Wo könnte der Haken sein?

Wenn Sie diese Aufzählung vornehmen

enum frame1 // перечисление именованных констант
 {
  m1  = PERIOD_M1,
  m5  = PERIOD_M5,
  m15 = PERIOD_M15,
  m30 = PERIOD_M30,
  h1  = PERIOD_H1,
  h4  = PERIOD_H4,
  d1  = PERIOD_D1,
  W1  = PERIOD_W1,
  MN1 = PERIOD_MN1
 };

dann könnten Sie versuchen, es so zu schreiben

 Trend_Line_Down[Timer_Down][1]=Signal.Short_Proboy(Trend_Line_Down, Name_Static, (ENUM_TIMEFRAMES)m30);     // Флаг пробоя трендовой нулевой свечой
 
Alexey Viktorov:

Wenn Sie diese Aufzählung vornehmen

Sie könnten versuchen, es so zu schreiben

... und in einem Monat werden Sie versuchen zu verstehen, was es bedeutet ))))

Wenn Sie einen solchen Code schreiben müssen, dann schreiben Sie ihn wenigstens in int

enum frame1 // перечисление именованных констант
 {
  m1  = (int)PERIOD_M1,
  m5  = (int)PERIOD_M5,
  m15 = (int)PERIOD_M15,
  m30 = (int)PERIOD_M30,
  h1  = (int)PERIOD_H1,
  h4  = (int)PERIOD_H4,
  d1  = (int)PERIOD_D1,
  W1  = (int)PERIOD_W1,
  MN1 = (int)PERIOD_MN1
 };

damit Sie zumindest verstehen können, was der Autor als Ergebnis erhält

...Obwohl es eine Perversion ist ))))

 
Igor Makanu:

... und einen Monat später werden Sie versuchen zu verstehen, was es bedeutet ))))

Wenn Sie einen solchen Code schreiben wollen, dann schreiben Sie ihn wenigstens in int

damit Sie zumindest verstehen können, was der Autor als Ergebnis erhält

...Obwohl es eine Perversion ist ))))

Warum sollte man sie in int umwandeln? Denn in mql5, beginnend mit H1, ist der Aufzählungswert nicht gleich der Anzahl der Minuten. Im Gegenteil, ich glaube, es wird viel Verwirrung stiften.

 
Alexey Viktorov:

Warum in int konvertieren? Denn in mql5, beginnend mit H1, ist der Aufzählungswert nicht gleich der Anzahl der Minuten. Meiner Meinung nach wird dies im Gegenteil zu großer Verwirrung führen.

Weil enum eine benannte 4-Byte-Konstante ist = int

nicht die Anzahl der Minuten

 
Vladimir Karputov:

Frage 1: Warum sollte man eine eigene Aufzählung erstellen, wenn es den StandardENUM_TIMEFRAMES gibt?

Antwort)) Zeichnen eines grafischen Objekts in den Namen des Objekts gibt es eine Teilzeichenkette M30 sagen, wo dieses Objekt erstellt wurde, und beim Schreiben der Objektdaten zu Array double, mit der Aufteilung des Namens in Teilzeichenketten, vergleiche ich den 0-Index des Arrays mit einem gebrochenen Namen, durch Brute-Force-Aufzählung mit einem Array

//____________________string Массив таймфреймов______________________________
   NameFrame_Trend_Line[1]="M1";
   NameFrame_Trend_Line[2]="M5";
   NameFrame_Trend_Line[3]="M15";
   NameFrame_Trend_Line[4]="M30";
   NameFrame_Trend_Line[5]="H1";
   NameFrame_Trend_Line[6]="H4";
   NameFrame_Trend_Line[7]="Daily";
   NameFrame_Trend_Line[8]="Weekly";
   NameFrame_Trend_Line[9]="Monthly"; 

Suche nach dem Index der gleichen Zeichenfolge im Array

NameFrame_Trend_Line

den Index mit dem int-Array verknüpfen

//___________________int Массив таймфреймов__________________________________________
   TimeFrame[1]=1;
   TimeFrame[2]=5;
   TimeFrame[3]=15;
   TimeFrame[4]=30;
   TimeFrame[5]=60;
   TimeFrame[6]=240;
   TimeFrame[7]=1440;
   TimeFrame[8]=10080;
   TimeFrame[9]=43200;

Ich schreibe den Wert in das Array double, in dem die Eigenschaften der Diagrammobjekte gespeichert werden. Um die Breakdown-, Fixing- und Test-Linie zu verfolgen, verwende ich dann eine Methode, bei der ich den Parameter timeframe aus dem geschriebenen Array double übergebe; da die Linien in verschiedenen Zeitrahmen erstellt werden, sollten die Breakdown-Berechnung, das Fixing und der Test entsprechend dem Zeitrahmen der erstellten Objekte berechnet werden, unabhängig davon, welche Periode gerade auf dem Diagramm zu sehen ist. Ich habe geplant, den Wert des Arrays zu verknüpfen

TimeFrame

in das Array der Merkmale der grafischen Objekte geschrieben, die mit dem Index aus dem Array gezogen werden sollen

   enum frame1 // перечисление именованных констант
     {
      PERIOD_M1,
      PERIOD_M5,
      PERIOD_M15,
      PERIOD_M30,
      PERIOD_H1,
      PERIOD_H4,
      PERIOD_D1,
      PERIOD_W1,
      PERIOD_MN1
     };
und Übertragung auf die Methode der Aufschlüsselung, Verankerung und Testberechnung.
 
Igor Makanu:

weil enum eine benannte 4-Byte-Konstante ist = int

nicht die Anzahl der Minuten.

Und? Haben sie etwas anderes in der ENUM_TIMEFRAMES-Enum? Oder haben Sie Angst , dass Ihnen der Speicherplatz ausge ht? Ich weiß nicht, wie man so etwas macht...


ps; Ach wie langsam ich tippe...)))) Während ich eine einzige Zeile tippte, tippte Kira27 eine Menge......... und etwas, von dem ich vermute, dass es in mql4 verwendet werden wird.

Grund der Beschwerde: