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

 
SysFX:

私はMT4Ordersを使用してMT5に移植しようとしているMT4 EAを持っています。

1) 注文がSLまたはTPにヒットしたとき、EAがOrderSend()中にコメントを追加した場合、通常の[sl]または[tp]テキストが注文コメントに追加されません。

これは MT5 の通常の動作ですか?もしそうなら、注文が実際に SL/TP にヒットしたのか、手動でクローズされたのかを判断する信頼できる方法はありますか?

(始値/終値/SL/TPを確認して判断しようとしても、スリッページのため信頼できません。特に、SLがTPのすぐ近くに移動した場合)。

https://www.mql5.com/ru/forum/93352/page20#comment_7112531

https://www.mql5.com/ru/forum/93352/page18#comment_6246123

2) 部分的なクローズが発生した場合、オープン部分とクローズ部分の注文のコメントには「#xxxxxxxxxxへ」と「#xxxxxxxxxxから」が表示されない

また、特定の注文に何が起こったかを判断する信頼できる(できれば簡単な)方法はありますか?



3) 未決済取引のチケット番号は決済時に変更されるため、OrderTicket() を使用して注文を追跡することはできませんが、OrderTicketID() は MT4 の OrderTicket() と同様に機能し、決済された取引でも同じ ID を保持するようです。

この値は一定ですか、それともプラットフォームの再起動時に変更されますか?一定である場合、OrderTicketID() を使用して MT4 との互換性を維持する最善の方法は何でしょうか (OrderTicketID() は MT4 関数ではない ため)。

** OrderTicketID() は MT4_TICKET_TYPE ディレクティブを無視するようで、常に "long" です。

SELECT_BY_TICKET は、OrderTicket/OrderTicketID/OrderTicketOpen で正しく機能します。MT4Ordersのすべての関数は、ターミナルをリロードしても値が変更されません。

MT5 の同じ OrderTicketID は、複数のクローズポジションを持つことができます(部分クローズの場合)。同じ理由で、オープンポジションとクローズポジションが同じ OrderTicketID を持つこともあります。この曖昧さのため、MT5 では、クローズ/オープン ポジションごとに一意のチケットである OrderTicket を使用します。


このライブラリの更新は、クロスプラットフォーム(MT4 との互換性)のために行われました。


** OrderTicketID() が MT4_TICKET_TYPE ディレクティブを無視し、常に "long" になるようです。
ありがとうございます。
// 変更リスト:
// 11.11.2020
// 修正:OrderTicketID() および OrderTicketOpen() は、TICKET_TYPE で指定された値タイプを返します。
 
2) 部分的なクローズが発生した場合、オープン部分とクローズ部分の注文のコメントに「#xxxxxxxxxxへ」と「#xxxxxxxxxxから」が表示されない

また、特定の注文に何が起こったかを判断する信頼できる(できれば簡単な)方法はありますか?

私が言いたかったのはこういうことです:

MT4でチケット番号123456の1.00ロットの取引があり、0.40ロットを一部決済した場合、チケット番号123456は履歴タブに0.40ロットとして表示され、その取引コメントは「#NewTicketへ」と表示されます。

取引] タブでは、チケット番号「NewTicket」で新しい 0.60 ロットの取引が表示され、その取引コメントには「#123456 から」と表示さ れます。

 
SysFX:

私が言いたかったのはこういうことだ:

MT4で1.00ロットの取引をチケット番号123456で行い、0.40ロットを一部決済した場合、チケット番号123456は履歴タブに0.40ロットとして表示され、その取引コメントは「#NewTicketへ」と表示されます。

取引] タブでは、チケット番号「NewTicket」で新しい 0.60 ロットの取引が表示され、その取引コメントには「#123456 から」と表示さ れます。

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

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    OrderClose(OrderTicket(), 0.4, OrderClosePrice(), 0);
}

このスクリプトは、あなたの状況を作成します。この状況で何を得たいかを明確に書いてください。

 
fxsaber:

この台本があなたの状況を作り出す。この状況で何を手に入れる必要があるのか、明確に書いてください。

つまり、テスターでは、次の行がチケット #2 を作成します。

const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);

そして、この次の行が実行されると、新しいチケット(#3)が0.6ロットでオープンされ、チケット#2が0.4ロットの取引として注文履歴に表示されるはずです。

OrderClose(OrderTicket(), 0.4, OrderClosePrice(), 0);

MT4では、#2の注文コメントは「#3へ」となり、#3の注文コメントは「#2から」となります。

MT5 ではこのようなことは起こりません。コメントは [取引] / [履歴] タブには表示されず、OrdersToString() は取引コメントに「0」を表示するだけです。

テスターでも実際の取引でも同じ機能が 存在するはずです。テスターについて述べたのは、チケット番号が予想されるためです。

 
SysFX:

MT4では、#2の注文コメントは「#3へ」となり、#3の注文コメントは「#2から」となる。

MT5ではこのようなことは起こりません。取引/履歴タブにコメントは表示されず、OrdersToString()は取引コメントに「0」を表示するだけです。

すでにお気づきのように、MT5 では MT4 のように部分約定時に特定のコメントを作成しません。


MT4Orders が MT4 の動作をエミュレートすることはありません。 このライブラリは、MT5 で MT4 スタイルの取引 API を利用するように設計されています。それ以上でも以下でもありません。

つまり、MT4を理解していれば、MT5で簡単に取引ロジックを書くことができます。


各プラットフォームの微妙な特殊性を考慮する必要がある場合は、そのためのマクロがあります。

#ifdef __MQL5__
  // MQL5のコードはこちら。
#else // #ifdef __MQL5__
  // MQL4のコードはこちら。
#endif // #ifdef __MQL5__ #else


MT5で解決できないことがあれば、助けてくれる人がいます。MT4Ordersでできることはたくさんあります。

 
fxsaber:

すでにお気づきのように、MT5はMT4のように部分実行中に特定のコメントを作成しません。


MT4Orders が MT4 の動作をエミュレートすることはありません。 このライブラリは、MT5でMT4スタイルの取引APIを利用するように設計されています。それ以上でも以下でもありません。

つまり、MT4の知識があれば、MT5で簡単に取引ロジックを書くことができます。


各プラットフォームの微妙な特殊性を考慮する必要がある場合は、そのためのマクロがあります。


MT5で解決できないタスクがある場合、ここには助けてくれる人がいます。MT4Ordersでできることはたくさんあります。

はい.MT5の動作が原因だと気づき、その解決策を見つけました。私にとって、[sl] / [tp]の問題を解決することの方が重要 で、今はうまく機能しています。)

 
コピーしても空のアーカイブができる
 
grin4k:
コピーしたら空のアーカイブができた

ああ、空っぽだ。サイトの不具合だ。

しかし、コードが更新されている場合はアーカイブをアップロードしないでください。Zipは更新されていません。ファイル単位でダウンロードしてください。

 
fxsaber :

MT5のケースは興味深い。


テイクが部分的に実行され、その後削除された。この場合、DEAL_ORDER のステータスが FILLED/PARTIAL ではなく ORDER_STATE_CANCELED になります。

この場合、DEAL_TIME_MSCはORDER_TIME_DONE_MSCと等しくありません。

この場合の ORDER_TYPE_FILLING は何ですか?

私はcensor url brokerを通して取引しています。Take Profit を設定する場合、デフォルト値はORDER_TYPE_FILLING== ORDER_FILLING_IOC です。あなたのケースはIOCでは起こらないはずですよね?

 
エラー処理方法 -GetLastError、ERR_INVALID_PRICE、ERR_PRICE_CHANGED、ERR_REQUOTE、ERR_OFF_QUOTES、ERR_TRADE_CONTEXT_BUSY - 定数は定義されていません。