ichimokusuppres_ad.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ichimokusuppres_ad.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор рассчитывает уровни поддержки и сопротивления на основе концепции Ichimoku cloud. Он определяет фракталы на ценовых графиках с помощью настраиваемого параметра ранга, а затем проецирует эти фрактальные уровни вперёд, используя значения Senkou Span A и B индикатора Ichimoku, формируя линии тренда поддержки и сопротивления. Индикатор работает в окне графика MetaTrader 4 и использует два буфера для отрисовки верхних и нижних фракталов.
Визуальное оформление полностью настраивается через параметры: цвета, стили и толщина линий поддержки и сопротивления. Отображение фрактальных маркеров включается и отключается отдельным параметром. Индикатор поддерживает конвертацию котировок для 5-значных брокеров и позволяет ограничить количество отображаемых баров.
При инициализации индикатор проверяет корректность входных параметров: ранг фрактала должен быть нечётным числом не менее 3, а значение точки не должно быть нулевым. При ошибках выводятся сообщения на языке терминала (русский или английский).
Настройки программы
| Настройка | Описание |
|---|---|
| Tenkan-sen period / ?????? ??????? Tenkan-sen (i_tenkanSenPeriod) | Период Tenkan-sen — Период Tenkan-sen индикатора Ichimoku, используемый для расчёта значений Senkou Span A и B. |
| Kijun-sen period / ?????? ??????? Kijun-sen (i_kijunSenPeriod) | Период Kijun-sen — Период Kijun-sen индикатора Ichimoku, используемый для расчёта горизонта проекции линий поддержки и сопротивления. |
| Senkou Span B period / ?????? ??????? Senkou Span B (i_senkouSpanPeriod) | Период Senkou Span B — Период Senkou Span B индикатора Ichimoku, используемый для определения границ облака при построении уровней. |
| Fractal rank / ???? ???????? (i_fractalRank) | Ранг фрактала — Определяет ранг фрактала — нечётное число, задающее количество баров по обе стороны от центра для поиска экстремумов. Должно быть не менее 3. |
| Color of support lines / ???? ????? ????????? (i_supportColor) | Цвет линий поддержки — Цвет линий поддержки, отрисовываемых на графике. |
| Style of support lines / ??? ????? ????????? (i_supportStyle) | Стиль линий поддержки — Стиль линий поддержки (сплошная, пунктирная и т.д.). |
| Thickness of support lines / ??????? ????? ????????? (i_supportWidth) | Толщина линий поддержки — Толщина линий поддержки в пикселях. |
| Color of resistance lines / ???? ????? ????????????? (i_resistanceColor) | Цвет линий сопротивления — Цвет линий сопротивления, отрисовываемых на графике. |
| Style of resistance lines / ??? ????? ????????????? (i_resistanceStyle) | Стиль линий сопротивления — Стиль линий сопротивления (сплошная, пунктирная и т.д.). |
| Thickness of resistance lines / ??????? ????? ????????????? (i_resistanceWidth) | Толщина линий сопротивления — Толщина линий сопротивления в пикселях. |
| Do fractals show? / ?????????? ????????? (i_isShowFractals) | Отображение фракталов — Переключатель отображения фрактальных маркеров на графике. При включении фракталы отрисовываются стрелками, при отключении — буферы не отображаются визуально. |
| The 5-digits are using? / ???????????? 5-???????? ?????????? (i_is5Digits) | Использование 5-значных котировок — Переключатель использования 5-значных котировок. При включении значение точки делится на 10 для корректной работы с брокерами, предоставляющими 5-значную цену. |
| Number of bars to display / ???-?? ????? ??????????? (i_indBarsCount) | Количество баров для отображения — Задаёт максимальное количество баров, отображаемых на графике. При значении 0 или более ограничение не применяется. |
Поиск по коду файла
#property description "English: Support and resistance levels based on Ichimoku cloud.\nRussian: ?????? ????????? ? ????????????? ?? ?????? ?????? Ichimoku."
#property version "2.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrRed
#property indicator_color2 clrBlue
#property indicator_width1 1
#property indicator_width2 1
#define PREFIX "ICSURE_"
enum ENUM_YESNO
{
NO, // No / ???
YES // Yes / ??
};
input uint i_tenkanSenPeriod = 9; // Tenkan-sen period / ?????? ??????? Tenkan-sen
input uint i_kijunSenPeriod = 26; // Kijun-sen period / ?????? ??????? Kijun-sen
input uint i_senkouSpanPeriod = 52; // Senkou Span B period / ?????? ??????? Senkou Span B
input uint i_fractalRank = 13; // Fractal rank / ???? ????????
input color i_supportColor = clrBlue; // Color of support lines / ???? ????? ?????????
input ENUM_LINE_STYLE i_supportStyle = STYLE_SOLID; // Style of support lines / ??? ????? ?????????
input uint i_supportWidth = 2; // Thickness of support lines / ??????? ????? ?????????
input color i_resistanceColor = clrRed; // Color of resistance lines / ???? ????? ?????????????
input ENUM_LINE_STYLE i_resistanceStyle = STYLE_SOLID; // Style of resistance lines / ??? ????? ?????????????
input uint i_resistanceWidth = 2; // Thickness of resistance lines / ??????? ????? ?????????????
input ENUM_YESNO i_isShowFractals = YES; // Do fractals show? / ?????????? ?????????
input ENUM_YESNO i_is5Digits = YES; // The 5-digits are using? / ???????????? 5-???????? ??????????
input int i_indBarsCount = 10000; // Number of bars to display / ???-?? ????? ???????????
enum ENUM_MESSAGE_CODE
{
MESSAGE_CODE_INVALID_FRACTAL_RANK1,
MESSAGE_CODE_INVALID_FRACTAL_RANK2,
MESSAGE_CODE_MA_SLOW_LESS_THAN_ZERO,
MESSAGE_CODE_TERMINAL_FATAL_ERROR1,
MESSAGE_CODE_BIND_ERROR
};
bool g_activate;
int g_centerBar,
g_sidesBars,
g_maxPeriod;
double g_point;
double g_upFractal[];
double g_dnFractal[];
int OnInit()
{
// код доступен только после оплаты
}
bool TuningParameters()
{
string name=WindowExpertName();
if(i_fractalRank<3)
{
Alert(name,GetStringByMessageCode(MESSAGE_CODE_INVALID_FRACTAL_RANK1));
return false;
}
if(i_fractalRank%2==0)
{
Alert(name,GetStringByMessageCode(MESSAGE_CODE_INVALID_FRACTAL_RANK2));
return false;
}
g_centerBar = (int)i_fractalRank / 2 + 1;
g_sidesBars = (int)i_fractalRank / 2;
g_point=(i_is5Digits==YES)? Point : Point/10;
if(g_point==0)
{
Alert(name,GetStringByMessageCode(MESSAGE_CODE_TERMINAL_FATAL_ERROR1));
return false;
}
g_point=GetFractalOffsetByTF(g_point,PERIOD_CURRENT);
g_maxPeriod=(int)MathMax(i_tenkanSenPeriod,MathMax(i_kijunSenPeriod,i_senkouSpanPeriod));
return true;
}
double GetFractalOffsetByTF(double point,ENUM_TIMEFRAMES tf)
{
if(tf == PERIOD_CURRENT)
tf = (ENUM_TIMEFRAMES)Period();
switch(tf)
{
case PERIOD_M1: return point;
case PERIOD_M5: return 2 * point;
case PERIOD_M15: return 3 * point;
case PERIOD_M30: return 5 * point;
case PERIOD_H1: return 10 * point;
case PERIOD_H4: return 20 * point;
case PERIOD_D1: return 50 * point;
case PERIOD_W1: return 200 * point;
case PERIOD_MN1: return 400 * point;
}
return point;
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll(0,PREFIX);
}
bool BuffersBind()
{
string name=WindowExpertName();
if(!SetIndexBuffer(0,g_upFractal) ||
!SetIndexBuffer(1,g_dnFractal))
{
Alert(name,GetStringByMessageCode(MESSAGE_CODE_BIND_ERROR),GetLastError());
return false;
}
for(int i=0; i<2; i++)
if(i_isShowFractals)
SetIndexStyle(i,DRAW_ARROW);
else
SetIndexStyle(i,DRAW_NONE);
SetIndexArrow(0,217);
SetIndexArrow(1,218);
SetIndexLabel(0,"Up fractal");
SetIndexLabel(1,"Down fractal");
return true;
}
void BuffersInitializeAll()
{
ArrayInitialize(g_upFractal,EMPTY_VALUE);
ArrayInitialize(g_dnFractal,EMPTY_VALUE);
}
int GetRecalcIndex(int &total,const int ratesTotal,const int prevCalculated)
{
total=ratesTotal-g_maxPeriod-2;
if(i_indBarsCount>0 && i_indBarsCount<total)
total=MathMin(i_indBarsCount,total);
if(prevCalculated<ratesTotal-1)
{
BuffersInitializeAll();
ObjectsDeleteAll(0,PREFIX);
return total;
}
return (MathMin(ratesTotal - prevCalculated, total));
}
bool IsUpFractal(int barIndex)
{
int totalBars=iBars(NULL,PERIOD_CURRENT);
if(barIndex-g_sidesBars<=0 || barIndex+g_sidesBars>=totalBars)
return false;
double curHigh=iHigh(NULL,PERIOD_CURRENT,barIndex);
for(int i=barIndex-g_sidesBars; i<barIndex; i++)
if(iHigh(NULL,PERIOD_CURRENT,i)>=curHigh)
return false;
int leftBar=barIndex+g_sidesBars;
for(int i=barIndex+1; i<=leftBar; i++)
{
double high=iHigh(NULL,PERIOD_CURRENT,i);
if(high>curHigh)
return false;
if(hiПоказано первые 50% кода (символов: 9136)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.