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

 
Vitaly Muzichenko:

黄色くハイライトされた部分を除いて、上記はすべてコードを実行します。私が間違っているかもしれませんが、いつも同じ時間、22-00 GMTに ロールオーバーしている人を見たことがありません。

しかし、ロールオーバーの時間が5分だったり、1分ちょっとだったりと、異なることがよくあります。

---

コードをチェックし、何かを変更するかもしれません。

だから、すべてをGMTの時間に結びつけてください。ローカルタイムと サーバータイムの差分を取得し、何回ロールオーバーすればいいのかがすぐにわかります。そして、5分でも1でも大差はないと思います。全部で5分間を目安に。

 
Alexey Viktorov:

だから、すべてをGMT時間に結びつけてください。ローカルタイムと サーバータイムの差を取得すれば、ロールオーバーの長さをすぐに把握できます。そして、5分でも1分でも大差はないと思います。全部で5分間を目安に。

あなたのオプションはどのように優れていますか、またはより信頼性がありますか?

できれば、そのコードを見せてください
 
Vitaly Muzichenko:

どのような点で優れているのか、あるいは信頼性が高いのか?

全く違うかもしれません。私はあなたのコードに従わなかった。ただ、私の意見を述べただけです。

 

Vitaly Muzichenko:

できれば、そのコードを見せてください

フリをしているのか?

 
Alexey Viktorov:

何でもないことかもしれない。私はあなたのコードを追っていない。ただ、私の意見を述べただけです。

ここでは、すべてを1つの記事で紹介します。

EAが拡張されたスプレッドで取引しないように、ロールオーバー中のスプレッドエントリーをスクリーニングする必要があります。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

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

ヴィタリー・ムジチェンコ, 2021.02.11 14:04

このようなコードに出会ったのは初めてです。どういうわけか、ロールオーバーが別の時間に誰かであることを見たことがない、常にすべて1つで同じ - 22-00 GMTで、私は間違っていることができますが。

しかし、ロールオーバーの時間が5分だったり、1分ちょっとだったりと、異なることがよくあります。

---

コードを確認し、何かを変更できるかもしれません。

//+------------------------------------------------------------------+
void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
   static int ts=0;

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",ts++,"=",res );
   } else Comment( "false: ",sp,"=",ts++,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0;
  static long tc=0;
   if(dt.hour==22) return(false); // ролловер
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false); // собираем спред на 500 тиках
   return(res>_sp?true:false);
}

 
Vitaly Muzichenko:

ここでは、すべてを1つのメッセージにまとめました。

EAが拡張スプレッドで取引しないように、ロールオーバー中のスプレッドエントリーを除外する必要があります。


時間いっぱいまで取引なし?

   if(dt.hour==22) return(false); // ролловер

それとも何か誤解があったのでしょうか?

 
Vitaly Muzichenko:

ここでは、すべてを1つのメッセージにまとめました。

ロールオーバー中のスプレッドエントリーをスクリーニングし、EAが拡張スプレッドで取引しないようにする必要があります。


は、ロールオーバーで特にある種のスプレッドレコード(ファイル、データベース)を禁止していると仮定しているだけなのでしょうか?

 
Alexey Viktorov:

丸々1時間取引なし?

それとも何か誤解があったのでしょうか?

そうなんです、その後1時間はスプレッドが広がっているんです。そして、5分後のロールオーバーの前には、ところどころで幅も広げています。

 
Alexey Viktorov:

丸々1時間取引なし?

それとも何か誤解があったのでしょうか?

しかし、このように設定することができます。

void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",res );
   } else Comment( "false: ",sp,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  static int ts=0;
  static long tc=0;
  TimeGMT(dt);
   if(dt.hour==22 && res<_sp) return(false); // Если 1 час после ролловера спред упадёт до нормального - торгуем
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   if(tc<500) return(false);
   return(res>_sp?true:false);
}

これで正しく動作するはずです。

 
Vitaly Muzichenko:

ただし、このように処方することは可能です。

これなら大丈夫だろう。

面白い) そうであってはならない)

通常のスプレッドでの取引であれば、その「リミット」を入力し、スプレッドがリミット以上であれば、取引を無視すればいいだけです。

スプレッドはロールオーバーすることなくディリングで伸ばすことができます。