標準のインジケーターが上書きされるのか!? - ページ 3

 
Roshさん、USDCHFのバーの開始が遅いためにエラーが発生するのかどうかを考えているところなんです。これを追うために、MAを削除し(邪魔なだけ)、さらにClose[1]とOpen[1]を導入しています。Open[1]が常に正しいことを意味し、これが問題であれば、その不一致はOpen[0]にあり、Open[1]にはないことになります。今すぐ確認する何を見逃したのか?
 
さて、2枚の写真を添付しましたが、GBPJPYに新しいバーが 表示されたとき、変更されていない古いUSDCHFのチャートデータを参照しているため、アルゴリズムが正しく計算されていないことがわかります。それが正しくカウントされるのは1つのケースだけで、それはネイティブの「チャート」に載せた場合ですが、目的はその逆です。
 
私もそう思います。ただし、Open[1]でテストしてエラーがないことが確認できた場合に限ります。その場合、私は、はい、MTにはバグがないことを確認します。あるある...。という、いわば控えめな表現。

さらに、その制限を回避する方法を見つけることも課題です。例えば、USDCHFのデータが到着するまでEURUSDのインジケータの再描画を禁止する。現在、次のようなバリエーションをテストしています。

while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF",0,0)))。



しかし、それはMTがIndicatorCountedをどのように計算するかによります。ティック到着時間による場合は動作しませんが、バー再描画の事実による場合は動作します。見てみよう。

 
現在、日本時間では11時56分、サーバー時間では9時56分です。
Open[1]EURUSD H1 is 1.2755
Open[1] USDCHF H1 is 1.2443

EURに 新しい1時間バーが現れ、フランにはまだ 何も変化していない。アルゴイトムは何をするのですか?
 
私もそう思います。ただし、Open[1]でтестирование 、エラーが発生しないことを示す場合に限ります。その場合、私は、はい、MTにはバグがないことを確認します。あるある...。寡黙というかなんというか。

さらに、その制限を回避する方法を見つけることも課題です。例えば、USDCHFのデータが到着するまでEURUSDのインジケータの再描画を禁止する。現在、次のようなバリエーションをテストしています。

while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF",0,0)))。



しかし、ここでは、MTがIndicatorCountedをどのように計算するかにすべてがかかっています。ティックの到着時間による場合は動作しませんが、バーの再描画の事実による場合は動作します。見てみよう。




ストップ、ストップここで、あなたが書くのは:
コードからわかるように、このインジケータは接続されている通貨に依存しません。USDCHFでは常に動作しています。今回はAUDUSDとEURUSDの2つのチャートにインジケータを貼り 付けていますが、どのチャートに貼り付けても良いと思います。数日間放置しておくのです。そして、チャートがDIFFERENTになっていることがわかります。同じ指標です。リアルタイムで同じくMT。強制的に再描画(リンク解除-リンク)-同一になる。しばらくの間

オンライン作業ということで、今度はテスターに飛び火したわけですね。そんな暇はない。
 
現在の時刻はMSKで11-56、サーバータイムで9-56です。<br / translate="no"> Open[1] EURUSD H1 は1.2755。
Open[1] USDCHF H1 は1.2443。

ユーロに 新しい時間足が表示され、フランクにはまだ 何も変化して いません。アルゴイトムは何をするのですか?



はい、おっしゃるとおりです。バーの数ではなく、時間を見なければならない。
 
<br / translate="no">ということで、オンラインワークの話から、今度はテスターに飛び火しました。そんな暇はない。


テスターはありません。オンラインのみ。
 
削除済み
 
Rosh様、以下のような状況があり得るのか、ご教示いただけないでしょうか。
ドロップダウンを見られるように、バーの一覧の2番目のファイルに出力しました。

//+------------------------------------------------------------------+
//|                                             RedrawIndicators.mq4 |
//|                                                           Satori |
//|                             http://www.metaquotes.ru/forum/7790/ |
//+------------------------------------------------------------------+
#property copyright "Satori"
#property link      "http://www.metaquotes.ru/forum/7790/"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
extern int       BarsCount=0;   //кол-во считаемых баров, если 0 - то все
extern string    Currency1="EURUSD";
extern string    Currency2="GBPUSD";

int handle,handle2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexLabel(0,Currency1);

   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexLabel(1,Currency2);

   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);

   handle= FileOpen("TestFile.csv",FILE_CSV|FILE_WRITE,';');
   handle2= FileOpen("TestFile2.csv",FILE_CSV|FILE_WRITE,';');
  if(handle<1 || handle2<1 )
   {
    Print("Файл не обнаружен, последняя ошибка ", GetLastError());
    return(false);
   }
   else
   {
   FileWrite (handle,"index",Symbol(),"index",Currency1,"index",Currency2);
   FileWrite (handle2,"index",Currency1,Currency2,Symbol());
   }

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   FileClose(handle);
   FileClose(handle2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int i;
   int test1,test2;
   datetime tt1,tt2,TimeMain;
   BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period()))));
   Print (Bars," ",iBars(Currency1,Period())," ",iBars(Currency2,Period()));
   Print (BarsCount);
   
   for (i=0;i<BarsCount-counted_bars;i++)
      {
       TimeMain=Time[i];
       test1=iBarShift(Currency1,Period(),TimeMain);
       test2=iBarShift(Currency2,Period(),TimeMain);
       
       ExtMapBuffer1[i]=iTime(Currency1,Period(),test1);
       ExtMapBuffer2[i]=iTime(Currency2,Period(),test2);

       ExtMapBuffer3[i]=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);
       tt1=Time[i]-ExtMapBuffer1[i];
       tt2=Time[i]-ExtMapBuffer2[i];
       if (ExtMapBuffer3[i]!=0 || tt1!=0 || tt2!=0) 
         {
         if (FileWrite (handle,
         i,TimeToStr(Time[i]),iBarShift(Currency1,Period(),TimeMain),TimeToStr(ExtMapBuffer1[i]),iBarShift(Currency2,Period(),TimeMain),TimeToStr(ExtMapBuffer2[i])
          )<=0) Print("нифига не пишет!!");
         }
        FileFlush(handle);
        if (FileWrite (handle2,i,
         TimeToStr(iTime(Currency1,Period(),test1)),
         TimeToStr(iTime(Currency2,Period(),test2)),
         TimeToStr(Time[i])
          )<=0) Print("нифига не пишет!!");
        FileFlush(handle2);

      }//----
   return(0);
  }
//+------------------------------------------------------------------+



アルパリではない他の2つの証券会社(MIG、FIBO)のEURGBP 4Hで実行しています。
写真はどちらもほぼ同じですが、ここではMIGの例を紹介します。
EURGBP指数 EURUSD指数 GBPUSD指数
15 30.10.2006 0:00 16 29.10.2006 23:00 16 29.10.2006 23:00
46 23.10.2006 0:00 47 22.10.2006 23:00 47 22.10.2006 23:00
77 16.10.2006 0:00 78 15.10.2006 23:00 78 15.10.2006 23:00
108 09.10.2006 0:00 109 08.10.2006 23:00 109 08.10.2006 23:00
139 02.10.2006 0:00 139 02.10.2006 0:00 140 01.10.2006 23:00

例えば、46-47小節。
2つ目のファイルでは
45 23.10.2006 4:00 23.10.2006 4:00 23.10.2006 4:00
46 22.10.2006 23:00 22.10.2006 23:00 23.10.2006 0:00
47 22.10.2006 23:00 22.10.2006 23:00 22.10.2006 23:00
48 20.10.2006 20:00 20.10.2006 20:00 20.10.2006 20:00

しかし、ここで問題なのは、3つの通貨の履歴に23.10.2006 00:00のバーが存在することです。すなわち、チャート上にあり、引用符のアーカイブにあるのです。
しかし、インジケーターにはないようです。
そして最後の仕掛けは、このバー上に縦線を 引こうとすると、次のバーに移ってしまうというものです。:о)縦線で印をつけようとしたが、うまくいかなかった。



 
写真にしていただけませんか?スクリーンショットです。頭の中でコラムを並べるのは大変です。