ローカルタイムとフレッシュティックタイムの差が1分30秒。何をするのか - ページ 6

 
prostotrader:

コードをよく見て ください

TimeTradeServer()日を 決定するためだけに取られ、それだけです(このチェックは「念のため」行われます)!

TimeTradeServer() は、完全に省略することができます。

見てきました。確かに書き方が悪かったのですが、この機能、私的にはまだ問題解決にはなっていないのです。正直なところ、なぜそれが必要なのかよくわかりません。ようです。

1.ティックからのミリ秒数を取得します。

2.ダニを構成要素に分解するのです。

3.そして、再びダニを組み立てる!?ここがよくわからないのですが、これは何のためにあるのでしょうか?関数にもともと渡されたのと同じ値を常に取得することになります。それとも、何か見落としているのでしょうか?

そして、その刻みの時間を前の刻みと比較するのです。


サーバーの時刻を知る必要がありますよね?サーバータイムがないと、あるキャラクターのスレッドが他のキャラクターのスレッドより遅れているのかどうか判断できません。

つまり、あなたのコードはサーバー時刻にバインドしておらず、私たちが必要とするサーバー時刻とスレッド時刻の比較も行っていないのです。1つのシンボルの刻みによるスタックの遅延ではなく、サーバーから端末への一連のシンボルにわたるデータ転送の遅延を理解すること(この議論に入るとき、私はもともとそう思っていました)。

 
Alexey Kozitsyn:

チェックはTimeGMTOffsetで行う必要があるようです。後で例をスケッチします。

ただ、面白いのは、経験者(初心者ではない)ですね。

ダニがやってくる時間以外は、まったく必要ありません

最後のティックの時間(初期化時)を覚えておいて、すべての比較はこの時間で行ってください

 
Alexey Kozitsyn:

拝見させていただきました。確かに、多少間違った書き方をしてしまいましたが、私見では、この機能ではまだ課題が解決できていません。正直なところ、なぜそれが必要なのかよくわかりません。いるようですね。

3.そして、再びダニを組み立てる!?ここが、何のためにあるのか、よくわからないところですね。関数にもともと渡されたのと同じ値を常に取得することになります。それとも、何か見落としているのでしょうか?


このコードはExpert Advisorから "pull "されており、ティックが最新かどうか、時刻が

トレーディングセッション

によって追加されました。

ティックの "ブレイクダウン "は、私のEAのセッション設定で、正確な(ミリ秒)時間(日付なし)を決定するために必要である。

時間設定のみ

input string          TimeStMon    = "10:00:00";               //Время начала утренней сессии
input string          TimeStDay    = "14:05:00";               //Время начала дневной сессии
input string          TimeStEvn    = "19:05:00";               //Время начала вечерней сессии
 
prostotrader:

馬鹿馬鹿しい、経験者(初心者ではない)なんだから。

ダニがやってくる時間以外は、まったく必要ありません

最後のティックの時間(初期化時)を覚えておいて、すべての比較はこの時間で行ってください

私の例は後で書きますので、もう少し詳しく質問します。もしかしたら、私が間違っていて(pivomoeさんもそうですが)、あなたが正しいということも排除しません。

 
prostotrader:

このコードは、ティックの関連性とティックが含ま れる時間をチェックする私のEAから'プル'されています。

トレーディングセッション

追加

ティックの "ブレイクダウン "は、私のEAのセッション設定で、正確な時間を決定するために必要です(日付なし)。

時間設定のみ

その通り、私のミスです、見逃していました。

 
Alexey Kozitsyn:

その通り、私のミスです、そのように見ていなかったのです。

ただ、TCは当初、何を得たいのかが明確でなかった(あるいは誤解されていた)のでしょう。

ここで、実行し、確認する。

//+------------------------------------------------------------------+
//|                                                         Time.mq5 |
//|                                                   Copyright 2019 |
//|                                                                  |
//+------------------------------------------------------------------+
enum FRESH_TICK
{
  UNKNOWN_TICK,
  NEW_TICK,
  CUR_TICK,
  OLD_TICK
};
//
MqlTick stored_ticks[];
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  int result = CopyTicks(Symbol(), stored_ticks, COPY_TICKS_ALL, 0, 1);
  if(result > 0)
  {
    is_book = MarketBookAdd(Symbol());
    if(is_book == false) return(INIT_FAILED);
  } else return(INIT_FAILED);
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(is_book == true) MarketBookRelease(Symbol()); 
}
//+------------------------------------------------------------------+
// Expert Book event function                                        |
//+------------------------------------------------------------------+  
void OnBookEvent(const string &symbol)
{
  if(symbol == Symbol())
  {
    MqlTick a_ticks[];
    int result = CopyTicks(symbol, a_ticks, COPY_TICKS_ALL, 0, 1);
    if(result > 0)
    {
      FRESH_TICK tick_state = CheckTickTime(a_ticks[0]);
      switch(tick_state)
      {
       case UNKNOWN_TICK: Print(EnumToString(UNKNOWN_TICK), " - Тик не определен."); //Тик не определен
       break;
       case NEW_TICK: Print(EnumToString(NEW_TICK), " - Новый тик");     //Торговое время, можно отсылать ордера;
       break;
       case CUR_TICK: Print(EnumToString(CUR_TICK), " - Текущий тик");    //По усмотрению разработчика;
       break;
       case OLD_TICK: Print(EnumToString(OLD_TICK), " - Старый тик");     //По усмотрению разработчика;
       break;
      }
    }  
  }
}
//+------------------------------------------------------------------+
//| Expert Check Market Time function                                |
//+------------------------------------------------------------------+
FRESH_TICK CheckTickTime(MqlTick &a_tick)
{
  if(a_tick.time_msc > stored_ticks[0].time_msc)
  {
    stored_ticks[0] = a_tick;
    return(NEW_TICK);
  }
  else
  {
    if(stored_ticks[0].time_msc == a_tick.time_msc)
    {
      if((stored_ticks[0].ask == a_tick.ask) && (stored_ticks[0].bid == a_tick.bid) &&
         (stored_ticks[0].flags == a_tick.flags) && (stored_ticks[0].last == a_tick.last) &&
         (stored_ticks[0].time == a_tick.time) && (stored_ticks[0].volume == a_tick.volume) &&
         (stored_ticks[0].volume_real == a_tick.volume_real))
        {
          return(CUR_TICK);
        }
        else return(OLD_TICK);
        
    }
    else return(OLD_TICK);
  }
  return(UNKNOWN_TICK);
} 
      
 
prostotrader:

そもそもTCが何を手に入れたいのか、よくわからなかったというだけのことだ。

ここで、実行し、確認してください。

マイケル 新しいティックの到着/古いティックのチェックに質問はありません。コードへの質問もありません。質問が違う。この状況を確認する必要があります。

14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   Получен НОВЫЙ тик по символу                     GAZR-3.19 time_msc= 2019.03.20 14:53:11.638
14:53:10.277    ProverkaAktyalnostiTikov (RTS-3.19,H1)   ХОТЯ до этого был получeн тик                     RTS-3.19 time_msc  2019.03.20 14:53:13.695
 
Alexey Kozitsyn:

マイケル 新しいティックの到着/古いティックのチェックに質問はありません。あなたのコードにも疑問はありません。質問が違う。次のような状況を確認したいのですが。

コードをいじると(上記参照)(OLD_TICK)が現れました。

そして、新しいパッケージには「古い」ティックが含まれている可能性があることを知り、開発者は自分の判断でそれを使用しなければなりません。

 
prostotrader:

コードをいじると(上記参照)、(OLD_TICK)が表示されました。

そんなことより...。DIFFERENT文字列のストリーム。

 
Alexey Kozitsyn:

そんなことより...。DIFFERENT文字列のストリーム。

それから、WHAT I NEED????が全く理解できない。

もし、現在の時刻が SERVERであれば、放送されるまで忘れる必要があります。
または、TimeTradeServer()を使用します。