テスターからのロングトレードのコピーから身を守る方法 - ページ 3

 
George Merts:
ああ、それは分かる。しかし、繰り返しになりますが、ストラテジーテスターでは- 順次ティックを取得し、いつ最後のティックを取得するのかわかりません。
最初のバーの時間(スタート)と、シンボルの履歴の中のバーの数が分かれば十分です。
 

dllは必要ありません

Initeでは、最初のバーとバーの数を文字(any)で引っ張って くることができるものがあるようです。ただし、これは古いビルドの場合です。また、テスターで動くかどうかもわかりません。しかし、MT4ではDLL無しで履歴にアクセスできます。

int init()
{
        int    _GetLastError = 0, cnt_ticks = 0, cnt_bars = 0, temp[13];
        // запоминаем символ графика, обнуляем хэндл окна off-line графика
        _Symbol = Symbol();
   hwnd = 0;

        // открываем файл, в который будем записывать историю
        string file_name = StringConcatenate( "!Eqv", _Symbol, TicksInBar, ".hst" );
        int sd_=iBars("!Eqv"+ _Symbol,TicksInBar)-1;
   double Open_[],
          Close_[],
          High_[],
          Low_[];
   int Time_[];
   ArrayResize(Open_,sd_+1);
   ArrayResize(High_,sd_+1);
   ArrayResize(Low_,sd_+1);
   ArrayResize(Close_,sd_+1);
   ArrayResize(Time_,sd_+1);
        for(int sd=iBars("!Eqv"+ _Symbol,TicksInBar)-1;sd>=0;sd--)
        {
           Time_[sd]=iTime("!Eqv"+ _Symbol,TicksInBar,sd);
           Open_[sd]=iOpen("!Eqv"+ _Symbol,TicksInBar,sd);
           Close_[sd]=iClose("!Eqv"+ _Symbol,TicksInBar,sd);
           High_[sd]=iHigh("!Eqv"+ _Symbol,TicksInBar,sd);
           Low_[sd]=iLow("!Eqv"+ _Symbol,TicksInBar,sd);
           //Print(sd," ",GetLastError()," ",Time_[sd]," ",Low_[sd]," ",High_[sd]," ",Close_[sd]," ",Open_[sd]);
        }

        return(0);
}
 
Alexandr Bryzgalov:
最初のバーの時間(スタート)とシンボルヒストリーのバーの本数が分かれば十分です。

ストラテジーテスターでは、最初のバーの時刻が受信ティックの時刻となります。そして、ストラテジーテスターのティックの登場により、常に増加します。

具体的な例を挙げると

-----------------------------------------------

現在の日付は2015.05.1、昨年に引き続き攻略テスターを開始します。ストラテジーテスターの最初のティックで、2015.1.1のゼロバーの時間を取得することができます。とはいえ、パソコンでの実時間は2015.5.1ですが。ティックがストラテジーテスターに入ってくると、日付が移動し、ゼロバーも同様に移動します。

ファイル操作を使うと、最後(ゼロバー)の日付が2015.1.1であっても、実時間は2015.05.1であることがわかります。従って、テスターでは2015.04.1までのティックのみを処理しています。

新しい実際の日が来ると - テスターで我々はより多くの後日談を取得し、それに応じて、プロセスは、さらにさらに、実際の日付に月よりも近くない刻み目を表示します。

さて、そのユーザーが、我々をだまそうと、コンピュータの日付を6カ月先に設定した。さて、テスターでは、日付1.05.2015と一緒に我々は日付1.11.2015を取得し、刻みは、実際の日付という事実にもかかわらず、2015年1月10日まで処理されます - まだ2015年1月05日、および端末で本当にこの日だけにデータを取得します。しかし、テスト開始時にテスターからこの値を取得することはできません。

これが問題なのです。

つまり、テスターに記録された時系列の本当の最終日をテスターから取得できれば、この問題は解決するのです--。しかし、問題は、その方法が明確でないことです。

 
Alexandr Bryzgalov:

dllは必要ありません

Initeでは、最初のバーとバーの数を文字(any)で引っ張って くることができるものがあるようです。ただし、これは古いビルドの場合です。また、テスターで動くかどうかもわかりません。しかし、MT4ではDLL無しで履歴にアクセスできます。

Initeでは、日付は2015年1月1日となり、それに伴い、すべてのバーがこの日付からのみ引き出されます。ただし、実際の日付は2015.5.1ですが
 
George Merts:

ストラテジーテスターでは、最初のバーの時刻が受信ティックの時刻となります。そして、ストラテジーテスターのティックの登場により、常に増加します。

具体的な例を挙げると

-----------------------------------------------

現在の日付は2015.05.1、昨年に引き続き攻略テスターを開始します。ストラテジーテスターの最初のティックで、2015.1.1のゼロバーの時間を取得します。とはいえ、パソコンでの実時間は2015.5.1ですが。ストラテジーテスターに刻みが入ってくると、日付が移動し、ゼロバーも同様に移動します。

ファイル操作で、最後(ゼロバー)の日付が2015.1.1であっても、実時間は2015.05.1であることを取得することができます。従って、テスターでは2015.04.1までのティックのみを処理しています。

テスターでは、新しい本当の日が来ると、どんどん後の日付になり、それに応じて、刻みをどんどん遠くに処理していきますが、本当の日に近づくのは1ヶ月以内です。

さて、そのユーザーが、我々をだまそうと、コンピュータの日付を6カ月先に設定した。さて、テスターでは、日付1.05.2015と一緒に我々は日付1.11.2015を取得し、刻みは、実際の日付という事実にもかかわらず、2015年1月10日まで処理されます - まだ2015年1月05日、および端末で本当にこの日だけにデータを取得します。しかし、テスト開始時にテスターからこの値を取得することはできません。

これが問題なのです。

つまり、テスターに記録された時系列の本当の最終日をテスターから取得できれば、この問題は解決するのです--。しかし、問題は、その方法が明確でないことです。

履歴ファイルがあるので、それを開いて(FileOpenHistory)、読み、最初の(履歴の一番左の)バーを見つけ、その時間を読み、バーの合計数を数える必要があります。

これだけで、テスターでExpert Advisorを適切なタイミングで停止させる操作ができるようになります。

 
最終日ではなく、ヒストリーファイルの最初の日付と、ヒストリーファイルのバーの 総数をinitから読み出して取得します
 
Alexandr Bryzgalov:

履歴ファイルがあるので、それを開いて読み、最初のバー(履歴の一番左のバー)を見つけ、その時間を読み、バーの合計数を計算する必要があります。

これは、テスターでEAを適切なタイミングで停止させる操作をするのに十分なものです。

では、Strategy Testerから どのようにアクセスすればよいのでしょうか?上記で提案した方法は、標準関数を使ってバーを取得し、ストラテジーテスターのIniteで2015年1月1日を返します(その日付からテストを実行した場合)。
 
Alexandr Bryzgalov:
最後の日付を取得する必要はなく、ヒストリーファイルの最初の日付とヒストリーファイルのバーの 合計数をinitから読み込んで取得する必要があります。

А !今のは面白いですね。

試してみるしかないですね。

 
George Merts:
その通りなのですが、ストラテジーテスターから どのようにアクセスするのでしょうか?

では、これは通常のファイル操作なのか、それともテスターが履歴にアクセスできないのか?

私自身は試していませんが、ヘルプでは禁止されていません

 
ループから外れているかもしれませんが、OnTesterInit()でTimeLocalと TimeGMTをチェック し、日数の差を求めると、実時間とテスター時間のどちらを表示するのでしょうか?
理由: