Скачать MetaTrader 5

Проверка по macd

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пользуйся поиском на MQL5.community. Это просто!
pilolin
16
pilolin 2016.07.03 05:20 

Всем привет. Хотел написать своего первого советника, но так как в этом вопросе новичок что-то пошло не так. Помогите разобраться с функцией, задача её следующая когда MACD пересек 0 и количество столбцов его не более 5 или последние 5 столбцов около 0 линии открыть сделку (то есть выслать true, иначе false). Но открывается совсем не по правилу, вот хоть глаз выколи не вижу в чем проблема.

pilolin
16
pilolin 2016.07.03 06:01  
bool MACD(int type, int TF)

{

   bool r = false;

   int x = 0;

   int y = 0;

   int sumx = 0;

   int sumy = 0;

   double MACDx = 0.0;

   double MACDy = 0.0;

   if(type == OP_BUY)

      {

         for(x = 0; x < 6; x++)

         {

            MACDx = iMACD(Symbol(), TF, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, x);

            if(MACDx > 0.0)

               sumx++;

         }

         for(y = 0; y < 6; y++)

         {

            MACDy = iMACD(Symbol(), TF, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, y);

            if(MACDy > -0.00015 && MACDy < 0.00015)

               sumy++;

         }         

         if(sumx < 5 || sumy < 5)

            r = true;

      }

      if(type == OP_SELL)

      {

         for(x = 0; x < 6; x++)

         {

            MACDx = iMACD(Symbol(), TF, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, x);

            if(MACDx < 0.0)

               sumx++;

         }

         for(y = 0; y < 6; y++)

         {

            MACDy = iMACD(Symbol(), TF, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, y);

            if(MACDy > -0.00015 && MACDy < 0.00015)

               sumy++;

         }         

         if(sumx < 5 || sumy < 5)

            r = true;

      }

   return r;

}
LRA
336
LRA 2016.07.03 11:50  
pilolinоткрывается совсем не по правилу

Привет коллеге, пришедшему в MQL из C++ Идея позаимствована у Билла Вильямса. Посмотрел два цикла по x и по y. Кажется проще так:

         for(x = 0; x < 6; x++)
         {
            MACD = iMACD(Symbol(), TF, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, x);
            if(MACD > 0.0) sumx++;
            if(MACD > -0.00015 && MACD < 0.00015) sumy++;
         }

А вот короче исходного в 3,2 раза (14 строк вместо 45) при том же результате. Теперь ошибка уже видна!!!

bool MACD(int type, int TF)
{
   int sumx = 0, sumy = 0, sumz = 0;
   double MACD;

   for(int x = 0; x < 6; x++)
   {
      MACD = iMACD(Symbol(), TF, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, x);
      if(MACD > 0.0) sumx++;
      if(MACD > -0.00015 && MACD < 0.00015) sumy++;
      if(MACD < 0.0)  sumz++;
   }
   if((type == OP_BUY  && (sumx < 5 || sumy < 5)) || (type == OP_SELL && (sumz < 5 || sumy < 5))) return true;
   return false;
}
Приложите весь код - в понедельник посмотрю на демо и исправлю. Если секрет - почту дайте
pilolin
16
pilolin 2016.07.04 06:49  

То что из плюсов пришел верно подмечено, но я и на них не особо толково пишу =D Спасибо за ответ. Кода всего, как такового, нет, так как только придумал алгоритм весь, довольно простой,  решил  с чего то простого начать и тут же в лужу присел. Если интересно могу поделиться, не такой это и секрет)

Вобщем суть следующая. На покупку открываемся когда macd изменился с "-" на "+" и прошло не более 5 столбиков гистограммы или имеет значения около 0 - это первый сигнал. И второй индикатор это средняя скользящая периода 20 как только она пробивается снизу вверх свечой и закрывается минимум на 10 пунктов выше неё - это второй сигнал. TP ставил 10-15 пунктов, SL по идее нужно ставить куда-то за MA пунктов за 15, но думаю прикрутить ко всему этому мартингейл (хотя да знаю рисковый получится метод). Времени много не было, по разным причинам и проверить толком на практике не удалось. Но пока удавалось проверять иногда, приносило вроде прибыль, уходило на 15-20 пунктов вниз, открывал мартингейла, пока что все работало.

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