スライダーを一番右にすると尋常じゃない速さに
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);
}
