MQL5でOpen,Low,High,Closeのパラメータを取得するにはどうしたらいいですか? - ページ 9

 
Renat Akhtyamov:

4枚組に慣れたので、よりコンパクトで読みやすくなった

;)

私のコンパクトな例はトップページにあります...基本的にはそこから始まっています )))

 
Igor Makanu:

うーん、バイトに組みたくないビットがあるのでは...基本的にもう選択肢はないのでは!))))

このスレッドがモデレーターの視線の下にあるのなら、何か手を打たないと・・・。 マクロは部品のために分解してしまいました。

アーテム、これって効くの?

2019.07.30 19:42:16.639 tst_iXXX_Copy (EURUSD,H1) テスト#1開始...

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) CopyClose : loops=500000000 , ms=23422

2019.07.30 19:42:40.199 tst_iXXX_Copy (EURUSD,H1) テスト2回目開始...。

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) iClose : loops=500000000 , ms=46609

2019.07.30 19:43:26.953 tst_iXXX_Copy (EURUSD,H1) テスト3番を開始...

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) Close[i] : loops=500000000 , ms=45156

2019.07.30 19:44:12.274 tst_iXXX_Copy (EURUSD,H1) テスト#4開始...

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) CopyRates : loops=500000000 , ms=29656

2019.07.30 19:44:42.080 tst_iXXX_Copy (EURUSD,H1) スクリプトを終了します。

はい、使えます。

2019.07.31 00:38:01.936 Start test № 1...
2019.07.31 00:38:31.097 CopyClose : loops=500000000 , ms=29015
2019.07.31 00:38:31.097 Start test № 2...
2019.07.31 00:41:25.095 iClose : loops=500000000 , ms=173875
2019.07.31 00:41:25.095 Start test № 3...
2019.07.31 00:44:29.777 Close[i] : loops=500000000 , ms=184547
2019.07.31 00:44:29.777 Start test № 4...
2019.07.31 00:45:01.074 CopyRates : loops=500000000 , ms=31172
2019.07.31 00:45:01.074 End script

結論から言うと

  • 29秒 CopyClose()
  • 173秒iClose()
  • 184秒 クローズ[]の場合
  • 31秒 CopyRates()

どうしたんですか?なぜ6倍以上の差があるのでしょうか?

D1でのSZ走行

 
Artyom Trishkin:

どうしたんですか?なぜ6倍以上の差があるのでしょうか?


イゴール・マカヌ

うーん、バイトに組みたくないビットがあるのでは...基本的にもう選択肢はないのでは!))))

)))

 

Igor Makanu:

うーん、バイトに組みたくないビットがあるのでは...基本的にもう選択肢はないのでは!)))

)))

H1でテストしたところ、目に見えるほどの差はありませんでした。

2019.07.31 00:55:30.290 Start test № 1...
2019.07.31 00:55:58.234 CopyClose : loops=500000000 , ms=27812
2019.07.31 00:55:58.234 Start test № 2...
2019.07.31 00:58:59.095 iClose : loops=500000000 , ms=180734
2019.07.31 00:58:59.095 Start test № 3...
2019.07.31 01:02:06.834 Close[i] : loops=500000000 , ms=187610
2019.07.31 01:02:06.834 Start test № 4...
2019.07.31 01:02:38.365 CopyRates : loops=500000000 , ms=31406
2019.07.31 01:02:38.365 End script

とビットとバイトは関係ないのか?

 
Artyom Trishkin:

とビットとバイトは関係ないのか?

あなたのコンピューターはバカなんでしょう、とは言いませんよ?

私は何度もテストし、ローマンもテストしました。結果は同等です。

このテストでは、ハードディスクの速度は重要ではないはずです、あまり残っていません:OS、およびハードウェア=メモリ+ CPU、どこかに遅いものがあります。

もちろん、いくつかの "内側の世界 "のCore i3のオプションがあります , 私はCore™ i3-4170を持っています。

 
Igor Makanu:

あなたのコンピューターはバカなんでしょう、とは言いませんよ?

私は何度もテストし、ローマンもテストしました。その結果は同等です。

このテストでは、ハードディスクの速度は重要ではないはずで、あまり残っていない:OS、およびハードウェア=メモリ+CPUは、どこかにラグがあるものです。

もちろん、いくつかの "内側の世界 "のCore i3のオプションがあります , 私はCore™ i3-4170を持っています。

2つ目のシンボルにぶら下がるテストEAで、タイマー内のイベント制御が一定になっているものがあります。何らかの影響を及ぼしていると考えることができます。また、CopyXXX以外の 機能でのみ。今のところ、チャートから外す理由はありません。このテストよりも、その存在が私の時事問題にとって重要なのです。

 
Artyom Trishkin:

H1でテストしましたが、顕著な違いはありませんでした。

以前、開発者の方が「5の新しいiXXX関数はCopyXXX関数のラッパーに過ぎない」とおっしゃっていました。

したがって、単一クエリでの差はないと考えられる。

 
Renat Akhtyamov:
機能速度に関する評決は、どちらが速いですか?
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int Count=5000000; // кол-во проходов
//---
void OnStart(void)
  {
   Print("Bench_1: ",Bench_1(Count)," msc");
   Print("Bench_2: ",Bench_2(Count)," msc");
  }
//+------------------------------------------------------------------+
//| Bench_1                                                                 |
//+------------------------------------------------------------------+
ulong Bench_1(const int _count)
  {
   const ulong  StartTime=GetMicrosecondCount();
//---
   for(int i=0; i<Count;i++)
     {
      datetime time  = iTime(Symbol(),Period(),0);
      double   open  = iOpen(Symbol(),Period(),0);
      double   high  = iHigh(Symbol(),Period(),0);
      double   low   = iLow(Symbol(),Period(),0);
      double   close = iClose(NULL,PERIOD_CURRENT,0);
      long     volume= iVolume(Symbol(),0,0);
     }
//---
   return(GetMicrosecondCount() - StartTime);
  }
//+------------------------------------------------------------------+
//| Bench_2                                                                 |
//+------------------------------------------------------------------+
ulong Bench_2(const int _count)
  {
   datetime  time[];
   double    open[];   // Open (цены открытия бара)
   double    high[];   // High (цены максимума бара)
   double    low[];    // Open (цены минимума бара)
   double    close[];    // Open (цены минимума бара)
   long      volume[]; // Close (цены закрытия бара)

   const ulong  StartTime=GetMicrosecondCount();
//---
   for(int i=0; i<Count;i++)
     {
      CopyTime(Symbol(),Period(),1,1,time);
      CopyOpen(Symbol(),Period(),1,1,open);
      CopyHigh(Symbol(),Period(),1,1,high);
      CopyLow(Symbol(),Period(),1,1,low);
      CopyClose(Symbol(),Period(),1,1,close);
      CopyTickVolume(Symbol(),Period(),1,1,volume);
//---
      datetime _time  = time[0];
      double   _open  = open[0];
      double   _high  = high[0];
      double   _low   = low[0];
      double   _close = close[0];
      long     _volume= volume[0];
     
}
//---
   return(GetMicrosecondCount() - StartTime);
  }
//+------------------------------------------------------------------+
台本作者は誰だか覚えていない
 
Igor Makanu:

実験には実験がある。最後の5億回分のテストコールはこちらです。そうですね、違いがわかりますね。あとは1分間に何回ティックがあるか(~60)、1時間に何回ティックがあるか(~3600)、1日に何回あるか(~86400)、この23秒が5億回のコールでどれくらい動くかを計算するだけです ...

5 787日=23秒の利益?各ティックで 最速関数を使用した場合! )))))

イマイチ、便利なものを使って、誰の言うことも聞かない

テストと最適化を忘れていたよ、イゴール。そこにスピードが必要なのです。

 
Andrey Khatimlianskii:

テストと最適化のことを忘れていたよ、イゴール。そこにスピードが必要なのです。

ええ、まあ...ここで真面目に議論している人がいないだけで、何のためにあるのか完全に抜け落ちていました )))

その通り!- しかし、CopyOpen()関数の便利な使い方が必要です...。を行う必要があり、おそらくCopyOpen()の呼び出しを 追加の関数でラップすると、パフォーマンスの向上が失われるでしょう。

ZZY: 一般的には、どこでもそうだと思いますが、アセンブラで書くと開発期間が長くなり、15分で書いたC++を使うよりも最終的なパフォーマンスが高くなるという事実はありません。