Помогаем советнику определить своё местоположение и принять правильное решение

 

Советник не видит Максимальной и Минимальной цены в истории n-количества баров, в результате чего на верхнем ценовом уровне графика может поставить ордер на покупку или наоборот - в нижнем ценовом уровне графика поставить ордер на продажу.

Цена логично идёт в противоположном направлении от экстремумов цены в истории за n-количество баров и накапливает убыток.


Как решить эту проблему?  


Идея GEOPRICE позиционирования такая:

1. С помощью фнкций iHigest() и iLowest() определяем расстояние и делим его на 5. (пока пусть будет 5)

Мы получаем 5 уровней или коридоров.

Нас интересует верхний и нижний коридоры:

2. При наличии текущей цены в верхнем коридоре (MAX цена) отправлять все упомянутые ордера на продажу.

3. При текущей цене в нижнем коридоре (MIN цена)- отправлять все упомянутые ордера только на покупку.

Если цена вне верхнего и нижнего коридора, то советник шпарит как обычно и зарабатывает тейкпрофиты))



 

На практике как это реализовать?

Допустим за последние 1000 баров:

MAX PRICE_CLOSE 1.50000

MIN PRICE_CLOSE 1.40000

Расстояние между MAX и MIN 10 000 пунктов.

Разделим 10 000 пунктов на 5 >>> высота 1 коридора в пунктах 2 000.

 
И что, Капитан очевидность? Могу дополнить - Земля круглая, вода мокрая и т.д. ))
 

Теперь если советник открывает ключевой (третий) ордер, определяющий направление всей группы ордеров (при контр-ордерной торговле) или первый (при торговле 1 ордером) тогда:

if(Ask < = IHighest() - ( iHighest() - iLowest() ) / 5)
{
OrderSend(...OP_BUY...)
}
else if(Bid > = IHighest() - ( iHighest() - iLowest() ) / 5)
{
OrderSend(...OP_SELL...)
}


Примерно так, схематично.


Найдите 3 ошибки в концепции.

 
Alexey Volchanskiy:
И что, Капитан очевидность? Могу дополнить - Земля круглая, вода мокрая и т.д. ))

А вы это применяете? 

Сложность в том, что не факт что история за n-баров покажет экстремум. Какое количество баров оценивать по iHighest() и iLowest()???

А если на графике нет даже 100 баров? Я видел инструменты торговли где и такое было. Тогда как быть? Надо значить какую-то обработку делать этого момента.

 
geratdc_:

А вы это применяете? 

Сложность в том, что не факт что история за n-баров покажет экстремум. Какое количество баров оценивать по iHighest() и iLowest()???

А если на графике нет даже 100 баров? Я видел инструменты торговли где и такое было. Тогда как быть? Надо значить какую-то обработку делать этого момента.

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

Это очевидно, поэтому я так написал

 
Alexey Volchanskiy:

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

Это очевидно, поэтому я так написал

Всё уже придумано, я понял. Велосипеды всё изобретаю. А какие подводные рифы там есть? ЧТо делать если на графике инструмента нет и 10 баров? Какой шаг для iHighest() и iLowest() указывать? У меня этот блекджек просто спотыкается. Покупает на максимумах и продаёт на минимумах. И привет...

 
Наверно, лучше брать не количество баров, ибо не понятно, сколько, а ближайшие фракталы на старшем таймфрейме. Например, на дневном или недельном.
 
Sergey Savinkin:
Наверно, лучше брать не количество баров, ибо не понятно, сколько, а ближайшие фракталы на старшем таймфрейме. Например, на дневном или недельном.

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

 
geratdc_:

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

#property copyright "Copyright 2009-2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "2.00"

int Fractals_Handle_D1=0;  // хэндл индикатора  Fractals
double Fractal_D1_h[];     // максимальные фракталы
double Fractal_D1_l[];     // минимальные фракталы
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
  {
   Fractals_Handle_D1=iFractals(_Symbol,PERIOD_D1);
   if(Fractals_Handle_D1==INVALID_HANDLE)
     {
      printf("Error creating Fractals_Handle_D1 indicator");
      return(INIT_FAILED);
     }

   return(INIT_SUCCEEDED);

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick(void)
  {
   int Min_Bars_Or_20=MathMin(Bars(_Symbol,PERIOD_D1),20); // скопируем ближайшие 20 баров (или все, что есть, если их меньше)
   if(CopyBuffer(Fractals_Handle_D1,0,1,Min_Bars_Or_20,Fractal_D1_h)==0)
     {
      Print("CopyBuffer from Fractal_D1_h failed, no data");
      return;
     }
   if(CopyBuffer(Fractals_Handle_D1,1,1,Min_Bars_Or_20,Fractal_D1_l)==0)
     {
      Print("CopyBuffer from Fractal_D1_l failed, no data");
      return;
     }
   double MaxLvl = 0;
   double MinLvl = 0;
   for(int e=Min_Bars_Or_20-1; e>=0; e--)
     {
      if(Fractal_D1_h[e]!=EMPTY_VALUE)
        {
         MaxLvl=Fractal_D1_h[e];
         break;
        }
     }
   for(int e=Min_Bars_Or_20-1; e>=0; e--) // это можно было сделать в одном цикле, но так проще.
     {
      if(Fractal_D1_l[e]!=EMPTY_VALUE)
        {
         MinLvl=Fractal_D1_l[e];
         break;
        }
     }
   string Str_Comment="";
   if(MaxLvl==0)
      Str_Comment="Максимальный уровень не определен";
   else
      Str_Comment="Максимальный уровень "+(string)MaxLvl;
   if(MinLvl==0)
      Str_Comment=Str_Comment+"\nМинимальный уровень не определен";
   else
      Str_Comment=Str_Comment+"\nМинимальный уровень "+(string)MinLvl;
   Comment(Str_Comment);
  }
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. а что с форумом случилось? Такое чувство, что сейчас...
 
geratdc_:

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

Посмотрите канал Дончиана. Описанная технология применяется мной, только делю на 10 зон и период не в 1000, а поменьше....

Кроме того, вхожу именно на покупку и продажу на границах - это стратегия черепах, она трендовая.

Причина обращения: