Доработка ботов (советников, индикаторов) vol. 2

vladradon

Программист
как я только не насиловал эту строку for(int i = total-1; i >= 0; i--), больше меньше +- и т.д. хз, так и не понял.
Самый простой вариант: в одном цикле начинаешь отсчет с 0 для закрытия первого ордера и при выборе первого ордера, который прошел проверки и закрылся командой OrderClose, вставляешь команду break; чтобы закрыть цикл или сразу return; чтобы выйти из функции. Для последнего ордера запускаем цикл с OrdersTotal()-1 и при первом закрывшемся ордере вставляем такую же команду прерывания цикла или выхода. Можно сделать 2 одинаковые функции (чтобы попроще) - одна закрывает только 1-й, вторая только последний ордера.
Можно перед циклом (начинаем с 0) задать 2 переменные тикет
int ticket1=-1, ticket2=-1;
В цикле вместо команды OrderClose (ее выносим и вставляем после цикла) вставляем строки:
if(ticket1<0) ticket1=OrderTicket();
if(ticket1>0) ticket2=OrderTicket();

В результате после цикла получаем в ticket1 тикет первого ордера, в ticket2 - тикет последнего, которые после цикла используем в 2-х командах OrderClose для закрытия этих ордеров по их тикетам:
if(ticket1>0)
{
OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderClose (ticket1...
}
if(ticket2>0)
{
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderClose (ticket2...
}

Примерно так.
 
Последнее редактирование:

S D V

Местный житель

Vladradon ! Поправьте пожалуйста индикатор.Описывал проблему в посте 24526 . Не показывает прописанные в коде -на терминале фибо уровни их там 56 в кол-ве.​

 

Вложения

  • TRIANGLES Lines+FiboHL SDV-2021.mq4
    31 КБ · Просмотры: 19
Здравствуйте друзья программисты. Нашёл ещё один индикатор открытия-закрытия ордера. Но в этом есть алерт но НЕТ окна оповещения. Может кто сможет это исправить. Спасибо.
 

Вложения

  • SoundCloseOrder.mq4
    2,8 КБ · Просмотры: 15

mrT

Интересующийся
Всем, привет!
может ктото поправить советник . Принцип торговли, если импульс движется, то позиция наращивается по тренду с заданим лотом та шагом. Для входа здесь он ждет чего-то и график h4, нужно ето выбросить. А сделать открытия ордера, после откритого трейдером или другого советником. и добавить меджык
 

Вложения

  • ReticoloFX_Basket_USD.mq4
    38,1 КБ · Просмотры: 17

vladradon

Программист
Поправьте пожалуйста индикатор.
Привет. Если количество линий фибо превышает 32, то их количество ограничивается 9-ю линиями (узнал экспериментально). В коде я изменил задание значений на современный лад, но и старый вариант вроде-как работал.
 

Вложения

  • F32.png
    F32.png
    33,6 КБ · Просмотры: 203
  • TRIANGLES Lines+FiboHL SDV-2021.mq4
    36,7 КБ · Просмотры: 37

Maxut

Новичок форума
Можно ли добавить в простой советник по ADX, закрытие ордера (подключаемый/выключаемый параметр) при обратном сигнале.
 

Вложения

  • ADX_Expert.mq4
    7,7 КБ · Просмотры: 13

S D V

Местный житель
Привет. Если количество линий фибо превышает 32, то их количество ограничивается 9-ю линиями (узнал экспериментально). В коде я изменил задание значений на современный лад, но и старый вариант вроде-как работал.
Спасибо! Проблема осталась таже, всё равно уровни не все видно,там должно быть от -400.0 и до +514.6
 

vladradon

Программист
Проблема осталась таже, всё равно уровни не все видно,там должно быть от -400.0 и до +514.6
Ну так перепиши нужные уровни в 32 возможных в нужном диапазоне от -400 до +514. Или создай еще один фибо с недостающими уровнями. 56 в один фибо не пропишешь!!! Ограничение 32.
Ничего сами не хотят делать...)))
 

Вложения

  • TRIANGLES Lines+FiboHL SDV-2021.mq4
    38,4 КБ · Просмотры: 29
  • F56.png
    F56.png
    32,2 КБ · Просмотры: 70
Последнее редактирование:

forex_neforex

Активный участник
C++:
  void myOrderClose(int type,int volumepercent,string ordername) //close open orders for current symbol, magic number and "type" (OP_BUY or OP_SELL)
  {
   if(!IsTradeAllowed()) return;
   if(type>1)
     {
      myAlert("error","Invalid type in myOrderClose");
      return;
     }
   double ask=Ask;
   double bid=Bid;
   double sprd=(double)((ask-bid)/myPoint);
   bool success=false;
   int err;
   string ordername_=comment;
   if(ordername != "")
      ordername_ = "("+ordername+")";
   int total = OrdersTotal();
   int ticket_min=INT_MAX,//тикет первого открытого ордера
    ticket_max=0;//тикет последнего открытого ордера
//for(int i=OrdersTotal()-1; i>=0; i--)
for(int i=0; i<=OrdersTotal(); i++)
  {

      while(IsTradeContextBusy()) Sleep(3);
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol() || OrderType()!=type) continue;
      while(IsTradeContextBusy()) Sleep(3);
      RefreshRates();
      double price=(type==OP_SELL) ? Ask : Bid;
      double volume=NormalizeDouble(OrderLots()*volumepercent*1.0/100,LotDigits);
      if(NormalizeDouble(volume,LotDigits)==0) continue;
         
      int cur_ticket=OrderTicket();
      if(ticket_min>cur_ticket)
         ticket_min=cur_ticket;
      if(ticket_max<cur_ticket)
         ticket_max=cur_ticket;
   
     
      success=OrderClose(OrderTicket(),volume,DoubleToStr(NormalizeDouble(price,Digits()),Digits()),MaxSlippage,clrWhite);
      if(!success)
        {
         err=GetLastError();
         myAlert("error","OrderClose"+ordername_+" failed; error #"+err+" "+ErrorDescription(err));
        }
     }
   string typestr[6]={" Buy "," Sell ","Buy Limit","Sell Limit","Buy Stop","Sell Stop"};
   if(success) myAlert(" order ","Orders closed "+ordername_+": "+typestr[type]+" "+Symbol()+" Magic #"+MagicNumber);
}

Хрен его знает... не получается. там как то случайно получилось что только 1 ордер закрывает, но он закрывал последний.
 

forex_neforex

Активный участник
success=OrderClose(OrderTicket() сюда подставлял ticket_minmax и current. подборка не помогает 😁
 

forex_neforex

Активный участник
Вот сам робокоп. Может так удобнее будет кому-нибудь помочь сделать это. Может на будущее кому то пригодится.
 

Вложения

  • ШАБЛОН РАБОЧИЙ.mq4
    8,5 КБ · Просмотры: 49

vladradon

Программист
Вот сам робокоп.
Я переписал по своему первому варианту, что описывал выше. Не знаю как опробовать, но подобный вариант использовал не раз - первый цикл закрывает первый ордер, второй - последний.
 

Вложения

  • ШАБЛОН РАБОЧИЙ.mq4
    8,7 КБ · Просмотры: 57

Maxut

Новичок форума
Я переписал по своему первому варианту, что описывал выше. Не знаю как опробовать, но подобный вариант использовал не раз - первый цикл закрывает первый ордер, второй - последний.
vladron
можете посмотреть пост https://forexsystemsru.com/threads/dorabotka-botov-sovetnikov-indikatorov-vol-2.77111/post-1649663
думаю для вас, это раз плюнуть
 

илья27

Активный участник
Добрый день уважаемые программисты.Можете прикрутить алерт к стрелке чтоб был сигнал когда появиться стрелка.
 

Вложения

  • Signal_Sidusa (1).ex4
    12,6 КБ · Просмотры: 91

forex_neforex

Активный участник
Я переписал по своему первому варианту, что описывал выше. Не знаю как опробовать, но подобный вариант использовал не раз - первый цикл закрывает первый ордер, второй - последний.
спасибо щас попробую на вкус.
 

forex_neforex

Активный участник
Я переписал по своему первому варианту, что описывал выше. Не знаю как опробовать, но подобный вариант использовал не раз - первый цикл закрывает первый ордер, второй - последний.
Уррррррррраааааа! закрывает первый и последний!) СПАСИБО!!
 

Maxut

Новичок форума
Кто может добавить в этот советник подключаемую функцию для закрытия ордера при обратном сигнале ADX
 

Вложения

  • ADX_Expert.mq4
    7,7 КБ · Просмотры: 21
Верх