Помогите доработать советник

 

Здравствуйте господа программисты! Подскажите,что нужно прописать в коде советника для отключения индикатор RSI ?

Это есть в коде советника

41 extern double RsiMinimum = 30.0;    // нижняя граница RSI

42 extern double RsiMaximum = 70.0;    // верхняя граница RSI 

 
в коде есть условия, в которых эти значения прописаны, приведите тот код сюда.
 
if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > RsiMinimum) {
               ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
               if (ticket < 0) {
                  Print("Error: ", GetLastError());
                  return (0);
               }
               LastBuyPrice = FindLastBuyPrice();
               NewOrdersPlaced = TRUE;
               if(countSingleTrade>0)
                  curTakeCount++;
               scounted=false;   
            }
         } else {
            if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < RsiMaximum) {
               ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
               if (ticket < 0) {
                  Print("Error: ", GetLastError());
                  return (0);
 
Так если убрать РСИ, советник торговать не будет. Стратегию переделывать надо, другие условия вместо РСИ туда вписать.
 
Vitalie Postolache:
Так если убрать РСИ, советник торговать не будет. Стратегию переделывать надо, другие условия вместо РСИ туда вписать.А

А прикрепить индикатор с графика возможно? Или индикатор надо прописывать в  советнике?

 
KRIKS:
if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) > RsiMinimum) {
               ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, HotPink);
               if (ticket < 0) {
                  Print("Error: ", GetLastError());
                  return (0);
               }
               LastBuyPrice = FindLastBuyPrice();
               NewOrdersPlaced = TRUE;
               if(countSingleTrade>0)
                  curTakeCount++;
               scounted=false;   
            }
         } else {
            if (iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1) < RsiMaximum) {
               ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTrades, MagicNumber, 0, Lime);
               if (ticket < 0) {
                  Print("Error: ", GetLastError());
                  return (0);
Давайте проанализируем приведенный фрагмент советника. Во-первых, дважды вычисляется
iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1)  Лучше написать (оставил лишь основные элементы):
double RSI=iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1);
if(RSI>RsiMinimum)
{
  ticket = OpenPendingOrder(1, ....  // Видимо, продажа
......
}else
{
if (RSI < RsiMaximum)
{
  ticket = OpenPendingOrder(0, ....  // Видимо, покупка
}

Теперь посмотрим, что получилось. возьмем 4 симметричных значения RSI:  80  60  40  20. Должно произойти 2 покупки и 2 продажи. Проверяем. Первые 3 значения >RsiMinimum будут продажи. Четвертая величина RSI=20 меньше минимума, продажа отменяется.
Но если эта величина меньше минимума, то уж конечно будет и меньше максимума - вторая проверка теряет смысл
Наверное и остальные фрагменты Вашей программы содержат такие ляпсусы.
Проанализируйте их подобным образом и научитесь программированию

Насчет прикрепления и прописывания индикатора: у Вас в папке Experts есть два примера советников: MACD Sample.mq4  и  Moving Average.mq4 - посмотрите их. Почитайте в справке про функцию iCustom - поставьте на нее курсор и нажмите F1

 
STARIJ:
Давайте проанализируем приведенный фрагмент советника. Во-первых, дважды вычисляется
iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 1)  Лучше написать (оставил лишь основные элементы):

Теперь посмотрим, что получилось. возьмем 4 симметричных значения RSI:  80  60  40  20. Должно произойти 2 покупки и 2 продажи. Проверяем. Первые 3 значения >RsiMinimum будут продажи. Четвертая величина RSI=20 меньше минимума, продажа отменяется.
Но если эта величина меньше минимума, то уж конечно будет и меньше максимума - вторая проверка теряет смысл
Наверное и остальные фрагменты Вашей программы содержат такие ляпсусы.
Проанализируйте их подобным образом и научитесь программированию

Насчет прикрепления и прописывания индикатора: у Вас в папке Experts есть два примера советников: MACD Sample.mq4  и  Moving Average.mq4 - посмотрите их. Почитайте в справке про функцию iCustom - поставьте на нее курсор и нажмите F1

Согласен, там должно быть больше фильтров.

 



Благодарю за подсказку!!! Но в MACD Sample.mq4  и  Moving Average.mq4 функция iCustom в коде советников не найдена.
 

KRIKS:





Благодарю за подсказку!!! Но в MACD Sample.mq4  и  Moving Average.mq4 функция iCustom в коде советников не найдена.

Функция iCustom упомянута для ознакомления с ней

 
STARIJ:

Функция iCustom упомянута для ознакомления с ней

Ну Ну...)))) Курсор в справке ставить??? Или всё таки в ME ??? Хи Хи..... И какая связь между советниками  MACD Sample.mq4  и  Moving Average.mq4  и функцией  iCustom которой там нет... 

 
KRIKS:

Ну Ну...)))) Курсор в справке ставить??? Или всё таки в ME ??? Хи Хи..... И какая связь между советниками  MACD Sample.mq4  и  Moving Average.mq4  и функцией  iCustom которой там нет... 

В документации есть куча функций для технических индикаторов. Прямо вот здесь

К примеру для moving averadge

А вот ICustom

И MACD

Технические индикаторы - Справочник MQL4
Технические индикаторы - Справочник MQL4
  • docs.mql4.com
Для того, чтобы эксперт (или любая MQL4-программа) мог получить значение какого-либо индикатора, присутствие данного индикатора на текущем графике необязательно. Запрошенный индикатор будет загружен и рассчитан в потоке вызвавшего его модуля. Любой индикатор может быть рассчитан на данных не только текущего графика, но и на данных любого...
Причина обращения: