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

 
fxsaber:

MT4Orders は MT5 では MT4 スタイルです。したがって、OrderSend の動作は MT4 のものと同じです。

はい、この部分は機能し、保留中の注文チケットはポジションチケットに移動し、すべてが修正されますが、常に機能するわけではありません。ポジションをクローズする とき、SLまたはTP注文の取引が表示され、成行注文のクローズ時のチケットのチェックが機能しない。

頭が痛くなった。SLで決済。テスターでは、注文チケットが3の場合、取引チケットと一致し、最後のセレクタは正常。2の場合、選択エラーは4754です。リアル/デモでは常に一致しない。

Лог
2020.10.22 16:46:14.665 Trades  '25610628': accepted modify #745859775 sell 1 EURUSD sl: 1.18258, tp: 1.18197 -> sl: 1.18254, tp: 1.18194
2020.10.22 16:46:14.672 Trades  '25610628': modify #745859775 sell 1 EURUSD -> sl: 1.18254, tp: 1.18194 done in 129.694 ms
2020.10.22 16:48:06.783 Trades  '25610628': deal #725926213 buy 1 EURUSD at 1.18254 done (based on order #745887632)

// ポジション・クローズをチェックする
if(OrderSelect(Tickets, SELECT_BY_TICKET)==true) // SLで閉じてエラー4754を返す場合。
        {
         if(OrderCloseTime()==0)              //何を置き換えるか、そのポジションが歴史にないことをどうやって知るか
           {
            ModifyTral();
            return;
           }
         if(OrderCloseTime()!=0)              // そして、ポジションが履歴に残っていることに気づくために、それを置き換える。
           {
            End=true;
            Alert(「成行注文は終了しました。アドバイザーの仕事は完了しました",
                  「スワップ = ", OrderSwap(), 「コミッション = ", OrderCommission()); // эта часть работает в тестере)))
            return;
           }
        }

