ищу любые канальные индикаторы, которых нет по умолчанию в MT5
Желательно бесплатные, с открытым кодом
Посмотрите этот, вроде интересный: https://www.mql5.com/ru/articles/1742
- 2015.06.29
- Aleksandr Teleguz
- www.mql5.com
Все привет, ищу любые канальные индикаторы, которых нет по умолчанию в MT5
Нужны для оптимизации ТС (какой их индикаторов покажет устойчивые результаты)
Желательно бесплатные, с открытым кодом
Написание/разработку под заказ не предлагать)
https://www.mql5.com/ru/market/product/17594
https://www.mql5.com/ru/market/product/21555
https://www.mql5.com/ru/market/product/21686
https://www.mql5.com/ru/market/product/21939
и тоже бесплатный мой индикатор Support and Resistance, который также можно использовать в виде канального индикатора:
https://www.mql5.com/ru/market/product/2284
Если подойдет, пользуйтесь. Удачи.
Все привет, ищу любые канальные индикаторы, которых нет по умолчанию в MT5
Еще HP https://www.mql5.com/ru/code/191
И мой перевод на МТ4 на всякий https://www.mql5.com/ru/code/14737
- голосов: 21
- 2010.09.22
- Victor
- www.mql5.com
Еще HP https://www.mql5.com/ru/code/191
И мой перевод на МТ4 на всякий https://www.mql5.com/ru/code/14737
HP смотрел, но он выводится только за последние N баров, что не дает возможости просмотреть его на длинном участке истории
Это специально так?
HP смотрел, но он выводится только за последние N баров, что не дает возможости просмотреть его на длинном участке истории
Это специально так?
Да хоть 100500, вот берите в аттче
//--- input parameters input int InpHPPeriodFast=21; // HP Fast Period (4...100500) input int InpHPPeriodSlow=144; // HP Slow Period (48...100500)
Вот эти строчки отвечают за границы и параметры, которые задаются при выходе на их пределы
int OnInit() { //--- check for input values if(InpHPPeriodFast<4 || InpHPPeriodFast>100500) { printf("Input parameter InpHPPeriodFast has incorrect value (%d). Indicator will use value 21 for calculations.",InpHPPeriodFast); HPPeriodFast=21; } else HPPeriodFast=InpHPPeriodFast; if(InpHPPeriodSlow<48 || InpHPPeriodSlow>100500) { printf("Input parameter InpHPPeriodSlow has incorrect value (%d). Indicator will use value 144 for calculations.",InpHPPeriodSlow); HPPeriodSlow=144; } else HPPeriodSlow=InpHPPeriodSlow;
Такой может подойдет... если приноровиться, то можно применять в торговле...
//+------------------------------------------------------------------+ //| AutoFibAutoTrend_Zigzag2_R.mq5 | //| Copyright © 2016, zzuegg | //| when-money-makes-money.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2016, zzuegg" #property link "when-money-makes-money.com" //---- номер версии индикатора #property version "1.00" //+------------------------------------------------+ //| Параметры отрисовки индикатора | //+------------------------------------------------+ //---- отрисовка индикатора в главном окне #property indicator_chart_window #property indicator_buffers 0 #property indicator_plots 0 //+------------------------------------------------+ //| Объявление констант | //+------------------------------------------------+ #define RESET 0 // Константа для возврата терминалу команды на пересчет индикатора //+------------------------------------------------+ //| Входные параметры индикатора | //+------------------------------------------------+ //---- Входные параметры Зигзага input ENUM_TIMEFRAMES Timeframe=PERIOD_H8; // Таймфрейм Зигзага для расчета индикатора input uint ExtDepth=12; input uint ExtDeviation=5; input uint ExtBackstep=3; //---- настройки визуального отображения индикатора input string Sirname="AutoFibAutoTrend_Zigzag2_R"; // Название для меток индикатора input bool ShowFib=true; input color FibColor=clrYellow; input uint FibSize=1; //---- input bool ShowFibFan=true; input color FibFanColor=clrAqua; input uint FibFanSize=1; //---- input bool ShowTrend=true; input color TrendColor=clrMediumSpringGreen; input uint TrendSize=5; //+-----------------------------------+ //---- объявление целочисленных переменных для хендлов индикаторов int Ind_Handle; //---- объявление целочисленных переменных начала отсчета данных int min_rates_total; string fib1=""; string trend=""; string fibf1=""; //+------------------------------------------------------------------+ //| Получение таймфрейма в виде строки | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) {return(StringSubstr(EnumToString(timeframe),7,-1));} //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //---- Инициализация переменных начала отсчета данных min_rates_total=100; //---- инициализация переменных fib1=Sirname+" fib1 "+GetStringTimeframe(Timeframe); trend=Sirname+" trend1 "+GetStringTimeframe(Timeframe); fibf1=Sirname+" fibf1 "+GetStringTimeframe(Timeframe); //---- получение хендла индикатора Zigzag2_R_Color Ind_Handle=iCustom(Symbol(),Timeframe,"Zigzag2_R_Color",ExtDepth,ExtDeviation,ExtBackstep); if(Ind_Handle==INVALID_HANDLE) { Print(" Не удалось получить хендл индикатора Zigzag2_R_Color"); return(INIT_FAILED); } //---- имя для окон данных и лэйба для субъокон string shortname; StringConcatenate(shortname,"AutoFibAutoTrend_Zigzag2_R(ExtDepth=",ExtDepth,"ExtDeviation = ",ExtDeviation,"ExtBackstep = ",ExtBackstep,")"); IndicatorSetString(INDICATOR_SHORTNAME,shortname); //--- определение точности отображения значений индикатора IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //--- завершение инициализации return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //---- ObjectDelete(0,fib1); ObjectDelete(0,trend); ObjectDelete(0,fibf1); //---- ChartRedraw(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // количество истории в барах на текущем тике const int prev_calculated,// количество истории в барах на предыдущем тике const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- проверка количества баров на достаточность для расчета if(BarsCalculated(Ind_Handle)<min_rates_total) return(RESET); if(BarsCalculated(Ind_Handle)<Bars(Symbol(),Timeframe)) return(prev_calculated); //---- объявление локальных переменных double UpSign[],DnSign[]; static datetime TIME[]; //---- копируем вновь появившиеся данные в массивы if(CopyBuffer(Ind_Handle,0,0,rates_total,DnSign)<=0) return(RESET); if(CopyBuffer(Ind_Handle,1,0,rates_total,UpSign)<=0) return(RESET); if(CopyTime(Symbol(),Timeframe,0,rates_total,TIME)<=0) return(RESET); //---- индексация элементов в массивах, как в таймсериях ArraySetAsSeries(DnSign,true); ArraySetAsSeries(UpSign,true); ArraySetAsSeries(TIME,true); static datetime curr=NULL; if(curr!=TIME[0]) { curr=TIME[0]; double swing_value[4]={0,0,0,0}; datetime swing_date[4]={0,0,0,0}; int found=NULL; double tmp=NULL; int bar=NULL; while(found<4 && bar<rates_total) { if(UpSign[bar]) { swing_value[found]=UpSign[bar]; swing_date[found]=TIME[bar]; found++; } if(DnSign[bar]) { swing_value[found]=DnSign[bar]; swing_date[found]=TIME[bar]; found++; } bar++; } if(ShowTrend) SetChannel(0,trend,0,swing_date[3],swing_value[3],swing_date[1],swing_value[1],swing_date[2],swing_value[2],TrendColor,0,TrendSize,true,trend); if(ShowFib) SetFibo(0,fib1,0,swing_date[2],swing_value[2],swing_date[1],swing_value[1],FibColor,0,FibSize,true,fib1); if(ShowFibFan) SetFiboFan(0,fibf1,0,swing_date[2],swing_value[2],swing_date[1],swing_value[1],FibFanColor,0,FibFanSize,true,fibf1); } //---- ChartRedraw(0); return(rates_total); } //+------------------------------------------------------------------+ //| Создание Фибо | //+------------------------------------------------------------------+ void CreateFibo ( long chart_id, // идентификатор графика string name, // имя объекта int nwin, // индекс окна datetime time1, // время 1 ценового уровня double price1, // 1 ценовой уровень datetime time2, // время 2 ценового уровня double price2, // 2 ценовой уровень color Color, // цвет линии int style, // стиль линии int width, // толщина линии int ray, // направление луча: -1 - влево, +1 - вправо, остальные значения - нет луча string text // текст ) //---- { //---- ObjectCreate(chart_id,name,OBJ_FIBO,nwin,time1,price1,time2,price2); ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color); ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width); if(ray>0)ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,true); if(ray<0)ObjectSetInteger(chart_id,name,OBJPROP_RAY_LEFT,true); if(ray==0) { ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,false); ObjectSetInteger(chart_id,name,OBJPROP_RAY_LEFT,false); } ObjectSetString(chart_id,name,OBJPROP_TEXT,text); ObjectSetInteger(chart_id,name,OBJPROP_BACK,true); for(int numb=0; numb<10; numb++) { ObjectSetInteger(chart_id,name,OBJPROP_LEVELCOLOR,numb,Color); ObjectSetInteger(chart_id,name,OBJPROP_LEVELSTYLE,numb,style); ObjectSetInteger(chart_id,name,OBJPROP_LEVELWIDTH,numb,width); } //---- } //+------------------------------------------------------------------+ //| Переустановка Фибо | //+------------------------------------------------------------------+ void SetFibo ( long chart_id, // идентификатор графика string name, // имя объекта int nwin, // индекс окна datetime time1, // время 1 ценового уровня double price1, // 1 ценовой уровень datetime time2, // время 2 ценового уровня double price2, // 2 ценовой уровень color Color, // цвет линии int style, // стиль линии int width, // толщина линии int ray, // направление луча: -1 - влево, 0 - нет луча, +1 - вправо string text // текст ) //---- { //---- if(ObjectFind(chart_id,name)==-1) CreateFibo(chart_id,name,nwin,time1,price1,time2,price2,Color,style,width,ray,text); else { ObjectSetString(chart_id,name,OBJPROP_TEXT,text); ObjectMove(chart_id,name,0,time1,price1); ObjectMove(chart_id,name,1,time2,price2); } //---- } //+------------------------------------------------------------------+ //| Создание Фибо | //+------------------------------------------------------------------+ void CreateFiboFan ( long chart_id, // идентификатор графика string name, // имя объекта int nwin, // индекс окна datetime time1, // время 1 ценового уровня double price1, // 1 ценовой уровень datetime time2, // время 2 ценового уровня double price2, // 2 ценовой уровень color Color, // цвет линии int style, // стиль линии int width, // толщина линии int ray, // направление луча: -1 - влево, +1 - вправо, остальные значения - нет луча string text // текст ) //---- { //---- ObjectCreate(chart_id,name,OBJ_FIBOFAN,nwin,time1,price1,time2,price2); ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color); ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width); if(ray>0)ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,true); if(ray<0)ObjectSetInteger(chart_id,name,OBJPROP_RAY_LEFT,true); if(ray==0) { ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,false); ObjectSetInteger(chart_id,name,OBJPROP_RAY_LEFT,false); } ObjectSetString(chart_id,name,OBJPROP_TEXT,text); ObjectSetInteger(chart_id,name,OBJPROP_BACK,true); for(int numb=0; numb<10; numb++) { ObjectSetInteger(chart_id,name,OBJPROP_LEVELCOLOR,numb,Color); ObjectSetInteger(chart_id,name,OBJPROP_LEVELSTYLE,numb,style); ObjectSetInteger(chart_id,name,OBJPROP_LEVELWIDTH,numb,width); } //---- } //+------------------------------------------------------------------+ //| Переустановка Фибо | //+------------------------------------------------------------------+ void SetFiboFan ( long chart_id, // идентификатор графика string name, // имя объекта int nwin, // индекс окна datetime time1, // время 1 ценового уровня double price1, // 1 ценовой уровень datetime time2, // время 2 ценового уровня double price2, // 2 ценовой уровень color Color, // цвет линии int style, // стиль линии int width, // толщина линии int ray, // направление луча: -1 - влево, 0 - нет луча, +1 - вправо string text // текст ) //---- { //---- if(ObjectFind(chart_id,name)==-1) CreateFiboFan(chart_id,name,nwin,time1,price1,time2,price2,Color,style,width,ray,text); else { ObjectSetString(chart_id,name,OBJPROP_TEXT,text); ObjectMove(chart_id,name,0,time1,price1); ObjectMove(chart_id,name,1,time2,price2); } //---- } //+------------------------------------------------------------------+ //| Создание канала | //+------------------------------------------------------------------+ void CreateChannel ( long chart_id, // идентификатор графика string name, // имя объекта int nwin, // индекс окна datetime time1, // время 1 ценового уровня double price1, // 1 ценовой уровень datetime time2, // время 2 ценового уровня double price2, // 2 ценовой уровень datetime time3, // время 3 ценового уровня double price3, // 3 ценовой уровень color Color, // цвет линии int style, // стиль линии int width, // толщина линии int ray, // направление луча: -1 - влево, +1 - вправо, остальные значения - нет луча string text // текст ) //---- { //---- ObjectCreate(chart_id,name,OBJ_CHANNEL,nwin,time1,price1,time2,price2,time3,price3); ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color); ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width); if(ray>0)ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,true); if(ray<0)ObjectSetInteger(chart_id,name,OBJPROP_RAY_LEFT,true); if(ray==0) { ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,false); ObjectSetInteger(chart_id,name,OBJPROP_RAY_LEFT,false); } ObjectSetString(chart_id,name,OBJPROP_TEXT,text); ObjectSetInteger(chart_id,name,OBJPROP_BACK,true); for(int numb=0; numb<10; numb++) { ObjectSetInteger(chart_id,name,OBJPROP_LEVELCOLOR,numb,Color); ObjectSetInteger(chart_id,name,OBJPROP_LEVELSTYLE,numb,style); ObjectSetInteger(chart_id,name,OBJPROP_LEVELWIDTH,numb,width); } //---- } //+------------------------------------------------------------------+ //| Переустановка канала | //+------------------------------------------------------------------+ void SetChannel ( long chart_id, // идентификатор графика string name, // имя объекта int nwin, // индекс окна datetime time1, // время 1 ценового уровня double price1, // 1 ценовой уровень datetime time2, // время 2 ценового уровня double price2, // 2 ценовой уровень datetime time3, // время 3 ценового уровня double price3, // 3 ценовой уровень color Color, // цвет линии int style, // стиль линии int width, // толщина линии int ray, // направление луча: -1 - влево, 0 - нет луча, +1 - вправо string text // текст ) //---- { //---- if(ObjectFind(chart_id,name)==-1) CreateChannel(chart_id,name,nwin,time1,price1,time2,price2,time3,price3,Color,style,width,ray,text); else { ObjectSetString(chart_id,name,OBJPROP_TEXT,text); ObjectMove(chart_id,name,0,time1,price1); ObjectMove(chart_id,name,1,time2,price2); ObjectMove(chart_id,name,2,time3,price3); } //---- } //+------------------------------------------------------------------+
Такой может подойдет... если приноровиться, то можно применять в торговле...
Хорошо бы вместо трех километров кода картинку и аттач. Замучаешься копировать, создавать индюк...зачем так усложнять всем жизнь? Тем более, не все умеют это делать.
Хорошо бы вместо трех километров кода картинку и аттач. Замучаешься копировать, создавать индюк...зачем так усложнять всем жизнь? Тем более, не все умеют это делать.
Что-то я не подумал о километрах...мне как-то так проще - там стр+C тут стрл+V...Да и картинку знаю как - аттатач не знаю...откуда куда и как...))
Что-то я не подумал о километрах...мне как-то так проще - там стр+C тут стрл+V...Да и картинку знаю как - аттатач не знаю...откуда куда и как...))
При наборе текста, в редакторе нового сообщения внизу-слева есть +Прикрепить файл
Спасибо, как-то мимо зрения, даже интересно вроде видел... и не видел, своего рода закостенелость мышления или зрения, а... надо наверно вправо перенести...)) проба №1
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Все привет, ищу любые канальные индикаторы, которых нет по умолчанию в MT5
Нужны для оптимизации ТС (какой их индикаторов покажет устойчивые результаты)
Желательно бесплатные, с открытым кодом
Написание/разработку под заказ не предлагать)