Закрытие крайнего убыточного за счет прибыльных

У Вас есть идея, под которую нужен торговый робот? А, быть может, требуется создание нового индикатора или адаптация старого к МТ5? Бесплатно советники и индикаторы под Ваше техническое задание!

Закрытие крайнего убыточного за счет прибыльных

Сообщение dok-45 » 13 апр 2017, 08:59

Как быстро растут чужие дети... Со своей работой совсем забыл о том что очередное творение уже испечено и почти уже остыло... Притсупаю к снятию пробы.. Kalkin, не устаю благодарить... Огромное спасибо!!!
Аватар пользователя
dok-45
 
Сообщений: 60
Зарегистрирован: 25 окт 2016, 14:10
Средств на руках: 0.00 Доллар
Группа: Базовая
Благодарил (а): 20 раз.
Поблагодарили: 3 раз.

Закрытие крайнего убыточного за счет прибыльных

Сообщение piter » 10 мар 2018, 00:07

Kalkin писал(а):
Nord писал(а):Любопытства ради: а по какому алгоритму открываются сами "дальние" и "ближние" сделки? Или все руками, а сов просто по текущему эквити работает?

Это сов-"закрывашка", работает с уже имеющимися позициями.

Я Вам писал в личку о добавлении коментов в коде этого сова, очень интересен подход к сортировке ордеров, писать сюда решился после подсказки Рэндома, об активном участии на форуме, в других форумах это бы сочли за флуд...
Я не давно решился изучать MQL4, пишу (почти написал) индикатор, показывающий уровни без убытков и уровень перекрытия заданных убыточных ордеров всеми прибыльными ордерами, но столкнулся с сортировкой ордеров по цене покупки, поэтому и хотел бы понять Ваш ход мысли и порядок действий по комментам в коде, если конечно это можно....
Может и я в чём нибудь Вам сгожусь и вообще, Вы, как специалист, смогли бы на многие конструкции в прогах открыть мне глаза, а я, чем смогу, тем и отблагодарю или помогу.
С уважением Пётр.
Аватар пользователя
piter
 
Сообщений: 32
Зарегистрирован: 09 мар 2018, 00:53
Средств на руках: 6.50 Доллар
Откуда: г. Ессентуки
Группа: Базовая
Благодарил (а): 23 раз.
Поблагодарили: 3 раз.

Закрытие крайнего убыточного за счет прибыльных

Сообщение Kalkin » 10 мар 2018, 08:26

Для начала создаются два целочисленных массива: ArTickets[] для хранения тикетов всех позиций и ArPips[] для текущего значения прибыли/убытка в пунктах:
Код: выделить все
        int ArTickets[];
        int ArPips[];

Затем перебираются все имеющиеся позиции и эти массивы просто заполняются значениями. Также учитывается, что для позиций на покупку прибыль отсчитывается от цены Bid, а для позиций на продажу - от цены Ask:
Код: выделить все
        int orderscnt = 0;
        for(int i=0;i<OrdersTotal();i++)
        {
           if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
           if(OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
           {
              orderscnt++;
              ArrayResize(ArTickets, orderscnt);
              ArrayResize(ArPips, orderscnt);
              ArTickets[orderscnt-1] = OrderTicket();
              RefreshRates();
              if (OrderType()==OP_BUY)
                 ArPips[orderscnt-1] = int((Bid-OrderOpenPrice())/Point);
              else if (OrderType()==OP_SELL)
                 ArPips[orderscnt-1] = int((OrderOpenPrice()-Ask)/Point);
           }
        }

В результате мы получим два массива, в которых элементы с такими же порядковыми номерами будут определять однозначно тикет позиции и её прибыль (убыток) в пунктах.

Для сортировки значений массива используется самая обычная пузырьковая сортировка - о ней написан не один том в литературе по программированию, это Вы сами найдете. Замечу, что при необходимости перестановки элементов массива должны переставляться как элементы массива, хранящего пункты, так и соответствующие им элементы массива тикетов:
Код: выделить все
        // сортировка по пипсам
        int t;
        int i, j;
     
        for (i=orderscnt-1; i>0; i--) {
          for (j=0; j<i; j++) {
            if (ArPips[j]>ArPips[j+1]) {
              t=ArPips[j];
              ArPips[j]=ArPips[j+1];
              ArPips[j+1]=t;
              t=ArTickets[j];
              ArTickets[j]=ArTickets[j+1];
              ArTickets[j+1]=t;
            }
          }
        }
Аватар пользователя
Kalkin
 
Сообщений: 1589
Зарегистрирован: 05 мар 2015, 06:51
Средств на руках: 108.80 Доллар
Награды: 2
Ветеран I (1) Медаль за научный вклад (1)
Группа: Базовая
Благодарил (а): 633 раз.
Поблагодарили: 1190 раз.
Ace Register Votive

Закрытие крайнего убыточного за счет прибыльных

Сообщение piter » 10 мар 2018, 08:38

Kalkin писал(а):Для начала создаются два целочисленных массива: ArTickets[] для хранения тикетов всех позиций и ArPips[] для текущего значения прибыли/убытка в пунктах:
Код: выделить все
        int ArTickets[];
        int ArPips[];

Затем перебираются все имеющиеся позиции и эти массивы просто заполняются значениями. Также учитывается, что для позиций на покупку прибыль отсчитывается от цены Bid, а для позиций на продажу - от цены Ask:
Код: выделить все
        int orderscnt = 0;
        for(int i=0;i<OrdersTotal();i++)
        {
           if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
           if(OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
           {
              orderscnt++;
              ArrayResize(ArTickets, orderscnt);
              ArrayResize(ArPips, orderscnt);
              ArTickets[orderscnt-1] = OrderTicket();
              RefreshRates();
              if (OrderType()==OP_BUY)
                 ArPips[orderscnt-1] = int((Bid-OrderOpenPrice())/Point);
              else if (OrderType()==OP_SELL)
                 ArPips[orderscnt-1] = int((OrderOpenPrice()-Ask)/Point);
           }
        }

В результате мы получим два массива, в которых элементы с такими же порядковыми номерами будут определять однозначно тикет позиции и её прибыль (убыток) в пунктах.

Для сортировки значений массива используется самая обычная пузырьковая сортировка - о ней написан не один том в литературе по программированию, это Вы сами найдете. Замечу, что при необходимости перестановки элементов массива должны переставляться как элементы массива, хранящего пункты, так и соответствующие им элементы массива тикетов:
Код: выделить все
        // сортировка по пипсам
        int t;
        int i, j;
     
        for (i=orderscnt-1; i>0; i--) {
          for (j=0; j<i; j++) {
            if (ArPips[j]>ArPips[j+1]) {
              t=ArPips[j];
              ArPips[j]=ArPips[j+1];
              ArPips[j+1]=t;
              t=ArTickets[j];
              ArTickets[j]=ArTickets[j+1];
              ArTickets[j+1]=t;
            }
          }
        }


Премного благодарен за ответ, но тут, как я понял не учитываются комиссия, свопы, лоты, пузырьковая сортировка мне трохи знакома... Может проще сортировать одномерный строковый массив, строки которого уже отсортированы в терминале, по умолчанию время открытия ордера, но его можно там отсортировать по цене открытия, а потом как то скопировать в одномерный строковый массив и потом не будет страха,что какие то данные перепутаны...
Короче мыль есть, а как её реализовать попроще и с точностью до "мулиметра" пока не знаю....
Вобще это реально сделать?
Благодарю за ответ.
Последний раз редактировалось piter 10 мар 2018, 08:57, всего редактировалось 1 раз.
Аватар пользователя
piter
 
Сообщений: 32
Зарегистрирован: 09 мар 2018, 00:53
Средств на руках: 6.50 Доллар
Откуда: г. Ессентуки
Группа: Базовая
Благодарил (а): 23 раз.
Поблагодарили: 3 раз.

Закрытие крайнего убыточного за счет прибыльных

Сообщение Kalkin » 10 мар 2018, 08:56

... если был какой-то вопрос, то его в предыдущем посте нет - только цитата моего сообщения ...
Аватар пользователя
Kalkin
 
Сообщений: 1589
Зарегистрирован: 05 мар 2015, 06:51
Средств на руках: 108.80 Доллар
Награды: 2
Ветеран I (1) Медаль за научный вклад (1)
Группа: Базовая
Благодарил (а): 633 раз.
Поблагодарили: 1190 раз.
Ace Register Votive

Закрытие крайнего убыточного за счет прибыльных

Сообщение piter » 10 мар 2018, 08:59

Kalkin писал(а):... если был какой-то вопрос, то его в предыдущем посте нет - только цитата моего сообщения ...

Прости, сплю на ходу..., уже исправился...
Аватар пользователя
piter
 
Сообщений: 32
Зарегистрирован: 09 мар 2018, 00:53
Средств на руках: 6.50 Доллар
Откуда: г. Ессентуки
Группа: Базовая
Благодарил (а): 23 раз.
Поблагодарили: 3 раз.

Закрытие крайнего убыточного за счет прибыльных

Сообщение Kalkin » 10 мар 2018, 09:24

piter писал(а):Премного благодарен за ответ, но тут, как я понял не учитываются комиссия, свопы, лоты, пузырьковая сортировка мне трохи знакома...

Совершенно верно, ни комиссия, ни лоты, ни свопы здесь не учитываются, потому что такая задача не стояла. Я специально об этом же уточнил во втором посте ветки. Если бы нужно было это учесть, то вместо прибыли в пунктах вычислялись бы относительные уровни с учетом лотности.

piter писал(а):Может проще сортировать одномерный строковый массив, строки которого уже отсортированы в терминале, по умолчанию время открытия ордера, но его можно там отсортировать по цене открытия, а потом как то скопировать в одномерный строковый массив и потом не будет страха,что какие то данные перепутаны...
Короче мыль есть, а как её реализовать попроще и с точностью до "мулиметра" пока не знаю....
Вобще это реально сделать?
Благодарю за ответ.

Терминал занимается тем же самым - берет все позиции от сервера, сортирует их как требует пользователь и выводит на экран. Брать значения с подокна терминала - задача на уровне API и для данной задачи совершенно избыточна.
Аватар пользователя
Kalkin
 
Сообщений: 1589
Зарегистрирован: 05 мар 2015, 06:51
Средств на руках: 108.80 Доллар
Награды: 2
Ветеран I (1) Медаль за научный вклад (1)
Группа: Базовая
Благодарил (а): 633 раз.
Поблагодарили: 1190 раз.
Ace Register Votive

Закрытие крайнего убыточного за счет прибыльных

Сообщение Haos » 10 мар 2018, 09:26

piter писал(а):писать сюда решился после подсказки Рэндома, об активном участии на форуме, в других форумах это бы сочли за флуд...
Я не давно решился изучать MQL4, пишу (почти написал)

В разделе Стол заказов бонусы за посты не начисляются. У нас есть раздел MQL – теория и практика где содержательные посты оплачиваются и там можно было Ваш вопрос задать. Желающие осваивать программирование на MQL приветствуются.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Закрытие крайнего убыточного за счет прибыльных

Сообщение piter » 10 мар 2018, 09:39

Kalkin писал(а):
piter писал(а):
Терминал занимается тем же самым - берет все позиции от сервера, сортирует их как требует пользователь и выводит на экран. Брать значения с подокна терминала - задача на уровне API и для данной задачи совершенно избыточна.

Вот это уже очень интересно, "...задача на уровне API и для данной задачи совершенно избыточна.", т.е. намного сложнее? Но вот интересно, с помощью пузырьковой сортировки, которую я хотел бы внедрить в свой индюк, стрелка указывающая уровень перекрытия будет статична или будет динамична...
Мож правда переведём общение в раздел где будет больше пользы обоим?
Аватар пользователя
piter
 
Сообщений: 32
Зарегистрирован: 09 мар 2018, 00:53
Средств на руках: 6.50 Доллар
Откуда: г. Ессентуки
Группа: Базовая
Благодарил (а): 23 раз.
Поблагодарили: 3 раз.

Закрытие крайнего убыточного за счет прибыльных

Сообщение Kalkin » 10 мар 2018, 09:45

piter писал(а):
Kalkin писал(а):
piter писал(а):
Терминал занимается тем же самым - берет все позиции от сервера, сортирует их как требует пользователь и выводит на экран. Брать значения с подокна терминала - задача на уровне API и для данной задачи совершенно избыточна.

Вот это уже очень интересно, "...задача на уровне API и для данной задачи совершенно избыточна.", т.е. намного сложнее? Но вот интересно, с помощью пузырьковой сортировки, которую я хотел бы внедрить в свой индюк, стрелка указывающая уровень перекрытия будет статична или будет динамична...
Мож правда переведём общение в раздел где будет больше пользы обоим?

Да, если тема не касается конкретно этого советника, то имеет смысл отрыть новую в разделе MQL - теория и практика, а там подключатся и другие специалисты.
Аватар пользователя
Kalkin
 
Сообщений: 1589
Зарегистрирован: 05 мар 2015, 06:51
Средств на руках: 108.80 Доллар
Награды: 2
Ветеран I (1) Медаль за научный вклад (1)
Группа: Базовая
Благодарил (а): 633 раз.
Поблагодарили: 1190 раз.
Ace Register Votive


Вернуться в Торговые советники на заказ

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 83

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron