- Как выбрать ордер по комментарию?
- Советники: Система IIN - нетехнический анализ рынка
- vps сервер
Типа этого - правьте: + в учебнике всё есть + ищите в гугле через сайт: "как выбрать все ордера из истории по комментарию" site:mql4.com
//-------------------------------------------------------------------- // Terminal.mqh // //--------------------------------------------------------------- 1 -- // Функция учёта ордеров // Глобальные переменные: // Mas_Ord_New[31][11] // Массив ордеров последний известный // Mas_Ord_Old[31][11] // Массив ордеров предыдущий (старый) // 1й индекс = порядковый номер ордера // [][0] не определяется // [][1] курс откр. ордера (абс.знач.курса) // [][2] StopLoss ордера (абс.знач.курса) // [][3] TakeProfit ордера (абс.знач.курса) // [][4] номер ордера // [][5] колич. лотов орд. (абс.знач.курса) // [][6] тип орд. 0=B,1=S,2=BL,3=SL,4=BS,5=SS // [][7] магическое число ордера // [][8] 0/1 факт наличия комментария // [][9] профит по ордеру // [] [10] время открытия // Mas_Tip[6] // Массив колич. ордеров всех типов // [] тип орд: 0=B,1=S,2=BL,3=SL,4=BS,5=SS //--------------------------------------------------------------- 2 -- int Terminal() { int Qnt=0; // Счётчик количества ордеров //--------------------------------------------------------------- 3 -- ArrayCopy(Mas_Ord_Old, Mas_Ord_New);// Сохраняем предыдущую историю Qnt=0; // Обнуление счётчика ордеров ArrayInitialize(Mas_Ord_New,0); // Обнуление массива ArrayInitialize(Mas_Tip, 0); // Обнуление массива //--------------------------------------------------------------- 4 -- for(int i=0; i<OrdersTotal(); i++) // По рыночн. и отлож. ордерам { if((OrderSelect(i,SELECT_BY_POS)==true) //Если есть следующий && (OrderSymbol()==Symbol()) && (OrderMagicNumber()==Magic)) //.. и наша вал.пара с магиком { //------------------------------------------------------ 5 -- Qnt++; // Колич. ордеров Mas_Ord_New[Qnt][1]=OrderOpenPrice(); // Курс открытия орд Mas_Ord_New[Qnt][2]=OrderStopLoss(); // Курс SL Mas_Ord_New[Qnt][3] = OrderTakeProfit(); // значение цены закрытия позиции при достижении уровня прибыльности (take profit) для текущего выбранного ордера Mas_Ord_New[Qnt][4]=OrderTicket(); // Номер ордера Mas_Ord_New[Qnt][5]=OrderLots(); // Количество лотов Mas_Tip[OrderType()]++; // Кол. ордеров типа Mas_Ord_New[Qnt][6]=OrderType(); // Тип ордера Mas_Ord_New[Qnt][7]=OrderMagicNumber(); // Магическое число if (OrderComment()=="")Mas_Ord_New[Qnt][8]=0; // Если нет коммент else Mas_Ord_New[Qnt][8]=1; // Если есть коммент Mas_Ord_New[Qnt][9] =OrderProfit()+OrderSwap();// Профит по ордеру Mas_Ord_New[Qnt][10]= OrderOpenTime (); // Время открытия //Profit = Mas_Ord_New[Qnt][3]; L=Mas_Ord_New[Qnt][5]; //------------------------------------------------------ 6 -- } } Mas_Ord_New[0][0]=Qnt; // Колич. ордеров if (Mas_Tip[0]!=0 || Mas_Tip[1]!=0) {Qnt_Gl = Qnt; } //--------------------------------------------------------------- 7 -- return; } //--------------------------------------------------------------- 8 --
Подскажите, как выбрать все ордера из истории по комментарию? Нужно подсчитать общую сумму прибыли по ордерам с определенным комментарием.
Примите к сведению что ДЦ могут автоматически изменять комментарии к ордерам, по крайней мере так было раньше.
Примите к сведению что ДЦ могут автоматически изменять комментарии к ордерам, по крайней мере так было раньше.
И сейчас так же...
Комментарии ДЦ меняет только при частичном закрытии. В родительском пишется to #номер дочернего тикета, в дочернем пишется from #номер родительского тикета.
Поэтому можно сделать функцию, которая по данным комментариям найдёт тикет изначального ордера. При этом комментарий будет всё-равно утерян. Выход из ситуации - глобальные терминала, в имени которых присутствует номер тикета начального ордера, а в значении - значение, которое хранится в комментарии ордера. Находится изначальный ордер по комментариям дочерних и родительских, находится GV-переменная, соответствующая найденному родительскому тикету и считывается нужная информация. Как-то так. Делал такую функцию когда-то, работает. Но это было для специфичных нужд специфичного советника, в котором для логики работы данные передавались через комментарии ордеров друг другу. Таким образом, советник в любое время всегда имел те данные, которые были когда-то давно при открытии ордера, найти которые другим способом было проблематично.
Геморрой, я вам скажу... :)
Типа этого - правьте: + в учебнике всё есть + ищите в гугле через сайт: "как выбрать все ордера из истории по комментарию" site:mql4.com
А зачем же для примера давать такое? Можно же проще. Считываем комментарий ордера и используем. Зачем делать для этого свой учёт ордеров, который у СК слишком специфичен?
В цикле выбираем ордер,
Если проходит по магику, символу и прочим фильтрам, читаем комментарий, если ОНО, то делаем что задумано с выбранным ордером.
Подскажите, как выбрать все ордера из истории по комментарию? Нужно подсчитать общую сумму прибыли по ордерам с определенным комментарием.
Ваш вопрос не точен. Нужно уточнение. Ведь выбрать можно только один ордер.
А вы хотите выбрать ВСЕ ордера, подходящие по критерию.
А зачем же для примера давать такое? Можно же проще. Считываем комментарий ордера и используем. Зачем делать для этого свой учёт ордеров, который у СК слишком специфичен?
В цикле выбираем ордер,
Если проходит по магику, символу и прочим фильтрам, читаем комментарий, если ОНО, то делаем что задумано с выбранным ордером.
Можно проще... Я дал рабочий код и написал - правьте под свои нужды.
Можно проще... Я дал рабочий код и написал - правьте под свои нужды.
И сейчас так же...
Комментарии ДЦ меняет только при частичном закрытии. В родительском пишется to #номер дочернего тикета, в дочернем пишется from #номер родительского тикета.
Поэтому можно сделать функцию, которая по данным комментариям найдёт тикет изначального ордера. При этом комментарий будет всё-равно утерян. Выход из ситуации - глобальные терминала, в имени которых присутствует номер тикета начального ордера, а в значении - значение, которое хранится в комментарии ордера. Находится изначальный ордер по комментариям дочерних и родительских, находится GV-переменная, соответствующая найденному родительскому тикету и считывается нужная информация. Как-то так. Делал такую функцию когда-то, работает. Но это было для специфичных нужд специфичного советника, в котором для логики работы данные передавались через комментарии ордеров друг другу. Таким образом, советник в любое время всегда имел те данные, которые были когда-то давно при открытии ордера, найти которые другим способом было проблематично.
Геморрой, я вам скажу... :)
Типа этого - правьте: + в учебнике всё есть + ищите в гугле через сайт: "как выбрать все ордера из истории по комментарию" site:mql4.com
Чтобы не запутаться с индексами, их не мешало бы прописать через константы. Что-то типа того:
//-------------------------------------------------------------------- // Terminal.mqh // //--------------------------------------------------------------- 0 -- #define dORD_Qnt 0 #define dORD_OpenPrice 1 #define dORD_StopLoss 2 #define dORD_TakeProfit 3 #define dORD_Ticket 4 #define dORD_Lots 5 #define dORD_Type 6 #define dORD_Magic 7 #define dORD_Comment 8 #define dORD_Profit 9 #define dORD_OpenTime 10 //--------------------------------------------------------------- 1 -- // Функция учёта ордеров // Глобальные переменные: // Mas_Ord_New[31][11] // Массив ордеров последний известный // Mas_Ord_Old[31][11] // Массив ордеров предыдущий (старый) // 1й индекс = порядковый номер ордера // [][dORD_Qnt] не определяется // [][dORD_OpenPrice] курс откр. ордера (абс.знач.курса) // [][dORD_StopLoss] StopLoss ордера (абс.знач.курса) // [][dORD_TakeProfit] TakeProfit ордера (абс.знач.курса) // [][dORD_Ticket] номер ордера // [][dORD_Lots] колич. лотов орд. (абс.знач.курса) // [][dORD_Type] тип орд. 0=B,1=S,2=BL,3=SL,4=BS,5=SS // [][dORD_Magic] магическое число ордера // [][dORD_Comment] 0/1 факт наличия комментария // [][dORD_Profit] профит по ордеру // [][dORD_OpenTime] время открытия // Mas_Tip[6] // Массив колич. ордеров всех типов // [] тип орд: 0=B,1=S,2=BL,3=SL,4=BS,5=SS //--------------------------------------------------------------- 2 -- int Terminal() { int Qnt=0; // Счётчик количества ордеров //--------------------------------------------------------------- 3 -- ArrayCopy(Mas_Ord_Old, Mas_Ord_New);// Сохраняем предыдущую историю Qnt=0; // Обнуление счётчика ордеров ArrayInitialize(Mas_Ord_New,0); // Обнуление массива ArrayInitialize(Mas_Tip, 0); // Обнуление массива //--------------------------------------------------------------- 4 -- for(int i=0; i<OrdersTotal(); i++) // По рыночн. и отлож. ордерам { if((OrderSelect(i,SELECT_BY_POS)==true) //Если есть следующий && (OrderSymbol()==Symbol()) && (OrderMagicNumber()==Magic)) //.. и наша вал.пара с магиком { //------------------------------------------------------ 5 -- Qnt++; // Колич. ордеров Mas_Ord_New[Qnt][dORD_OpenPrice] = OrderOpenPrice(); // Курс открытия орд Mas_Ord_New[Qnt][dORD_StopLoss] = OrderStopLoss(); // Курс SL Mas_Ord_New[Qnt][dORD_TakeProfit] = OrderTakeProfit(); // значение цены закрытия позиции при достижении уровня прибыльности (take profit) для текущего выбранного ордера Mas_Ord_New[Qnt][dORD_Ticket] = OrderTicket(); // Номер ордера Mas_Ord_New[Qnt][dORD_Lots] = OrderLots(); // Количество лотов Mas_Tip[OrderType()]++; // Кол. ордеров типа Mas_Ord_New[Qnt][dORD_Type] = OrderType(); // Тип ордера Mas_Ord_New[Qnt][dORD_Magic] = OrderMagicNumber(); // Магическое число if (OrderComment() == "") Mas_Ord_New[Qnt][dORD_Comment] = 0; // Если нет коммент else Mas_Ord_New[Qnt][dORD_Comment] = 1; // Если есть коммент Mas_Ord_New[Qnt][dORD_Profit] = OrderProfit() + OrderSwap();// Профит по ордеру Mas_Ord_New[Qnt][dORD_OpenTime] = OrderOpenTime (); // Время открытия //Profit = Mas_Ord_New[Qnt][3]; L=Mas_Ord_New[Qnt][5]; //------------------------------------------------------ 6 -- } } Mas_Ord_New[0][dORD_Qnt] = Qnt; // Колич. ордеров if (Mas_Tip[0] != 0 || Mas_Tip[1] != 0) {Qnt_Gl = Qnt;} //--------------------------------------------------------------- 7 -- return; } //--------------------------------------------------------------- 8 --
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования