Доработать советник RollBack

Всем добрый день!
Просьба об внесении небольшого изменении в уже написанного советника «RollBack» www.opentraders.ru/downloads/2965/
Добавить включаемую/выключаемую функцию выставления ордеров в начале каждой свечи.
  • +11
  • Просмотров: 1514
  • 11 января 2022, 19:34
  • Aleh7999
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!


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

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

+
0
Так как данная доработка немного искажает логику совы, я так вижу решение о добавлении новой функции не нарушая имеющиеся функционал: функции "Увеличение шага" и "Шаг усреднения" выставить в настройках на 0.
Редактирован: 14 января 2022, 21:16
avatar

  16  Aleh7999 Автор Сообщений: 83

  • 14 января 2022, 21:16
+
0
Добавил.Остальное не менял.
В начале в настройках добавьте

//--- Inputs
extern bool   Every_bar  = true;


И замените функцию.Прежнюю удалите и добавьте эту:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(AllProfit()>Pro && Pro>0)
      CloseAll();

   if(AllProfit(0)>BPro && BPro>0)
      CloseAll(0);

   if(AllProfit(1)>SPro && SPro>0)
      CloseAll(1);

// первый ордер
if(Every_bar)
   {
   if(CountTrades()<1 || CountTrades()!=0)
   {
   if(prevBar!=Bars)
     {
      PutOrder(0,Ask);
      PutOrder(1,Bid);
      last=Bid;
     }
   }
  }
  else{ 
   if(CountTrades()<1)
     {
      PutOrder(0,Ask);
      PutOrder(1,Bid);
      last=Bid;
     }
  }
// усреднение
   if(CountTrades()>0 && last-Ask>Stepa()*_Point)
     {
      PutOrder(0,Ask);
      PutOrder(1,Bid);
      last=Bid;
     }

   if(CountTrades()>0 && Bid-last>Stepa()*_Point)
     {
      PutOrder(1,Bid);
      PutOrder(0,Ask);
      last=Bid;
     }
  prevBar=Bars;
  
   if(ObjectGetInteger(0,"B",OBJPROP_STATE)==1)
     {
      CloseAll(0);
      ObjectSetInteger(0,"B",OBJPROP_STATE,false);
     }

   if(ObjectGetInteger(0,"S",OBJPROP_STATE)==1)
     {
      CloseAll(1);
      ObjectSetInteger(0,"S",OBJPROP_STATE,false);
     }

   if(OrdersTotal()>0 && ObjectGetInteger(0,"C",OBJPROP_STATE)==1)
     {
      CloseAll();
      ObjectSetInteger(0,"C",OBJPROP_STATE,false);
     }

   PutLabel("Trades","Trades: "+string(CountTrades()),130,10,Aqua);
   PutLabel("Sell Lot","Sell Lot: "+string(Lot(1)),130,30,Red);
   PutLabel("Buy Lot","Buy Lot: "+string(Lot(0)),130,50,Lime);

   PutLabel("All Profit","All Profit: "+string(AllProfit()),130,70,Aqua);
   PutLabel("Buy Profit","Buy Profit: "+string(AllProfit(0)),130,90,Lime);
   PutLabel("Sell Profit","Sell Profit: "+string(AllProfit(1)),130,110,Red);

   PutHLine("Buy BU Line",BULine(0),Lime);
   PutHLine("Sell BU Line",BULine(1),Red);

   Comment("\n Trades: ",CountTrades(),
           "\n Stepa: ",Stepa());
  }
//+------------------------------------------------------------------+

avatar

  16  ssg Сообщений: 817

  • 15 января 2022, 06:59
+
0
В настройках добавил функцию. Компиляция прошла успешно.
Но после замены функции что-то пошло не так, компилятор выдал много ошибок. Буду благодарен если посмотрите на возникшую проблему.
avatar

  16  Aleh7999 Автор Сообщений: 83

  • 15 января 2022, 20:22
+
0
В настройках добавил функцию. Компиляция прошла успешно.
Но после замены функции что-то пошло не так, компилятор выдал много ошибок.

Противоречия в этой фразе не видите?:) 
А если серьёзно, то ошибка может быть только одна: не качественно произвели замену главной функции. Т.е. или не досконально скопитовали или у старой не все удалили.
И вообще какого рода ошибки указываются в редакторе?
avatar

  16  ssg Сообщений: 817

  • 16 января 2022, 07:25
+
0


Вот такая ошибка( 
Если не сложно добавьте уже скомпилированную версию.
avatar

  16  Aleh7999 Автор Сообщений: 83

  • 16 января 2022, 10:12
+
0
Да, здесь согласен, моя недоработка.
Добавьте в настройках, в самом низу строчку:
int prevBar;
avatar

  16  ssg Сообщений: 817

  • 16 января 2022, 11:18
+
0
Спасибо за проделанную работу, все удалось поправить.
avatar

  16  Aleh7999 Автор Сообщений: 83

  • 16 января 2022, 12:27
+
0
*hi* 
avatar

  16  ssg Сообщений: 817

  • 16 января 2022, 14:00
+
0
Можно ли не открывая новую тему провести правку кода?
Суть: при закрытии MetaTrader или отключении ПК и вновь запуска MetaTrader сразу выставляются ордера, хотя согласно алгоритма момент их выставления не должен наступить.
avatar

  16  Aleh7999 Автор Сообщений: 83

  • 2 февраля 2022, 15:40
+
0
Как раз по алгоритму: Добавить включаемую/выключаемую функцию выставления ордеров в начале каждой свечи.
Просто это у ком-ра есть внутренние часы, а советника их нет.
Для него при включении что 00:00 что 00:53 это начало его свечи.
Вот он позиции и открывает. Код не помню, а искать неохота, Вы попробуйте ещё поменять флаги у
extern bool Every_bar = true;
Хотя кажется это не поможет.
В крайнем случае перед выключением терминала снимите галочку прикоторой советнику разрешено торговать.
Редактирован: 2 февраля 2022, 16:30
avatar

  16  ssg Сообщений: 817

  • 2 февраля 2022, 16:29

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