ライブラリ: MT4Orders - ページ 7

 
Maxim Dmitrievsky:
一般的に、私はそれを考え出した - サーバーは常に正しい値を返さないので、寄せ集めがあり、それを修正する方法はありません、唯一の手動で充填の種類を変更する、はい。ここではすでにフォーラムで人々と同様の問題があった。

エラーを見つけてくれてありがとう!

修正するには、コードにこの2行があるところならどこでも。

      if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
        Request.type_filling = ORDER_FILLING_RETURN;

さらに2行追加して、以下のようにしてください。

      if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
        Request.type_filling = ORDER_FILLING_RETURN;
      else if ((::SymbolInfoInteger(Request.symbol,SYMBOL_FILLING_MODE) & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC)
        Request.type_filling = ORDER_FILLING_IOC;
 
fxsaber:

エラーを発見してくれてありがとう!

修正するには、この2行がコードのどこにあるか確認してください。

      if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
        Request.type_filling = ORDER_FILLING_RETURN;

さらに2行追加して、以下のようにしてください。

      if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
        Request.type_filling = ORDER_FILLING_RETURN;
      else if ((::SymbolInfoInteger(Request.symbol,SYMBOL_FILLING_MODE) & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC)
        Request.type_filling = ORDER_FILLING_IOC;

そこでの問題は、IOCを充填マーキーの実行で、異なっている :) とサーバーは、リクエストでREQUESTを返す、すなわち、サーバーの問題のレベルで、それが動作しない場合は、独立して変更する専門家の 能力の設定にのみ 置くために、どのような方法で追跡されていない

しかし...それは動作します...ありがとう、しかし、実行は、ログではなく、EXCHANGEでMARKET書かれている、それはすべてがそこに混合されているようだ...または私の頭の中で)。

 
fxsaber:
実際の取引でキャッシュする意味は?MT4で履歴をキャッシュしたことがありますか?パフォーマンスが重要な場合は高速化が必要です。

実生活でもパフォーマンスは必要かもしれない。そのような専門家がいないという事実は、潜在的な必要性を否定するものではない。

私がこれ以上理解できないのは、なぜ基本的にテスターのためのキャッシュは可能だが、実戦では不可能 だと言われたのか、ということだ。なぜ不可能な のか?アルゴリズムは同じはずだし、テスターでも実戦でも機能するはずだ。

 
Stanislav Korotky:

実社会ではパフォーマンスが必要とされるかもしれない。そのような専門家がいないという事実は、潜在的な必要性を打ち消すものではない。

テスターのためのキャッシングは可能だが、実戦のためのキャッシングは不可能 だと基本的に言われている理由がもう理解できない。どうして不可能なの でしょうか?アルゴリズムは同じで、テスターでもリアルでも機能するはずです。

なぜなら、実戦でキャッシュされたデータは、ある時点で履歴と一致しなくなる可能性があるからだ。しかし、テスターでは誰も手を動かさない。さらに、ブローカーの修正がなくても、実際の市場では問題が発生する。なぜなら、2つの非同期リクエストを送信し、最初のリクエストからレスポンスを得ることができる - 履歴はキャッシュされている - そして、2番目のリクエストからレスポンスを得る。これが、キャッシュが現実的でない理由だ。

テスターのために、キャッシュは非常に単純に作られており、手だけがまだ到達していない。しかし、次のようなことが行われている(公表されていない)。

// 10.11.2016:
// 追加:OrderSendと取引環境(リアルタイムおよび履歴)の完全同期 - MT4と同様。
// 修正:充填フラグが正しく設定された。

これは、OrderSendが取引環境との同期を最短時間で保証することを意味する。

フォーラムでは、MT5-OrderSend BUYの後、オープンポジションのパラメータを読み取れないという苦情がありました。このライブラリを使用すれば、このような問題や同様の問題は発生しません。このようなことができる公開ライブラリーは、今のところおそらくこのライブラリーだけだろう。

例えば、今は関係ありません。

取引、自動取引システム、取引戦略のテストに関するフォーラム

MT5でOrderSendを適切に動作させる方法

fxsaber, 2016.11.10 10:00 AM

商品のポジションを建てずに手数料の大きさを知るには?

fxsaber, 2016.11.08 20:30

#include <MT4Orders.mqh>

void OnStart()
{
  const int Ticket = OrderSend(_SymbolOP_BUY1SymbolInfoDouble(_SymbolSYMBOL_ASK), 000);
  
  OrderClose(Ticket, 0.3SymbolInfoDouble(_SymbolSYMBOL_BID), 0clrNONE);

  Sleep(1000); // 履歴の更新を待つ
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    Alert(OrderCommission());
}

おそらく、このような例は例示です。

スリープを作らないと、OrderClose後に履歴が更新される時間がなく、OrderCommissionはOrderCloseが行われなかったかのような値を返すという状況になることがよくあります。

これはスクリプトであり、Eventイベントが発生することはない。唯一の出口は愚かなスリープである。

このスクリプトをSBで書き直しても何も変わらない。

未定義の遅延を伴う間抜けなスリップはなくなった。同じSBでもやり方がわからない。

テスターのためにヒストリーをスピードアップしたら、公開用に提出するよ。

 

モデレーターによって確認されると、アップデートが可能になる

// 13.11.2016:
// 追加:OrderSend、OrderModify、OrderClose、OrderDeleteを取引環境(リアルタイムおよび履歴)と完全に同期 - MT4と同様。
// 最大同期時間は、MT4ORDERS::OrderSend_MaxPause で µs 単位で設定できます。MT5 の平均同期時間は ~1ms です。

