ライブラリ: マルチテスター - ページ 56

 

価格履歴の一部を表形式で表示する必要がある場合があります。これはCTRL+Uでバー/ティック・タブを選択する。そこに必要な間隔を手で入力する。これは面倒だ。


そこで、以下のエキスパート・アドバイザーのような機能を追加しました。

#include <fxsaber\MultiTester\MTTester.mqh> //https://www.mql5.com/ja/code/26132
#include <fxsaber\Keyboard\Keyboard.mqh> //https://www.mql5.com/ja/code/48393

input bool inTicks = true; // true:ティック、false:バー
input int inBefore = -60; // 秒前
input int inAfter = 60;   // 秒後
input ENUM_TIMEFRAMES inPeriod = PERIOD_CURRENT; // 期間(バー・モード)

datetime GetTime( const int X )
{
  int Window;
  datetime Res;
  double Price;
    
  return(ChartXYToTimePrice(0, X, 0, Window, Res, Price) ? Res : 0);
}

void OnChartEvent( const int32_t id, const long &lparam, const double&, const string& )
{
  if ((id == CHARTEVENT_CLICK) && KEYBOARD::IsControl())
  {
    const datetime Time = GetTime((int)lparam);

    if (Time)
    {
      if (inTicks)
        MTTESTER::CopyTicks(_Symbol, Time + inBefore, Time + inAfter);
      else
        MTTESTER::CopyRates(_Symbol, inPeriod, Time + inBefore, Time + inAfter);      
    }    
  }
}


チャートの必要な場所をクリック(CTRLを押したまま)すると、自動的に対応する表データが一度に得られる。

選択した関数は、特定のデータ・フィールドに入力し、照会するだけです。そして、GUI を通して、興味のあったものを見ることができる。一般的には自動化である。

 
おそらく、さまざまな便利な機能を組み合わせたEAツールを書くというアイデアは良いものだろう。
 

5430 タスクの準備中にウィンドウが点滅します。

どうすれば直りますか?

 
Aleksei Skrypnev #:

5430 課題準備中にWindowsがまだ点滅する

どうすれば直りますか?

このようにします。
Попробуйте загрузить все файлы в архиве.
Попробуйте загрузить все файлы в архиве.
  • 2025.12.22
  • www.mql5.com
если бы время файлов в архиве совпадало со временем модификации в кодобазе. Не соответствует времени изменения конкретного файла. Я вижу корректную структуру после разархивирования а ведь сам редактор позволяет загрузить все эти файлы именно так
 

素晴らしいテーマだ。しかし、私はまだ別にすべてが点滅する前にダウンロードしました。

私はファイルMultiTester_Example.mq5で それを見た

MultiTester_Example.mq5ファイルに行を追加しました。

#define  FAKE // Remove - KBにコードを配置するバイパス。

#ifdef  FAKE
  void OnStart() {}
#else // #ifdef FAKE
#endif // #ifdef FAKE #else

このようにコメントしたのですが、それとも違うようにすべきでしょうか?それとも、この4行をすべて削除してもいいですか?

//#define FAKE // KBにコードを配置するためのバイパス。

#ifdef FAKE// void OnStart() {}.

#else // #ifdef FAKE

#endif // #ifdef FAKE #else


追伸:これらの行がない古いタスクのリストを取ってみると、ちらつきがありました。新しい行では点滅しません。

しかし、1行だけコメントアウトしたのは正しかったのでしょうか?

 
Aleksei Skrypnev #:

素晴らしいテーマだ。でも、その前にダウンロードしたものは、すべて別にまだ点滅している。

ファイルMultiTester_Example.mq5で それを見ました。

追加された行

このようにコメントしました。それとも、この4行をすべて削除してもいいのでしょうか?


P.S.これらの行がない古いタスクリストを取ってみると、点滅していました。新しい行では点滅しません。

しかし、私は1行だけ正しくコメントしたのでしょうか?

あなたの理解は正しいです:コメントを削除するか、この4行を完全に削除してください。
 
