← К каталогу
Исходный код · ID 3365

#Хейкен Аши[mod].mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Данный индикатор отображает на графике свечи Хейкен Аши с возможностью сглаживания ценовых данных различными методами скользящих средних. Свечи окрашиваются в зелёный или красный цвет в зависимости от направления, а также могут отображаться тени (включаемая настройка).

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

Настройки позволяют гибко управлять периодами и методами сглаживания, шириной тел и теней свечей (в том числе автоматической подстройкой под масштаб графика), цветовой схемой и параметрами интерактивной кнопки.

Настройки программы

НастройкаОписание
TimeFrame Таймфрейм, на котором рассчитывается индикатор. Доступны варианты от текущего таймфрейма до третьего старшего.
note1 Текстовый разделитель для блока настроек Хейкен Аши (не влияет на расчёт).
MaPeriod Период сглаживания для расчёта скользящей средней цены.
MaMetod Метод сглаживания для расчёта скользящей средней цены.
MaPeriod2 Период сглаживания для расчёта свечей Хейкен Аши.
MaMetod2 Метод сглаживания для расчёта свечей Хейкен Аши.
note2 Текстовый разделитель для блока настроек отображения (не влияет на расчёт).
showHA Переключатель отображения теней (фитилей) свечей Хейкен Аши.
Clean_chart Переключатель очистки графика от стандартных свечей при отображении индикатора.
WickWidth Ширина теней (фитилей) свечей Хейкен Аши.
BodyWidth Ширина тела свечи при отключённой автоматической ширине (в пикселях).
UseAutoWidth Автоматическая подстройка ширины тела свечи в зависимости от масштаба графика.
candleUP Цвет бычьих свечей Хейкен Аши.
candleDN Цвет медвежьих свечей Хейкен Аши.
Interpolate Переключение интерполяции данных при работе в мультитаймфреймовом режиме.
ButtonName Текст, отображаемый на кнопке управления видимостью индикатора.
ButtonWidth Ширина кнопки управления видимостью индикатора в пикселях.
ButtonHeight Высота кнопки управления видимостью индикатора в пикселях.
ButtonFont Шрифт текста на кнопке управления видимостью индикатора.
FontSize Размер шрифта текста на кнопке управления видимостью индикатора.
ButtonBgColor Цвет фона кнопки управления видимостью индикатора.
ButtonTextColor Цвет текста на кнопке управления видимостью индикатора.
ButtonBorderColor Цвет рамки кнопки управления видимостью индикатора.
ButtonX Горизонтальная позиция кнопки управления видимостью индикатора от правого верхнего угла графика.
ButtonY Вертикальная позиция кнопки управления видимостью индикатора от правого верхнего угла графика.
Получить полный код

Поиск по коду файла

#property indicator_chart_window    
#property indicator_buffers 6
#property strict

enum enTimeFrames
{
   tf_cu  = PERIOD_CURRENT, // Текущий таймфрейм
   tf_m1  = PERIOD_M1,      // 1 минута
   tf_m5  = PERIOD_M5,      // 5 минут
   tf_m15 = PERIOD_M15,     // 15 минут
   tf_m30 = PERIOD_M30,     // 30 минут
   tf_h1  = PERIOD_H1,      // 1 час
   tf_h4  = PERIOD_H4,      // 4 часа
   tf_d1  = PERIOD_D1,      // Дневной
   tf_w1  = PERIOD_W1,      // Недельный
   tf_mn1 = PERIOD_MN1,     // Месячный
   tf_n1  = -1,             // Первый старший таймфрейм
   tf_n2  = -2,             // Второй старший таймфрейм
   tf_n3  = -3              // Третий старший таймфрейм
};

enum enMaTypes
{
   ma_sma,            // Простое скользящее среднее
   ma_ema,            // Экспоненциальное скользящее среднее
   ma_smma,           // Сглаженное скользящее среднее
   ma_lwma,           // Линейно-взвешенное скользящее среднее
   ma_linr            // Метод наименьших квадратов
};

extern enTimeFrames   TimeFrame    = tf_cu;    // Таймфрейм
extern string         note1        = ".........Настройки Хейкен Аши.........";
extern int            MaPeriod     = 5;        // Период сглаживания цены
extern enMaTypes      MaMetod      = ma_smma;  // Метод сглаживания цены
extern int            MaPeriod2    = 2;        // Период сглаживания HA
extern enMaTypes      MaMetod2     = ma_smma;  // Метод сглаживания HA
extern string         note2        = ".........Настройки отображения.........";
extern bool           showHA       = false;    // Показывать тени Хейкен Аши?
input  bool           Clean_chart  = true;     // Очищать график?
input  int            WickWidth    = 1;        // Ширина теней свечи
input  int            BodyWidth    = 2;        // Ширина тела свечи (если автоширина выключена)
input  bool           UseAutoWidth = true;     // Автоматическая ширина тела свечи
extern color          candleUP     = clrLime;  // Цвет бычьей свечи
extern color          candleDN     = clrRed;   // Цвет медвежьей свечи
input  bool           Interpolate  = true;     // Интерполяция в мультитаймфрейм режиме вкл/выкл?

input string          ButtonName   = "HA Вкл/Выкл"; // Текст на кнопке
input int             ButtonWidth  = 95;            // Ширина кнопки в пикселях
input int             ButtonHeight = 20;            // Высота кнопки в пикселях
input string          ButtonFont   = "Arial";       // Шрифт текста
input int             FontSize     = 10;            // Размер шрифта
input color           ButtonBgColor= clrDarkRed;    // Цвет фона кнопки
input color           ButtonTextColor= clrWhite;    // Цвет текста
input color           ButtonBorderColor= clrBlack;  // Цвет рамки
input int             ButtonX      = 800;           // Позиция по X
input int             ButtonY      = 10;            // Позиция по Y

double ExtMapBuffer1[],ExtMapBuffer2[],ExtMapBuffer3[],ExtMapBuffer4[],ExtMapBuffer5[],ExtMapBuffer6[],ExtMapBuffer7[],ExtMapBuffer8[],trendha[],count[];
double bckg1[],bckg2[];
int candlewidth=0;
string indicatorFileName;
#define _mtfCall(_buff,_ind) iCustom(NULL,TimeFrame,indicatorFileName,PERIOD_CURRENT,note1,MaPeriod,MaMetod,MaPeriod2,MaMetod2,note2,showHA,Clean_chart,WickWidth,BodyWidth,UseAutoWidth,candleUP,candleDN,_buff,_ind)

string ButtonID;                                // Идентификатор кнопки
bool IndicatorVisible = true;                   // Флаг видимости индикатора
string IndicatorName;                           // Имя индикатора
string IndicatorObjPrefix;                      // Префикс объектов

string GenerateIndicatorName(const string target) {
    string name = target;
    int try = 2;
    while (WindowFind(name) != -1) {
        name = target + " #" + IntegerToString(try++);
    }
    return name;
}

void CreateButton() {
    ButtonID = IndicatorObjPrefix + "ToggleButton";

    ObjectDelete(0, ButtonID);                      // Удаляем кнопку, если она уже существует
    ObjectCreate(0, ButtonID, OBJ_BUTTON, 0, 0, 0); // Создаем кнопку

    ObjectSetInteger(0, ButtonID, OBJPROP_COLOR, ButtonTextColor);
    ObjectSetInteger(0, ButtonID, OBJPROP_BGCOLOR, ButtonBgColor);
    ObjectSetInteger(0, ButtonID, OBJPROP_BORDER_COLOR, ButtonBorderColor);
    ObjectSetInteger(0, ButtonID, OBJPROP_BORDER_TYPE, BORDER_RAISED);
    ObjectSetInteger(0, ButtonID, OBJPROP_XDISTANCE, ButtonX);
    ObjectSetInteger(0, ButtonID, OBJPROP_YDISTANCE, ButtonY);
    ObjectSetInteger(0, ButtonID, OBJPROP_XSIZE, ButtonWidth);
    ObjectSetInteger(0, ButtonID, OBJPROP_YSIZE, ButtonHeight);
    ObjectSetString(0, ButtonID, OBJPROP_FONT, ButtonFont);
    ObjectSetString(0, ButtonID, OBJPROP_TEXT, ButtonName);
    ObjectSetInteger(0, ButtonID, OBJPROP_FONTSIZE, FontSize);
    ObjectSetInteger(0, ButtonID, OBJPROP_SELECTABLE, false);
    ObjectSetInteger(0, ButtonID, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
    ObjectSetInteger(0, ButtonID, OBJPROP_HIDDEN, true);
    ObjectSetInteger(0, ButtonID, OBJPROP_STATE, false);
}

void HandleButtonClick() {
    if (ObjectGetInteger(0, ButtonID, OBJPROP_STATE)) {
        ObjectSetInteger(0, ButtonID, OBJPROP_STATE, false);
        IndicatorVisible = !IndicatorVisible;

        GlobalVariableSet(IndicatorObjPrefix+"Visibility", IndicatorVisible ? 1 : 0);

        UpdateIndicatorVisibility();
        ChartRedraw();
    }
}

void UpdateIndicatorVisibility() {
    SetIndexStyle(0, IndicatorVisible ? DRAW_HISTOGRAM : DRAW_NONE, NULL, candlewidth, candleDN);
    SetIndexStyle(1, IndicatorVisible ? DRAW_HISTOGRAM : DRAW_NONE, NULL, candlewidth, candleUP);
    SetIndexStyle(2, IndicatorVisible ? DRAW_HISTOGRAM : DRAW_NONE, NULL, candlewidth, (color)ChartGetInteger(0,CHART_COLOR_BACKGROUND));
    SetIndexStyle(3, IndicatorVisible && showHA ? DRAW_HISTOGRAM : DRAW_NONE, NULL, WickWidth, candleDN);
    SetIndexStyle(4, IndicatorVisible && showHA ? DRAW_HISTOGRAM : DRAW_NONE, NULL, WickWidth, candleUP);
    SetIndexStyle(5, IndicatorVisible ? DRAW_HISTOGRAM : DRAW_NONE, NULL, candlewidth, (color)ChartGetInteger(0,CHART_COLOR_BACKGROUND));
}

int OnInit()
{
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
{
    ObjectsDeleteAll(ChartID(), IndicatorObjPrefix); // Удаляем все объекты индикатора
    GlobalVariableDel(IndicatorObjPrefix+"Visibility"); // Удаляем глобальную переменную
}

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    if (id == CHARTEVENT_OBJECT_CLICK && sparam == ButtonID)
    {
        HandleBut

Показано первые 50% кода (символов: 11825)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 182,50₽ ≈ $14.45