スライダーを一番右にすると尋常じゃない速さに
EAにしてもインジケーターにしても、バックテストにおいてチャートを表示しながら動作確認することはよくあると思います。
[ビジュアルモード]にチェックを入れればチャートに表示され、動作の速度を変えたい場合は、スライダーを左右に動かしてあげればOKですね。右に動かせば速くなるわけですが、一番右(32)とその1つ手前(31)では全然スピードが違うのに驚きませんか?
私のPCの場合、31以下だと遅いなぁという感じで、32だと超高速になり、動体視力のテストかのごとく、どんどん進んでしまいます。
使いにくいこと、この上ない仕様です。というわけで、何とかならないかとググッていましたら、素敵な方法を見つけました。
VisualMode でのバックテスト中に、日付が変わる度に一時停止させる。
「その手があったか!」と目からウロコでした。
早速私もバックテストのスピードを調整するインジケーターを作ってみました。よかったらお使いください。
使い方は簡単です。EAないしインジケーターのバックテストを開始してチャートが表示されたら、一時停止して、そのチャートにスピード調整用のインジケーターを挿入するだけです。
パラメータのSpeedBrakeの値が大きいほどゆっくりになります。但し、30,000あたりを超えると動きがカクカクになるので、やり過ぎにはご注意ください。
//+------------------------------------------------------------------+ //| TesterSpeedAdjuster.mq4 | //| Copyright (c) 2016, りゅーき | //| https://autofx100.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright (c) 2016, りゅーき" #property link "https://autofx100.com/" #property version "1.00" //+------------------------------------------------------------------+ //| EAパラメータ設定情報 | //+------------------------------------------------------------------+ extern int SpeedBrake = 20000; // 数字が大きいほどスピードは遅くなる //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit(void) { } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| 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[]) { if(IsVisualMode() == true){ int cnt = 0; // 無駄なループを実行することで、バックテストのスピードを落とす。 // バックテストのスピード調整スライダーが一番右(32)の時に効力を発揮。 while(cnt < SpeedBrake){ cnt ++; } } return(0); }