FORTI. Problemi di applicazione - pagina 100 1...93949596979899100101102103104105106107...156 Nuovo commento prostotrader 2018.02.28 13:32 #991 Il codice stesso //+------------------------------------------------------------------+ //| 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 13:39 #992 prostotrader: Ho 4000 transazioni al giorno, ogni transazione almeno 5-6 volte "scatta" OnTradeTransaction Chi darà un senso a questi "portmanteaus" :) Dopo tutto, hanno bisogno dei log del terminale più i log del server MT5. Se i registri richiederanno gigabyte - li analizzerò anch'io. Non ho bisogno dei log del server. Consiglio vivamente a tutti coloro che sostengono che qualcosa non arriva a OnTradeTransaction di eseguire questo Expert Advisor // Советник записывает подробно каждый 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)); } Il risultato sarà simile a questo 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) .... Se non c'è nemmeno un registro di questo tipo, allora qualsiasi affermazione relativa a OnTradeTransaction è solo una chiacchiera. ZZY Il momento non è perfetto in questo caso, ma non volevo complicare una soluzione strappata da un contesto diverso. File: OnTradeTransaction.mq5 4 kb Copiatore di transazioni/segnali altamente Come ottenere la "Percentuale Come faccio a fare prostotrader 2018.02.28 20:24 #993 fxsaber: Se i registri occupano gigabyte, me ne occuperò anch'io. I log del server non sono necessari. Consiglio vivamente a tutti coloro che sostengono che qualcosa non arriva a OnTradeTransaction di eseguire questo Expert Advisor Il risultato sarà simile a questo Se non c'è nemmeno un registro di questo tipo, allora qualsiasi affermazione relativa a OnTradeTransaction è solo una chiacchiera. La tempistica non è perfetta in questo caso, ma non ho complicato la soluzione presa fuori da altri contesti.Perché fare un tale "orto"? Sarà sufficiente: 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 20:44 #994 prostotrader: Perché farne una questione così importante? Questo sarà sufficiente: Non abbastanza. Aleksey Vyazmikin 2018.03.14 08:05 #995 Apertura a mano, i freni sono confermati 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) E soprattutto, chi pagherà per questo oltraggio... prostotrader 2018.03.14 15:10 #996 Aleksey Vyazmikin: Apertura a mano, i freni sono confermati E soprattutto, chi pagherà per questo oltraggio...Scrivete al broker, allegando questo registro. Non paghiamo lo sviluppatore, quindi è difficile chiederglielo, e nel contratto di licenza è scritto (come tutti i software) che nessuno è responsabile di nulla. Aleksey Vyazmikin 2018.03.14 15:15 #997 prostotrader: Scrivi al tuo broker e allega questo registro. Non paghiamo lo sviluppatore, quindi è difficile chiederglielo, e il contratto di licenza è scritto (come tutti i software) che nessuno è responsabile di nulla.Era una domanda retorica. prostotrader 2018.03.14 15:16 #998 Aleksey Vyazmikin: Era una domanda retorica.:) Ma scrivete comunque al vostro broker. prostotrader 2018.03.19 08:18 #999 Ho cambiato un po' la registrazione dell'Expert Advisor e questo è quello che succede: La funzione CheckOrders() si attiva se non c'è risposta dal server entro 1-1,5 secondi. Se non c'è un biglietto d'ordine, verrà visualizzato un messaggio CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... Se c'è un biglietto, viene chiamata la funzione ProcessOrders() per controllare cosa è successo all'ordine ecco il risultato: 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 I ritardi non sono molto probabilmente dovuti al broker. Tutte le domande dei ORDINE_POSIZIONE_ID Velocità di esecuzione su prostotrader 2018.03.22 14:00 #1000 Quando un ordine viene inviato in modo asincrono abbiamo: Il terminale invia l'ordine (1) 2018.03.19 10:01:00.575 Trades 'xxxxx': buy limit 2.00 TRNF-9.18 at 170112 Il server ha controllato l'ordine e gli ha assegnato un biglietto (2) 2018.03.19 10:01:24.263 Trades 'xxxxx': accepted buy limit 2.00 TRNF-9.18 at 170112 Il server invia l'ordine alla borsa (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 La risposta del server che l'ordine è accettato dallo scambio non viene registrata. Ma a giudicare dalla seguente voce, la risposta del server sullo scambio che imposta l'ordine è arrivata (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 A giudicare dal fatto che dal momento dell'assegnazione del biglietto d'ordine e l'invio allo scambio è passato 1,4 SEC. avvenuto esattamente sul server stesso, presumo che i ritardi avvengano sul server stesso log(2) - log(3). Beh, questo è molto "bello". 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 Nuovo commento
Il codice stesso
Ho 4000 transazioni al giorno, ogni transazione almeno 5-6 volte "scatta" OnTradeTransaction
Chi darà un senso a questi "portmanteaus" :) Dopo tutto, hanno bisogno dei log del terminale più i log del server MT5.
Se i registri richiederanno gigabyte - li analizzerò anch'io. Non ho bisogno dei log del server.
Consiglio vivamente a tutti coloro che sostengono che qualcosa non arriva a OnTradeTransaction di eseguire questo Expert Advisor
Il risultato sarà simile a questo
Se non c'è nemmeno un registro di questo tipo, allora qualsiasi affermazione relativa a OnTradeTransaction è solo una chiacchiera.
ZZY Il momento non è perfetto in questo caso, ma non volevo complicare una soluzione strappata da un contesto diverso.
Se i registri occupano gigabyte, me ne occuperò anch'io. I log del server non sono necessari.
Consiglio vivamente a tutti coloro che sostengono che qualcosa non arriva a OnTradeTransaction di eseguire questo Expert Advisor
Il risultato sarà simile a questo
Se non c'è nemmeno un registro di questo tipo, allora qualsiasi affermazione relativa a OnTradeTransaction è solo una chiacchiera.
La tempistica non è perfetta in questo caso, ma non ho complicato la soluzione presa fuori da altri contesti.
Perché fare un tale "orto"?
Sarà sufficiente:
Perché farne una questione così importante?
Questo sarà sufficiente:
Non abbastanza.
Apertura a mano, i freni sono confermati
E soprattutto, chi pagherà per questo oltraggio...
Apertura a mano, i freni sono confermati
E soprattutto, chi pagherà per questo oltraggio...
Scrivete al broker, allegando questo registro.
Non paghiamo lo sviluppatore, quindi è difficile chiederglielo, e nel contratto di licenza
è scritto (come tutti i software) che nessuno è responsabile di nulla.
Scrivi al tuo broker e allega questo registro.
Non paghiamo lo sviluppatore, quindi è difficile chiederglielo, e il contratto di licenza
è scritto (come tutti i software) che nessuno è responsabile di nulla.
Era una domanda retorica.
Era una domanda retorica.
:)
Ma scrivete comunque al vostro broker.
Ho cambiato un po' la registrazione dell'Expert Advisor e questo è quello che succede:
La funzione CheckOrders() si attiva se non c'è risposta dal server entro 1-1,5 secondi.
Se non c'è un biglietto d'ordine, verrà visualizzato un messaggio
Se c'è un biglietto, viene chiamata la funzione ProcessOrders() per controllare cosa è successo all'ordine
ecco il risultato:
I ritardi non sono molto probabilmente dovuti al broker.
Quando un ordine viene inviato in modo asincrono abbiamo:
Il terminale invia l'ordine (1)
Il server ha controllato l'ordine e gli ha assegnato un biglietto (2)
Il server invia l'ordine alla borsa (3)
La risposta del server che l'ordine è accettato dallo scambio non viene registrata.
Ma a giudicare dalla seguente voce, la risposta del server sullo scambio che imposta l'ordine è arrivata (4)
A giudicare dal fatto che dal momento dell'assegnazione del biglietto d'ordine e l'invio allo scambio è passato 1,4 SEC.
avvenuto esattamente sul server stesso, presumo che i ritardi avvengano sul server stesso log(2) - log(3).
Beh, questo è molto "bello".