MQL5でCopyTicksRange()が正しく動作しない。 - ページ 6

 
Alexey Viktorov #:

ある機能が思い通りに動かず、開発者がそれを知っていながら直さないことをバグとは呼ばない...ということを2年で理解できたはずです。

サムズアップ、クールな教育を受けたプログラマーたち......。

つまり、自分が販売するインジケーターのバグを、わかっていても3年間直さなければ、それはバグとは呼ばないということです

手工芸品を購入する動機付けとなる良いアプローチです。

 
RusPro #:

int_max = 2147483647


実際には、INT_MAX* sizeof(double)のメモリ部分を すぐに取り出して、静的な

と書いたかもしれません。

double d[INT_MAX]; - と同じに なります。

ArraySize()関数の操作の違いだけで、メモリのリール全体を一度に取得することができます。

これはあくまで一例 であり、すべてを文字通りに受け取るべきではありません。

必要な分だけ "吸い取る"!

 
prostotrader #:

文字通りの意味ではなく、あくまで例として捉えて ください

必要な分だけ "つまみ食い"!

決して悪気があったわけではないのですが、すみません。ただ、この例では、可能な限り最大値をつかんでいます:))

 
RusPro #:

の結果がマイクロ秒単位で表示されます。

表の中で2より大きい結果を示すセルは1つもないんだ。

 
fxsaber #:

表の中で2より大きい結果を示すセルは1つもないんだ。


コードを変更したのですか?


OnCalculate()からOnInit()にすべてのコードを移動し、一度だけ実行するようにしました。 ちょうど出力に刻みがなく、OnCalculateが起動時に一度だけ呼ばれるようになりました。

 
RusPro #:

OnCalculate()からOnInit()にコードを移動し、一度だけ実行するようにした。

そういう展開になるんですね。興味深いことに、OnCalculateではすべてがうまくいくようになります。コンパイラは、繰り返しをうまく処理するようです。

CopyTicksについては、staticを使用する目的がわかりません。

 
MetaQuotes #:
修正しました。本日よりベータ版を公開します。

今日の日付は?)

 
RusPro #:

今日は何の日ですか?)

ターミナル64.exeのみを b3042にアップデートしてください。MetaEditor64.exeは まだアップデート しないでください。

 
RusPro #:

今日は何の日?)

ベータ版はMetaQuotes-Demoに毎日掲載されていますが、デモサーバーでのテストを優先しているため、ヘルプメニューから確認しても、常に利用できるわけではありません。

 
int m1,min1;
datetime start,end;
MqlTick  arr_ticks[];
MqlDateTime       now1;

void OnTick()
{
   TimeTradeServer(now1);
   if(min1 != now1.min)
   {
      if(m1==0){start=TimeTradeServer();}
      m1+=1;
      if(m1==4)
      {
         end = TimeTradeServer();
         ZeroMemory(arr_ticks);
         int len1 = CopyTicksRange(_Symbol,arr_ticks,COPY_TICKS_INFO,start,end);
         Print(__FUNCTION__," start: ", start," end: ",end," len: ",len1);
         ArrayPrint(arr_ticks);
         m1=0;
      }//old 3 min
   
   
   min1 = now1.min;
   }//New Minute

}//end OnTick

CopyTicksRange () の説明には、この演算子はミリ秒単位で時間をカウントすると書かれています。

を配列で収集することを思いついたのですが、なぜかうまくいっています。