Kanoobee
Kanoobee

 
Уровень 9


Группа "Стол заказов MQL"

Рейтинг 2151



РЕКОМЕНДУЮ



Просьба помощи по коду MQL4

Андрей, помогите пожалуйста!

Начал учить программирование на MQL4. Столкнулся с проблемой, не могу придумать как выбрать 2 ордера из сетки мартингейла, для того чтоб на эти ордера установить общий ТП, Чтоб они закрылись одновременно с прибылью.

Допустим есть ордера 1, 2, 3, 4, 5. Первый или последний выбрать не проблема через цикл. А вот выбрать 3 и 5 с этим проблема. Точнее проблема выбрать 3-й ордер.

Заранее спасибо за помощь! ;) 
  • +1
  • Просмотров: 1288
  • 29 мая 2024, 11:40
  • Kanoobee
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
28 мая 2024
29 мая 2024

Брокер для ваших роботов, 15 лет на рынке

Комментарии (9)

+
0
Точнее проблема выбрать 3-й ордер


5-й будет OrdersTotal()-1
3-й будет OrdersTotal()-3


   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
          ...
        }
     }
avatar

  35  AM2 Сообщений: 16425 - Андрей

  • 29 мая 2024, 14:09
комментарий был удален 2024-05-30 12:37:47 Kanoobee

+
0
Спасибо большое, пошел дальше Грааль писать. :) 
avatar

  9  Kanoobee Автор Сообщений: 44 - Kanoobee

  • 29 мая 2024, 14:21
+
0
Как вариант, можно перебирать в цикле все ордера и сравнивать время открытия ордеров. Выход из цикла при нахождении нужного ордера.
avatar

  14  verta81 Сообщений: 454

  • 29 мая 2024, 23:39
+
0
По времени открытия не подходит(((. Я в заказе пропустил что нужны ордера только BUY или SELL.
Получается можно без цикла сделать выборку любого ордера по номеру:
int ticket;
int i=0;

void OnStart()
  {
   i=OrdersTotal()-4;   // 1 - последний открытый ордер на графике, 
                        // 4 - четвертый открытый ордер от последнего открытого. 
   int ticketEX = OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
   ticket = OrderTicket();
      if  (ticketEX < 0)
         {
            Print("Ошибка открытия ордера", GetLastError());
         }
            else
            Print(ticket);
  }


Получается:
1 ордер — BUY
2 ордер — BUY
3 ордер — BUY
4 ордер — BUY
5 ордер — SELL
6 ордер — BUY
Нам нужен 6й и 3й ордер те которые BUY. А таким способом выберется ордер 4й. Будем думать :) .
avatar

  9  Kanoobee Автор Сообщений: 44 - Kanoobee

  • 30 мая 2024, 16:16
+
0

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int SelectOrder(int type,int num)
  {
   int count=0;
   int o_ticket;
   datetime op_time=TimeCurrent();
   
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type)
              {
               if(op_time>OrderOpenTime())
                 {
                  op_time=OrderOpenTime();
                  o_ticket=OrderTicket();
                  count++;
                  if(count==num)
                    break;
                 }
              }
           }
        }
     }
   return(o_ticket);
  }

SelectOrder(0,3) — ищем ордер на покупку, третий с конца
На входе в функцию: тип ордера и номер ордера
На выходе: тиккет искомого ордера.

Так же можно перебирать ордера по номеру тиккета и искать любые данные: лот, цена открытия/закрытия, профит, стоп-лосс, тейк и т.д.
avatar

  14  verta81 Сообщений: 454

  • 30 мая 2024, 19:36
+
0
Большое спасибо!
Доберусь до компа попробую.;) 
avatar

  9  Kanoobee Автор Сообщений: 44 - Kanoobee

  • 30 мая 2024, 20:58
+
0
*good*  *drinks* 
avatar

  9  Kanoobee Автор Сообщений: 44 - Kanoobee

  • 31 мая 2024, 01:14
+
0
Огромнейшее спасибо!!!
avatar

  9  Kanoobee Автор Сообщений: 44 - Kanoobee

  • 31 мая 2024, 01:15

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий