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

 

午後

MT5のテスターについて、いくつか質問があります。

1) MT5では、Expert Advisorのビジュアルテストモードでは、Expert Advisorコード内のiCustomを通じて計算されるすべてのインディケータが、チャート自体に適用されます。何らかの方法で無効化/調整することは可能ですか?

2) テスターで「チャート、インディケータ、トレードの表示を伴うビジュアルモード」にチェックを入れて1回テスト実行し、その後、チェックを外して(ビジュアル化なしで)同じテストを実行させています。前者はバランスチャートがごく普通に描かれているが、後者は一部のセルに直線が引かれているだけである。これは何と関係があるのでしょうか?

 
satorifx:

午後

MT5のテスターについて、いくつか質問があります。

1) MT5では、Expert Advisorのビジュアルテストモードでは、Expert Advisorコード内のiCustomを通じて計算されるすべてのインディケータが、チャート自体に適用されます。これを何らかの方法で無効化/調整することは可能ですか?


1.TesterHideIndicators()を使用します。

Документация по MQL5: Общие функции / TesterHideIndicators
Документация по MQL5: Общие функции / TesterHideIndicators
  • www.mql5.com
Задает режим показа/сокрытия индикаторов, которые используются в эксперте. Функция предназначена для управления видимостью используемых индикаторов только при тестировании. По умолчанию на графике визуального тестирования показываются все индикаторы, которые создаются в тестируемом эксперте.  Также эти индикаторы показываются на графике...
 
グラフィカルオブジェクトを削除 するイベントとグラフィカルオブジェクトの名前を変更するイベントを区別する方法。いずれの場合も削除イベントが発生する。どのように見分ければいいのでしょうか?
 
leonerd:
グラフィカルオブジェクトを削除 するイベントとグラフィカルオブジェクトの名前を変更するイベントを区別する方法。いずれの場合も削除イベントが発生します。どのように見分けるのですか?

無理でしょう。リネームとは、削除して新しいものを作ることです。そこで、削除後の作成をキャッチするようにします。

 
このトピックに関連しないコメントは、「MQL4 MT4 MetaTrader 4初心者からの質問」に移動しました。
 

何を書けば6桁のランダムな数字が出るのか、教えてください。

int Random() {
 int r=MathRand(); // 100000 -> 999999
  return(r);
 }
 
Vitaly Muzichenko:

何を書けば6桁のランダムな数字が出るのか、教えてください。

このような解決策を見つけました。

int Random(int min,int max) {
   int v=0;
   MathSrand(GetTickCount());
   while(true) {
      v=MathRand()*2*MathRand();
      if(v>=min && v<=max)
         break;
     }
   return(v);
  }
 
Vitaly Muzichenko:

こんな解決策を発見

Vitaly これは最善の解決策ではありません。

まず、その場合はdo whileループを使った方が良いですね。

次に、個人的な意見ですが、6桁以上の数字は掛け算よりも指数で出した方が安全だと思います。しかし、この場合、INFを取得することは可能です。しかし、パワーの値を制限することはできます。私の例では、パワーは16以下です。

/********************Script program start function*******************/
void OnStart()
 {
  double dr = 0,
         df = 0;
  srand(GetTickCount());
  do
   {
    dr = fabs(rand());
    df = fabs(rand());
   }
  while((dr == 1 || df == 1) && !IsStopped());
  double dp = pow(dr, fmod(df, 16));
  Print(DoubleToString(fmod(dp, 1000000), 8));
 }/*******************************************************************/

そして、割り算の余りを取って、6桁の数字を出す。

 
Alexey Viktorov:

Vitaly これはベストな選択ではありません。

まず、その場合はdo whileループを使うのがよいでしょう。

次に、個人的な意見ですが、6桁以上の数字は掛け算よりも指数で出した方が安全だと思います。しかし、この場合、INFを取得することは可能です。しかし、パワーの値を制限することはできます。私の例では、パワーは16以下です。

そして、割り算の余りを 取ると6桁の数字になる。

ありがとうございます、コードの部分を入れ替えました。

 
Vitaly Muzichenko:

ありがとうございます、コードの一部を置き換えました。

そして、その結果はどうだったのでしょうか。無謬であるとは言いませんが...)))

理由: