初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1220

 
HistorySelect(xxx,TimeCurrent()+1)

1秒は、リアルでの最後の取引・注文のロスになることが多いのです。例えば、多くのブリーチでは、注文はTTL時間だけ実行に移され、その時間は5秒になることもあります。5秒以内に実行されなければ、その注文はリダイレクトとなる。あるいは実行されるが、3秒である。

その際、受付から実行まで刻みがなかった場合、そのような呼び出しHistorySelectは その情報を受け取らない。


おそらく、TimeCurrent は MathMax(LastOrder_time, MarketWatch_Time) と等しくなるはずです。そうすれば、HistorySelectは正しくなります。しかし、TimeCurrentは高すぎるかもしれません。


ちなみに、このようなHistorySelectの動作方式では、トレードの履歴が一部省略されます。

void OnStart()
{
  static MqlTick PrevTick = {0};
  
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
  {
    if (HistorySelect(PrevTick.time, INT_MAX))
      // Учитываем новые ордера/сделки в Истории торгов

    PrevTick = Tick;  
  }
}

一見すると、すべてがクリアに見えるが。


MT5では、安価なDealsTotal()を書くのは簡単ではありません。MT4のOrdersHistoryTotal()は初歩的(かつ無料)なものではありません。

 

を声に出し、関連性や能力を主張することはありません。


fxsaber:

受付から実行まで刻みがなかった場合、このようなHistorySelectの呼び出しでは、その情報は得られません。

この問題を解決することはできません。サーバー - 端末 - MQLの相互作用のモデルは、もともと

MT5で確認するまでには至っていませんが、MT4では、マーケットウォッチングウィンドウでシンボルの価格変動があっても、ティックがない、あるいはЕАより少ない状況があることは確かです。


okは、気にしないので、それが動作する、あなただけのTSの決定で選択する必要がある、何が注文を送信した瞬間からサーバーからの情報がない場合に発生する - すなわち、順序は、先験的に設定または拒否され、この予備的決定を確認したり、キャンセルする答えを受け取った - すなわち、未確認情報で動作したり、まだサーバーからの答えを待って - このオファーMQとあなたはおそらくないスーツです。


fxsaber:

MT5で安価なDealsTotal()を使用するのは容易ではありません。MT4の初歩的な(しかも無料の)OrdersHistoryTotal()ではありません。

書き込まない)

というか、ほとんどの場合、あなたは、アルゴリズムを維持するためにEAのリソースを費やすことになるでしょう、私はあなたがSQLiteの動作方法を見つける必要があると思う、MQのパフォーマンステストは、大きなテーブルやサンプルでの作業はちょうどデータベースの目的です - EAのコードは、データベースが行うすべての作業、注文するときにデータを充填するとサーバが応答したときに更新に来る最小限のものになるでしょう(同期、もちろん、あなたがEA、メモリ内のデータベースを実行すると)。

 
Igor Makanu:

が、そんなことはないだろう ;)

というか、最も可能性の高いあなたが書くとアルゴリズムを維持するためにEAのリソースを費やすことになる、私はあなたがSQLiteの仕組みを理解する必要があると思う、MQの性能試験は、大規模なテーブルやサンプルでの作業はまさにデータベースの目的です - EAのコードは、データベースがあなたを行います、すべての作業は、注文と更新サーバー(同期、起動時にEA、メモリ内のデータベース)からの応答時にデータを充填に低減される最小化されます。

原文のまま掲載しました。これ以上速くなることはないでしょう。

 
fxsaber:

原文のまま掲載しました。これ以上速くなることはないでしょう。

私は課題の見方を間違えていたようです。

OnTradeTransaction() とOnTick()の2点から注文リストを更新する必要があると思ったので、データベースで行うことを提案しました。

 
void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(!HistoryDealSelect(trans.deal))
         return;
      bool time_to_sum_up=false;
      if(HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_OUT)
        {
         time_to_sum_up=true;
        }
      if(!time_to_sum_up)
         return;
      HistorySelect(0,TimeCurrent());
      int deals=HistoryDealsTotal();
      for(int i=deals-1; i>=0; i--)
        {
         if(HistoryDealGetTicket(i)==trans.deal)
           {
            Print("Found!");
            return;
           }
        }
      Print("Not Found!");
     }
   return;
  
このコードは、私のEAの簡略化されたスニペットです。
このコードを実行した結果、いくつかのケースで "Not Found "が返されると仮定する。
その理由はよくわからない。
なぜ、きっかけとなる出来事の中に自分自身を見出すことができないのか。
サーバーから端末に送信されたトランザクションイベントが到着したが、サーバーは同時に正しい時刻を端末に同期させることができない?
私の理解では、TimeCurrent()の値が1秒増えるだけで、十分すぎるほどです。
何か重要な ことを見逃しているに違いない、そう思いませんか?
私の理解に間違いがあれば、ご指摘いただければ幸いです。
Объем импорта г/г - экономический индекс Японии
Объем импорта г/г - экономический индекс Японии
  • www.mql5.com
Объем импорта г/г (Imports y/y) отражает изменение объема импорта товаров и услуг в отчетном месяце по сравнению с тем же месяцем прошлого года. Показатели импорта используются для оценки внешней торговой активности Японии и спроса на импортируемые товары внутри страны. Из-за последствий "финансового кризиса" США Япония также столкнулась с...
 
mql5でシンボルのMarket Deepを開く方法を作っていただけませんか? 複数のシンボルで作業するときに重要 です。
 
Dmitri Custurov:

以下は私のコードです。初期化では、テーブルに1つのレコードが作成されます。同じPRIMARY KEYを持つレコードを追加しようとすると、すぐにベースが閉じてしまうので、OnTickボディではすぐにエラーを返す必要があります。しかし同時に、少なくともその最初のレコードは開いたときに見えるはずなのですが、テスターで実行するとそれがないのです。さらにテーブルも作成されない。ターミナルで開くだけなら、すべて正常です。最初の記録はそこにある。

データベースの場所で、あなたはうまくいけば台無しにしない?

 
Aleksey Mavrin:

基地の場所に迷うことはないですよね?

いいえ、そうではありません。全てはFilesの中にある。テスターモードでは、データベースはメモリ上に作成され、テスト後に破棄されるのだと思います。

 
Igor Makanu:

を声に出し、関連性や能力を主張することはありません。

...

というか、最も可能性の高いあなたが書くとアルゴリズムを維持するためにEAのリソースを費やすことになる、私はあなたがどのようにSQLiteの作品を見つける必要があると思う、MQの性能試験は、大きなテーブルやサンプルで動作は正確にデータベースの目的です -EAのコードは、データベースがあなたを行います、すべての作業が データを充填に削減されます注文と更新サーバー(同期、もちろん、EA、メモリ内のデータベースから応答すると実行する場合)。

また、どのようなデータベースがすべての作業を行うのでしょうか?教えてもらえますか?

 

一方の端末では注文を出すだけ、もう一方の端末では(同じブローカーとアカウントで)実行を制御する。データベースまたはPUB/SUB ZMQを介して通信する。もちろんデータベースはSQLiteではなく、個人的な意見ですがRedisが最も適していると思います。

グッドラック