Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1337

 
Olá, poderia dizer-me como passar uma estrutura para uma função, para que as alterações aos elementos da estrutura da função sejam armazenadas na estrutura criada globalmente?
 
Кирилл Смирнов:
Olá, poderia dizer-me como passar uma estrutura para uma função, para que as alterações aos elementos da estrutura da função sejam armazenadas na estrutura criada globalmente?

Passar a estrutura por referência. Exemplo:

//+------------------------------------------------------------------+
//|                                                     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;
  }
//+------------------------------------------------------------------+
Arquivos anexados:
Expert_1.mq5  6 kb
 
Vladimir Karputov:

Passar a estrutura por referência. Exemplo:

Obrigado! De onde veio este exemplo? Eu só estava à procura de algo sobre a minha pergunta na ajuda e não consegui encontrar(((

 
Kira27:

Obrigado! De onde veio este exemplo? Eu só estava à procura de algo sobre a minha pergunta na ajuda e não consegui encontrar(((

Implementação real + função composta, por exemplo.

 
Vladimir Karputov:

Implementação real + função de maquilhagem, por exemplo.

OK, mais uma vez obrigado!

 
Vladimir Karputov:

Implementação real + função de maquilhagem, por exemplo.

Mau exemplo. Uma estrutura, assim como qualquer variável declarada globalmente, é acessível em qualquer parte do programa.

Também funcionará desta forma.

//+------------------------------------------------------------------+
//| 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;
  }
//+------------------------------------------------------------------+

É diferente se uma variável de estrutura for declarada localmente.

//+------------------------------------------------------------------+
//| 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;
  }
//+------------------------------------------------------------------+
 
Olá a todos. O MT5 está a carregar gigabytes de dados quando se trabalha com múltiplas ferramentas. Há alguma forma de o limitar nas definições? Quero que os gráficos mensais, semanais e diários sejam desenhados como no MT4, ou seja, cada barra é (aberta, alta, baixa, fechada) sem qualquer história interna extra. E já os gráficos com barras intradiárias foram construídos de acordo com o actual princípio MT5 (implementação).
 
Vladimir Makhnin:
Como aumentar/diminuir o período de tempo com o mt5?

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Indicadores: Mudança de prazos com Hotkeys

SanAlex, 2020.08.07 11:59

penso que seria o mesmo para o mt4 e 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:

Mau exemplo. Uma estrutura, assim como qualquer variável declarada globalmente, é acessível em qualquer parte do programa.

Isto também irá funcionar.

É diferente se a variável estrutura for declarada localmente.

Obrigado!!!

 
Valeriy Yastremskiy:

Obrigado
Razão: