Скачать MetaTrader 5

Обсуждение статьи "Торговые идеи на основе направления и скорости движения цен"

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Вся активность участников MQL5.community на одной странице!
MetaQuotes Software Corp.
Модератор
181346
MetaQuotes Software Corp. 2015.04.17 12:40 

Опубликована статья Торговые идеи на основе направления и скорости движения цен:

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

Любое движение в нашем мире имеет такие характеристики как направление, ускорение, скорость. На ликвидных рынках оно также поддается этим характеристикам. Из этого следует важное правило - ни одно сильное направленное перемещение цены на рынках резко никогда не заканчивается, это как поезд, который при торможении на полном ходу с составом может иметь тормозной путь до километра.

Как же происходит начало тренда? Когда мнение большинства участников рынка меняется на противоположное по каким-либо причинам, будь то глобальная перемена курса, изменение важных факторов, влияющих на рынок или новости. После этого складывается твердое общее мнение и тренд начинается. Участник рынка все больше уверены в том, что движение набирает силу и продолжится, входят крупные игроки с большими позициями, поэтому движение имеет уже свою направленность, ускорение и определенную скорость развития. Вот тут и начинают зарабатывать те, кто вошли в начале этого движения, дали ему импульс и скорость. Позже уже по худшей цене входят остальные трейдеры, но отличие от первых, они лишь пытаются использовать само направление движения цены.

Когда же настают перемены, тренд завершается. Почему же движение еще некоторое время продолжается, а не резко меняется? Это происходит из-за того, что тот, кто разгонял и толкал цену в нужном им направлении, уже закрывают свои позиции и тормозят тренд, а те, кто лишь "ловил волну", продолжают верить, что ничего не изменилось и даже пытаются сами двигать цену. Но тут "поезд" не только останавливается, но и начинает двигаться в противоположном направлении, и для них все заканчивается.

3. Увеличение эффективности входа и выхода

Известно, что некоторые индикаторы, используемые для торговли, при увеличении периода увеличивают скорость реагирования на смену тенденции, однако и ложных ложных сигналов появляется больше.

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

Рис. 3. Состояние тренда на различных масштабах по сигналам индикаторов RSI и AC

Рис. 3. Состояние тренда на различных масштабах по сигналам индикаторов RSI и AC

Автор: Alexander Fedosov

Vladimir Pastushak
69035
Vladimir Pastushak 2015.04.17 14:36  

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

Это все можно было сократить в разы:

//--- определение индекса на покупку
   if(iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)>60)
      index_rsi=1;
   if(iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)>70)
      index_rsi=2;
   if(iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)>80)
      index_rsi=3;
   if(iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)>90)
      index_rsi=4;

//--- определение индекса на продажу   
   if(iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)<40)
      index_rsi=-1;
   if(iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)<30)
      index_rsi=-2;
   if(iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)<20)
      index_rsi=-3;
   if(iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)<10)
      index_rsi=-4;
//--- определение зоны бокового движения
   if(iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)>=40 && iRSI(Symbol(),timeframe,period,PRICE_CLOSE,0)<=60.0)
      index_rsi=0;
   return index_rsi;
  }
//+------------------------------------------------------------------+
//| Функция определения скорости тренда                              |
//+------------------------------------------------------------------+
int speed_ac(int timeframe)
  {
   double ac_0,ac_1,ac_2,ac_3,ac_4;
//---
   ac_0 = iAC(Symbol(),timeframe,0);
   ac_1 = iAC(Symbol(),timeframe,1);
   ac_2 = iAC(Symbol(),timeframe,2);
   ac_3 = iAC(Symbol(),timeframe,3);
   ac_4 = iAC(Symbol(),timeframe,4);
//---
   index_ac=0;
//--- сигнал на покупку
   if(ac_0>ac_1)
      index_ac=1;
   if(ac_0>ac_1 && ac_1>ac_2)
      index_ac=2;
   if(ac_0>ac_1 && ac_1>ac_2 && ac_2>ac_3)
      index_ac=3;
   if(ac_0>ac_1 && ac_1>ac_2 && ac_2>ac_3 && ac_3>ac_4)
      index_ac=4;
//--- сигнал на продажу
   if(ac_0<ac_1)
      index_ac=-1;
   if(ac_0<ac_1 && ac_1<ac_2)
      index_ac=-2;
   if(ac_0<ac_1 && ac_1<ac_2 && ac_2<ac_3)
      index_ac=-3;
   if(ac_0<ac_1 && ac_1<ac_2 && ac_2<ac_3 && ac_3<ac_4)
      index_ac=-4;
   return index_ac;
Alexander Fedosov
7631
Alexander Fedosov 2015.04.17 14:46  
Ну может и странный. Только задача была максимально подробно и просто описать. Да, RSI можно было загнать в переменную. Было бы компактней, но глядя какие вопросы задают на форумах...Я ориентировался на самого начинающего. Извиняюсь, если не слишком удобно вышло.
Vladimir Pastushak
69035
Vladimir Pastushak 2015.04.18 08:09  
Alex2356:
Ну может и странный. Только задача была максимально подробно и просто описать. Да, RSI можно было загнать в переменную. Было бы компактней, но глядя какие вопросы задают на форумах...Я ориентировался на самого начинающего. Извиняюсь, если не слишком удобно вышло.

Извиняться не за что, у Вас все хорошо и понятно, просто было интересно почему такая разница в стиле написания кода.

Для новичка будет полезно посмотреть примеры реализации разными стилями....

Andrey F. Zelinsky
31379
Andrey F. Zelinsky 2015.04.18 08:35  
VOLDEMAR:

Для новичка будет полезно посмотреть примеры реализации разными стилями....

Все новички с завидным постоянством и упорством задают один и тот же вопрос: "А как правильно?
Alex2356:
Я ориентировался на самого начинающего.

Новичок не значит бестолковый. И не стоит для новичков сводить простые примеры к неправильным или некорректным.

В данном случае:

double index_rsi;
//--- определение индекса на покупку
if(iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)>60)
index_rsi=1;
if(iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)>70)
index_rsi=2;
if(iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)>80)
index_rsi=3;
if(iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)>90)
index_rsi=4;

//--- определение индекса на продажу   
if(iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)<40)
index_rsi=-1;
if(iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)<30)
index_rsi=-2;
if(iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)<20)
index_rsi=-3;
if(iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)<10)
index_rsi=-4;

//--- определение зоны бокового движения
if(iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)>=40 && iRSI(Symbol(),NULL,8,PRICE_CLOSE,0)<=60.0)
index_rsi=0;

 Вы допустили ДВЕ грубые ошибки:

-- значение RSI надо было присвоить переменной и уж затем выполнять сравнение;

-- верно использовать оператор if-else (https://docs.mql4.com/ru/basis/operators/if).

Неверное использование (или точнее сознательное не использование) где нужно оператора if-else -- это Ваш стиль, судя по всему. И такой стиль Вы прививаете новичкам? Хорошо если они Вашу статью оставят без внимания, или же, прочитав, составят для себя правильные акценты. А ведь новички есть разные. Усвоят Ваши примеры и будут с умным видом нести в массы (со ссылкой на Вашу статью), что неправильное это правильное.

Странно что модерация пропускает статьи с такими примерами кодов для публикации.

p.s. Моё мнение -- надо в статью внести правки и выложить новую редакцию с корректными примерами.

Alexey Kozitsyn
6435
Alexey Kozitsyn 2015.04.18 09:38  
abolk:
Все новички с завидным постоянством и упорством задают один и тот же вопрос: "А как правильно?

Новичок не значит бестолковый. И не стоит для новичков сводить простые примеры к неправильным или некорректным.

В данном случае:

 Вы допустили ДВЕ грубые ошибки:

-- значение RSI надо было присвоить переменной и уж затем выполнять сравнение;

-- верно использовать оператор if-else (https://docs.mql4.com/ru/basis/operators/if).

Неверное использование (или точнее сознательное не использование) где нужно оператора if-else -- это Ваш стиль, судя по всему. И такой стиль Вы прививаете новичкам? Хорошо если они Вашу статью оставят без внимания, или же, прочитав, составят для себя правильные акценты. А ведь новички есть разные. Усвоят Ваши примеры и будут с умным видом нести в массы (со ссылкой на Вашу статью), что неправильное это правильное.

Странно что модерация пропускает статьи с такими примерами кодов для публикации.

p.s. Моё мнение -- надо в статью внести правки и выложить новую редакцию с корректными примерами.

Покажите, пожалуйста, как бы Вы правильно записали оператор if-else в данном случае.
Alexander Fedosov
7631
Alexander Fedosov 2015.04.18 09:42  
И такой стиль Вы прививаете новичкам?

Андрей, я уважаю ваше мнение. Тем не менее считаю, что стиль написания новичок должна формировать не эта статья. А на начальных этапах Учебник и Документация.

Хорошо если они Вашу статью оставят без внимания, или же, прочитав, составят для себя правильные акценты. А ведь новички есть разные. Усвоят Ваши примеры и будут с умным видом нести в массы (со ссылкой на Вашу статью), что неправильное это правильное.

Поэтому, с вашего позволения, я в помощи расстановки правильных акцентов буду рекомендовать вас. Тем более, что у вас в профиле прописаны предложения услуг обучения.

И не стоит для новичков сводить простые примеры к неправильным или некорректным.

Пример логически правильный. Некорректность очень размытое понятие.  Позвольте пример:

//+------------------------------------------------------------------+
bool func()
  {
   bool res=false;
   if(OrderSelect(...))
      res=true;
   return res;
  }
//+------------------------------------------------------------------+
bool func()
  {
   return(OrderSelect(...));
  }
//+------------------------------------------------------------------+


  Ответьте, пожалуйста, какой из примеров подходит под категорию Правильный, а какой Корректный?

 Вы допустили ДВЕ грубые ошибки

Не присвоил переменную. Не прописал else. Да я вас понял. Спасибо.

Учебник по MQL4
  • book.mql4.com
Учебник по MQL4
Andrey F. Zelinsky
31379
Andrey F. Zelinsky 2015.04.18 09:43  
Tapochun:
Покажите, пожалуйста, как бы Вы правильно записали оператор if-else в данном случае.

Простой и наглядный пример есть в документации -- https://docs.mql4.com/ru/basis/operators/if.

А вот в данном случае -- сами и подумайте как правильно записать -- не такая уж и сложная задача.

Andrey F. Zelinsky
31379
Andrey F. Zelinsky 2015.04.18 09:53  
Alex2356:

Пример логически правильный. Некорректность очень размытое понятие.

Если бы Ваш пример был логически правильный и корректный -- то он бы не вызывал сомнений и нареканий. А таковые есть.

Ваш пример в посте https://www.mql5.com/ru/forum/43217#comment_1514871 :

//+------------------------------------------------------------------+
bool func()
  {
   bool res=false;
   if(OrderSelect(...))
      res=true;
   return res;
  }
//+------------------------------------------------------------------+
bool func()
  {
   return(OrderSelect(...));
  }
//+------------------------------------------------------------------+

-- оба примера с грубой ошибкой -- функция OrderSend() возвращает int -- https://docs.mql4.com/ru/trading/ordersend 

-- с точки зрения работы с return() -- оба подхода правильные -- но только первый корректный.

Alexander Fedosov
7631
Alexander Fedosov 2015.04.18 09:57  
abolk:

Если бы Ваш пример был логически правильный и корректный -- то он бы не вызывал сомнений и нареканий. А таковые есть.

Ваш пример в посте https://www.mql5.com/ru/forum/43217#comment_1514871 :

-- оба примера с грубой ошибкой -- функция OrderSend() возвращает int -- https://docs.mql4.com/ru/trading/ordersend 

-- с точки зрения работы с return() -- оба подхода и правильные -- но только первый корректный.

К сожалению функция OrderSelect возвращает bool
Andrey F. Zelinsky
31379
Andrey F. Zelinsky 2015.04.18 10:00  
Alex2356:
К сожалению функция OrderSelect возвращает bool

да, прочитал как OrderSend()

OrderSelect() предполагает последующую работу с ордером -- поэтому Ваш пример с этой функцией бестолковый (уж извините за критику, но Вы сами спозиционировали себя как автор статьи для новичков)

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