// デフォルトでは、最大同期時間は 1 秒です。MT4ORDERS::OrderSend_MaxPause = 0 - 同期しません。
// 追加: SlipPageパラメータ(OrderSend、OrderClose)は、Instantモードにおいてのみ成行注文の執行に影響するため、
// ENUM_ORDER_TYPE_FILLING):
// ORDER_FILLING_FOK、ORDER_FILLING_IOC、または ORDER_FILLING_RETURN。
誤った割り当ての場合、またはシンボルが指定された実行タイプをサポートしていない場合、 // 動作モードが自動的に選択される。
// 例
// OrderSend(Symb, Type, Lots, Price, ORDER_FILLING_FOK, SL, TP) - ORDER_FILLING_FOK執行タイプで対応する注文を送信する。
// OrderSend(Symb, Type, Lots, Price, ORDER_FILLING_IOC, SL, TP) - ORDER_FILLING_IOC執行タイプで対応する注文を送信する。
// OrderClose(Ticket, Lots, Price, ORDER_FILLING_RETURN) - ORDER_FILLING_RETURNで対応する成行注文を送信。
// 追加: OrdersHistoryTotal() および OrderSelect(Pos, SELECT_BY_POS, MODE_HISTORY) はキャッシュされます。
// ライブラリには遅い実装は残っていない

完全な完成とSBに対する明白な優位性には、あと2つのステップしかありません。

// 実現しないこと:
// クローズバイの瞬間......まだ時間がないんだ。おそらく将来、必要になれば。
// クローズしたポジションのTPとSLを決定する - 現在(ビルド1470)、MQL5はこの方法を知りません。
// DEAL_ENTRY_INOUTおよびDEAL_ENTRY_OUT_BYトランザクションの会計処理。

現時点では、MT4Ordersは、DEAL_ENTRY_INOUT取引で 履歴を読むことを除いて、ネッティング口座(証券取引所)ですべてを行うことができます。また、ヘッジ口座ではcloseByモーメントを除き、あらゆることが可能です。

SBに対する利点

  • MQL4構文。取引ロジックの最速の読み取りと書き込み。MT4取引および統計コードの高速転送。
  • 部分的なポジション決済の可能性。
  • すべての注文関数を取引環境と同期。
  • 便利なORDER_FILLING_*の割り当てと、取引注文のRequest.fillingフィールド割り当ての正確性の保証。
  • 取引履歴のキャッシュ - 操作の高速化
同じMQL4構文で、オーダー関数の非同期型(OrderSendAsync、OrderCloseAsync、OrderDeleteAsync、OrderModifyAsync)を追加することも可能です。
 
fxsaber:

モデレーターによって確認されると、アップデートが可能になります。

よくやった!アップデートを楽しみにしている!

そして、近い将来CloseByが実装されることを期待しています!

 
fxsaber:

モデレーターによって確認されると、アップデートが利用可能になります。

利用可能

SBより優れている点

  • すべての注文機能が取引環境と同期します。
この点の重要性を理解するために、MT5での実行がMT4と完全に 一致するコードの例を示します。

取引、自動取引システム、取引戦略のテストに関するフォーラム。

MT5でOrderSendを適切に動作させる方法

fxsaber, 2016.11.15 14:14

EAに以下の関数を書いてみて ください。

  1. i = 0.
  2. シンボル[i]でポジションを建てる。
  3. i++ >= 5 - 終了。
  4. 新しいポジションにスリッページがなければ、ステップ2に戻る。 スリッページがあれば、終了する。
// MQL4&5コード

#property strict

#include <MT4Orders.mqh>    //https://www.mql5.com/ja/code/16006

void Func( const string &Symbols[] )
{
  const int Total = ArraySize(Symbols);
  
  for (int i = 0; i < Total; i++)
  {
    const double Price = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);
    const int digits = (int)SymbolInfoInteger(Symbols[i], SYMBOL_DIGITS);
    
    if (!OrderSelect(OrderSend(Symbols[i], OP_BUY, 1, Price, 100, 0, 0, DoubleToString(Price, digits)), SELECT_BY_TICKET) ||
        (NormalizeDouble(Price - OrderOpenPrice(), digits) != 0)) // オープニングが失敗した場合、またはスリッページが発生した場合、終了する。
      break;
  }
}

void OnStart() // オンティック
{
  const string Symbols[] = {"EURUSD", "GBPUSD", "AUDUSD", "USDCAD", "USDJPY"};
  
  Func(Symbols);
}

このような単純な取引ロジックでさえ、SBや純粋なMQL5を例にしてMT5上で書くのは非常に問題がある。MT4ではいつも問題なくできていることを、MT5でエラーなく実装するのは容易ではありません。このライブラリを使えば、MT4と同じようにできます。ライブラリの構文やその機能を勉強する必要はありません - 動作はMT4、構文はMQL4です。

同じ取引ロジックの実装がどちらのスタイルに近いかを評価できるように、ここで MT4-advisorを(SB経由で)5つの下に移植した結果に慣れておくと役に立つかもしれません。

 
間違いなく、カルマにプラスだ!))
 
新しいファイルでは、なぜかCR1文字で改行される(どうやらマックのようだ)。
 
Stanislav Korotky:
新しいファイルでは、なぜかCR1文字で改行される(どうやらMacから来たようだ)。

私は弱いユーザーなので(しかもvindaだけ)、どうしてそうなったのかはわからない。見てみると、ほとんどの文字列は 2バイトの0x0Dで終わっている。0x0D 0x0Aもある。0x0Dもある。

どのエディタでもソースは正常に表示されるので、支障はないと思う。