Ошибки, баги, вопросы - страница 2411 1...240424052406240724082409241024112412241324142415241624172418...3776 Новый комментарий Andrey Dik 2019.03.24 13:30 #24101 Билд 2007 Функция: bool GetDialLastProfit (string symbol, datetime startDate, datetime endDate, long magic, double &profit, double &lot) { HistorySelect (startDate, endDate); int deals = HistoryDealsTotal (); ulong ticket; for (int i = deals - 1; i >= 0; i--) //for (int i = 0; i < deals; i++) { ticket = HistoryDealGetTicket (i); if (ticket != 0) { if (HistoryDealGetInteger(ticket, DEAL_MAGIC) == magic) { profit = HistoryDealGetDouble (ticket, DEAL_PROFIT); //if (!HistoryDealGetDouble(ticket, DEAL_PROFIT, profit)) // return false; lot = HistoryDealGetDouble (ticket, DEAL_VOLUME); return (true); } } } return (false); } в переменную profit должна по идее выдавать финансовый результат сделки, но получается всегда 0.0, причем в переменной lot всегда корректное значение. Ошибка? - или я делаю что то не так Andrey Barinov 2019.03.24 13:33 #24102 Andrey Dik: Билд 2007 Функция: в переменную profit должна по идее выдавать финансовый результат сделки, но получается всегда 0.0, причем в переменной lot всегда корректное значение. Ошибка? - или я делаю что то не такDEAL_ENTRY_OUT или INOUT надо смотреть. У сделок _IN профит 0 Andrey Dik 2019.03.24 13:35 #24103 Andrey Barinov: DEAL_ENTRY_OUT или INOUT надо смотреть. У сделок _IN профит 0ну так берётся же первая с конца списка, должна быть OUT Andrey Barinov 2019.03.24 13:40 #24104 Andrey Dik: ну так берётся же первая с конца списка, должна быть OUTЕсли в endDate передаете TimeCurrent(), то замените на TimeCurrent()+60 или как-то так. Должно помочь. Andrey Dik 2019.03.24 13:42 #24105 Andrey Barinov: Если в endDate передаете TimeCurrent(), то замените на TimeCurrent()+60 или как-то так. Должно помочь.нет, так же 0.0 Andrey Barinov 2019.03.24 13:43 #24106 Andrey Dik: нет, так же 0.0Тогда дебажте. Печатайте тикеты сделок и смотрите в тестере что там выбирается на самом деле. Фильтр по типу сделки все-таки добавьте. Andrey Dik 2019.03.24 13:45 #24107 Andrey Barinov: Тогда дебажте. Печатайте тикеты сделок и смотрите в тестере что там выбирается на самом деле. Фильтр по типу сделки все-таки добавьте.лот выдаёт корректно, соответсвенно тикет выбран верно. Andrey Barinov 2019.03.24 13:47 #24108 Andrey Dik: лот выдаёт корректно, соответсвенно тикет выбран верно.Нет. У обеих сделок, In и Out лот одинаковый. А профит нет. Вот мой код. Работает. //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ ulong LastOutDealTicket(const string symbol,const uint magic) { //=============== long lasttime=0; //=============== //=============== ulong ticket=0; //=============== //=============== #ifdef __MQL5__ //=============== ::HistorySelect(0,TimeCurrent()+60); //=============== const int deals=::HistoryDealsTotal(); //=============== for(int i=deals-1;i>=0;i--) { //=============== const ulong tempticket=::HistoryDealGetTicket(i); //=============== //=============== if(::HistoryDealGetInteger(tempticket,DEAL_ENTRY)!=DEAL_ENTRY_OUT || ::HistoryDealGetString(tempticket,DEAL_SYMBOL)!=symbol || ::HistoryDealGetInteger(tempticket,DEAL_MAGIC)!=magic)continue; //=============== //=============== if(::MQLInfoInteger(MQL_TESTER))return(tempticket); //=============== //=============== if(::HistoryDealGetInteger(tempticket,DEAL_TIME)<=lasttime)continue; //=============== //=============== ticket=tempticket; lasttime=::HistoryDealGetInteger(tempticket,DEAL_TIME); //=============== } //=============== #endif //=============== //=============== #ifdef __MQL4__ //=============== const int ordershistory=OrdersHistoryTotal(); //=============== for(int i=ordershistory-1;i>=0;i--) { //=============== if(!::OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) || ::OrderSymbol()!=symbol || ::OrderMagicNumber()!=magic || (::OrderType()!=OP_SELL && ::OrderType()!=OP_BUY))continue; //=============== //=============== if(::MQLInfoInteger(MQL_TESTER))return(::OrderTicket()); //=============== //=============== if(::OrderCloseTime()<=lasttime)continue; //=============== //=============== ticket=::OrderTicket(); lasttime=::OrderCloseTime(); //=============== } //=============== #endif //=============== //=============== return(ticket); //=============== } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double LastClosedProfit(const string symbol,const uint magic) { //=============== const ulong lastoutticket=::LastOutDealTicket(symbol,magic); //=============== //=============== if(lastoutticket<=0)return(0); //=============== //=============== double result=0; //=============== //=============== #ifdef __MQL5__ //=============== result=::HistoryDealGetDouble(lastoutticket,DEAL_PROFIT); //=============== #endif //=============== //=============== #ifdef __MQL4__ //=============== if(::OrderSelect((int)lastoutticket,SELECT_BY_TICKET,MODE_HISTORY))result=::OrderProfit(); //=============== #endif //=============== //=============== return(result); //=============== } Andrey Dik 2019.03.24 14:06 #24109 Andrey Barinov: Нет. У обеих сделок, In и Out лот одинаковый. А профит нет. Вот мой код. Работает. попробовал, Ваш код тоже 0.0 выдаёт)))счет хедженговый, если что. Andrey Barinov 2019.03.24 14:21 #24110 Andrey Dik: попробовал, Ваш код тоже 0.0 выдаёт)))счет хедженговый, если что.Только что проверил все на 2009 билде. Мой код выдает то, что и должен выдавать. Если выдает 0, значит у Вас там 0 и есть. 1...240424052406240724082409241024112412241324142415241624172418...3776 Новый комментарий
Билд 2007
Функция:
в переменную profit должна по идее выдавать финансовый результат сделки, но получается всегда 0.0, причем в переменной lot всегда корректное значение.
Ошибка? - или я делаю что то не так
Билд 2007
Функция:
в переменную profit должна по идее выдавать финансовый результат сделки, но получается всегда 0.0, причем в переменной lot всегда корректное значение.
Ошибка? - или я делаю что то не так
DEAL_ENTRY_OUT или INOUT надо смотреть. У сделок _IN профит 0
DEAL_ENTRY_OUT или INOUT надо смотреть. У сделок _IN профит 0
ну так берётся же первая с конца списка, должна быть OUT
ну так берётся же первая с конца списка, должна быть OUT
Если в endDate передаете TimeCurrent(), то замените на TimeCurrent()+60 или как-то так. Должно помочь.
Если в endDate передаете TimeCurrent(), то замените на TimeCurrent()+60 или как-то так. Должно помочь.
нет, так же 0.0
нет, так же 0.0
Тогда дебажте. Печатайте тикеты сделок и смотрите в тестере что там выбирается на самом деле. Фильтр по типу сделки все-таки добавьте.
Тогда дебажте. Печатайте тикеты сделок и смотрите в тестере что там выбирается на самом деле. Фильтр по типу сделки все-таки добавьте.
лот выдаёт корректно, соответсвенно тикет выбран верно.
лот выдаёт корректно, соответсвенно тикет выбран верно.
Нет. У обеих сделок, In и Out лот одинаковый. А профит нет.
Вот мой код. Работает.
Нет. У обеих сделок, In и Out лот одинаковый. А профит нет.
Вот мой код. Работает.
попробовал, Ваш код тоже 0.0 выдаёт)))
счет хедженговый, если что.попробовал, Ваш код тоже 0.0 выдаёт)))
счет хедженговый, если что.Только что проверил все на 2009 билде. Мой код выдает то, что и должен выдавать. Если выдает 0, значит у Вас там 0 и есть.