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

 
Hallo, können Sie mir sagen, wie man eine Struktur an eine Funktion übergibt, so dass Änderungen an Elementen der Struktur in der Funktion in der global erstellten Struktur gespeichert werden?
 
Кирилл Смирнов:
Hallo, können Sie mir sagen, wie man eine Struktur an eine Funktion übergibt, so dass Änderungen an Elementen der Struktur in der Funktion in der global erstellten Struktur gespeichert werden?

Übergeben Sie die Struktur per Referenz. Beispiel:

//+------------------------------------------------------------------+
//|                                                     Expert 1.mq5 |
//|                              Copyright © 2021, Vladimir Karputov |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2021, Vladimir Karputov"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Structure Positions                                              |
//+------------------------------------------------------------------+
struct STRUCT_POSITION
  {
   ENUM_POSITION_TYPE pos_type;              // position type
   double            volume;                 // position volume (if "0.0" -> the lot is "Money management")
   double            lot_coefficient;        // lot coefficient
   bool              waiting_transaction;    // waiting transaction, "true" -> it's forbidden to trade, we expect a transaction
   ulong             waiting_order_ticket;   // waiting order ticket, ticket of the expected order
   bool              transaction_confirmed;  // transaction confirmed, "true" -> transaction confirmed
   //--- Constructor
                     STRUCT_POSITION()
     {
      pos_type                   = WRONG_VALUE;
      volume                     = 0.0;
      lot_coefficient            = 0.0;
      waiting_transaction        = false;
      waiting_order_ticket       = 0;
      transaction_confirmed      = false;
     }
  };
STRUCT_POSITION SPosition;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   Example(SPosition);
   Comment(EnumToString(SPosition.pos_type));
  }
//+------------------------------------------------------------------+
//| Example                                                          |
//+------------------------------------------------------------------+
void Example(STRUCT_POSITION &struct_position)
  {
   int res=MathRand();
   if(res<32767/2)
      struct_position.pos_type=POSITION_TYPE_BUY;
   else
      struct_position.pos_type=POSITION_TYPE_SELL;
  }
//+------------------------------------------------------------------+
Dateien:
Expert_1.mq5  6 kb
 
Vladimir Karputov:

Übergeben Sie die Struktur per Referenz. Beispiel:

Danke! Woher stammt dieses Beispiel? Ich habe gerade in der Hilfe nach etwas zu meiner Frage gesucht und konnte es nicht finden(((

 
Kira27:

Danke! Woher stammt dieses Beispiel? Ich habe gerade in der Hilfe nach etwas zu meiner Frage gesucht und konnte es nicht finden(((

Reale Umsetzung + erfundene Funktion zum Beispiel.

 
Vladimir Karputov:

Reale Umsetzung + erfundene Funktion zum Beispiel.

OK, nochmals vielen Dank!

 
Vladimir Karputov:

Reale Umsetzung + erfundene Funktion zum Beispiel.

Schlechtes Beispiel. Eine Struktur sowie jede global deklarierte Variable ist in jedem Teil des Programms zugänglich.

So wird es auch funktionieren.

//+------------------------------------------------------------------+
//| Structure Positions                                              |
//+------------------------------------------------------------------+
struct STRUCT_POSITION
  {
   ENUM_POSITION_TYPE pos_type;              // position type
   double            volume;                 // position volume (if "0.0" -> the lot is "Money management")
   double            lot_coefficient;        // lot coefficient
   bool              waiting_transaction;    // waiting transaction, "true" -> it's forbidden to trade, we expect a transaction
   ulong             waiting_order_ticket;   // waiting order ticket, ticket of the expected order
   bool              transaction_confirmed;  // transaction confirmed, "true" -> transaction confirmed
   //--- Constructor
                     STRUCT_POSITION()
     {
      pos_type                   = WRONG_VALUE;
      volume                     = 0.0;
      lot_coefficient            = 0.0;
      waiting_transaction        = false;
      waiting_order_ticket       = 0;
      transaction_confirmed      = false;
     }
  };
STRUCT_POSITION SPosition;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   Example();
   Comment(EnumToString(SPosition.pos_type));
  }
//+------------------------------------------------------------------+
//| Example                                                          |
//+------------------------------------------------------------------+
void Example()
  {
   int res=MathRand();
   if(res<32767/2)
      SPosition.pos_type=POSITION_TYPE_BUY;
   else
      SPosition.pos_type=POSITION_TYPE_SELL;
  }
//+------------------------------------------------------------------+

Anders ist es, wenn eine Strukturvariable lokal deklariert wird.

//+------------------------------------------------------------------+
//| Structure Positions                                              |
//+------------------------------------------------------------------+
struct STRUCT_POSITION
  {
   ENUM_POSITION_TYPE pos_type;              // position type
   double            volume;                 // position volume (if "0.0" -> the lot is "Money management")
   double            lot_coefficient;        // lot coefficient
   bool              waiting_transaction;    // waiting transaction, "true" -> it's forbidden to trade, we expect a transaction
   ulong             waiting_order_ticket;   // waiting order ticket, ticket of the expected order
   bool              transaction_confirmed;  // transaction confirmed, "true" -> transaction confirmed
   //--- Constructor
                     STRUCT_POSITION()
     {
      pos_type                   = WRONG_VALUE;
      volume                     = 0.0;
      lot_coefficient            = 0.0;
      waiting_transaction        = false;
      waiting_order_ticket       = 0;
      transaction_confirmed      = false;
     }
  };
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   STRUCT_POSITION SPosition;
   Example(SPosition);
   Comment(EnumToString(SPosition.pos_type));
  }
//+------------------------------------------------------------------+
//| Example                                                          |
//+------------------------------------------------------------------+
void Example(STRUCT_POSITION &struct_position)
  {
   int res=MathRand();
   if(res<32767/2)
      struct_position.pos_type=POSITION_TYPE_BUY;
   else
      struct_position.pos_type=POSITION_TYPE_SELL;
  }
//+------------------------------------------------------------------+
 
Hallo zusammen. MT5 lädt bei der Arbeit mit mehreren Tools Gigabytes an Daten. Gibt es eine Möglichkeit, dies in den Einstellungen zu begrenzen? Ich möchte, dass Monats-, Wochen- und Tagesdiagramme wie in MT4 gezeichnet werden, d.h. jeder Balken ist (open, high, low, close) ohne eine zusätzliche interne Historie. Und schon wurden die Charts mit Intraday-Balken nach dem aktuellen MT5-Prinzip (Implementierung) aufgebaut.
 
Vladimir Makhnin:
Wie zu erhöhen/verringern Zeitrahmen mit mt5?

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Indikatoren: Ändern des Zeitrahmens mit Hotkeys

SanAlex, 2020.08.07 11:59

Ich denke, es wäre das gleiche für mt4 und mt5

//+------------------------------------------------------------------+
//|                                                      hotKeys.mq5 |
//|                                     Copyright 2015,Mohit Marwaha |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Mohit Marwaha"
#property link      "marwaha1@gmail.com"
#property version   "1.20"
#property indicator_chart_window
#property indicator_plots 0
#property description "Keys 1 through 9 change timeframes from 1 minute to Monthly"
#define  KEY_MONTHLY 57
#define  KEY_WEEKLY 56
#define  KEY_DAILY 55
#define  KEY_4HOUR 54
#define  KEY_1HOUR 53
#define  KEY_30MIN 52
#define  KEY_15MIN 51
#define  KEY_5MIN 50
#define  KEY_1MIN 49
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   Comment("Copyright MohitMarwaha");
//---
   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[])
  {
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(int(lparam))
        {
         case KEY_WEEKLY:
            ChartSetSymbolPeriod(0,NULL,PERIOD_W1);
            break;
         case KEY_DAILY:
            ChartSetSymbolPeriod(0,NULL,PERIOD_D1);
            break;
         case KEY_4HOUR:
            ChartSetSymbolPeriod(0,NULL,PERIOD_H4);
            break;
         case KEY_1HOUR:
            ChartSetSymbolPeriod(0,NULL,PERIOD_H1);
            break;
         case KEY_5MIN:
            ChartSetSymbolPeriod(0,NULL,PERIOD_M5);
            break;
         case KEY_30MIN:
            ChartSetSymbolPeriod(0,NULL,PERIOD_M30);
            break;
         case KEY_15MIN:
            ChartSetSymbolPeriod(0,NULL,PERIOD_M15);
            break;
         case KEY_MONTHLY:
            ChartSetSymbolPeriod(0,NULL,PERIOD_MN1);
            break;
         case KEY_1MIN:
            ChartSetSymbolPeriod(0,NULL,PERIOD_M1);
            break;
        }
      ChartRedraw();
     }
  }
//+------------------------------------------------------------------+

 
Alexey Viktorov:

Schlechtes Beispiel. Eine Struktur sowie jede global deklarierte Variable ist in jedem Teil des Programms zugänglich.

Das funktioniert auch.

Anders verhält es sich, wenn die Strukturvariable lokal deklariert ist.

Ich danke Ihnen!!!

 
Valeriy Yastremskiy:

Dankeschön