Тикет ордера позиции не 3
LO      0       19:16:54.104    Time_Open_Trail_2_21 (EURUSD,M5)        2018.07.02 00:10:17   Alert: Проверяем закрытие Позиции и Модифицируем если нужно Tickets 2 Or 0
ON      0       19:16:54.104    Trade   2018.07.02 00:10:19   stop loss triggered #2  buy 1 EURUSD 1.16771 sl: 1.16719 tp: 1.17241 [#4  sell 1 EURUSD at 1.16719]
LQ      0       19:16:54.104    Trades  2018.07.02 00:10:19   deal #3  sell 1 EURUSD at 1.16719 done (based on order #4)
 HN      0       19:16:54.104    Trade   2018.07.02 00:10:19   deal performed [#3  sell 1 EURUSD at 1.16719]
RI      0       19:16:54.104    Trade   2018.07.02 00:10:19   order performed sell 1 at 1.16719 [#4  sell 1 EURUSD at 1.16719]
FJ      0       19:16:54.104    Time_Open_Trail_2_21 (EURUSD,M5)        2018.07.02 00:10:19   Alert: Проверяем закрытие Позиции и Модифицируем если нужно Tickets 2 Or 0
FI      0       19:16:54.104    Time_Open_Trail_2_21 (EURUSD,M5)        2018.07.02 00:10:19   Alert: OrderSelect() нашего рыночного ордера вернул ошибку - 4754
IQ      0       19:16:54.104    Time_Open_Trail_2_21 (EURUSD,M5)        2018.07.02 00:10:19   Alert: Или Наш рыночный ордер закрылся. время закрытия 1970.01.01 00:00:00 Tickets 2 Своп = 0.0 Комиссия = 0.0
KN      0       19:16:54.104    Time_Open_Trail_2_21 (EURUSD,M5)        2018.07.02 00:10:21   Alert: Работа эксперта завершена. Прибыль/убыток = 0.0



Тикет ордера-позиции 3
PF      0       19:21:30.198    Time_Open_Trail_2_21 (EURUSD,M5)        2018.07.02 00:44:36   Alert: Проверяем закрытие Позиции и Модифицируем если нужно Tickets 3 Or 1
KH      0       19:21:30.198    Trade   2018.07.02 00:44:37   stop loss triggered #3  sell 1 EURUSD 1.16740 sl: 1.16800 tp: 1.16277 [#4  buy 1 EURUSD at 1.16800]
DN      0       19:21:30.198    Trades  2018.07.02 00:44:37   deal #3  buy 1 EURUSD at 1.16802 done (based on order #4)
 LJ      0       19:21:30.198    Trade   2018.07.02 00:44:37   deal performed [#3  buy 1 EURUSD at 1.16802]
EF      0       19:21:30.198    Trade   2018.07.02 00:44:37   order performed buy 1 at 1.16802 [#4  buy 1 EURUSD at 1.16800]
CL      0       19:21:30.198    Time_Open_Trail_2_21 (EURUSD,M5)        2018.07.02 00:44:37   Alert: Проверяем закрытие Позиции и Модифицируем если нужно Tickets 3 Or 1
QJ      0       19:21:30.198    Time_Open_Trail_2_21 (EURUSD,M5)        2018.07.02 00:44:37   Alert: Наш рыночный ордер закрылся. время закрытия 2018.07.02 00:44:37 Tickets 3 Своп = 0.0 Комиссия = 0.0
NE      0       19:21:30.198    Time_Open_Trail_2_21 (EURUSD,M5)        2018.07.02 00:44:37   Alert: Работа эксперта завершена. Прибыль/убыток = -62.0

//もちろん、愚かな解決策だ。

if(OrderSelect(Tickets, SELECT_BY_TICKET)==true)
        {
         if(OrderCloseTime()==0)              // 成行注文がクローズされていない場合
           {
            ModifyTral();
            return;
           }
         if(OrderCloseTime()!=0)              // 成行注文がクローズした場合
           {
            End=true;
            Alert(「マーケットオーダーは終了しました。,OrderCloseTime(),"Tickets ",Tickets,
                  「スワップ = ", OrderSwap(), 「コミッション = ", OrderCommission());
            return;
           }
        }
      else
      {
            
         Alert(「成行注文のOrderSelect()がエラーを返しました。,GetLastError());
         
         End=true;
            Alert(「または、マーケットオーダーが終了しました。,OrderCloseTime(),"Tickets ",Tickets,
                  「スワップ = ", OrderSwap(), 「コミッション = ", OrderCommission());
            return;
     }
 
Valeriy Yastremskiy:

はい、この部分は機能し、保留中の注文チケットはポジションチケットに移動し、すべてが修正されますが、すぐには機能しません。ポジションをクローズする とき、SLまたはTP注文に取引が表示され、成行注文のクローズ時のチケットのチェックが機能しません。

頭が痛くなった。SLで決済。テスターでは、注文チケットが3の場合、取引チケットと一致し、最後のセレクタは正常。2の場合、選択エラーは4754です。リアル/デモでは常に一致しない。

機能していないと思われるmq5ファイルを教えてください。あなたは多くの情報を無駄にしています。あなたの言っていることを理解する助けになりません。ソースの方がいい。

 
fxsaber:

機能していないと思われるmq5ファイルを教えてください。多くの情報を無駄にしている。あなたの言っていることを理解する助けにならない。ソースの方がいい。

コードがめちゃくちゃで申し訳ない。

ファイル:
 
Valeriy Yastremskiy:

コードがめちゃくちゃで申し訳ない。

次は実力で。

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

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static TICKET_TYPE Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Ask - 100 * _Point, 0);
  else if (!OrdersTotal())
  {
    Print(OrderSelect(Ticket, SELECT_BY_TICKET)); // 真
    OrderPrint();
    
    Print(__MT4ORDERS__);
    
    ExpertRemove();
  }
}


結果は?

2020.10.22 22:16:20.196 2020.10.21 00:03:10   market buy 1 EURAUD sl: 1.67661 (1.67664 / 1.67761)
2020.10.22 22:16:20.196 2020.10.21 00:03:10   deal #2  buy 1 EURAUD at 1.67761 done (based on order #2)
2020.10.22 22:16:20.196 2020.10.21 00:03:10   deal performed [#2  buy 1 EURAUD at 1.67761]
2020.10.22 22:16:20.196 2020.10.21 00:03:10   order performed buy 1 at 1.67761 [#2  buy 1 EURAUD at 1.67761]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   stop loss triggered #2  buy 1 EURAUD 1.67761 sl: 1.67661 [#3  sell 1 EURAUD at 1.67661]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   deal #3  sell 1 EURAUD at 1.67638 done (based on order #3)
2020.10.22 22:16:20.198 2020.10.21 00:12:59   deal performed [#3  sell 1 EURAUD at 1.67638]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   order performed sell 1 at 1.67638 [#3  sell 1 EURAUD at 1.67661]
2020.10.22 22:16:20.198 2020.10.21 00:12:59   true
2020.10.22 22:16:20.198 2020.10.21 00:12:59   #3 2020.10.21 00:03:10.025 buy 1.00 EURAUD 1.67761 1.67661 0.00000 2020.10.21 00:12:59.874 1.67638 0.00 0.00 -123.00 sl 1.67661 0
2020.10.22 22:16:20.198 2020.10.21 00:12:59   2020.10.21
2020.10.22 22:16:20.198 2020.10.21 00:12:59   ExpertRemove() function called
 
fxsaber:

次は実力で


結果

ありがとう

 
fxsaber:

次は実力で

結果

MT4Orders 2018の古いバージョンが原因でした。このバージョンと、あなたの例で、偽を最新のものに変更したところ、すべてが機能し、私のコードも機能しました)

ありがとうございました。

 
Valeriy Yastremskiy:

MT4Orders 2018の古いバージョンが原因でした。

残念ながら、最新バージョンでないライブラリの使用でユーザーがつまずくのを少なくする方法はまだわかっていない。

 

RannForexのMT5でこのリブを使用し、指値注文を変更する際に「現在よりNポイント悪い価格で指値注文をマーケットに送信する」設定にしている場合、誰かが急襲すると、altがこの場所に飛び出します。

          WHILE((EqualSL && EqualTP && EqualPrice));

          if (!Res)
            ::Print("Line = " + (string)__LINE__ + "\n" + TOSTR(::OrderGetDouble(ORDER_SL)) + TOSTR(Request.sl)+
                    TOSTR(::OrderGetDouble(ORDER_TP)) + TOSTR(Request.tp) +
                    TOSTR(::OrderGetDouble(ORDER_PRICE_OPEN)) + TOSTR(Request.price) +
                    TOSTR(EqualSL) + TOSTR(EqualTP) + TOSTR(EqualPrice) +
                    TOSTR(::OrderSelect(Result.order)) +
                    TOSTR2((ENUM_ORDER_STATE)::OrderGetInteger(ORDER_STATE)));

これは、MT4Ordersがプロマークされた消えた注文を見るが、ブローカーはすぐに価格を修正し、注文パラメータを要求するとき、価格はすでに異なっているという事実によるものです。ということで、機能のようです。

 
traveller00:

RannForexのMT5で、このリブを「現在よりNピップス悪い価格で指値注文をマーケットに送る」設定で使用すると、誰かが襲撃した場合、リミッターを変更すると、ALTはこの場所に飛び出します。

これは、MT4Ordersがプロマークされた消えた注文を見るが、ブローカーがすぐに価格を修正し、注文パラメータを要求するとき、価格はすでに異なっているという事実によるものです。ということで、機能のようです。

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

ライブラリ: MT4Orders

fxsaber, 2020.09.29 08:45 AM

このような行で

MT4ORDERS::OrderSend_MaxPause = 0; // MT5-OrderSend の検証を無効にします。

を使用すると、この機能をすべて無効にすることができます。MT4Ordersはこの履歴にアクセスすることで、MT5-OrderSendの正しさをチェックする(さらには修正する)ことがあるため、MT5の取引履歴が遅くなる 場合には便利かもしれません。

これはお勧めしません。

私はこの機能を使っています。
 

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

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

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

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

** 興味深いことに、OrdersToString()はコメントに"[sl x.xxxxxx]"を表示しますが、Order Historyタブにはその情報は表示されません(ストラテジーテスターのOrderComment()にも含まれていません)。


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

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

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

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

** OrderTicketID() は MT4_TICKET_TYPE ディレクティブを無視するようで、常に "long" です。
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
Документация по MQL5: Константы, перечисления и структуры / Именованные константы / Предопределенные макроподстановки
  • www.mql5.com
//| Expert initialization function                                   | //| Expert deinitialization function                                 | //| Expert tick function                                             | //| test1                                                            |...