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

 

取引中にカスタムインジケータの入力パラメータを変更し、変更を適用するにはどうすればよいですか?

例えば、マ25があったとして、今度はマ33が必要なんだ。

私の理解では、入力パラメータは初期化時にのみ設定されます。しかし、取引中にインジケータを変更する必要があります。

input int            InpMA_ma_period      = 25;        // Параметры МА 
input int            InpMA_ma_shift       = 0;         // MA PRICE_HIGH and PRICE_LOW: horizontal shift 
input ENUM_MA_METHOD InpMA_ma_method      = MODE_SMA;  // MA PRICE_HIGH: smoothing type 

int            handle_MA; 

int OnInit()
  {
    handle_MA=iCustom(m_symbol.Name(),Period(),"MA",InpMA_ma_period,InpMA_ma_shift,InpMA_ma_method,PRICE_CLOSE);
  }

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   InpMA_ma_period      = 33;
  }
 
ilvic:

取引中にカスタムインジケータの入力パラメータを変更し、変更を適用するにはどうすればよいですか?

例えば、マ25があったとして、今度はマ33が必要なんだ。

私の理解では、入力パラメータは初期化時にのみ設定されます。しかし、取引中にインジケータを変更する必要があります。

事前にTWO指標を作成する。

 
Vladimir Karputov:

事前にTWO指標を作成する。

いや、2つのインジケーターは必要ない。これは取引中に変更しないといけないですね。

いわば、ダイナミクスを持たせたいのです。

ダウンロードし、新しいパラメータで読み込むことはできますか?

 
ilvic:

いや、2つのインジケーターは必要ない。これは取引中に変更しないといけないですね。

いわば、力学です。

何らかの方法でアンロードし、新しいパラメータでロードすることは可能ですか?

3つのインジケータを作成する :)。

一般的には、まず考えて環境を整え、その上で初めてデータを取得することになります。

 
Vladimir Karputov:

3つのインジケータを作成する :)。

一般的には、まず考えて環境を整え、その上で初めてデータを取得することになります。

仮に

EA開始時のMA=25。

新しいティックごとにMA = +1を変更します。

すなわち、MA=26である。

条件によって500個のハンドルは作らない)

 
ilvic:

取引中にカスタムインジケータの入力パラメータを変更し、変更を適用するにはどうすればよいですか?

例えば、マ25があったとして、今度はマ33が必要なんだ。

私の理解では、入力パラメータは初期化時にのみ設定されます。しかし、取引中にインジケータを変更する必要があります。

さて、EAの入力パラメータの 値を変更するとOnInit()が起動され、パラメータの新しい値が適用されるようです。それとも私が間違っているのでしょうか?

 
Vitaly Muzichenko:

EAの入力 パラメータの値が変更された場合、OnInit()が起動し、パラメータの新しい値が適用されることを意味する。それとも私が間違っているのでしょうか?

こんな風に試してみました。

動作しない

input int            InpMA_ma_period      = 25;        // Параметры МА 
input int            InpMA_ma_shift       = 0;         // MA PRICE_HIGH and PRICE_LOW: horizontal shift 
input ENUM_MA_METHOD InpMA_ma_method      = MODE_SMA;  // MA PRICE_HIGH: smoothing type 

double ExtInpMA_ma_period=InpMA_ma_period;
int            handle_MA; 

int OnInit()
  {
    handle_MA=iCustom(m_symbol.Name(),Period(),"MA",ExtInpMA_ma_period,InpMA_ma_shift,InpMA_ma_method,PRICE_CLOSE);
  }

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   ExtInpMA_ma_period      = 33;
  }
 
ilvic:

こんな感じでやってみました。

動作しない。

OnInitを呼び出して インジケータを再初期化する必要があります。

運用中のパラメータ変更の頻度について教えてください。

 
Vitaly Muzichenko:

OnInitを呼び出して、インジケータを再初期化する必要があります。

運用中のパラメータ変更の頻度について教えてください。

こまめに変えようと思っています。

では、コードはこのようにすればいいのですね。

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   
   ExtInpMA_ma_period      = 33;
   OnInit();

  }
 
ilvic:

大きく変えようと思っています。

では、コードはこのようにすればいいのですね。

値が変更されたかどうかをチェックするフラグを付けると、tick毎にOnInitを 叩く必要がない。

こんな感じ。

void OnTick()
  {
   // Ставим новый параметр индикатора и делаем пересчет с новым параметром ???
   static int NewExtInpMA_ma_period;
   if(ExtInpMA_ma_period != NewExtInpMA_ma_period)
    {
     NewExtInpMA_ma_period=ExtInpMA_ma_period;
     OnInit();
    }
  }
理由: