Barros Swing
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «barros_swing_fix.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор Barros Swing рассчитывает свинг-поинты на двух таймфреймах и отображает их на графике цены. Используется для анализа импульсных движений и определения гармонических паттернов XABC.
Индикатор вычисляет среднее значение импульса на основе разниц между свинг-поинтами, а затем идентифицирует паттерны XABC, включая точки X, A, B и далее по алфавиту. Для каждого паттерна строятся зоны первичной покупки и продажи, границы и уровни максимального расширения.
Результаты расчёта отображаются в виде графических объектов на графике: текстовые метки с буквенными обозначениями свинг-поинтов, трендовые линии зон и границ. Пользователь может настраивать период расчёта, отображение свинг-поинтов и параметры визуализации XABC.
Настройки программы
| Настройка | Описание |
|---|---|
| period | Период расчёта свинг-поинтов для основного индикаторного сигнала |
| show_d1_swing | Отображение свинг-поинтов 1-периода на графике в виде выделенных участков |
| XABC_setting | Текстовый параметр, служащий разделителем настроек XABC |
| XABC_enabled | Включение или выключение распознавания и отображения паттернов XABC |
| D'2008.12.1 00:00'; (XABC_spec_time) | Специальная дата и время для расчёта свинг-поинтов XABC; если равно нулю, используется текущее время |
| XABC_font | Шрифт для текстовых меток и подписей на графике |
| XABC_font_size | Размер шрифта для текстовых меток и подписей на графике |
| XABC_font_color | Цвет текста меток и подписей XABC на графике |
| XABC_ME_line_color | Цвет линий максимального расширения и зон XABC на графике |
Поиск по коду файла
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 OrangeRed
#property indicator_color2 MediumPurple
#property indicator_color3 Red
#property indicator_color4 Black
#property indicator_color5 Black
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 4
extern int period = 18;
extern bool show_d1_swing = false;
extern string XABC_setting = "<<-- XABC Settings -->>";
extern bool XABC_enabled = true;
extern datetime XABC_spec_time = 0; //D'2008.12.1 00:00';
extern string XABC_font = "Arial";
extern int XABC_font_size = 16;
extern color XABC_font_color = White;
extern color XABC_ME_line_color = Yellow;
#define LINE_DIRECT_UP 1
#define LINE_DIRECT_DN -1
#define LINE_NO_DIRECT -2
#define XABC_A 0
#define XABC_A_BAR 1
#define XABC_B 2
#define XABC_B_BAR 3
#define XABC_C 4
#define XABC_C_BAR 5
#define XABC_UPPER_ME 6
#define XABC_LOWER_ME 7
#define XABC_PBZ 8
#define XABC_PSZ 9
#define XABC_SWING_COUNT 10
double d1_swing[];
double dn_swing[];
double XABC[];
double imean[];
double signals[];
double d1_line_direct[];
double dn_line_direct[];
int init()
{
// код доступен только после оплаты
}
int deinit()
{
clear_label();
return(0);
}
int start()
{
// код доступен только после оплаты
}
int d1_direct(int idx){
double shd_h, shd_l;
shd_h = High[idx] - High[idx+1];
shd_l = Low[idx+1] - Low[idx];
if (shd_h > shd_l && shd_h > 0)
return (LINE_DIRECT_UP);
if (shd_h < shd_l && shd_l > 0)
return (LINE_DIRECT_DN);
return (LINE_NO_DIRECT);
}
int dn_direct(int idx, int n){
double shd_h, shd_l, nHigh, nLow, ten_pc;
double val_1, val_2;
int i, j;
nHigh = High[idx+1]; nLow = Low[idx+1];
for (i=1; i<=n; i++){
nHigh = MathMax(nHigh, High[idx+i]);
nLow = MathMin(nLow, Low[idx+i]);
}
j = idx+1; val_1 = 0; val_2 = 0;
while(val_2 == 0 && j <= Bars){
if (d1_swing[j] > 0){
if (val_1 <= 0){
val_1 = d1_swing[j];
} else {
val_2 = d1_swing[j];
}
}
j++;
}
ten_pc = 0;
if(val_1 > 0 && val_2 > 0) ten_pc = MathAbs(val_1 - val_2) * 10 / 100;
nHigh += ten_pc; nLow -= ten_pc;
shd_h = High[idx] - nHigh;
shd_l = nLow - Low[idx];
if (shd_h > shd_l && shd_h > 0)
return (LINE_DIRECT_UP);
if (shd_h < shd_l && shd_l > 0)
return (LINE_DIRECT_DN);
return (LINE_NO_DIRECT);
}
int num_label = 0;
int total_swing_pt = 0;
datetime sDateTime[];
double swing_point[];
int total_XABC_swing_pt = 0;
datetime XABC_DateTime[];
double XABC_swing_point[];
void identify_XABC(){
clear_label();
clear_swing_pts();
if(XABC_spec_time > 0)
catch_swing_pt_ex();
else
catch_swing_pt();
catch_XABC();
show_XABC();
}
void catch_XABC(){
double X_pt, A_pt, B_pt, ME, XA_10pc, AB_20pc, A_Max, A_Min, B_Max, B_Min, imp_mean;
datetime X_dt, A_dt, B_dt, sp_dt;
int i, j, A_pos, B_pos;
bool is_A_Vtop, is_B_Vtop;
clear_XABC_swing_pts();
if (XABC_spec_time > 0){
sp_dt = XABC_spec_time;
imp_mean = imean[iBarShift(NULL, 0, sp_dt)];
} else {
sp_dt = TimeCurrent();
imp_mean = imean[0];
}
X_pt = swing_point[total_swing_pt - 1];
X_dt = sDateTime[total_swing_pt - 1];
A_pt = swing_point[total_swing_pt - 2];
A_dt = sDateTime[total_swing_pt - 2];
A_pos = 2;
B_pt = swing_point[total_swing_pt - 3];
B_dt = sDateTime[total_swing_pt - 3];
B_pos = 3;
XA_10pc = MathAbs(A_pt - X_pt) * 10 / 100;
AB_20pc = MathAbs(B_pt - A_pt) * 20 / 100;
ME = MathMax(XA_10pc, AB_20pc);
if (A_pt > X_pt) is_A_Vtop = true; else is_A_Vtop = false;
if (B_pt > A_pt) is_B_Vtop = true; else is_B_Vtop = false;
A_Max = A_pt; A_Min = A_pt;
for(i=4; i<total_swing_pt-1; i+=2){
if (is_A_Vtop){
A_Max = MathMax(A_Max, swing_point[total_swing_pt - i]);
if (swing_point[total_swing_pt - i] >= A_pt && swing_point[total_swing_pt - i] <= A_pt + ME
&& swing_point[total_swing_pt - i] >= A_Max && sDateTime[total_swing_pt - i] < sp_dt){
A_pt = swing_point[total_swing_pt - i];
A_dt = sDateTime[total_swing_pt - i];
for (j=i-1; j>=0; j-=2){
if(MathAbs(swing_point[total_swing_pt - j] - A_pt) >= imp_mean){
X_pt = swing_point[total_swing_pt - j];
X_dt = sDateTime[total_swing_pt - j];
break;
}
}
XA_10pc = MathAbs(A_pt - X_pt) * 10 / 100;
ME = MathMax(XA_10pc, AB_20pc);
if (A_pt > X_pt) is_A_Vtop = true; else is_A_Vtop = false;
A_pos = i;
}
if (swing_point[total_swing_pt - i - 1] < A_pt && swing_point[total_swing_pt - i] > A_pt + ME
&& swing_point[total_swing_pt - i] >= A_Max && sDateTime[total_swing_pt - i] < sp_dt){
A_pt = swing_point[total_swing_pt - i];
A_dt = sDateTime[total_swing_pt - i];
for (j=i-1; j>=0; j-=2){
if(MathAbs(swing_point[total_swing_pt - j] - A_pt) >= imp_mean){
X_pt = swing_point[total_swing_pt - j];
X_dt = sDateTime[total_swing_pt - j];
break;
}
}
XA_10pc = MathAbs(A_pt - X_pt) * 10 / 100;
ME = MathMax(XA_10pc, AB_20pc);
if (A_pt > X_pt) is_A_Vtop = true; else is_A_Vtop = false;
A_pos = i;
}
} else {
A_Min = MathMin(A_Min, swing_point[total_swing_pt - i]);
if (swing_point[total_swing_pt - i] <= A_pt && swing_point[total_swing_pt - i] >= A_pt - ME
&& swing_point[total_swing_pt - i] <= A_Min && sDateTime[total_swing_pt - i] < sp_dt){
A_pt = swing_point[total_swing_pt - i];
A_dt = sDateTime[total_swing_pt - i];
for (j=i-1; j>=0; j-=2){
if(MathAbs(swing_point[total_swing_pt - j] - A_pt) >= imp_mean){
X_pt = swing_point[total_swing_pt - j];
X_dt = sDateTime[total_swing_pt - j];
break;
}
}
XA_10pc = MathAbs(A_pt - X_pt) * 10 / 100;
ME = MathMax(XA_10pc, AB_20pc);
if (A_pt > X_pt) is_A_Vtop = true; else is_A_Vtop = false;
A_pos = i;
}
if (swing_point[total_swing_pt - i - 1] > A_pt && swing_point[total_swing_pt - i] < A_pt - ME
&& swing_point[total_swing_pt - i] <= A_Min && sDateTime[total_swing_pt - i] < sp_dt){
A_pt = swing_point[total_swing_pt - i];
A_dt = sDateTime[total_swing_pt - i];
Показано первые 50% кода (символов: 18765)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.