FORTS. Questions relatives à l'application de la loi - page 100 1...93949596979899100101102103104105106107...156 Nouveau commentaire prostotrader 2018.02.28 13:32 #991 Le code lui-même //+------------------------------------------------------------------+ //| 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: J'ai 4000 transactions par jour, chaque transaction au moins 5-6 fois "twitche" OnTradeTransaction Qui va donner un sens à ces "portmanteaus" :) Après tout, ils ont besoin des journaux du terminal et des journaux du serveur MT5. Si les journaux prennent des gigaoctets, je les analyserai aussi. Je n'ai pas besoin des journaux du serveur. Je recommande vivement à tous ceux qui prétendent que quelque chose ne vient pas à OnTradeTransaction d'utiliser ce conseiller expert. // Советник записывает подробно каждый 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)); } Le résultat ressemblera à ceci 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) .... S'il n'existe même pas un tel journal, alors toute réclamation relative à OnTradeTransaction n'est que du vent. ZZY Le timing n'est pas parfait dans ce cas, mais je ne voulais pas compliquer une solution arrachée à un contexte différent. Dossiers : OnTradeTransaction.mq5 4 kb La toile est cool Double vs FLOAT - Bibliothèque: Expert prostotrader 2018.02.28 20:24 #993 fxsaber: Si les journaux prennent des gigaoctets, je m'en occupe aussi. Les journaux du serveur ne sont pas nécessaires. Je recommande vivement à tous ceux qui prétendent que quelque chose ne vient pas à OnTradeTransaction d'utiliser ce conseiller expert. Le résultat ressemblera à ceci S'il n'y a même pas un tel journal, alors toute réclamation relative à OnTradeTransaction n'est que du vent. Le timing n'est pas parfait dans ce cas, mais je n'ai pas de solution compliquée sortie d'un autre contexte.Pourquoi faire un tel "potager" ? Ce sera suffisant : 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: Pourquoi en faire tout un plat ? Cela suffira : Pas assez. Aleksey Vyazmikin 2018.03.14 08:05 #995 Ouverture à la main, les freins sont confirmés 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) Et surtout, qui va payer pour cet outrage... prostotrader 2018.03.14 15:10 #996 Aleksey Vyazmikin: Ouverture à la main, les freins sont confirmés Et surtout, qui va payer pour cet outrage...Écrivez au courtier, en joignant ce journal. Nous ne payons pas le développeur, il est donc difficile de lui demander, et dans l'accord de licence il est écrit (comme tous les logiciels) que personne n'est responsable de rien. Erreurs, bugs, questions Questions des débutants MQL4 Indicateur stochastique. Une observation Aleksey Vyazmikin 2018.03.14 15:15 #997 prostotrader: Écrivez à votre courtier et joignez ce journal. Nous ne payons pas le développeur, il est donc difficile de lui demander, et l'accord de licence... il est écrit (comme tous les logiciels) que personne n'est responsable de rien.C'était une question rhétorique. prostotrader 2018.03.14 15:16 #998 Aleksey Vyazmikin: C'était une question rhétorique.:) Mais écrivez quand même à votre courtier. prostotrader 2018.03.19 08:18 #999 J'ai modifié un peu l'enregistrement de l'Expert Advisor et voici ce qui se passe : La fonction CheckOrders() se déclenche s'il n'y a pas de réponse du serveur dans un délai de 1 à 1,5 seconde. S'il n'y a pas de ticket de commande, il affichera un message CheckOrders: Не получен билет. Задержка ответа сервера. Ожидание продолжается... S'il existe un ticket, la fonction ProcessOrders() est appelée pour vérifier ce qu'il est advenu de la commande. Voici le résultat : 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 Les retards ne sont probablement pas dus au courtier. Toute question de débutant, Au secours ! Experts: QuotesDemo prostotrader 2018.03.22 14:00 #1000 Lorsqu'une commande est envoyée de manière asynchrone, nous avons : Le terminal envoie la commande (1) 2018.03.19 10:01:00.575 Trades 'xxxxx': buy limit 2.00 TRNF-9.18 at 170112 Le serveur a vérifié la commande et lui a attribué un ticket (2). 2018.03.19 10:01:24.263 Trades 'xxxxx': accepted buy limit 2.00 TRNF-9.18 at 170112 Le serveur envoie l'ordre à l'échange (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 réponse du serveur indiquant que l 'ordre est accepté par l'échange n'est pas enregistrée. Mais à en juger par l'entrée suivante, la réponse du serveur concernant l'échange fixant l'ordre est arrivée (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 en juger par le fait qu'entre le moment où le ticket d'ordre est attribué et celui où il est envoyé à la bourse, il s'est écoulé 1,4 SEC. s'est produit exactement sur le serveur lui-même, je suppose que les retards se produisent sur le serveur lui-même log(2) - log(3). Eh bien, c'est très "sympa". 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 Nouveau commentaire
Le code lui-même
J'ai 4000 transactions par jour, chaque transaction au moins 5-6 fois "twitche" OnTradeTransaction
Qui va donner un sens à ces "portmanteaus" :) Après tout, ils ont besoin des journaux du terminal et des journaux du serveur MT5.
Si les journaux prennent des gigaoctets, je les analyserai aussi. Je n'ai pas besoin des journaux du serveur.
Je recommande vivement à tous ceux qui prétendent que quelque chose ne vient pas à OnTradeTransaction d'utiliser ce conseiller expert.
Le résultat ressemblera à ceci
S'il n'existe même pas un tel journal, alors toute réclamation relative à OnTradeTransaction n'est que du vent.
ZZY Le timing n'est pas parfait dans ce cas, mais je ne voulais pas compliquer une solution arrachée à un contexte différent.
Si les journaux prennent des gigaoctets, je m'en occupe aussi. Les journaux du serveur ne sont pas nécessaires.
Je recommande vivement à tous ceux qui prétendent que quelque chose ne vient pas à OnTradeTransaction d'utiliser ce conseiller expert.
Le résultat ressemblera à ceci
S'il n'y a même pas un tel journal, alors toute réclamation relative à OnTradeTransaction n'est que du vent.
Le timing n'est pas parfait dans ce cas, mais je n'ai pas de solution compliquée sortie d'un autre contexte.
Pourquoi faire un tel "potager" ?
Ce sera suffisant :
Pourquoi en faire tout un plat ?
Cela suffira :
Pas assez.
Ouverture à la main, les freins sont confirmés
Et surtout, qui va payer pour cet outrage...
Ouverture à la main, les freins sont confirmés
Et surtout, qui va payer pour cet outrage...
Écrivez au courtier, en joignant ce journal.
Nous ne payons pas le développeur, il est donc difficile de lui demander, et dans l'accord de licence
il est écrit (comme tous les logiciels) que personne n'est responsable de rien.
Écrivez à votre courtier et joignez ce journal.
Nous ne payons pas le développeur, il est donc difficile de lui demander, et l'accord de licence...
il est écrit (comme tous les logiciels) que personne n'est responsable de rien.
C'était une question rhétorique.
C'était une question rhétorique.
:)
Mais écrivez quand même à votre courtier.
J'ai modifié un peu l'enregistrement de l'Expert Advisor et voici ce qui se passe :
La fonction CheckOrders() se déclenche s'il n'y a pas de réponse du serveur dans un délai de 1 à 1,5 seconde.
S'il n'y a pas de ticket de commande, il affichera un message
S'il existe un ticket, la fonction ProcessOrders() est appelée pour vérifier ce qu'il est advenu de la commande.
Voici le résultat :
Les retards ne sont probablement pas dus au courtier.
Lorsqu'une commande est envoyée de manière asynchrone, nous avons :
Le terminal envoie la commande (1)
Le serveur a vérifié la commande et lui a attribué un ticket (2).
Le serveur envoie l'ordre à l'échange (3)
La réponse du serveur indiquant que l 'ordre est accepté par l'échange n'est pas enregistrée.
Mais à en juger par l'entrée suivante, la réponse du serveur concernant l'échange fixant l'ordre est arrivée (4)
A en juger par le fait qu'entre le moment où le ticket d'ordre est attribué et celui où il est envoyé à la bourse, il s'est écoulé 1,4 SEC.
s'est produit exactement sur le serveur lui-même, je suppose que les retards se produisent sur le serveur lui-même log(2) - log(3).
Eh bien, c'est très "sympa".