初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1337

 
構造体を関数に渡して、関数内で構造体の要素を変更すると、グローバルに作成された構造体に保存されるようにするには、どうしたらよいでしょうか?
 
Кирилл Смирнов:
構造体を関数に渡して、関数内で構造体の要素を変更すると、グローバルに作成された構造体に保存されるようにするには、どうしたらよいでしょうか?

構造体を参照渡しする。例

//+------------------------------------------------------------------+
//|                                                     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;
  }
//+------------------------------------------------------------------+
ファイル:
Expert_1.mq5  6 kb
 
Vladimir Karputov:

構造体を参照渡しする。例

ありがとうございます!この例はどこから出てきたのでしょうか? ちょうどヘルプで私の質問に関するものを探していたのですが、見つかりませんでした((

 
Kira27:

ありがとうございます!この例はどこから出てきたのでしょうか? ちょうどヘルプで私の質問に関するものを探していたのですが、見つかりませんでした((

例えば、リアルな実装+作り込んだ機能。

 
Vladimir Karputov:

リアルな実装+作り込んだ機能を例として

OK、いつもありがとうございます

 
Vladimir Karputov:

リアルな実装+作り込んだ機能を例として

悪い例です。構造体は、グローバルに宣言された変数と同様に、プログラムのどの部分でもアクセス可能です。

こちらもうまくいくでしょう。

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

構造体変数がローカルに宣言されている場合は別です。

//+------------------------------------------------------------------+
//| 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;
  }
//+------------------------------------------------------------------+
 
皆さん、こんにちは。MT5では、複数のツールで作業する際に、ギガバイト単位のデータを読み込んでいます。設定で制限する方法はないのでしょうか?月足、週足、日足のチャートをMT4と同じように描画したい。つまり、すべてのバーが(始値、高値、安値、終値)で、余計な内部履歴はない。そして、すでに日中バーを持つチャートは、現在のMT5の原則(実装)に従って作られています。
 
Vladimir Makhnin:
mt5でタイムフレームを増加/減少させる方法は?

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

インディケーター:ホットキーでタイムフレームを変更する

サン・アレックス さん 2020.08.07 11:59

mt4でも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:

悪い例です。構造体は、グローバルに宣言された変数と同様に、プログラムのどの部分でもアクセス可能です。

これも有効でしょう。

構造体変数がローカルに宣言されている場合は別です。

ありがとうございます!!!

 
Valeriy Yastremskiy:

ありがとうございました。
理由: