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

 
Sayberix:

読んでいます。ただ、まだそこに到達していないだけだと思います。28MBのpdfリファレンスを読みこなすのは容易ではないと思います。別の言い方をすれば、敬虔な信者であっても、すべての教区民が聖書を全部知っているわけではない、ということです。

もう一つ質問があるのですが、アドバイスお願いします-難しくなければ。

ストラテジービジュアライザーでコードを実行するとき。

1. プログラムが無限ループに入る。

2.実行結果が異なる。

ブレークポイントなし

Printにブレークポイントを設定した場合。


すべてヒストリカルデータのデバッグで行っています。

常に変数を増やしているのですね。変数の大きさが限界を超えるのは、いつ頃だと思いますか?

 
Vladimir Karputov:

常に変数のサイズを大きくしているのですね。変数の大きさが限界を超えるのは、いつ頃だと思いますか?

ulongの 10回の繰り返しで十分だったのではないでしょうか。そこで問題となるのが

1.なぜループが切れないのか? と

2.なぜ、反復時間カウンターの結果そのものが表示されないのでしょうか?


デバッグが過去のデータで行われたからでしょうか?

 
Sayberix:

10回の繰り返しではulongで 十分だったのではないでしょうか。そこで問題となるのが

1.なぜループが切れないのか? と

2.なぜ、反復時間カウンターの結果そのものが表示されないのでしょうか?


過去データでのデバッグが原因か?

あなたは、グローバルなプログラムレベルで宣言された変数を持っています - あなたは常にそれを増加している。

 
ああ、なるほど...。イテレーションにかかる時間は1ミリ秒以下...。
 
Vladimir Karputov:

あなたは、グローバルなプログラムレベルで宣言された変数を持っています - あなたは常にそれを増加している。

グローバル変数が どう関係するのか、まだ理解できていません。プログラム自体は、「for(int i=1; i<=10; i++)」というループに限定されていますね?

それとも何か理解できないことがあるのか、説明をお願いします。

 
Sayberix:

グローバル変数 がどう関係するのか、まだ理解できていません。プログラム自体は、「for(int i=1; i<=10; i++)」というループに限定されていますね?

それとも何か理解できないことがあるのか、説明をお願いします。

変数の削除

ulong count, raschet = 1;

グローバルスコープから外れる。


各ティックで、変数raschetを繰り返しインクリメントします。そして、次のティックでは、それを数回インクリメントし続けるのです。数ティックでラシェット 変数が圏外に なる。結局、変数の値をプリントアウトするのですが、なぜかプリントアウトを見ません。

 
Vladimir Karputov:

変数を削除する

をグローバルスコープから削除します。


各ティックで、raschet変数を繰り返しインクリメントします。そして、次のティックでは、繰り返しインクリメントし続けるのです。数ティックでラシェット 変数が圏外に なる。最後に変数の値をプリントアウトするのですが、なぜかプリントアウトを見ません。

ありがとう、わかったよ。ただ、returnはプログラムを全く停止させないのに対して、現在のtickでの実行を中断させるだけだと思って混乱してしまいました。return;」の代わりに「ExpertRemove();」と入れました。

 

このコードで教えてください。

//+------------------------------------------------------------------+
//|                                                          env.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property indicator_buffers 2

int envHandle;
double upperEnv[], lowerEnv[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   envHandle = iCustom(_Symbol,_Period,"Examples\\Envelopes",3,0,MODE_LWMA,PRICE_OPEN,0.03);
   if(envHandle<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(INIT_FAILED);
     }
   SetIndexBuffer(0,upperEnv,INDICATOR_DATA);
   SetIndexBuffer(1,lowerEnv,INDICATOR_DATA);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(envHandle);
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {

   ArraySetAsSeries(upperEnv, true);
   ArraySetAsSeries(lowerEnv, true);

   if((CopyBuffer(envHandle,0,0,3,upperEnv)<0) || CopyBuffer(envHandle,1,0,3,lowerEnv)<0)
      Alert("Ошибка копирования буферов индикатора Envelopes - номер ошибки:",GetLastError(),"!!");

   double   upEnv = upperEnv[0];
   double   lowEnv = lowerEnv[0];
  }
//+------------------------------------------------------------------+

常に更新されるEnvelope 行の価格値を変数upEnvとlowEnvで取得するにはどうしたらよいですか?インジケータは描画されますが、変数のインジケータ値は2回更新されて終わりです。

 
Sayberix:

このコードで教えてください。

常に更新されるEnvelope行の価格値を変数upEnvとlowEnvで取得するにはどうしたらよいですか?インジケータは描画されますが、変数のインジケータ値は2回更新されて終わりです。

まず、Expert Advisorを書く のか、それともIndicatorを書くのか、決めてください。(あなたは今、コードが混在しています - インジケータとExpert Advisorが混在しています) - すなわち、コードは動作しません。

ヒント:MQL Wizardを使用してテンプレートを作成します。

 
Vladimir Karputov:

まず、EAを書く のか、インジケータを書くのか、どちらかを決めてください。(今、あなたのコードは混乱しています。インジケータとExpert Advisorの両方が混在しています。) - つまり、コードは実行不可能です。

ヒント:MQL Wizardを使用してテンプレートを作成します。

すでに試しました。しかし、Wizardでクラスを生成します。せめて、少しは理解できるコードにしたい--。EAでインジケータの値を取得するために、どのようにコードを修正すればよいかアドバイスをお願いします。

理由: