28の通貨ペア、1人のエキスパート。もうひとつ、これは誰も見せたことがないと思うのですが、グレイルです。+ デモアカウント - ページ 11

 

スリーストゥージズについて

http://www.libex.ru/detail/book74148.html

 
そうなんです、表紙が同じなんです。
 
MetaQuotes:
ソースも証拠もない写真のオンパレード...。


2ロッシュ

5ページ目のEAでは、すべてのt/fsのBidとCloseの不一致をチェックしていますね。そのようなミスマッチがないのは、テスターで未来を見通すことができないことの裏返しだと解釈しているのですね。当時はまだ、このつながりが不思議に思えた。私の見解では、テストすべきはCloseの挙動ではなく、上位t/fのHighとLowの挙動です。そして、前述のMQさんからの不当な非難を受け、時間を割くことにしたのです。しかし、もう遅かった。

以下は、1分足チャートに1時間または1日の現在の高値と安値を自動生成するExpert Advisorのコードです。そして、1ティックごとに、H1またはD1から取得した時間または日の高値と安値を比較し、不一致の場合はログとファイルに送信します。

 
//+------------------------------------------------------------------+
//|                                           Simple Prospection.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright c 2007, Yurixx"
#property link      ""
double curHi,curLo,HiH1,LoH1;
int    mm,hh,dd,curM1,curH1,curD1,kk,nn,handle;
string str,mHi,mLo,hHi,hLo;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  handle = FileOpen("FU.csv",FILE_CSV|FILE_WRITE," ");
  if(handle<1) { Print("File FU.csv not found, Error:", GetLastError());
                 return(false);   }
  if (Period()>PERIOD_M1)
  {  Print("Период тестирования не соответствует задаче");
     return(-1);
  }
  Print("Период тестирования ",Period()," минут");
  FileWrite(handle,"Date","Time","curHi","HiH1","curLo","LoH1");
  nn=D'2007.07.12 23:58:59';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  nn=D'2007.07.13 00:58:59';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  nn=D'2007.07.13 00:02:00';
  FileWrite(handle,TimeToStr(nn,TIME_DATE|TIME_SECONDS),
                   TimeSeconds(nn),TimeMinute(nn),TimeHour(nn),TimeDay(nn));
  curHi=0.0;
  curLo=1000.0;
  curD1=-1;
  curH1=-1;
  curM1=-1;
  nn=0;//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {  
//----
  mm = TimeMinute(TimeCurrent());
  hh = TimeHour(TimeCurrent());
  dd = TimeDay(TimeCurrent());
  if (mm!=curM1)
  {  if (hh!=curH1)
     {  if (dd!=curD1)
        {  curHi=NormalizeDouble(Bid,Digits);
           curLo=NormalizeDouble(Bid,Digits);
           curD1=dd;
        }
        //curHi=NormalizeDouble(Bid,Digits);
        //curLo=NormalizeDouble(Bid,Digits);
        curH1=hh;
     }
     curM1=mm;
  }
  if (NormalizeDouble(Bid,Digits)>curHi) curHi=NormalizeDouble(Bid,Digits);
  if (NormalizeDouble(Bid,Digits)<curLo) curLo=NormalizeDouble(Bid,Digits);
  //HiH1 = iHigh(NULL,PERIOD_H1,0);
  //LoH1 =  iLow(NULL,PERIOD_H1,0);
  HiH1 = iHigh(NULL,PERIOD_D1,0);
  LoH1 =  iLow(NULL,PERIOD_D1,0);
  HiH1 = NormalizeDouble(HiH1,Digits);
  LoH1 = NormalizeDouble(LoH1,Digits);
  str = TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
  mHi = ", curHi=" + DoubleToStr(curHi,Digits);
  mLo = ", curLo=" + DoubleToStr(curLo,Digits);
  hHi = ", HiH1="  + DoubleToStr(HiH1, Digits);
  hLo = ", LoH1="  + DoubleToStr(LoH1, Digits);
  if (HiH1!=curHi||LoH1!=curLo)
  {  Print(str,mHi,hHi,mLo,hLo);
     FileWrite(handle,TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS),curHi,HiH1,curLo,LoH1);
  }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{  Print("Работа закончена");
   FileClose(handle);
//---- done
   return(0);
}

そして、これは2007.07.10~2007.07.14までEURUSD, M1でこのEAを動かして得られたログの一部です。EAのテキストからわかるように、比較対象は日足データです。しかし、時間単位のデータで比較すると、状況は良くはない。未来を見通すことができるのか、その可能性がないのか、確認を取りたかったのです。しかし、それは全く違うものであることがわかった。

画像からわかるように、テスターがログに出力する時間とExpert Advisorが表示する時間が異なる場合があります。それに加えて、理解しがたい挫折もある。時刻 2007.07.13 00:58, 2007.07.12 00:58, 2007.07.13 00:02, 2007.07.13 00:04, 2007.07.13 00:06, 2007.07.13 00:07。そして、Expert Advisorが出力するたびに2007.07.12 23:58:59。

おそらく、その瞬間のHighとLowのデータのズレは、まさにそのタイミングに失敗したことに起因しているのでしょう。

さらに、init()関数の中にある、print to fileというテストに注目することをお勧めします。このプリントは、テスターで秒単位で動作していないことを示しています。従って、秒単位のTimeToStr()やTimeSeconds()関数は動作しない。もしかしたら、そのように意図されていたのかもしれませんが、では、なぜテスターもExpert Advisorも秒単位のデータを出力するのでしょうか?

HighとLowのデータの食い違いを問題視しているわけでもなく、この曖昧な時代にどこから出てきたデータなのか、絶対に不明だからです。

もうひとつ。2007.07. 10~2007.07.14ではなく、2007.07.09~2007.07.14でテストすると、高・低残高のデータが全くない、つまり変数HiH1とLoH1が常にゼロ値であるという異常事態に遭遇します。

もしかして、どこかで間違えた?

 
ユリックスさん、こんにちは。
コードを何も変えずにExpert Advisorを実行しました。以下は、出力されたファイルの全データです:
日付 時間 curHi HiH1 curLo LoH1<br/ translate="no"> 2007.07.12 23:58:00 0 58 23 12
2007.07.13 00:58:00 0 58 0 13
2007.07.13 00:02:00 0 2 0 13
以下はそのログです。
2007.08.13 09:54:51 2007.07.13 22:59 Simple Prospection EURUSD,M1: 作業終了
2007.08.13 09:54:48 2007.07.10 00:00 Simple Prospection EURUSD,M1: テスト期間1分
2007.08.13 09:54:48 Simple Prospection started for testing
2007.08.13 09:54:45 Simple Prospection: ロード成功
2007.07.10〜2007.07.10までのテストでは一度もエラーがない。07.14.本当だ、そういえば先週のテスト用スペシャルビルドがあることを思い出しました。8月01日からの通常の208ビルド(現在はLibeUpdateで1期更新)でもエラーはありません。
2007.08.13 10:13:04 2007.07.13 22:59 Simple Prospection EURUSD,M1: 作業終了
2007.08.13 10:13:04 2007.07.10 00:00 Simple Prospection EURUSD,M1: テスト期間1分
2007.08.13 10:13:04 Simple Prospection 開始 for testing
問題は、テスト前にヒストリーセンターから見逃したデータをダウンロードし(この端末は数ヶ月間起動していません)、すべてのタイムフレームを再計算しました。ヒストリーセンターで2回目に「ダウンロード」を押すと、この場合はすべてのt/fを自動的に再計算するよう指示されるので、期間 変換は必要ありません(この機能を知らない人がいるかもしれません)。


しかし、その前にログにエラー出力がありました:

2007.08.13 10:08:19 1999.05.26 02:01 Simple Prospection GBPUSD,M1: 作業完了 2007.08.13 10:08:18 1999.01.04 09:31 Simple Prospection GBPUSD,M1: 1999.01.04 09:31:00, curHi=1.6718, HiH1=1.6718,curLo=1.6682, LoH1=1.を取得しました。6684 2007.08.13 10:08:18 1999.01.04 09:30 Simple Prospection GBPUSD, M1: 1999.01. 04 09:30:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1.1, M2: 1999.01.04 09:30:30 Simple Prospection GBPUSD, M3: 1999.01.6684 2007.08.13 10:08:18 1999.01.04 09:29 Simple Prospection GBPUSD, M1: 1999.01. 04 09:29:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1.6718.6684 2007.08.13 10:08:18 1999.01.04 09:28 Simple Prospection GBPUSD, M1: 1999.01. 04 09:28:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1.1, M2: 1999.01.04 09:28:00, M3: 1999.01.6684 2007.08.13 10:08:18 1999.01.04 09:27 Simple Prospection GBPUSD, M1: 1999.01. 04 09:27:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1.6718, M2: 1999.01.04 09:27:00, curHo=1.6718, LoH1=1.6718, M3: 1999.01.02 09:27, M4: 1999.01.02 09:286684 2007.08.13 10:08:18 1999.01.04 09:26 Simple Prospection GBPUSD, M1: 1999.01. 04 09:26:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1.6718.6684 2007.08.13 10:08:18 1999.01.04 09:25 Simple Prospection GBPUSD, M1: 1999.01. 04 09:25:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1.6718, M2: 1999.01.04 09:25: 00, curHo=1.6682, LoH1=1.6718, M3: 1999.01.04 09:25: 006684 2007.08.13 10:08:18 1999.01.04 09:24 Simple Prospection GBPUSD, M1: 1999.01. 04 09:24:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1.6718.6684 2007.08.13 10:08:18 1999.01.04 09:23 Simple Prospection GBPUSD, M1: 1999.01. 04 09:23:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1.6718, M2: 1999.01.04 09:25,M3: 1999.01.6684 2007.08.13 10:08:18 1999.01.04 09:22 Simple Prospection GBPUSD, M1: 1999.01. 04 09:22:00, curHi=1.6718, HiH1=1.6718, curLo=1.6682, LoH1=1.6682.6684 2007.08.13 10:08:18 1999.01.04 09:21 Simple Prospection GBPUSD, M1: 1999.01. 04 09:21:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1.6682.6684 2007.08.13 10:08:18 1999.01.04 09:20 Simple Prospection GBPUSD, M1: 1999.01. 04 09:20:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1.6682.6684 2007.08.13 10:08:18 1999.01.04 09:19 Simple Prospection GBPUSD, M1: 1999.01. 04 09:19:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1.6682.6684 2007.08.13 10:08:18 1999.01.04 09:18 Simple Prospection GBPUSD, M1: 1999.01.04 09:18:00, curHi=1.6702, HiH1=1.6702, curLo=1.6682, LoH1=1.6702.6684 2007.08.13 10:08:18 1999.01.04 09:17 Simple Prospection GBPUSD, M1: 1999.01. 04 09:17:00, curHi=1.6701, HiH1=1.6701, curLo=1.6682, LoH1=1.6701, M2: 1999.01.04 09:17:00, curLo=1.6682, LoH1=1。6684 2007.08.13 10:08:18 1999.01.04 09:16 Simple Prospection GBPUSD, M1: 1999.01. 04 09:16:00, curHi=1.6701, HiH1=1.6701, curLo=1.6682, LoH1=1.6701, M2: 1999.01.04 09:16: 00, curHi=1.6701, HiH1=1.6701, curLo=1.6682、LoH=1.6682。6684 2007.08.13 10:08:18 1999.01.04 09:15 Simple Prospection GBPUSD, M1: 1999.01. 04 09:15:00, curHi=1.6687, HiH1=1.6687, curLo=1.6682, LoH1=1.6682.6684 2007.08.13 10:08:18 1999.01.04 09:14 Simple Prospection GBPUSD, M1: 1999.01. 04 09:14:00, curHi=1.6687, HiH1=1.6687, curLo=1.6682, LoH1=1.6682.6686 2007.08.13 10:08:18 1999.01.04 09:13 Simple Prospection GBPUSD, M1: 1999.01. 04 09:13:00, curHi=1.6682, HiH1=1.6697, curLo=1.6682, LoH1=1.6697.6597 2007.08.13 10:08:15 1999.01.04 09:13 Simple Prospection GBPUSD,M1: Testing period 1 minute 2007.08.13 10:08:15 Simple Prospection started for testing






















EURUSDはそのデータをダウンロードしましたが、GBPUSDは汲み取れず再計算して テストを開始しました。それが、矛盾の原因だったのです。
同じように、データをロードして自動的に同期させるか、ピリオド変換スクリプトを使用してみてください。

秒の件は調べてみます、ありがとうございました。
 

Roshさん、こんにちは。

ご返信ありがとうございます。私が理解する限り、異なるファンネルのHighとLowのデータのミスマッチは、見積もりフローの品質に起因するとお考えなのですね。このように、ファンネルによってローソク足の形成が異なるため、1~2~3pipsの差が出てしまうことがあります。十分あり得ます。

MQのデモサーバーのデータを使ってテストしています。しかも、リアルタイムで書いているわけではなく、週に一度、週末に全データをダウンロードしています。 実は、ローソク足は、少なくともサーバー上では、サーバーソフトが、一つの気配値フローに基づいて、すべてのTFについて同期して描いているので、そのような差異はありえないと思っていたのです。そうでない場合は、残念ですが、何らかの形で考慮する必要があります.データや同期などを組み合わせて、すべてを見栄えよくするのは、私の考えでは間違った方法です。お客様のサーバーもブローカーのサーバーも、データをそのまま配信しています。特にテスト工程では、このデータが重要です。テスターにスペースがあり、実際の取引ロボットで損失が出るというgrailsの 問題は誰もが知っています。それはどこから来るのか?MQは、未来を見ることは不可能であり、ティック・モデリングはそのプロセスに極めて適切であると主張している。ということを想定しなければなりません。したがって、確かに、問題はデータか?MQはこの問題を解決することはできません、データはそれに依存しません。そうすると、きれいに櫛でといたデータだけでなく、どんなデータでもテスターが正しく動作するようにする必要があります。

しかし、私の投稿は、異なるT/Fのデータの不一致についてではなく、時間経過による混乱についてです。投稿したからといって問題がなくなるわけではありませんしね。逆に、あなたの投稿に関連して、私は次のことを尋ねたいと思います。

私のログでは、テスターとEA両方の時間データには秒数が含まれています。テスターのデータには全く秒が入っておらず、EAのデータにはゼロ秒しか入っていない。 これは、どのようなモードでテストを行ったかということだ。はっきりさせておきたいのは、このEAは 「全ティック」モードでのテストのみを 想定しているということです。そして、私が遭遇したエラーは、このモードからしか再現できないのです。したがって、他のモードでテストしていた場合は、テストを繰り返してください、1秒しかかかりません。

原理的には、どのペアで、どの日付範囲でテストしても、全く違いはありません。また、M1以外のTFでは、Expert Advisorは動作しません。しかし、我々の結果を比較できるようにするために、EURUSDで、2007.07.10と 2007.07.14の間のレンジで、また、別のテストでは、2007.07.09と 2007.07.14の間のレンジでテストすることをお願いしています。

あらかじめご了承ください。

 
Yurixx:

Roshさん、こんにちは。

私のログでは、テスターとEA両方の時間データに秒が含まれています。あなたの場合は、テスターのデータには秒数が全く入っておらず、EAのデータには0秒しか入っていません。では、どのようなモードでテストされたのでしょうか?はっきりさせておきたいのは、このEAは 「全ティック」モードでのテストのみを 想定しているということです。そして、私が遭遇したエラーは、このモードからしか再現できないのです。そのため、他のモードでテストしていた場合は、テストを繰り返してください。数秒しかかかりません。

原理的には、どのペアで、どの日付範囲でテストしても、全く違いはありません。また、M1以外のTFでは、Expert Advisorは動作しません。しかし、我々の結果を比較できるようにするために、EURUSDで、2007.07.10と 2007.07.14の間のレンジで、また、別のテストでは、2007.07.09と 2007.07.14の間のレンジでテストすることをお願いしています。

よろしくお願いします。


確かに、今調べてみたら、秒殺はなかったですね。最初のテストでは GBPUSDの1時間足と1日足のデータを 自動で読み込んで いなかった(ターミナルでチャートを全く開いていなかった)ことが関係していると思うのですが、今2回目の確認をしてみたところ、エラーは出ていませんでした。最初のテスト実行で 必要なデータを読み込んでいたのです。

つまり、初回はGBPUSDのH1期間とD1期間のデータがなかったため、モデリングに誤差が生じたのです。
 
ご質問の通り「EURUSDで2007.07.10~2007.07.14の範囲で、また別のテストで2007.07.09~2007.07.14の範囲で」テストしてみましたが違いはありません。
 
Rosh:

秒の件は調べてみます、ありがとうございました。


秒数に関するエラーが修正されました(コンパイラにて)。修正されたビルドは近日公開予定です。
 
Rosh:
秒数に関するバグが(コンパイラで)修正されました。 修正したビルドは近日公開予定です。
修正ビルドでは、テスターのgrail77は もう動作しないのでしょうか?
 
granit77:
ロッシュ
秒数に関するバグが(コンパイラで)修正されました。修正されたビルドは近日中に公開されます。
修正後のビルドでは、grail77はもう動作しないのでしょうか?

明日、確認します。