Код индикатора период 45
//+-------------------------------------------------------------------+ //| Trailing_CCI_Trend.mq4 //| Based on Symphonie_Trendline_Indicator //| !!! this file is created with Tab size 4 and no space indentation //+-------------------------------------------------------------------+ #property copyright "Comer" #property link "" #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 DodgerBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 4 #property indicator_color2 Red #property indicator_style2 STYLE_SOLID #property indicator_width2 4 double CCI_Trigger_Level = 0.0; double TrendUp[]; double TrendDown[]; int BarNumber; int BarIndex; int init() { SetIndexStyle ( 0, DRAW_HISTOGRAM ); SetIndexBuffer( 0, TrendUp ); SetIndexStyle ( 1, DRAW_HISTOGRAM ); SetIndexBuffer( 1, TrendDown ); return(0); } int deinit() { return(0); } int start() { BarNumber = IndicatorCounted(); // [0 .. Bars] for( BarIndex = Bars - BarNumber; BarIndex > 0; ) { BarIndex--; // [Bars-1 .. 0] processBar(); BarNumber++; } return(0); } void processBar() { double cciNow; double cciPrevious; bool trendUp; if( BarNumber == 0 ) // BarIndex == Bars-1 return; cciNow = iCCI( NULL, 0, 45, PRICE_TYPICAL, BarIndex ); cciPrevious = iCCI( NULL, 0, 45, PRICE_TYPICAL, BarIndex+1 ); if( (cciNow > CCI_Trigger_Level) && (cciPrevious <= CCI_Trigger_Level) ) // crossed up through the trigger level trendUp = true; else if( (cciNow < CCI_Trigger_Level) && (cciPrevious >= CCI_Trigger_Level) ) // crossed down through the trigger level trendUp = false; else // trend did not change trendUp = (TrendUp[BarIndex+1] != 0); if( trendUp ) { TrendUp[BarIndex] = 1; TrendDown[BarIndex] = 0; } else { TrendDown[BarIndex] = 1; TrendUp[BarIndex] = 0; } }
Код индикатора период 15
//+-------------------------------------------------------------------+ //| Trailing_CCI_Trend.mq4 //| Based on Symphonie_Trendline_Indicator //| !!! this file is created with Tab size 4 and no space indentation //+-------------------------------------------------------------------+ #property copyright "Comer" #property link "" #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 DodgerBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 4 #property indicator_color2 Red #property indicator_style2 STYLE_SOLID #property indicator_width2 4 double CCI_Trigger_Level = 0.0; double TrendUp[]; double TrendDown[]; int BarNumber; int BarIndex; int init() { SetIndexStyle ( 0, DRAW_HISTOGRAM ); SetIndexBuffer( 0, TrendUp ); SetIndexStyle ( 1, DRAW_HISTOGRAM ); SetIndexBuffer( 1, TrendDown ); return(0); } int deinit() { return(0); } int start() { BarNumber = IndicatorCounted(); // [0 .. Bars] for( BarIndex = Bars - BarNumber; BarIndex > 0; ) { BarIndex--; // [Bars-1 .. 0] processBar(); BarNumber++; } return(0); } void processBar() { double cciNow; double cciPrevious; bool trendUp; if( BarNumber == 0 ) // BarIndex == Bars-1 return; cciNow = iCCI( NULL, 0, 15, PRICE_TYPICAL, BarIndex ); cciPrevious = iCCI( NULL, 0, 15, PRICE_TYPICAL, BarIndex+1 ); if( (cciNow > CCI_Trigger_Level) && (cciPrevious <= CCI_Trigger_Level) ) // crossed up through the trigger level trendUp = true; else if( (cciNow < CCI_Trigger_Level) && (cciPrevious >= CCI_Trigger_Level) ) // crossed down through the trigger level trendUp = false; else // trend did not change trendUp = (TrendUp[BarIndex+1] != 0); if( trendUp ) { TrendUp[BarIndex] = 1; TrendDown[BarIndex] = 0; } else { TrendDown[BarIndex] = 1; TrendUp[BarIndex] = 0; } }
Советник
//+------------------------------------------------------------------+ //| подключаюсь.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double h15 = iCustom(NULL, 0, "CCI_Histogram15", 0, 0); double l15 = iCustom(NULL, 0, "CCI_Histogram15", 1, 0); double h45 = iCustom(NULL, 0, "CCI_Histogram45", 0, 0); double l45 = iCustom(NULL, 0, "CCI_Histogram45", 1, 0); if (h15 == 1 && h45 == 1) Print ("Buy"); else Print ("NOBuy"); } //+------------------------------------------------------------------+
Вы про внешние переменные (extern, input) вобще в курсе? Писать несколько одинаковых по коду индикаторов, отличающихся всего одним параметром?
А насчёт советника, так на нулевом баре может быть как угодно, индикаторы же этот бар перерисовывают.
Вы про внешние переменные (extern, input) вобще в курсе? Писать несколько одинаковых по коду индикаторов, отличающихся всего одним параметром?
А насчёт советника, так на нулевом баре может быть как угодно, индикаторы же этот бар перерисовывают.
Что именно исправить? Ввести внешнюю переменную в индикатор? Надо прописать строку
extern int per=15;
в начало индикатора и переписать вызовы ССI так:
cciNow = iCCI( NULL, 0, per, PRICE_TYPICAL, BarIndex ); cciPrevious = iCCI( NULL, 0, per, PRICE_TYPICAL, BarIndex+1 );
Ну и индикатор переименовать в просто "CCI_Histogram", отныне он будет один, как для периода 15, так и для 45. А в советнике вызывать уже так:
double h15 = iCustom(NULL, 0, "CCI_Histogram",15, 0, 0); double l15 = iCustom(NULL, 0, "CCI_Histogram",15, 1, 0); double h45 = iCustom(NULL, 0, "CCI_Histogram",45, 0, 0); double l45 = iCustom(NULL, 0, "CCI_Histogram",45, 1, 0);
Но советник продолжит мусорить в журнал на каждом тике записями "Buy", "NOBuy", в большинстве своём - ни о чём, так как тренд угадывать будет только в половине случаев или даже хуже.
Что именно исправить? Ввести внешнюю переменную в индикатор? Надо прописать строку
в начало индикатора и переписать вызовы ССI так:
Ну и индикатор переименовать в просто "CCI_Histogram", отныне он будет один, как для периода 15, так и для 45. А в советнике вызывать уже так:
Но советник продолжит мусорить в журнал на каждом тике записями "Buy", "NOBuy", в большинстве своём - ни о чём, так как тренд угадывать будет только в половине случаев или даже хуже.
Спасибо, я просто думал, что если этот индикатор при открытии свечи задал своему столбику цвет, то в процессе формирования этой свечи, столбик уже не может сменить цвет на обратный, но я так понял что ошибся ((
Это главное что вы усвоили ))), все входы что вы видите по истории, в реальности Вами просто не были бы определены, а индикатор Вам не помог бы, а только еще больше запутал.
Для общего самообразования то чем вы сейчас занимаетесь очень даже ничего, но в практической плоскости пустое занятие.
Должна быть идея (концепция), проверенная на исторических моделях с вероятностью исполнения не менее 70% или же понимание событий происходящих в данный момент. Просто воткнуть индикатор в эксперт и косить бабло не получиться.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Решил сделать советник на основе индикаторов CCI_HISTOGRAM (один анализирует за период 45 а второй за 15)
С помощью iCustom вызвал в советник результаты CCI_HISTOGRAM, с помощью функции if делаю следующее: если на индикаторе 45 и 15 столбики синие, объявляю покупку если столбики красные объявляю продажу. все это на Н1.
И в начале создания столкнулся с проблемой, достаточно часто советник упускает 1-2 столбика и только потом говорит что есть сигнал на покупку/продажу.
Ниже прикладываю файлы которые у меня для этого используются!
С чем это может быть связанно? )))
Или если у кого то есть другие идеи как это решить можно, то вот условия:
Инными словами: Н1 когда на CCI_HISTOGRAM с периодом 15 и 45 одновременно появляется синий столбик, открываю ордер на покупку, если оба стобика красные на продажу.