Boris54
ПенSионер

 
Уровень 17

  Торгую в компаниях:


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

Рейтинг 2088



РЕКОМЕНДУЮ



Советник на RSi с заданным временем работы

Здравствуйте. Прошу сделать советник на RSi.
Ближайший аналог
www.opentraders.ru/downloads/920/
Советник торгует внутри дня на М1 или М5.
Параметры советника:
Rsi период – задаем период у Rsi
Rsi уровень 1 – нижний уровень
Rsi уровень 2 – верхний уровень
Т1 – начало торговли,
Т2 – окончание торговли, если есть открытый ордер -закрываем его,
Lot – размер лота,
SL – стоп лосс,
TP – профит.
Умножать лот не надо, тралить – не надо.
Во время Т1 советник начинает следить за значением RSi. После закрытия свечи: если Rsi ниже Уровень 1 – бай,
Если RSi выше Уровень 2 – селл. Если во время Т2 есть открытый ордер – закрываем его.
  • 0
  • Просмотров: 1206
  • 10 июня 2022, 05:16
  • Boris54
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Доработка индикатора "Kiosotto 2015 v4 Alert [mobidik]ms-nrp"
Следующая запись в группе  
Please make a simple mt4 EA using this indicator
08 июня 2022
10 июня 2022

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

+
0
посмотрю сегодня
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 10 июня 2022, 18:14
+
0
avatar

  34  AM2 Сообщений: 15882 - Андрей

  • 10 июня 2022, 22:18
+
0
Можно не исправлять! Пользователь SSG пояснил, что верхний уровень вычисляется.
Потестирую на реале.
Редактирован: 11 июня 2022, 17:06
avatar

  17  Boris54 Автор Сообщений: 756 - ПенSионер

  • 11 июня 2022, 04:12
+
0
Спасибо. Но в параметрах советника прописан только нижний уровень RSi. Тестирование показало, что «внутри» советника прописан какой-то верхний уровень. Но мне надо его изменять в параметрах Сов.
Править не надо!
Редактирован: 11 июня 2022, 17:07
avatar

  17  Boris54 Автор Сообщений: 756 - ПенSионер

  • 11 июня 2022, 02:20
+
0
В коде все верно. Верхний уровень вычисляется, поэтому не вынесен в настройки.

   double rsi = iRSI(NULL,0,RSI,0,Shift);//значение индикатора имеет значение от 0 до 100

   bool buy=rsi<Level; // сигнал на покупку - значение индикатора ниже уровня 30
   bool sell=rsi>100-Level;//сигнал на продажу - значение индикатора выше 100-30 = 70



при желании можно так


extern int Level_b         = 30;       // уровень RSI 
extern int Level_s         = 70;       // уровень RSI 

и ниже

  bool buy=rsi<Level_b; // сигнал на покупку - значение индикатора ниже уровня 30
   bool sell=rsi>Level_s;//сигнал на продажу - значение индикатора выше  70



что тоже самое.
Единственное отличие это более гибкий выбор уровней.
avatar

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

  • 11 июня 2022, 07:07
+
0
Согласен. Все по фэншую.
avatar

  7  kvashnin007 Сообщений: 524 - Андрей

  • 11 июня 2022, 14:05
+
0
Спасибо.
avatar

  17  Boris54 Автор Сообщений: 756 - ПенSионер

  • 11 июня 2022, 17:07
+
0
Может есть смысл на уровне 50 закрывать половину ордера, а вторую переводить в безубыток?
Сами уровни можно сделать динамические. Например, Боллинджер или чистая Девиация. Будет меньше ложных сигналов.
Повысится прибыльность.
Уменьшится просадка.
Уменьшится привязка ко времени.

В связи с «залипанием» RSI за уровнями правильно бы было усредняться увеличенным лотом.

Впрочем, это моё видение. Не факт, что оно правильное.
Редактирован: 11 июня 2022, 14:02
avatar

  7  kvashnin007 Сообщений: 524 - Андрей

  • 11 июня 2022, 13:59
+
0
В настройки:

extern double SafePart   = 0.5;      // часть лота для закрытия 

дальше:


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   bool rez;
   double rsi = iRSI(NULL,0,RSI,0,Shift);//значение индикатора имеет значение от 0 до 100
   double rsi_1 = iRSI(NULL,0,RSI,0,Shift+1);//значение индикатора имеет значение от 0 до 100

   bool buy=rsi<Level; // сигнал на покупку - значение индикатора ниже уровня 30
   bool sell=rsi>100-Level;//сигнал на продажу - значение индикатора выше 100-30 = 70
   
   if(t!=Time[0] && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && CountTrades()<1)
     {
      if(buy)
         PutOrder(0,Ask);
      if(sell)
         PutOrder(1,Bid);
      t=Time[0];
     }
//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<50 && rsi>50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>50 && rsi<50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------
   if(!TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && CloseOn>0)
     {
      CloseAll();
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1){
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type || type==-1) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+

Пробуйте.
Функцию безубытка добавьте сами.
avatar

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

  • 11 июня 2022, 15:29
+
0
Если в настройки добавить:

extern bool Reves        = false;

и дальше по коду:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   bool rez;
   double rsi = iRSI(NULL,0,RSI,0,Shift);//значение индикатора имеет значение от 0 до 100
   double rsi_1 = iRSI(NULL,0,RSI,0,Shift+1);//значение индикатора имеет значение от 0 до 100

   bool buy=rsi<Level; // сигнал на покупку - значение индикатора ниже уровня 30
   bool sell=rsi>100-Level;//сигнал на продажу - значение индикатора выше 100-30 = 70
   
   if(t!=Time[0] && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()))
     {
     if(Reves){
      if(sell && CountOrders(0)<1)
         PutOrder(0,Ask);
      if(buy && CountOrders(1)<1)
         PutOrder(1,Bid);
      }
     else{
      if(buy && CountOrders(0)<1)
         PutOrder(0,Ask);
      if(sell && CountOrders(1)<1)
         PutOrder(1,Bid);
      }
      t=Time[0];
     }
//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<50 && rsi>50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>50 && rsi<50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------
   if(!TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()) && CloseOn>0)
     {
      CloseAll();
     }
  }
//+------------------------------------------------------------------+

можно будет торговать используя по выбору реверс сигналов на открытие позиций, что добавит вариативности в торговле.
Кроме этого в приведенном коде реализована возможность одновременного существования позиций на покупку и на продажу.
Данный момент не был озвучен автором.
avatar

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

  • 11 июня 2022, 16:56
+
0
А вы могли бы сделать, чтобы ТП был динамическим и определялся уровнем RSi =50. В идеале Rsi=K, где К вынесено в настройки. Попробую найти оптимально значение в районе 50.
avatar

  17  Boris54 Автор Сообщений: 756 - ПенSионер

  • 12 июня 2022, 22:15
+
0
В настройки:

extern int K = 50;

//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<K && rsi>K && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>K && rsi<K && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------

avatar

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

  • 13 июня 2022, 04:14
+
0
Спасибо. Но я в программирование не силен. Куда вставить эту строчку?
avatar

  17  Boris54 Автор Сообщений: 756 - ПенSионер

  • 13 июня 2022, 05:04
+
0
Найдите в

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

avatar

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

  • 13 июня 2022, 06:04
+
0

//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<50 && rsi>50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>50 && rsi<50 && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------



замените на

//----------------------------------------------------------------------------
if(SafePart>0){
     if(CountOrders(0)!=0 && rsi_1<K && rsi>K && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Bid,Digits),Slip,White);
     if(CountOrders(1)!=0 && rsi_1>K && rsi<K && OrderLots()==Lots) rez=OrderClose(OrderTicket(),OrderLots()*SafePart,NormalizeDouble(Ask,Digits),Slip,White);
    }
//----------------------------------------------------------------------------

avatar

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

  • 13 июня 2022, 06:05
+
0
Спасибо. Попробую.
avatar

  17  Boris54 Автор Сообщений: 756 - ПенSионер

  • 13 июня 2022, 16:08
+
0
*hi* 
avatar

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

  • 13 июня 2022, 18:42

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