フォルツァ執行上の問題点 - ページ 100 1...93949596979899100101102103104105106107...156 新しいコメント prostotrader 2018.02.28 12:32 #991 コードそのもの //+------------------------------------------------------------------+ //| DelayTest.mq5 | //| Copyright 2017 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2017 prostotrader" #property link "https://www.mql5.com" #property version "1.00" // #define max_orders 100 // struct MY_ORDERS { uint req_id[max_orders]; ulong ticket[max_orders]; ulong magic[max_orders]; }; MY_ORDERS my_orders; ulong st_magic=9988776655; //+------------------------------------------------------------------+ //| Expert remove order function | //+------------------------------------------------------------------+ void RemoveOrder(const ulong a_ticket,const int idx) { my_orders.req_id[idx]=0; MqlTradeRequest request = {0}; MqlTradeResult result = {0}; request.action= TRADE_ACTION_REMOVE; request.order = a_ticket; if(OrderSendAsync(request,result)) { my_orders.req_id[idx]=result.request_id; } else { Print(__FUNCTION__,": Ордер не отправлен! Билет = ",a_ticket," Причина: ",result.retcode); } } //+------------------------------------------------------------------+ //| Expert place order function | //+------------------------------------------------------------------+ void PlaceOrder(double price,int idx,ulong magic) { MqlTradeRequest request = {0}; MqlTradeResult result = {0}; my_orders.ticket[idx] = 0; my_orders.req_id[idx] = 0; my_orders.magic[idx]=magic; request.action = TRADE_ACTION_PENDING; request.magic = magic; request.symbol = Symbol(); request.volume = 1; request.price = price; request.type=ORDER_TYPE_SELL_LIMIT; request.comment="Отложенный ордер..."; request.type_filling=ORDER_FILLING_RETURN; request.type_time=ORDER_TIME_DAY; if(OrderSendAsync(request,result)) { my_orders.req_id[idx]=result.request_id; magic++; } else { Print(__FUNCTION__,": Ордер не отправлен! Порядковый номер: ", idx, " Причина: ",result.retcode); } } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { double step=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE); double max_price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX); for(int i=0; i<max_orders;i++) { PlaceOrder(max_price,i,st_magic); max_price-=step; } return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { for(int i=0; i<max_orders;i++) { if(my_orders.ticket[i]>0) { RemoveOrder(my_orders.ticket[i],i); } } } //+------------------------------------------------------------------+ //| TradeTransaction function | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { // Print("Trans type: ", EnumToString(trans.type), "; Order satte: ", EnumToString(trans.order_state)); switch(trans.type) { case TRADE_TRANSACTION_REQUEST: for(int i=0; i<max_orders;i++) { if((my_orders.req_id[i]==result.request_id) && (my_orders.req_id[i]>0)) { my_orders.ticket[i]=result.order; break; } } break; case TRADE_TRANSACTION_HISTORY_ADD: for(int i=0; i<max_orders;i++) { if((my_orders.ticket[i]==trans.order) && (my_orders.ticket[i]>0)) { my_orders.ticket[i]=0; Print(__FUNCTION__,": Ордер удалён. Билет = ",trans.order); break; } } break; case TRADE_TRANSACTION_ORDER_UPDATE: switch(trans.order_state) { case ORDER_STATE_PLACED: for(int i=0; i<max_orders;i++) { if((my_orders.ticket[i]==trans.order) && (my_orders.ticket[i]>0)) { RemoveOrder(my_orders.ticket[i],i); Print(__FUNCTION__,": Ордер установлен. Билет = ",trans.order); break; } } break; } break; } } //+------------------------------------------------------------------+ fxsaber 2018.02.28 12:39 #992 prostotrader:1日に4000件の取引を行い、各取引で少なくとも5~6回OnTradeTransactionを "twitches "しています。 誰がこれらの「portmanteaus」の意味を理解するのでしょうか :)結局、端末のログとMT5 Serverのログが必要なのだそうです。 ログがギガバイトになるようなら、それも分析します。サーバーのログは必要ない。 私は非常に何かがこのExpert Advisorを実行するOnTradeTransactionに 来ないと主張するすべての人にお勧めします。 // Советник записывает подробно каждый OnTradeTransaction в файл. // Время последнего тика символа long GetSymbolTime( const string Symb ) { MqlTick Tick; return(SymbolInfoTick(Symb, Tick) ? Tick.time_msc : 0); } // Время последнего тика Обзора рынка long GetMarketWatchTime( void ) { long Res = 0; for (int i = SymbolsTotal(true) - 1; i >= 0; i--) { const long TmpTime = GetSymbolTime(SymbolName(i, true)); if (TmpTime > Res) Res = TmpTime; } return(Res); } // Текущее время на торговом сервере без учета пинга long GetCurrenTime( void ) { static ulong StartTime = GetMicrosecondCount(); static long PrevTime = 0; const long TmpTime = GetMarketWatchTime(); if (TmpTime > PrevTime) { PrevTime = TmpTime; StartTime = GetMicrosecondCount(); } return(PrevTime + (long)((GetMicrosecondCount() - StartTime) / 1000)); } string TimeToString( const long Value ) { return((string)(datetime)(Value / 1000) + "." + (string)IntegerToString(Value % 1000, 3, '0')); } class FILE { public: const string Name; const int handle; #define _H(A) if (this.handle != INVALID_HANDLE) A FILE( const string FileName ) : Name(FileName), handle(FileOpen(this.Name, FILE_READ | FILE_WRITE | FILE_IS_TEXT)) { _H(FileSeek(this.handle, 0, SEEK_END)); } ~FILE() { _H(FileClose(this.handle)); } uint Write( const string Str ) const { return(FileWrite(this.handle, Str)); } }; void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result ) { static FILE File(__FUNCTION__ + ".txt"); File.Write(TimeToString(GetCurrenTime()) + "\n" + ToString(Trans) + ToString(Request) + ToString(Result)); } #define TOSTRING(A) #A + " = " + (string)(A) + "\n" #define TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n" string ToString( const MqlTradeTransaction &Trans ) { return(TOSTRING(Trans.deal) + TOSTRING(Trans.order) + TOSTRING(Trans.symbol) + TOSTRING2(Trans.type) + TOSTRING2(Trans.order_type) + TOSTRING2(Trans.order_state) + TOSTRING2(Trans.deal_type) + TOSTRING2(Trans.time_type) + TOSTRING(Trans.time_expiration) + TOSTRING(Trans.price) + TOSTRING(Trans.price_trigger) + TOSTRING(Trans.price_sl) + TOSTRING(Trans.price_tp) + TOSTRING(Trans.volume) + TOSTRING(Trans.position) + TOSTRING(Trans.position_by)); } string ToString( const MqlTradeRequest &Request ) { return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) + TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) + TOSTRING(Request.tp) + TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) + TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) + TOSTRING(Request.position) + TOSTRING(Request.position_by)); } string ToString( const MqlTradeResult &Result ) { return(TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) + TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) + TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) + TOSTRING(Result.retcode_external)); } 結果は次のようになります。 2018.02.28 14:28:27.907 Trans.deal = 0 Trans.order = 213465763 Trans.symbol = EURUSD Trans.type = TRADE_TRANSACTION_ORDER_ADD (0) Trans.order_type = ORDER_TYPE_SELL (1) Trans.order_state = ORDER_STATE_STARTED (0) Trans.deal_type = DEAL_TYPE_BUY (0) Trans.time_type = ORDER_TIME_GTC (0) Trans.time_expiration = 1970.01.01 00:00:00 Trans.price = 1.22178 Trans.price_trigger = 0.0 Trans.price_sl = 0.0 Trans.price_tp = 0.0 Trans.volume = 1.0 Trans.position = 0 Trans.position_by = 0 Request.action = ENUM_TRADE_REQUEST_ACTIONS::0 (0) Request.magic = 0 Request.order = 0 Request.symbol = Request.volume = 0.0 Request.price = 0.0 Request.stoplimit = 0.0 Request.sl = 0.0 Request.tp = 0.0 Request.deviation = 0 Request.type = ORDER_TYPE_BUY (0) Request.type_filling = ORDER_FILLING_FOK (0) Request.type_time = ORDER_TIME_GTC (0) Request.expiration = 1970.01.01 00:00:00 Request.comment = Request.position = 0 Request.position_by = 0 Result.retcode = 0 Result.deal = 0 Result.order = 0 Result.volume = 0.0 Result.price = 0.0 Result.bid = 0.0 Result.ask = 0.0 Result.comment = Result.request_id = 0 Result.retcode_external = 0 2018.02.28 14:28:27.913 Trans.deal = 196986814 Trans.order = 213465763 Trans.symbol = EURUSD Trans.type = TRADE_TRANSACTION_DEAL_ADD (6) .... もし、そのようなログもないのであれば、OnTradeTransactionに関連するいかなる主張も単なる口先だけのものです。 ZZY 今回はタイミングが悪いのですが、違う 文脈から切り出された解答を複雑にしたくなかったのです。 ファイル: OnTradeTransaction.mq5 4 kb prostotrader 2018.02.28 19:24 #993 fxsaber:ログがギガバイトになるなら、それも処理する。サーバーのログは必要ありません。 私は非常に何かがこのExpert Advisorを実行するOnTradeTransactionに 来ないと主張するすべての人にお勧めします。 結果は次のようになります。 もし、そのようなログもないのであれば、OnTradeTransactionに関連するいかなる主張も単なる口実に過ぎません。 今回はタイミングが悪かったのですが、他の文脈から 解決策を導き出すのは難しくありません。なぜ、そんな「家庭菜園」を作るのか? 十分でしょう。 void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { Print("Trans type: ", EnumToString(trans.type), "; Order satte: ", EnumToString(trans.order_state), " Order ticket: ", trans.order); } fxsaber 2018.02.28 19:44 #994 prostotrader:なぜそんな大げさなことをするのか? それで十分でしょう。 物足りない。 Aleksey Vyazmikin 2018.03.14 07:05 #995 手で開いて、ブレーキ確認 2018.03.14 10:01:29.516 Trades '289': exchange sell 10.00 Si-3.18 at market 2018.03.14 10:01:40.680 Trades '289': accepted exchange sell 10.00 Si-3.18 at market 2018.03.14 10:01:40.692 Trades '289': exchange sell 10.00 Si-3.18 at market placed for execution 2018.03.14 10:01:40.781 Trades '289': order #85223736 sell 10.00 / 10.00 Si-3.18 at market done in 11265.537 ms 2018.03.14 10:01:40.782 Trades '289': deal #47039430 sell 3.00 Si-3.18 at 57027 done (based on order #85223736) 2018.03.14 10:01:40.786 Trades '289': deal #47039431 sell 2.00 Si-3.18 at 57026 done (based on order #85223736) 2018.03.14 10:01:40.787 Trades '289': deal #47039432 sell 3.00 Si-3.18 at 57026 done (based on order #85223736) 2018.03.14 10:01:40.790 Trades '289': deal #47039433 sell 1.00 Si-3.18 at 57026 done (based on order #85223736) 2018.03.14 10:01:40.795 Trades '289': deal #47039434 sell 1.00 Si-3.18 at 57025 done (based on order #85223736) そして何より、この暴挙の代償を誰が払うのか......。 prostotrader 2018.03.14 14:10 #996 Aleksey Vyazmikin:手で開いて、ブレーキ確認 そして何より、この暴挙の代償を誰が払うのか...。このログを添付してブローカーに書き込んでください。 開発者にお金を払っているわけではないので、聞きにくいですし、使用許諾契約の中で は、(他のソフトウェアと同様に)誰も責任を取らないように書かれています。 Aleksey Vyazmikin 2018.03.14 14:15 #997 prostotrader:証券会社に手紙を出し、このログを添付してください。 開発者にお金を払わないので聞きづらいし、ライセンス契約も は、(他のソフトウェアと同様に)誰も責任を取らないように書かれています。それは修辞的な質問だった。 prostotrader 2018.03.14 14:16 #998 Aleksey Vyazmikin:それは修辞的な質問だった。:) しかし、とにかくブローカーに手紙を書きましょう。 prostotrader 2018.03.19 07:18 #999 Expert Advisorのロギングを少し変更したらこうなった。 CheckOrders()関数は、1~1.5秒以内にサーバーからの応答がない場合に起動されます。 注文書がない場合は、メッセージを表示します。 CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... チケットがある場合、ProcessOrders()関数が呼ば れ、オーダーに何が起こったかを確認する その結果がこちらです。 2018.03.19 10:00:02.248 Trades 'xxxxx': buy limit 2.00 TRNF-9.18 at 168831 2018.03.19 10:00:02.254 Trades 'xxxxx': accepted buy limit 2.00 TRNF-9.18 at 168831 2018.03.19 10:00:02.257 Trades 'xxxxx': buy limit 2.00 TRNF-9.18 at 168831 placed for execution in 8.978 ms 2018.03.19 10:00:06.380 Trades 'xxxxx': modify order #85508034 buy limit 2.00 TRNF-9.18 at 168831 sl: 0 tp: 0 -> 170108, sl: 0 tp: 0 2018.03.19 10:00:08.318 Trades 'xxxxx': accepted modify order #85508034 buy limit 2.00 TRNF-9.18 at 168831 sl: 0 tp: 0 -> 170108, sl: 0 tp: 0 2018.03.19 10:00:08.335 Trades 'xxxxx': modify order #85508034 buy limit 2.00 TRNF-9.18 at 168831 sl: 0 tp: 0 -> 170108, sl: 0 tp: 0 placed for execution in 1955.038 ms 2018.03.19 10:00:08.364 Trades 'xxxxx': modify order #85508034 buy limit 2.00 TRNF-9.18 at 170108 sl: 0 tp: 0 -> 170110, sl: 0 tp: 0 2018.03.19 10:00:08.364 Trades 'xxxxx': modify #85508034 buy limit 2.00 TRNF-9.18 -> price: 170110, sl: 0, tp: 0) done in 0.390 ms 2018.03.19 10:01:00.575 Trades 'xxxxx': buy limit 2.00 TRNF-9.18 at 170112 2018.03.19 10:01:01.581 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:02.591 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:03.606 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:04.627 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:05.633 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:06.647 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:07.662 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:08.677 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:09.689 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:10.708 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:11.718 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:12.732 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:13.764 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:15.273 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:16.287 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:17.301 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:18.319 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:19.332 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:20.343 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:21.357 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:22.371 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:23.388 trader (TRNF-6.18,M1) CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... 2018.03.19 10:01:24.263 Trades 'xxxxx': accepted buy limit 2.00 TRNF-9.18 at 170112 2018.03.19 10:01:24.399 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 2018.03.19 10:01:25.413 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 2018.03.19 10:01:25.685 Trades 'xxxxx': buy limit 2.00 TRNF-9.18 at 170112 placed for execution in 25114.794 ms 2018.03.19 10:01:26.427 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 2018.03.19 10:01:27.444 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 2018.03.19 10:01:28.456 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 2018.03.19 10:01:29.475 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 2018.03.19 10:01:30.484 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 2018.03.19 10:01:31.501 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 2018.03.19 10:01:32.515 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 2018.03.19 10:01:33.540 trader (TRNF-6.18,M1) ProcessOrders: Состояние Buy ордера не определено. Билет = 85508330 遅延はブローカーが原因ではない可能性が高い。 prostotrader 2018.03.22 13:00 #1000 注文が非同期で送信されるとき、我々は持っています。 端末が注文を送信する(1) 2018.03.19 10:01:00.575 Trades 'xxxxx': buy limit 2.00 TRNF-9.18 at 170112 サーバーが注文を確認し、チケットを割り当てた(2) 2018.03.19 10:01:24.263 Trades 'xxxxx': accepted buy limit 2.00 TRNF-9.18 at 170112 サーバーが取引所に注文を送信(3) 2018.03.19 10:01:25.685 Trades 'xxxxx': buy limit 2.00 TRNF-9.18 at 170112 placed for execution in 25114.794 ms 取引所が注文を受け付けたという サーバーの応答はログに残らない。 しかし、以下のエントリから判断すると、注文を設定する交換に関するサーバーの応答が来た(4) 2018.03.19 10:01:39.952 Trades 'xxxxx': modify order #85508330 buy limit 2.00 TRNF-9.18 at 170112 sl: 0 tp: 0 -> 170114, sl: 0 tp: 0 オーダーチケットを割り当て、取引所に送信した瞬間から1.4秒を経過していることから判断して。 は、まさにサーバ本体で発生したもので、遅延はサーバ本体で発生していると推測されます log(2) - log(3). なるほど、これは非常に「いい」ですね。 GP 0 19:17:29.663 Trades 'xxxxx': cancel #85167146 buy limit 3.00 UCHF-9.18 at market done in 132608.665 ms HR 0 19:17:29.678 Trades 'xxxxx': cancel #85167164 buy limit 3.00 AUDU-9.18 at market done in 132623.761 ms HK 0 19:17:29.698 Trades 'xxxxx': cancel #85167165 sell limit 3.00 AUDU-9.18 at market done in 132642.978 ms OE 0 19:17:29.721 Trades 'xxxxx': cancel #85167070 buy limit 1.00 GOLD-12.18 at market done in 132653.264 ms NG 0 19:17:29.741 Trades 'xxxxx': cancel #85167172 sell limit 1.00 ALRS-9.18 at market done in 132686.437 ms MR 0 19:17:29.755 Trades 'xxxxx': cancel #85167177 sell limit 2.00 NLMK-9.18 at market done in 132700.889 ms HP 0 19:17:29.783 Trades 'xxxxx': cancel #85167183 buy limit 1.00 PLT-12.18 at market done in 132727.785 ms CO 0 19:17:29.801 Trades 'xxxxx': cancel #85167254 sell limit 1.00 GMKR-9.18 at market done in 132746.755 ms FN 0 19:17:29.819 Trades 'xxxxx': cancel #85167689 sell limit 2.00 SBRF-12.18 at market done in 132722.855 ms QJ 0 19:17:29.839 Trades 'xxxxx': cancel #85167774 sell limit 3.00 UCHF-9.18 at market done in 132783.830 ms GH 0 19:17:29.855 Trades 'xxxxx': cancel #85167936 sell limit 2.00 MOEX-9.18 at market done in 132800.500 ms EH 0 19:17:29.870 Trades 'xxxxx': cancel #85167942 buy limit 1.00 SNGR-9.18 at market done in 132815.113 ms IR 0 19:17:29.889 Trades 'xxxxx': cancel #85167943 sell limit 2.00 SNGR-9.18 at market done in 132834.156 ms KN 0 19:17:29.916 Trades 'xxxxx': cancel #85168487 buy limit 2.00 CY-9.18 at market done in 132860.907 ms JP 0 19:17:29.935 Trades 'xxxxx': cancel #85168192 buy limit 3.00 UCAD-9.18 at market done in 132944.703 ms KL 0 19:17:29.950 Trades 'xxxxx': cancel #85170324 sell limit 1.00 VTBR-9.18 at market done in 132895.471 ms FJ 0 19:17:29.965 Trades 'xxxxx': cancel #85170435 sell limit 3.00 UJPY-9.18 at market done in 132910.178 ms RE 0 19:17:29.979 Trades 'xxxxx': cancel #85167688 buy limit 1.00 SBRF-12.18 at market done in 132883.188 ms KD 0 19:17:29.999 Trades 'xxxxx': cancel #85170988 sell limit 1.00 CHMF-9.18 at market done in 132943.997 ms PN 0 19:17:30.021 Trades 'xxxxx': cancel #85171201 buy limit 1.00 ED-12.18 at market done in 133030.275 ms DN 0 19:17:30.044 Trades 'xxxxx': cancel #85171303 buy limit 1.00 UJPY-9.18 at market done in 132989.636 ms 1...93949596979899100101102103104105106107...156 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
コードそのもの
1日に4000件の取引を行い、各取引で少なくとも5~6回OnTradeTransactionを "twitches "しています。
誰がこれらの「portmanteaus」の意味を理解するのでしょうか :)結局、端末のログとMT5 Serverのログが必要なのだそうです。
ログがギガバイトになるようなら、それも分析します。サーバーのログは必要ない。
私は非常に何かがこのExpert Advisorを実行するOnTradeTransactionに 来ないと主張するすべての人にお勧めします。
結果は次のようになります。
もし、そのようなログもないのであれば、OnTradeTransactionに関連するいかなる主張も単なる口先だけのものです。
ZZY 今回はタイミングが悪いのですが、違う 文脈から切り出された解答を複雑にしたくなかったのです。
ログがギガバイトになるなら、それも処理する。サーバーのログは必要ありません。
私は非常に何かがこのExpert Advisorを実行するOnTradeTransactionに 来ないと主張するすべての人にお勧めします。
結果は次のようになります。
もし、そのようなログもないのであれば、OnTradeTransactionに関連するいかなる主張も単なる口実に過ぎません。
今回はタイミングが悪かったのですが、他の文脈から 解決策を導き出すのは難しくありません。
なぜ、そんな「家庭菜園」を作るのか?
十分でしょう。
なぜそんな大げさなことをするのか?
それで十分でしょう。
物足りない。
手で開いて、ブレーキ確認
そして何より、この暴挙の代償を誰が払うのか......。
手で開いて、ブレーキ確認
そして何より、この暴挙の代償を誰が払うのか...。
このログを添付してブローカーに書き込んでください。
開発者にお金を払っているわけではないので、聞きにくいですし、使用許諾契約の中で
は、(他のソフトウェアと同様に)誰も責任を取らないように書かれています。
証券会社に手紙を出し、このログを添付してください。
開発者にお金を払わないので聞きづらいし、ライセンス契約も
は、(他のソフトウェアと同様に)誰も責任を取らないように書かれています。
それは修辞的な質問だった。
それは修辞的な質問だった。
:)
しかし、とにかくブローカーに手紙を書きましょう。
Expert Advisorのロギングを少し変更したらこうなった。
CheckOrders()関数は、1~1.5秒以内にサーバーからの応答がない場合に起動されます。
注文書がない場合は、メッセージを表示します。
チケットがある場合、ProcessOrders()関数が呼ば れ、オーダーに何が起こったかを確認する
その結果がこちらです。
遅延はブローカーが原因ではない可能性が高い。
注文が非同期で送信されるとき、我々は持っています。
端末が注文を送信する(1)
サーバーが注文を確認し、チケットを割り当てた(2)
サーバーが取引所に注文を送信(3)
取引所が注文を受け付けたという サーバーの応答はログに残らない。
しかし、以下のエントリから判断すると、注文を設定する交換に関するサーバーの応答が来た(4)
オーダーチケットを割り当て、取引所に送信した瞬間から1.4秒を経過していることから判断して。
は、まさにサーバ本体で発生したもので、遅延はサーバ本体で発生していると推測されます log(2) - log(3).
なるほど、これは非常に「いい」ですね。