sidewaysdetector.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «sidewaysdetector.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
SidewaysDetector — это пользовательский индикатор для MetaTrader 5, предназначенный для обнаружения и визуализации зон бокового движения цены на графике. Индикатор анализирует данные ценовых баров и выделяет участки, в которых цена двигалась в узком диапазоне на протяжении заданного минимального количества баров. Результаты отображаются в виде прямоугольников, наложенных на график.
Индикатор использует двухпроходный алгоритм: на первом проходе вычисляется усреднённая высота зон для фильтрации крупных ценовых движений, на втором — формируются и собираются корректные зоны. Для определения границ зон применяется допуск в пунктах относительно максимумов и минимумов баров, что позволяет гибко настраивать чувствительность детекции.
Пользователь может управлять количеством отображаемых зон, глубиной обработки истории (количеством баров), цветом визуализации и другими параметрами. Индикатор работает в окне графика и автоматически удаляет свои объекты при деинициализации.
Настройки программы
| Настройка | Описание |
|---|---|
| Average_Weight | Множитель для усреднённой высоты зоны. Увеличение значения повышает фильтрацию крупных движений и снижает количество отображаемых зон бокового движения. |
| Min_Zone_Width | Минимальное количество последовательных баров, необходимых для формирования зоны бокового движения. Зоны с меньшим количеством баров не учитываются. |
| Tolerance | Допуск в пунктах выше максимума и ниже минимума бара, используемый при определении границ зоны бокового движения. |
| Rectangle_Color | Цвет прямоугольников, обозначающих зоны бокового движения на графике. |
| Show_N_Last_Zones | Количество последних обнаруженных зон для отображения на графике. Значение 0 означает отображение всех найденных зон. |
| Num_Bars | Количество баров для обработки. Значение 0 означает обработку всех доступных баров на графике. |
Поиск по коду файла
#property version "1.06"
#property strict
#property indicator_chart_window
struct Zone
{
int Start;
int End;
double Low;
double High;
};
extern double Average_Weight = 1.0;
extern int Min_Zone_Width = 3;
extern int Tolerance = 20;
extern color Rectangle_Color = clrNavy;
extern int Show_N_Last_Zones = 2;
extern int Num_Bars = 500;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
RemoveObjects();
}
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[])
{
// код доступен только после оплаты
}
void GetZones(Zone &zones[], int numBars)
{
double avgZoneHeight = 0, tolerancePt = Tolerance * Point;
for (int pass = *; pass <= 2; pass++)
{
bool hasBrokenRange = false;
double rangeHigh = High[numBars - 1] + tolerancePt, rangeLow = Low[numBars - 1] - tolerancePt;
int zoneStart = numBars - 1, zoneEnd = 0, zoneSize = 0, zonesCounter = 0;
ArrayFree(zones);
for (int i = numBars - 2; i >= 0; i--)
{
zoneSize = zoneStart - i;
zoneEnd = i;
if (Open[i] > rangeHigh || Open[i] < rangeLow || Close[i] > rangeHigh || Close[i] < rangeLow)
{
if (zoneSize >= Min_Zone_Width)
{
if (pass == 1)
{
avgZoneHeight += MathAbs(rangeHigh - rangeLПоказано первые 50% кода (символов: 2464)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.