Отличный учебник, Самуэль! Parabéns e obrigado!!!
Excellent one.... моя мысль свеча палка также прямой, который может сделать кто-то понимает немного о торговом термине, я считаю, что красный один является продать в то время как зеленый один является купить, но они samething когда зеленый идет вверх купить в то время как красный вниз продать, но в конце точки там линии, зеленый должен принять обратный и красный должен двигаться дальше, а желтый является сок там цена. Так в размещении этого в mql5, каждый будет знать мой язык запроса (мой ql).
Здравствуйте, Самуэль,
Хорошая идея, но я не могу выполнить эту работу. Можете ли вы представить этот пример в этой статье?
С наилучшими пожеланиями,
как сделать тиковые свечи любого размера для торговли фьючерсами
scalp-91 #:
как сделать тиковые свечи любого количества для торговли фьючерсами
как сделать тиковые свечи любого количества для торговли фьючерсами
Creación de indicadores de tick en MQL5
- www.mql5.com
En este artículo vamos a ver la creación de dos indicadores: el indicador de tick, que representa el gráfico de tick del precio, y el indicador de vela de tick, que representa las velas con el número de ticks especificados. Cada uno de los indicadores escribe los precios de llegada en un archivo y utiliza los datos guardados tras el reinicio del indicador (estos datos pueden ser usados también por los demás programas).
Огромное спасибо за дидактику.
cf23EA1l #:
Привет, Сэмюэль,
Хорошая идея, но я не могу выполнить эту работу. Можете ли вы представить этот пример в этой статье?
С наилучшими пожеланиями,
//+------------------------------------------------------------------+ //|Цветные свечи.mq5 | //|Copyright 2020, Samuel Manoel de Souza | //| https://www.mql5.com/pt/users/samuelmnl | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Samuel Manoel de Souza" #property link "https://www.mql5.com/pt/users/samuelmnl" #property version "1.00" #property indicator_chart_window #property indicator_buffers 12 #property indicator_plots 3 //--- сюжетный бык #property indicator_label1 "bull" #property indicator_type1 DRAW_CANDLES #property indicator_color1 clrGreen,clrBlack,clrGreen #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- сюжетный медведь #property indicator_label2 "bear" #property indicator_type2 DRAW_CANDLES #property indicator_color2 clrRed,clrBlack,clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- диапазон сюжета #property indicator_label3 "wait" #property indicator_type3 DRAW_CANDLES #property indicator_color3 clrGold,clrBlack,clrGold #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- индикаторные буферы double bullBuffer1[]; double bullBuffer2[]; double bullBuffer3[]; double bullBuffer4[]; double bearBuffer1[]; double bearBuffer2[]; double bearBuffer3[]; double bearBuffer4[]; double rangeBuffer1[]; double rangeBuffer2[]; double rangeBuffer3[]; double rangeBuffer4[]; input int inpShift = 0; //Индикатор Shift input int inpBlue = 10;//Blue Shift input int inpRed = 20; //Красная смена //+------------------------------------------------------------------+ //| Пользовательская функция инициализации индикатора | //+------------------------------------------------------------------+ int OnInit() { if(inpBlue <= 0) { Alert("Blue Shift must be greater then 0!"); return INIT_PARAMETERS_INCORRECT; } if(inpRed <= inpBlue) { Alert("Red Shift must be greater then Blue Shift!"); return INIT_PARAMETERS_INCORRECT; } //--- отображение индикаторных буферов SetIndexBuffer(0, bullBuffer1, INDICATOR_DATA); SetIndexBuffer(1, bullBuffer2, INDICATOR_DATA); SetIndexBuffer(2, bullBuffer3, INDICATOR_DATA); SetIndexBuffer(3, bullBuffer4, INDICATOR_DATA); SetIndexBuffer(4, bearBuffer1, INDICATOR_DATA); SetIndexBuffer(5, bearBuffer2, INDICATOR_DATA); SetIndexBuffer(6, bearBuffer3, INDICATOR_DATA); SetIndexBuffer(7, bearBuffer4, INDICATOR_DATA); SetIndexBuffer(8, rangeBuffer1, INDICATOR_DATA); SetIndexBuffer(9, rangeBuffer2, INDICATOR_DATA); SetIndexBuffer(10, rangeBuffer3, INDICATOR_DATA); SetIndexBuffer(11, rangeBuffer4, INDICATOR_DATA); //---Установка значения, которое делает бары невидимыми PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0); PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0); PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, 0); //---Установка значений сдвига для каждого бара PlotIndexSetInteger(0, PLOT_SHIFT, inpShift); PlotIndexSetInteger(1, PLOT_SHIFT, inpShift); PlotIndexSetInteger(2, PLOT_SHIFT, inpShift); //--Установка места, откуда должны быть нарисованы столбики PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, inpRed - 1); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, inpRed - 1); PlotIndexSetInteger(2, PLOT_DRAW_BEGIN, inpRed - 1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Пользовательская функция итерации индикатора| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- //--Если нет достаточного количества баров, не вычисляйте. if(rates_total < inpRed) { return rates_total; } //---Определение того, откуда мы должны начать вычисления int limit; if(prev_calculated < inpRed) limit = inpRed; else limit = prev_calculated - 1; //--Основной цикл вычислений for(int i = limit; i < rates_total; i++) { int shift = BarIndex2shift(i); double open = iOpen(_Symbol, _Period, shift); double high = iHigh(_Symbol, _Period, shift); double low = iLow(_Symbol, _Period, shift); double close = iClose(_Symbol, _Period, shift); double red = price[i - (inpRed)]; //Получение значения красной строки double blue = price[i - inpBlue]; //Получение значения синей линии double yellow = price[i]; //Получение значения желтой линии //Для этого фильтра существует три флага //0 = продать, 1 = подождать, 1 = купить // мы можем покупать, если 2 линии находятся выше красной // мы можем продавать, если 2 линии находятся ниже красной int direction = 0; direction += (yellow > red) ? 1 : 0; // Если желтый цвет выше красного, прибавьте 1 red = blue; blue = yellow; direction += (blue > red) ? 1 : 0; // Если синий цвет больше красного, добавьте 1 . //По умолчанию бары не видны bullBuffer1[i] = 0; bullBuffer2[i] = 0; bullBuffer3[i] = 0; bullBuffer4[i] = 0; bearBuffer1[i] = 0; bearBuffer2[i] = 0; bearBuffer3[i] = 0; bearBuffer4[i] = 0; rangeBuffer1[i] = 0; rangeBuffer2[i] = 0; rangeBuffer3[i] = 0; rangeBuffer4[i] = 0; //Мы будем присваивать значение каждому бару в соответствии с флагом направления switch(direction) { case 0: // Медвежий рынок { bearBuffer1[i] = open; bearBuffer2[i] = high; bearBuffer3[i] = low; bearBuffer4[i] = close; break; } case 1: // Бычий рынок { rangeBuffer1[i] = open; rangeBuffer2[i] = high; rangeBuffer3[i] = low; rangeBuffer4[i] = close; break; } case 2: // Является рынком диапазонов { bullBuffer1[i] = open; bullBuffer2[i] = high; bullBuffer3[i] = low; bullBuffer4[i] = close; break; } } } //--- возвращаем значение prev_calculated для следующего вызова return(rates_total); } int BarIndex2shift(int bar) {return Bars(_Symbol, _Period) - bar - 1;} //+------------------------------------------------------------------+
//+------------------------------------------------------------------+ //|Цветные свечи.mq5 | //| Copyright 2020, Samuel Manoel de Souza | //| https://www.mql5.com/ru/users/samuelmnl | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Samuel Manoel de Souza" #property link "https://www.mql5.com/ru/users/samuelmnl" #property version "1.00" #property indicator_chart_window #property indicator_buffers 12 #property indicator_plots 3 //--- сюжетный бык #property indicator_label1 "bull" #property indicator_type1 DRAW_CANDLES #property indicator_color1 clrGreen,clrBlack,clrGreen #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- сюжетный медведь #property indicator_label2 "bear" #property indicator_type2 DRAW_CANDLES #property indicator_color2 clrRed,clrBlack,clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- диапазон сюжета #property indicator_label3 "wait" #property indicator_type3 DRAW_CANDLES #property indicator_color3 clrGold,clrBlack,clrGold #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- индикаторные буферы double bullBuffer1[]; double bullBuffer2[]; double bullBuffer3[]; double bullBuffer4[]; double bearBuffer1[]; double bearBuffer2[]; double bearBuffer3[]; double bearBuffer4[]; double rangeBuffer1[]; double rangeBuffer2[]; double rangeBuffer3[]; double rangeBuffer4[]; input int inpShift = 0; //Индикатор Shift input int inpBlue = 10;//Blue Shift input int inpRed = 20; //Красная смена //+------------------------------------------------------------------+ //| Пользовательская функция инициализации индикатора | //+------------------------------------------------------------------+ int OnInit() { if(inpBlue <= 0) { Alert("Blue Shift must be greater then 0!"); return INIT_PARAMETERS_INCORRECT; } if(inpRed <= inpBlue) { Alert("Red Shift must be greater then Blue Shift!"); return INIT_PARAMETERS_INCORRECT; } //--- отображение индикаторных буферов SetIndexBuffer(0, bullBuffer1, INDICATOR_DATA); SetIndexBuffer(1, bullBuffer2, INDICATOR_DATA); SetIndexBuffer(2, bullBuffer3, INDICATOR_DATA); SetIndexBuffer(3, bullBuffer4, INDICATOR_DATA); SetIndexBuffer(4, bearBuffer1, INDICATOR_DATA); SetIndexBuffer(5, bearBuffer2, INDICATOR_DATA); SetIndexBuffer(6, bearBuffer3, INDICATOR_DATA); SetIndexBuffer(7, bearBuffer4, INDICATOR_DATA); SetIndexBuffer(8, rangeBuffer1, INDICATOR_DATA); SetIndexBuffer(9, rangeBuffer2, INDICATOR_DATA); SetIndexBuffer(10, rangeBuffer3, INDICATOR_DATA); SetIndexBuffer(11, rangeBuffer4, INDICATOR_DATA); //---Установка значения, которое делает бары невидимыми PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0); PlotIndexSetDouble(1, PLOT_EMPTY_VALUE, 0); PlotIndexSetDouble(2, PLOT_EMPTY_VALUE, 0); //---Установка значений сдвига для каждого бара PlotIndexSetInteger(0, PLOT_SHIFT, inpShift); PlotIndexSetInteger(1, PLOT_SHIFT, inpShift); PlotIndexSetInteger(2, PLOT_SHIFT, inpShift); //--Установка места, откуда должны быть нарисованы столбики PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, inpRed - 1); PlotIndexSetInteger(1, PLOT_DRAW_BEGIN, inpRed - 1); PlotIndexSetInteger(2, PLOT_DRAW_BEGIN, inpRed - 1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Пользовательская функция итерации индикатора | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- //--Если нет достаточного количества баров, не вычисляйте. if(rates_total < inpRed) { return rates_total; } //---Определение того, откуда мы должны начать вычисления int limit; if(prev_calculated < inpRed) limit = inpRed; else limit = prev_calculated - 1; //--Основной цикл вычислений for(int i = limit; i < rates_total; i++) { int shift = BarIndex2shift(i); double open = iOpen(_Symbol, _Period, shift); double high = iHigh(_Symbol, _Period, shift); double low = iLow(_Symbol, _Period, shift); double close = iClose(_Symbol, _Period, shift); double red = price[i - (inpRed)]; //Получение значения красной строки double blue = price[i - inpBlue]; //Получение значения синей линии double yellow = price[i]; //Получение значения желтой линии //Для этого фильтра существует три флага //0 = продать, 1 = подождать, 1 = купить // мы можем покупать, если 2 линии находятся выше красной // мы можем продавать, если 2 линии находятся ниже красной int direction = 0; direction += (yellow > red) ? 1 : 0; // Если желтый цвет выше красного, прибавьте 1 red = blue; blue = yellow; direction += (blue > red) ? 1 : 0; // Если синий цвет больше красного, добавьте 1 . //По умолчанию бары не видны bullBuffer1[i] = 0; bullBuffer2[i] = 0; bullBuffer3[i] = 0; bullBuffer4[i] = 0; bearBuffer1[i] = 0; bearBuffer2[i] = 0; bearBuffer3[i] = 0; bearBuffer4[i] = 0; rangeBuffer1[i] = 0; rangeBuffer2[i] = 0; rangeBuffer3[i] = 0; rangeBuffer4[i] = 0; //Мы будем присваивать значение каждому бару в соответствии с флагом направления switch(direction) { case 0: // Медвежий рынок { bearBuffer1[i] = open; bearBuffer2[i] = high; bearBuffer3[i] = low; bearBuffer4[i] = close; break; } case 1: // Бычий рынок { rangeBuffer1[i] = open; rangeBuffer2[i] = high; rangeBuffer3[i] = low; rangeBuffer4[i] = close; break; } case 2: // Является рынком диапазонов { bullBuffer1[i] = open; bullBuffer2[i] = high; bullBuffer3[i] = low; bullBuffer4[i] = close; break; } } } //--- возвращаем значение prev_calculated для следующего вызова return(rates_total); } int BarIndex2shift(int bar) {return Bars(_Symbol, _Period) - bar - 1;} //+------------------------------------------------------------------+
Спасибо за эту статью. Я смог следовать за ней и применить ее на своих графиках. Мой вопрос заключается в том, сделали ли вы какие-либо статьи, которые объясняют, как вызвать этот индикатор в советнике, чтобы использовать его для автоматической торговли, а также тестер стратегий с визуализацией?
PanteraNoire тестер стратегий с визуализацией?
Нет.
Вам нужно использовать iCustom. И вы можете увидеть номера буферов в индикаторе, чтобы узнать о цветах и значениях.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Опубликована статья "Изучаем возможности создания разноцветных свечных графиков":
В этой статье мы рассмотрим возможности создания кастомных свечных индикаторов, а также поговорим об их преимуществах и недостатках.
В рамках статьи рассмотрим четыре варианта таких индикаторов:
Итак, мы подошли к цели этой статьи — демонстрации того, как создавать правила раскраски на основе определенных выбранных торговых правил для создания пользовательского свечного графика. Окончательный результат работы показан на рисунке ниже:
Автор: Samuel Manoel De Souza