MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1264

 
Roman:

whileループの1回の繰り返し、最小サンプリングレートの測定方法を教えてください。
このコードを試してみたが、正しく測定できているかどうかわからない。


void OnStart()
{
   ulong time[]; 
   ulong t = 0;  
   int   i = 0;
   ArrayResize(time, 30);      
   ulong startTime=GetTickCount64();
   uint iterations=0;
   while(i < 30 && !_StopFlag )
   {
      //t = GetMicrosecondCount();
      //t = GetMicrosecondCount() - t;      
      iterations++;
      
      ArrayFill(time, i, 1, t);
      i++;   
   }
   if (iterations) {
      ulong endTime=GetTickCount64();
      ulong avgTime=(startTime-endTime)/iterations; // среднее время 1-й итерации
   }
   ArrayPrint(time);
}
 
Maxim Kuznetsov:

ああ、言いたいことはわかった。
ちょっと違う書き方をしました。

void OnStart()
{   
   uint  iterations = 1;   
   ulong startTime  = GetMicrosecondCount();   
   
   while(iterations == 1 && !_StopFlag )
   {            
      iterations++;         
   }
   
   ulong endTime = GetMicrosecondCount() - startTime;
   
   Print(IntegerToString(fabs(endTime)));
}

0、1マイクロ秒であることがわかります。
マイクロ秒以下は確認できない。

 
Roman:

ああ、言いたいことはわかった。
ちょっと違う書き方をしました。

0、1マイクロ秒であることがわかります。
マイクロ秒以下は確認できません。

反復回数をカウントした方が良いのでは?もちろん、今のCPUの周波数ではマイクロ秒以下でしょう。例えば、ティック間)

void OnStart()                                  // Спец. функция OnStart()
  {
   int i, Count;                             // Объявление переменных
   for (i=1; i<=5; i++)                      // Покажем для 5 тиков
     {
      Count=0;                               // Сброс счётчика
      while(RefreshRates()==false)           // До тех пор, пока..
        {                                   //..придёт новый тик
         Count = Count+1;                    // Счётчик итераций 
        }
      Alert("Тик ",i,", циклов ",Count);     // После каждого тика
     }
   return;                                   // Выход из start()
  }
//--------------------------------------------------------------------
 
Valeriy Yastremskiy:

反復回数をカウントするのがよいでしょう。もちろん、今のCPUの周波数ではマイクロ秒以下でしょう。例:ティック間)

おそらくもっと良いのでしょうが、それは問題ではありません。
ナノ秒までいかないといけないので、時間チェックの機能を独自に持ったDLLを書けばいいと思います。
ただ、どのような離散性でループが回っているのかが気になります。

 

どの注文が最後に締め切られたかを判断するにはどうしたらよいですか?

あるいは、直近の5件の注文を決済した際の利益はどうだったのでしょうか?


OrdersHistoryTotal()-1 - チケットが最大となるヒストリー内のオーダーの位置を返します。


チケット100の取引が終了し、その1時間後にチケット99の取引が終了した場合、OrdersHistoryTotal()- 1は#100を指しますが、#99の注文に関する情報はどのように取得すればよいのでしょうか

---

思いつく最も愚かなことは、履歴を配列に保存し、クローズタイムで ソートして、必要なものを配列から読み取ることです。でも、それは超サブオペレーションです。

 
Roman:

おそらくもっと良いのでしょうが、それは問題ではありません。
ナノ秒単位まで必要なら、独自のタイムチェック機能を持ったDLLを書く必要があると思います。
ループを循環させるサンプリングレートが気になるところです。

をフリーコアの周波数に乗じたもの。2 - 10ギガヘルツは、他のタスクがなく、ループだけがカウントされる場合、どこかにあるはずです。速度は、CPUやメモリの負荷、ループ実行時の外部動作の優先度、ループ内の内部動作に依存します。 また、私の理解では、配列への読み書きに比べて、加算や代入の動作が高速になります。

 
Valeriy Yastremskiy:

をフリーコアの周波数に乗じたもの。2 - 10ギガヘルツのどこかで、他のタスクがなく、ループだけがカウントされる場合。また、加算や代入は、配列の読み書きに比べて高速に行えます。

ありがとうございます。了解です。

 
トレーディングロボットを書く のに協力してくれるのは誰ですか?
削除済み  
paradisehell1:
トレーディングロボットを書く のに協力してくれるのは誰ですか?

このようなロボットは、すでにたくさん書かれていますが、欲しいものがないとは思えません。

 

皆さん、おはようございます。


質問:バーのハイタイムとロータイムを決定する最も簡単な方法は何ですか?

バーの開店・閉店時間は 面白くない。

MT4で。

ありがとうございました。