Добрый день,
столкнулся с такой проблемой, хочу узнать как выставлял и двигал уровни SL и TP.
Но при анализе истории ордеров никакой инфы по ним нет, хотя вроде бы устанавливаются они через ордера пусть даже и вручную.
Есть ли вообще такая инфа (по уровням SL и TP) в истории и как ее вытащить если есть? Заранее спасибо.
Какой рынок?
Какой рынок?
Добрый день,
столкнулся с такой проблемой, хочу узнать как выставлял и двигал уровни SL и TP.
Но при анализе истории ордеров никакой инфы по ним нет, хотя вроде бы устанавливаются они через ордера пусть даже и вручную.
Есть ли вообще такая инфа (по уровням SL и TP) в истории и как ее вытащить если есть? Заранее спасибо.
Нет, только один уровень
Нет, только один уровень
не понял, что значит только один уровень? может я вопрос задал не совсем корректно.
пример:
все действия вручную с компа. МТ5
1. открыл позицию по рынку -
2. выставил SL
3. выставил TP
4. передвинул SL
5. закрыл сделку.
Можно ли узнать уровни (цены) SL и ТП из п 2-4.
под узнать - я имею ввиду выборку с помощью HistorySelect() и дальнейший перебор ордеров
- www.metatrader5.com
не понял, что значит только один уровень? может я вопрос задал не совсем корректно.
пример:
все действия вручную с компа. МТ5
1. открыл позицию по рынку -
2. выставил SL
3. выставил TP
4. передвинул SL
5. закрыл сделку.
Можно ли узнать уровни (цены) SL и ТП из п 2-4.
Я же пояснил. Нельзя посмотреть 2 уровня, только один
Я же пояснил. Нельзя посмотреть 2 уровня, только один (в истории)
извините, но что-то у меня лыжи не едут. Что это за уровень? Можно на пальцах.Упрощаем пример до минимума
Купил за 100, установил СЛ - 90, закрыл сделку. Могу я через неделю средствами mql5 найти что был установлен СЛ = 90? Спасибо.
извините, но что-то у меня лыжи не едут. Что это за уровень? Можно на пальцах.Упрощаем пример до минимума
Купил за 100, установил СЛ - 90, закрыл сделку. Могу я через неделю средствами mql5 найти что был установлен СЛ = 90? Спасибо.
Вы же пишите, что передвинули SL
Ну это программа максимум. В принципе вопрос сводился к тому можно ли в принципе увидет уровни СЛ в истории, пока не понимаю в чем разница между установленным первый раз и передвинутым (в моем понимании один удалил, второй поставил), если инфа в истории сохраняется, то наверное должны быть все действия, если нет, то ничего и не будет. Просто в своийствах HistoryOrderGet... я ничего не нашел. Либо плохо искал, либо не там. Подскажите направление куда смотреть, может и вопрос сформулирую более внятно.
Я сейчас проверил в демо сервере.
Оказалось, что в истории вообще нельзя посмотреть SL.
Сделал следующее
открыл сделку, установил SL, передвинул SL, закрыл сделку.
Потом посмотрел в истоии SL = 0.0
//+------------------------------------------------------------------+ //| SL_test.mq5 | //| Copyright 2020 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2020 prostotrader" #property link "https://www.mql5.com" #property version "1.00" #define ERR_ZERO_TICKET -1111 input ulong Ticket = 170219282;//Тикет ордера enum ENUM_ORD_REAL_STATE { ORDER_NOT_SPECIFIED = 0, //Состояние ордера не определено ORDER_NONE_CANCELED = 1, //Ордера нет, отменён пользователем ORDER_NONE_PARTIAL_CANCELED = 2, //Ордера нет, исполнился частично (не был залит вторым объёмом) ORDER_NONE_PARTIAL = 3, //Ордера нет, исполнился частично ORDER_NONE_EXPIRED = 4, //Ордера нет, удалён по сроку ORDER_NONE_FILLED = 5, //Ордера нет, исполнился полностью ORDER_NONE_REJECTED = 6, //Ордера нет, отклонён брокером(биржей) ORDER_BUSY = 7, //Ордер находится в переходном состоянии ORDER_EXIST = 8, //Ордер выставлен на биржу, возможны действия над ним ORDER_EXIST_PARTIAL = 9 //Ордер выставлен на биржу, частично исполнился, возможны действия над ним }; //--- enum ENUM_ORD_SELECT { SELECT_ERROR = 0, SELECT_FALSE = 1, SELECT_TRUE = 2, SELECT_BUSY = 3 }; struct ORDER_DATA { int error_code; ulong ticket; datetime time_setup; ENUM_ORDER_TYPE type; ENUM_ORDER_STATE state; ENUM_ORD_REAL_STATE real_state; datetime expiration; datetime time_done; long t_set_msc; long t_done_msc; ENUM_ORDER_TYPE_FILLING type_filling; ENUM_ORDER_TYPE_TIME type_time; long magic; ENUM_ORDER_REASON reason; long pos_id; long pos_by_id; double vol_init; double vol_cur; double price_open; double sl; double tp; double price_cur; double price_stlim; string symbol; string comment; string ext_id; // ENUM_ORD_HYSTORY is_hystory; }; //+------------------------------------------------------------------+ // Expert Order Real Select function | //+------------------------------------------------------------------+ ENUM_ORD_SELECT OrderRealSelect(const ulong ticket, ORDER_DATA &ord_data, const bool get_data) { double init_vol = 0; double cur_vol = 0; ZeroMemory(ord_data); ord_data.real_state = ORDER_NOT_SPECIFIED; ord_data.error_code = ERR_SUCCESS; ResetLastError(); //ord_data.is_hystory = HYST_NOT_SPECIFIED; if(ticket > 0) { if(HistoryOrderSelect(ticket) == true) { //ord_data.is_hystory = HYST_TRUE; if(get_data == true) { //--- long ord_data.ticket = ulong(HistoryOrderGetInteger(ticket, ORDER_TICKET)); ord_data.time_setup = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_SETUP)); ord_data.type = ENUM_ORDER_TYPE( HistoryOrderGetInteger(ticket, ORDER_TYPE)); ord_data.state = ENUM_ORDER_STATE( HistoryOrderGetInteger(ticket, ORDER_STATE)); ord_data.expiration = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_EXPIRATION)); ord_data.time_done = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_DONE)); ord_data.t_set_msc = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_SETUP_MSC)); ord_data.t_done_msc = datetime(HistoryOrderGetInteger(ticket, ORDER_TIME_DONE_MSC)); ord_data.type_filling = ENUM_ORDER_TYPE_FILLING(HistoryOrderGetInteger(ticket, ORDER_TYPE_FILLING)); ord_data.type_time = ENUM_ORDER_TYPE_TIME(HistoryOrderGetInteger(ticket, ORDER_TYPE_TIME)); ord_data.magic = HistoryOrderGetInteger(ticket, ORDER_MAGIC); ord_data.reason = ENUM_ORDER_REASON(HistoryOrderGetInteger(ticket, ORDER_REASON)); ord_data.pos_id = HistoryOrderGetInteger(ticket, ORDER_POSITION_ID); ord_data.pos_by_id = HistoryOrderGetInteger(ticket, ORDER_POSITION_BY_ID); //--- double ord_data.vol_init = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL); ord_data.vol_cur = HistoryOrderGetDouble(ticket, ORDER_VOLUME_CURRENT); ord_data.price_open = HistoryOrderGetDouble(ticket, ORDER_PRICE_OPEN); ord_data.sl = HistoryOrderGetDouble(ticket, ORDER_SL); ord_data.tp = HistoryOrderGetDouble(ticket, ORDER_TP); ord_data.price_cur = HistoryOrderGetDouble(ticket, ORDER_PRICE_CURRENT); ord_data.price_stlim = HistoryOrderGetDouble(ticket, ORDER_PRICE_STOPLIMIT); //--- string ord_data.symbol = HistoryOrderGetString(ticket, ORDER_SYMBOL); ord_data.comment = HistoryOrderGetString(ticket, ORDER_COMMENT); ord_data.ext_id = HistoryOrderGetString(ticket, ORDER_EXTERNAL_ID); } else { ord_data.state = ENUM_ORDER_STATE(HistoryOrderGetInteger(ticket, ORDER_STATE)); cur_vol = HistoryOrderGetDouble(ticket, ORDER_VOLUME_CURRENT); init_vol = HistoryOrderGetDouble(ticket, ORDER_VOLUME_INITIAL); } //--- switch(ord_data.state) { case ORDER_STATE_CANCELED: if(get_data) { if(ord_data.vol_init == ord_data.vol_cur) { ord_data.real_state = ORDER_NONE_CANCELED; } else { ord_data.real_state = ORDER_NONE_PARTIAL_CANCELED; } } else { if(init_vol == cur_vol) { ord_data.real_state = ORDER_NONE_CANCELED; } else { ord_data.real_state = ORDER_NONE_PARTIAL_CANCELED; } } break; case ORDER_STATE_PARTIAL: ord_data.real_state = ORDER_NONE_PARTIAL; break; case ORDER_STATE_EXPIRED: ord_data.real_state = ORDER_NONE_EXPIRED; break; case ORDER_STATE_FILLED: ord_data.real_state = ORDER_NONE_FILLED; break; case ORDER_STATE_REJECTED: ord_data.real_state = ORDER_NONE_REJECTED; break; } } else if(OrderSelect(ticket) == true) { //ord_data.is_hystory = HYST_FALSE; if(get_data == true) { //--- long ord_data.ticket = ulong(OrderGetInteger(ORDER_TICKET)); ord_data.time_setup = datetime(OrderGetInteger(ORDER_TIME_SETUP)); ord_data.type = ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)); ord_data.state = ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE)); ord_data.expiration = datetime(OrderGetInteger(ORDER_TIME_EXPIRATION)); ord_data.time_done = datetime(OrderGetInteger(ORDER_TIME_DONE)); ord_data.t_set_msc = datetime(OrderGetInteger(ORDER_TIME_SETUP_MSC)); ord_data.t_done_msc = datetime(OrderGetInteger(ORDER_TIME_DONE_MSC)); ord_data.type_filling = ENUM_ORDER_TYPE_FILLING(OrderGetInteger(ORDER_TYPE_FILLING)); ord_data.type_time = ENUM_ORDER_TYPE_TIME(OrderGetInteger(ORDER_TYPE_TIME)); ord_data.magic = OrderGetInteger(ORDER_MAGIC); ord_data.reason = ENUM_ORDER_REASON(OrderGetInteger(ORDER_REASON)); ord_data.pos_id = OrderGetInteger(ORDER_POSITION_ID); ord_data.pos_by_id = OrderGetInteger(ORDER_POSITION_BY_ID); //--- double ord_data.vol_init = OrderGetDouble(ORDER_VOLUME_INITIAL); ord_data.vol_cur = OrderGetDouble(ORDER_VOLUME_CURRENT); ord_data.price_open = OrderGetDouble(ORDER_PRICE_OPEN); ord_data.sl = OrderGetDouble(ORDER_SL); ord_data.tp = OrderGetDouble(ORDER_TP); ord_data.price_cur = OrderGetDouble(ORDER_PRICE_CURRENT); ord_data.price_stlim = OrderGetDouble(ORDER_PRICE_STOPLIMIT); //--- string ord_data.symbol = OrderGetString(ORDER_SYMBOL); ord_data.comment = OrderGetString(ORDER_COMMENT); ord_data.ext_id = OrderGetString(ORDER_EXTERNAL_ID); } else ord_data.state = ENUM_ORDER_STATE(OrderGetInteger(ORDER_STATE)); switch(ord_data.state) { case ORDER_STATE_STARTED: case ORDER_STATE_REQUEST_ADD: case ORDER_STATE_REQUEST_MODIFY: case ORDER_STATE_REQUEST_CANCEL: ord_data.real_state = ORDER_BUSY; break; case ORDER_STATE_PARTIAL: ord_data.real_state = ORDER_EXIST_PARTIAL; break; case ORDER_STATE_PLACED: ord_data.real_state = ORDER_EXIST; break; } } else ord_data.error_code = GetLastError(); //--- if((ord_data.error_code != ERR_SUCCESS) || (ord_data.real_state == ORDER_NOT_SPECIFIED)) { return(SELECT_ERROR); } else { switch(ord_data.real_state) { case ORDER_BUSY: return(SELECT_BUSY); break; case ORDER_EXIST: case ORDER_EXIST_PARTIAL: return(SELECT_TRUE); break; default: return(SELECT_FALSE); break; } } } else { ord_data.error_code = ERR_ZERO_TICKET; return(SELECT_ERROR); } } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { ORDER_DATA order_data; if(OrderRealSelect(Ticket, order_data, true) == SELECT_FALSE) { Print("SL = ", order_data.sl); } return(INIT_SUCCEEDED); }
Результат
2020.04.23 19:59:32.207 SL_test (GOLD-6.20,M1) SL = 0.0 2020.04.23 20:00:59.224 SL_test (GOLD-6.20,M1) SL = 0.0
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день,
столкнулся с такой проблемой, хочу узнать как выставлял и двигал уровни SL и TP.
Но при анализе истории ордеров никакой инфы по ним нет, хотя вроде бы устанавливаются они через ордера пусть даже и вручную.
Есть ли вообще такая инфа (по уровням SL и TP) в истории и как ее вытащить если есть? Заранее спасибо.