smc order block detector with ai.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «smc order block detector with ai.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор для MetaTrader 5, предназначенный для обнаружения ордер-блоков на графике цен. Он анализирует историю из трёх последних баров, выявляя бычьи и медвежьи ордер-блоки, образующиеся при наличии ценовых разрывов между свечами. Обнаруженные ордер-блоки отрисовываются на графике в виде полупрозрачных прямоугольников с текстовыми метками уровня.
Индикатор поддерживает два метода проверки митигации ордер-блоков: по закрытию тела свечи или по достижению фитиля. Количество одновременно отображаемых ордер-блоков ограничивается настраиваемым параметром. При касании уровня ордер-блока текущей ценой пользователь может получить уведомления.
Система уведомлений включает всплывающие алерты и push-уведомления с возможностью настройки периода охлаждения между повторными оповещениями. Все визуальные элементы — цвет прямоугольников, цвет меток, заливка — настраиваются пользователем independently для бычьих и медвежьих ордер-блоков.
Настройки программы
| Настройка | Описание |
|---|---|
| InpMitigation | Метод проверки митигации ордер-блока: по телу свечи (закрытие цены) или по фитиля (достижение экстремума свечи). |
| InpMaxOB | Максимальное количество ордер-блоков, отображаемых одновременно на графике для каждого направления. |
| InpFillOB | Включает или отключает заливку прямоугольников ордер-блоков на графике. |
| InpColorOB_Bull | Цвет прямоугольника, обозначающего бычий ордер-блок на графике. |
| InpColorOB_Bear | Цвет прямоугольника, обозначающего медвежий ордер-блок на графике. |
| InpColorOB_TextBull | Цвет текстовой метки уровня бычьего ордер-блока. |
| InpColorOB_TextBear | Цвет текстовой метки уровня медвежьего ордер-блока. |
| InpEnableAlert | Включает или отключает систему уведомлений о касании ордер-блоков ценой. |
| InpAlertPopup | Включает или отключает всплывающие уведомления при касании ордер-блока ценой. |
| InpAlertPush | Включает или отключает push-уведомления при касании ордер-блока ценой. |
| InpAlertCooldownBars | Количество баров ожидания после касания ордер-блока перед повторным отправлением уведомления. |
Поиск по коду файла
#property version "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots 0
enum ENUM_MITIGATION {
MITIGATION_BODY,
MITIGATION_WICK
};
input group "--- Order Block Settings ---"
input ENUM_MITIGATION InpMitigation = MITIGATION_BODY;
input int InpMaxOB = 3;
input bool InpFillOB = true;
input color InpColorOB_Bull = C'10,40,15';
input color InpColorOB_Bear = C'40,10,10';
input color InpColorOB_TextBull = clrLime;
input color InpColorOB_TextBear = clrRed;
input group "--- Alert Settings ---"
input bool InpEnableAlert = true;
input bool InpAlertPopup = true;
input bool InpAlertPush = false;
input int InpAlertCooldownBars = 5;
long obj_counter = 0;
double prev_valid_high = 0;
double prev_valid_low = 0;
double last_tick_price = 0;
datetime prev_live_bar_time = 0;
struct ValidBar {
double h;
double l;
datetime t;
};
ValidBar vb1, vb2, vb3;
struct OrderBlock {
bool active;
datetime ob_time;
double top;
double bottom;
long ticket;
double fvg_size;
bool visual_deleted;
bool touch_alerted;
bool has_exited;
int bars_since_exit;
};
OrderBlock BullOBs[];
OrderBlock BearOBs[];
long ob_ticket_counter = 0;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll(0, "SMC_OB_");
}
void UpdateOBGraphics(const datetime &time[], int current_bar)
{
int active_bull = 0;
int active_bear = 0;
int total_bull = ArraySize(BullOBs);
for(int i = total_bull - 1; i >= 0; i--)
{
string obj_name = "SMC_OB_BULL_" + IntegerToString(BullOBs[i].ticket);
string lbl_name = obj_name + "_lbl";
if(!BullOBs[i].active || active_bull >= InpMaxOB)
{
if(!BullOBs[i].visual_deleted)
{
ObjectDelete(0, obj_name);
ObjectDelete(0, lbl_name);
BullOBs[i].visual_deleted = true;
}
continue;
}
if(ObjectFind(0, obj_name) < 0)
{
ObjectCreate(0, obj_name, OBJ_RECTANGLE, 0, BullOBs[i].ob_time, BullOBs[i].top, time[current_bar], BullOBs[i].bottom);
ObjectSetInteger(0, obj_name, OBJPROP_COLOR, InpColorOB_Bull);
ObjectSetInteger(0, obj_name, OBJPROP_BACK, true);
ObjectSetInteger(0, obj_name, OBJPROP_FILL, InpFillOB);
}
else
{
ObjectSetInteger(0, obj_name, OBJPROP_TIME, 1, time[current_bar]);
}
if(ObjectFind(0, lbl_name) < 0)
{
ObjectCreate(0, lbl_name, OBJ_TEXT, 0, time[current_bar], BullOBs[i].top);
ObjectSetString(0, lbl_name, OBJPROP_TEXT, " " + DoubleToString(BullOBs[i].top, _Digits));
ObjectSetInteger(0, lbl_name, OBJPROP_COLOR, InpColorOB_TextBull);
ObjectSetInteger(0, lbl_name, OBJPROP_ANCHOR, ANCHOR_LEFT);
ObjectSetInteger(0, lbl_name, OBJPROP_FONTSIZE, 9);
ObjectSetString(0, lbl_name, OBJPROP_FONT, "Trebuchet MS");
}
else
{
ObjectSetInteger(0, lbl_name, OBJPROP_TIME, 0, time[current_bar]);
ObjectSetDouble(0, lbl_name, OBJPROP_PRICE, 0, BullOBs[i].top);
}
active_bull++;
}
int total_bear = ArraySize(BearOBs);
for(int i = total_bear - 1; i >= 0; i--)
{
string obj_name = "SMC_OB_BEAR_" + IntegerToString(BearOBs[i].ticket);
string lbl_name = obj_name + "_lbl";
if(!BearOBs[i].active || active_bear >= InpMaxOB)
{
if(!BearOBs[i].visual_deleted)
{
ObjectDelete(0, obj_name);
ObjectDelete(0, lbl_name);
BearOBs[i].visual_deleted = true;
}
continue;
}
if(ObjectFind(0, obj_name) < 0)
{
ObjectCreate(0, obj_name, OBJ_RECTANGLE, 0, BearOBs[i].ob_time, BearOBs[i].top, time[current_bar], BearOBs[i].bottom);
ObjectSetInteger(0, obj_name, OBJPROP_COLOR, InpColorOB_Bear);
ObjectSetInteger(0, obj_name, OBJPROP_BACK, true);
ObjectSetInteger(0, obj_name, OBJPROP_FILL, InpFillOB);
}
else
{
ObjectSetInteger(0, obj_name, OBJPROP_TIME, 1, time[current_bar]);
}
if(ObjectFind(0, lbl_name) < 0)
{
ObjectCreate(0, lbl_name, OBJ_TEXT, 0, time[current_bar], BearOBs[i].bottom);
ObjectSetString(0, lbl_name, OBJPROP_TEXT, " " + DoubleToString(BearOBs[i].bottom, _Digits));
ObjectSetInteger(0, lbl_name, OBJPROP_COLOR, InpColorOB_TextBear);
ObjectSetInteger(0, lbl_name, OBJPROP_ANCHOR, ANCHOR_LEFT);
ObjectSetInteger(0, lbl_name, OBJPROP_FONTSIZE, 9);
ObjectSetString(0, lbl_name, OBJPROP_FONT, "Trebuchet MS");
}
else
{
ObjectSetInteger(0, lbl_name, OBJPROP_TIME, 0, time[current_bar]);
ObjectSetDouble(0, lbl_name, OBJPROP_PRICE, 0, BearOBs[i].bottom);
}
active_bear++;
}
}
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(rates_total < 10) return(0);
int limit;
if(prev_calculated == 0)
{
limit = 1;
ObjectsDeleteAll(0, "SMC_OB_");
obj_counter = 0;
last_tick_price = 0;
prev_live_bar_time = 0;
prev_valid_high = high[1];
prev_valid_low = low[1];
ArrayResize(BullOBs, 0);
ArrayResize(BearOBs, 0);
ob_ticket_counter = 0;
vb1.t = 0; vb2.t = 0; vb3.t = 0;
}
else
{
limit = prev_calculated - 1;
}
for(int i = limit; i < rates_total - 1; i++)
{
int total_bull_obs = ArraySize(BullOBs);
for(int b = 0; b < total_bull_obs; b++)
{
if(!BullOBs[b].active) continue;
if(InpMitigation == MITIGATION_BODY)
{
if(close[i] < BullOBs[b].bottom) BullOBs[b].active = false;
}
else
{
if(low[i] <= BullOBs[b].top) BullOBs[b].active = false;
}
}
int total_bear_obs = Показано первые 50% кода (символов: 8463)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.