こんにちは、fxsaberさん!問題を解決するのを手伝ってください。私のスクリプトには、素晴らしいMTTESTERライブラリの助けを借りて開発したアーカイブ関数があります。それは次の行でTesterフォルダにSettinを書き込みます: if(!kernel32::CopyFileW(SrcPath,DstPath,false)) // FilesサンドボックスからTesterフォルダにSettinを上書きします。アーカイブ後 "という名前のセットを得る。しかし、エンコーディングの関係で、これ以上の手直しには適さないようです。しかし、Strategy Testerで ロボットに手動で書き込み、"After manual writing to the robot and saving "という名前で保存すれば、このセットはすでに適切なものになる。しかも、単にヘッダーを変えればいいという問題ではない。鉄人たち(Qwen、Deep Seek)に助けを求めたところ、「ReloadSetsFromCommonFixed」というスクリプトを生成してくれた。それは素晴らしい機能をたくさん持っていて、次の行を除いては機能する:if(!FileCopy(source_path, FILE_COMMON, dest_path, FILE_COMMON))セットはコピーされるが、検証プリントアウトの出力がアブラカタブラになる。Ironは4つの解決策を提示したが、どれもうまくいかなかった(テキストにはそのすべてが載っている)。私の最後の望みは革製のものです。if(!kernel32::CopyFileW(SrcPath,DstPath,false))を変更することで、ロボットに手動で書き込んだ後、必要なフォーマット "After manually writing to the robot and saving "で保存することもシミュレートできますか?よろしくお願いします。
 
klycko #:
アーカイブ機能でこの行を変更する方法はありますか?

私はここで(開いたウィンドウでアドレスバーのENTERを押す)設定されたレコードを調べました。ほとんどの場合、これらのフラグが必要です。

FileOpen(FileName, FILE_WRITE | FILE_UNICODE | FILE_TXT);
 

これらのフラグが大いに役立ち、アーカイブの問題は解決した。結果は正しい形式になっています。

ありがとうございました!

しかし、私のスクリプト Nocturne では、コマンドが正しく動作しません

prWrite0 = MTTESTER::SetSettings2(Settings); // ロボットに設定を書き込む

実行後、prWrite0 = trueになりますが。

おそらく、フォルダからSettingsセットを読み込む際のフラグの問題だと思われます。

これはGetKthFileContent関数で行われ、その関数は次のような行を持っている:

int handle = FileOpen(full_path, FILE_READ | FILE_WRITE |FILE_UNICODE| FILE_TXT | FILE_COMMON);

以下の行の変形も動作しない:

// int handle = FileOpen(full_path, FILE_READ | FILE_TXT | FILE_COMMON); // ソース バリアント

// int handle = FileOpen(full_path, FILE_READ | FILE_UNICODE | FILE_TXT | FILE_COMMON);

次のコマンド

prRead0 = MTTESTER::GetSettings(Control); // インストールされたばかりのロボット設定を読み込みます。

は正しく動作し、実行後は prRead0 = true となります。

しかし、ControlネットワークではprMFI=trueとなっています。これは、書き込み記号 prWrite0 = true であるにもかかわらず、ロボットへの書き込みが実際には行われなかったことを意味します。

元のネットワークでは prHEX=true

ロボットの元のネットワークでは prMFI=true

MTTESTER::SetSettings2(Settings)コマンドは動作しますが、これらの設定はロボットに表示されません。

何が問題なのでしょうか?

アレクサンダー

 
klycko #:

では、何が問題なのか?

私はフラグを勉強するのは面倒だったので、テスターのセットファイルをセーブしたりロードしたりするための実用的なコードを書くことにした。

// テスターのセットファイルをロード/保存する。
#property script_show_inputs

input bool inLoad = true; // 設定のロード/保存 - true/false

#include <fxsaber\MultiTester\MTTester.mqh> //https://www.mql5.com/ja/code/26132

void OnStart()
{
  const string FileName = __FILE__ + ".set";
  
  string Settings;
  ushort Words[];  
      
  if (inLoad) // 設定をロードする。
  {
    Print("Load: " + (string)FileLoad(FileName, Words));
    Settings = ShortArrayToString(Words, 1); // 1 - ユニコード
    
    Print(MTTESTER::SetSettings(Settings));
  
  }
  else if (MTTESTER::GetSettings(Settings)) // 設定を保存します。
  {
    Words[ArrayResize(Words, 1) - 1] = 0xFEFF; // 1 - ユニコード
    
    StringToShortArray(Settings, Words, ArraySize(Words));    
    Print("Save: " + (FileSave(FileName, Words) ? (string)ArraySize(Words) : "error"));
  }
}


スクリプトを通してセットファイルを保存(inLoad = false)し、その中の 何かを手で変更し、スクリプトを通してテスターにロード(inLoad = true)することができる。

うまくいったら、対応するソースの断片を自分で取ってみてください。