Скачать MetaTrader 5

Помогите люди добрые. Дайте совет где я ошибаюсь.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
У тебя есть торговый сигнал? Опубликуй его и на своем блоге!
Lomov
64
Lomov 2012.11.20 18:26 
Профииии, помогите с кодом индикатора!

Для визуальной проверки советника я решил раскрасить индикатор экспоненциальной скользящей средней в соответствии с сигналом ADX, то есть если ADX(H4) растет - индикатор красного цвета (при любом используемом периоде графика), если ADX падает то синего. В итоге я хотел получить такие результаты: прикрепляя индикатор к графику H4, где прикреплен и ADX, и запомнив период времени в течении которого индикатор ADX растет и скользящая средняя - красная, переключив период графика увидеть экспоненциальную скользящую среднюю окрашенную в красный цвет на периоде времени который я запомнил. Но как оказалось все не так просто. А ведь как то так организована работа советника. "Машка" раскрашивается, но вовсе не в то время, вернее раскрашивается подругому и цвета не соответствуют периоду графика H4.

Вот код.
//---- Установки индикатора
#property  indicator_chart_window
#property  indicator_buffers 2
#property  indicator_color1  Red
#property  indicator_color2  Blue

#property  indicator_width1  1
#property  indicator_width2  1

//---- Параметры индикатора
extern int Period_MA=12;
extern int Mode_MA=1;   // 0-SMA, 1-EMA, 2-SMMA, 3-LWMA
extern int Shift_MA=0;
extern int Time_ADX=240;
extern int ADX_min=10;
extern int ADX_max=40;
extern int ADX_period=14;
//---- Буферы для индикатора
double     MA_1[];
double     MA_2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   IndicatorDigits(Digits+1);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
//---- indicator buffers mapping
   SetIndexBuffer(0,MA_1);
   SetIndexBuffer(1,MA_2);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("MA_(ADX)");
   SetIndexLabel(0,"ADX растет");
   SetIndexLabel(1,"ADX падает");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   
// Первый буфер
// Рисуется при условии растущей ADX 
   for(int i=0; i<limit; i++)
   {      
      if(iADX(NULL,Time_ADX,ADX_period,PRICE_CLOSE,MODE_MAIN,i)>iADX(NULL,Time_ADX,ADX_period,PRICE_CLOSE,MODE_MAIN,i+1))
         MA_1[i]=iMA(NULL,0,Period_MA,Shift_MA,Mode_MA,PRICE_CLOSE,i);
         else
// Вторй буфер
// Рисуется при условии падающей ADX 
         MA_2[i]=iMA(NULL,0,Period_MA,Shift_MA,Mode_MA,PRICE_CLOSE,i);
   }
//---- done
   return(0);
  }
Казалось куда проще? А не получается достичь желаемого. Помогите люди добрые. Дайте совет где я ошибаюсь.
TarasBY
1739
TarasBY 2012.11.20 20:03  
Lomov:
Профииии, помогите с кодом индикатора!

Для визуальной проверки советника я решил раскрасить индикатор экспоненциальной скользящей средней в соответствии с сигналом ADX, то есть если ADX(H4) растет - индикатор красного цвета (при любом используемом периоде графика), если ADX падает то синего. В итоге я хотел получить такие результаты: прикрепляя индикатор к графику H4, где прикреплен и ADX, и запомнив период времени в течении которого индикатор ADX растет и скользящая средняя - красная, переключив период графика увидеть экспоненциальную скользящую среднюю окрашенную в красный цвет на периоде времени который я запомнил. Но как оказалось все не так просто. А ведь как то так организована работа советника. "Машка" раскрашивается, но вовсе не в то время, вернее раскрашивается подругому и цвета не соответствуют периоду графика H4.

Вот код. Казалось куда проще? А не получается достичь желаемого. Помогите люди добрые. Дайте совет где я ошибаюсь.

времечко у индикаторов с разных таймфреймов нужно перевести "в единую систему координат": 

        int li_Bar = iBarShift (NULL, Time_ADX, Time[i]);
        if (iADX (NULL, Time_ADX, ADX_period, PRICE_CLOSE, MODE_MAIN, li_Bar) > iADX (NULL, Time_ADX, ADX_period, PRICE_CLOSE, MODE_MAIN, li_Bar + 1))

 и я бы цикл сделал в обратную сторону.

Lomov
64
Lomov 2012.11.20 20:17  
TarasBY:

времечко у индикаторов с разных таймфреймов нужно перевести "в единую систему координат": 

 и я бы цикл сделал в обратную сторону.


Я так вроде пробоал, но помоему помогло, щас проверю!

Lomov
64
Lomov 2012.11.20 20:27  
TarasBY:

времечко у индикаторов с разных таймфреймов нужно перевести "в единую систему координат": 

 и я бы цикл сделал в обратную сторону.

Помоему работает:) А цикл переделывть думаю не стоит, я проверял свой советник, ему похоже тоже этого исправления не хватает! А то он выдает сигналы не вовремя. 

Vladyslav Goshkov
2074
Vladyslav Goshkov 2012.11.21 04:54  
Lomov:

Помоему работает:) А цикл переделывть думаю не стоит, я проверял свой советник, ему похоже тоже этого исправления не хватает! А то он выдает сигналы не вовремя. 


Правильнее считать из прошлого в будущее - ближе к тому, что получится в реалии. 

Хотя, в данном случае все равно в какую сторону цикл: Вы используете цену закрытия старшего периода в данном случае 4 часа. Для всех меньших т\ф - это заглядывание в будущее. Не удивляйтесь, если эксперт будет работать не так, как Вы предполагаете, глядя на историю ;). 

Lomov
64
Lomov 2012.11.21 04:59  
VladislavVG:


Правильнее считать из прошлого в будущее - ближе к тому, что получится в реалии. 

Хотя, в данном случае все равно в какую сторону цикл: Вы используете цену закрытия старшего периода в данном случае 4 часа. Для всех меньших т\ф - это заглядывание в будущее. Не удивляйтесь, если эксперт будет работать не так, как Вы предполагаете, глядя на историю ;). 

Очень хочется заглянуть в будущее и не ошибиться:). 

Vladyslav Goshkov
2074
Vladyslav Goshkov 2012.11.21 05:08  
Lomov:

Очень хочется заглянуть в будущее и не ошибиться:). 


Дерзайте, маякните, если получится. Тогда кроме "клуба телепатов" на форуме  откроем еще и "клуб ясновидящих". Будете президентом ;).
Lomov
64
Lomov 2012.11.21 05:17  
VladislavVG:

Дерзайте, маякните, если получится. Тогда кроме "клуба телепатов" на форуме  откроем еще и "клуб ясновидящих". Будете президентом ;).

Помоему быстрее дождемся создание "машины времени", а телепатов и экстрасенсов и так развелось как собак;)
Vladyslav Goshkov
2074
Vladyslav Goshkov 2012.11.21 14:14  
Lomov:

Вот что получилось, только если есть "дыры" в истории его начинает глючить;)

 


Вадим, это все картинки. Если есть сомнения, запускайте эксперта - посмотрите на разницу между желаемым и действительным ;).... Только сначала запускайте  на демо ;).

Достаточно Вам будет, если разберем только последний сигнал ? Или попытаетесь самостоятельно ?

Lomov
64
Lomov 2012.11.21 14:53  

Меня на работе напрягли, завтра продолжу(

Lomov
64
Lomov 2012.11.21 17:13  
VladislavVG:


Вадим, это все картинки. Если есть сомнения, запускайте эксперта - посмотрите на разницу между желаемым и действительным ;).... Только сначала запускайте  на демо ;).

Достаточно Вам будет, если разберем только последний сигнал ? Или попытаетесь самостоятельно ?

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

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