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

 
Mikhail Mishanin:

時間値」を新しい時間と前回計算した時間の差に置き換えると?

つまり、新しい時間があることを知ることができるのです。

-新日から

-新しい週から

-または指定された時間以上の差がある。

どう応用すればいいのか、さっぱりわからない!


スクリーンショットでは22-00にロールオーバーとスプレッド拡大、他のほとんどのディーリングでは00-00に1時間後-スプレッド拡大となっています。

入力パラメータの時刻に制限されることなく、ロールオーバーの時刻をプログラムで調べるにはどうしたらよいでしょうか?

---

追伸:このコードはうまく動作しますが、ロールオーバーの500ティック前に実行することが条件となります。

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
  // Comment( res,"=",tc );
   if(tc>500 && res*3<_sp) return(false); // если уже собрали 500 тиков и есть средний спред - смотрим на расширенный spr*3
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

どう応用すればいいのか、さっぱりわからない!


スクリーンショットでは、22-00にロールオーバーとスプレッド拡大、00-00に他のほとんどの取引では、1時間後に-スプレッド拡大となっています。

入力パラメータの時刻に制限されることなく、ロールオーバーの時刻をプログラムで調べるにはどうしたらよいでしょうか?

---

追伸:このコードはうまく動作しますが、ロールオーバーの500ティック前に実行するという条件下で

ディーリングによるスプレッド拡大の理由は、取引セッションの 開始、すなわち大量の注文を処理するための「ダンピング」であり、すべてがどのように(どの価格で)「決済」されるのかが不明であることです。ディーリングすることで保険がかかり、スプレッドが広がる。取引セッションの終了/開始時間から遅らせるだけでよいのです。

 
Mikhail Mishanin:

ディーリングによってスプレッドが広がる理由は、取引セッションの 開始、すなわち大量の注文が処理されるため、すべてがどのように(どの価格で)「決済」されるのかが不明であるためです。ディーリングすることで保険がかかり、スプレッドが広がる。取引セッションの終了時または開始時に時間を確保するだけでよいのです。

はい、でも、楽器の仕様にはないんです。

そこで22:00にロールオーバーです。

そして、これが00-00でのロールオーバーです。


 
Vitaly Muzichenko:

はい、しかし、ツールの仕様にはありません

TimeCurrent()-TimeGMT()
 

最終バージョンでは、すべてを考慮したものになることを期待する

MqlDateTime dt;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0, res=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);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

最終バージョンでは、すべてを考慮したものになることを期待します。

二変数

datetime daLAST=0;

datetime daOLD=0。


取引 "が可能な各関数において,ティックの時間を取得 することができる。

daOLD =daLAST;

daLAST= "チックタイム"

(daLAST - daOLD > "time gap") - 新しいセッションが開始された場合、時間差がありました。

{

//保存、使用、解除は自由です。

}

 
Mikhail Mishanin:

二変数

datetime daLAST=0;

datetime daOLD=0。


取引」できる各関数で、ティックの時間を取得 することができます。

daOLD =daLAST;

daLAST="チックタイム"

(daLAST - daOLD > "time gap") - 新しいセッションが開始された場合、時間差がありました。

{

//保存、使用、解除は自由です。

}

アジアセッションでは、21-59から22-01のロールオーバータイムで、アジアでのティック到着より早く、最大で数分間ティックがないペアやジレンマがあります。

 
Vitaly Muzichenko:

アジアセッションでは、21-59から22-01まで、つまりアジアでのティック到着より早くロールオーバーし、最大で数分間ティックがないペアやディリングもあります。

では、振り出しに戻る。

目的は、法外に広がったスプレッドの取引を スキップすることでしょうか。

そうすると、時間を無視してスプレッドそのものを分析することができるのではないでしょうか。

Ask - Bid > "threshold "の場合、トラッキング/アキュムレーションを有効にする。

Ask - Bid < "threshold"の場合- スイッチオフ、またはアキュムレーションも

このような「牛」は私にとっても便利なようで、こんなものを集めてみよう、統計をとってみよう...と。


また、何分間か新しいティックがない場合は、最初のティックをスキップして取引する方が合理的でしょう。

曲率」は「-」でも「+」でも機能するため、特定のペアやディリングで統計を取る必要があります。

 
Mikhail Mishanin:

では、振り出しに戻りましょう。

目的は、法外に広がったスプレッドの取引を スキップすることでしょうか。

そうすると、時間を無視してスプレッドそのものを分析することができるのではないでしょうか。

Ask - Bid > "threshold "の場合、トラッキング/アキュムレーションを有効にする。

Ask - Bid < "threshold"の場合- スイッチオフ、またはアキュムレーションも 行います。

このような「牛」は私にとっても便利なようで、こんなものを集めてみよう、統計をとってみよう...と。


また、何分間か新しいティックがない場合は、最初のティックをスキップして取引する方が合理 的でしょう。

どのような「ねじれ」でも「-」や「+」として機能する可能性があるため、特定のペアやダイリン グについて統計を取る必要がある。

あなたが説明したことは、黄色を除いて、すべて上記のコードになります - 私はそれが冗長であり、全く正しくないと考えています。どういうわけか、そのロールオーバーは他の時間の誰か、いつもすべて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);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

みんな同じ時間、日本時間の午後10時です、間違っているかもしれませんが。

あなたは間違っていない。