VSA Signals
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «vsa signals v1.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
VSA Signals — это пользовательский индикатор для MetaTrader 4, который анализирует свечные бары на предмет паттернов объёмно-ценового анализа (Volume Spread Analysis). Индикатор оценивает соотношение объёма, диапазона цены и характера закрытия свечей, чтобы определить сигналы слабости и силы рынка.
Результаты отображаются в виде стрелок-объектов на графике: сигналы слабости окрашиваются в красный цвет, сигналы силы — в синий. Если фон (общая тенденция) не совпадает с сигналом, отметки отображаются серым цветом. Индикатор поддерживает настройку цветовой схемы и сессионных параметров.
Индикатор работает в цикле по барам в функции start(), перебирая ограниченное количество последних баров и определяя для каждого его характеристики, тип свечи, категорию объёма и спреда, а затем классифицируя сигнал. Встроенная отладочная функция позволяет выводить промежуточные значения в комментарий для проверки расчётов.
Индикатор не выполняет торговых операций и не использует торговые API. Он является чисто аналитическим инструментом, предоставляющим визуальные сигналы на графике цен.
Настройки программы
| Настройка | Описание |
|---|---|
| these determine what period to use for measuring average volume and spread (settings) | Настройки периода — Текстовый параметр, определяющий период для расчёта среднего объёма и спреда |
| vollbf | Коэффициент периода объёма — Коэффициент для расчёта периода среднего объёма |
| spdlbf | Коэффициент периода спреда — Коэффициент для расчёта периода среднего спреда |
| lookbackbars | Количество баров для анализа — Количество баров для анализа при определении сигналов |
| colors | Цвета символов — Групповой заголовок для параметров цветовой схемы |
| strength_color | Цвет силы — Цвет отображения сигналов силы на графике |
| weakness_color | Цвет слабости — Цвет отображения сигналов слабости на графике |
| wrong_background | Цвет при неподходящем фоне — Цвет отображения сигнала при несоответствии фону (сигнал показывается серым) |
| UseSessionAverage | Использовать сессионное среднее — Переключатель использования сессионного среднего объёма вместо общего среднего |
| Start time of Asian session in brokers time (AsiaBegin) | Начало азиатской сессии — Начало азиатской сессии в часовом поясу брокера (используется при включённой сессионной средней) |
| End time of Asian session in brokers time (AsiaEnd) | Окончание азиатской сессии — Окончание азиатской сессии в часовом поясу брокера |
| Start time of European session in brokers time (EurBegin) | Начало европейской сессии — Начало европейской сессии в часовом поясу брокера |
| End time of European session in brokers time (EurEnd) | Окончание европейской сессии — Окончание европейской сессии в часовом поясу брокера |
| Start time of New York session in brokers time (USABegin) | Начало нью-йоркской сессии — Начало нью-йоркской сессии в часовом поясу брокера |
| Endtime of New York session in brokers time (USAEnd) | Окончание нью-йоркской сессии — Окончание нью-йоркской сессии в часовом поясу брокера |
Поиск по коду файла
/*
-------------------------------------------------------------------------
Version v1.23, Date: 26/07/2010
changed the display signal function to place symbols better.
signals: weakness marked in red, strength marked in blue. signals with
relevant background marked in gray
Currently this has not been optimised for CPU usage, or to prevent
signals appearing without appropriate background
(i.e. looking for polar bears in haiwaii), though they should be marked
in gray rather than red or blue.
VSA bar determination is sensitive to spread and volume look back factors
vollbf and spdlbf - I have optimised these by time period and "feel".
I don't recommend changing them but you can if you wish.
-------------------------------------------------------------------------
*/
/*
SIGNAL NAME BAR CLOSE VOLUME SPREAD CONFIRMED BY
UP-THRUST - Basic up low (v)high vwide N/A
UP-THRUST - Basic up low high avg N/A
UP-THRUST - Basic up low low avg N/A
UP-THRUST - Trap up move down low avg (v)wide N/A
UP-THRUST - Trap up move down low (v)high (v)wide N/A
2-BAR REVERSAL (UPTHRUST)
NO DEMAND up low/mid (v)low narrow next bar closes down
NO DEMAND up low/mid v0<v1&v2 narrow next bar closes down
NO DEMAND up low/mid (v)low average next bar closes down
EFFORT TO RISE up high high (v)wide N/A
BUYING CLIMAX up high vhigh vwide N/A
END OF A RISING MARKET up mid/high high narrow N/A (previous spread wide or vwide)
HIDDEN POTENTIAL SELLING up mid/low vhigh avg/wide N/A (previous spread wide or vwide)
SQUAT (UP) up high (v)high narrow N/A
STOPPING VOLUME down high high narrow N/A
STOPPING VOLUME down high vhigh (v)wide N/A
STOPPING VOLUME down mid vhigh vwide N/A
(ABSORPTION VOLUME down high uhigh uwide N/A)
2-BAR REVERSAL (STOPPING VOLUME)
SHAKE OUT up high high wide N/A
(REVERSE UP-THRUST up high high wide N/A)
NO SUPPLY down mid/high (v)low narrow next bar closes up
NO SUPPLY down high low average next bar closes up
TEST OF SUPPLY down mid/high v0<v1&v2 narrow next bar closes up
(FALLING PRESSURE down low low wide N/A)
EFFORT TO FALL down low high (v)wide N/A
SELLING CLIMAX down low vhigh vwide N/A
BAG HOLDING down low (v)high narrow N/A
SQUAT (DOWN) down high (v)high narrow N/A
the other way to determine weakness or stength is to use a meter based on wether the high average volume is occuring on down bars, or up bars, with factoring for spread
*/
#property indicator_chart_window
extern string settings = "Lookback Factors"; // these determine what period to use for measuring average volume and spread
extern double vollbf = 1.0;
extern double spdlbf = 1.0;
extern int lookbackbars = 500;
extern string colors = "Symbol Colors";
extern color strength_color = CornflowerBlue;
extern color weakness_color = IndianRed;
extern color wrong_background;
extern bool UseSessionAverage = false;
extern int AsiaBegin = 17; // Start time of Asian session in brokers time
extern int AsiaEnd = 5; // End time of Asian session in brokers time
extern int EurBegin = 3; // Start time of European session in brokers time
extern int EurEnd = 12; // End time of European session in brokers time
extern int USABegin = 8; // Start time of New York session in brokers time
extern int USAEnd = 17; // Endtime of New York session in brokers time
int UPTHRUST = 0;
int TWO_BAR_REV_UT = 1;
int NO_DEMAND = 2;
int EFFORT_TO_RISE = 3;
int BUYING_CLIMAX = 4;
int FAILED_FALL = 5;
int HIDDEN_POTENTIAL_SELLING = 6;
int END_OF_RISING_MARKET = 7;
int SQUAT_UP = 8;
int STOPPING_VOLUME = 9;
int SHAKEOUT = 10;
int TWO_BAR_REV_SV = 11;
int NO_SUPPLY = 12;
int TEST_OF_SUPPLY = 13;
int EFFORT_TO_FALL = 14;
int SELLING_CLIMAX = 15;
int BAG_HOLDING = 16;
int HIDDEN_POTENTIAL_BUYING = 17;
int SQUAT_DOWN = 18;
int FAILED_RISE = 19;
int HIDDEN_TEST = 20;
bool upbar, downbar, upclose, midclose, downclose;
bool narrowsp, avgsp, widesp,vwidesp, uwidesp;
bool vlowv, lowv, avgv, highv, vhighv;
bool pbarup, pbardown;
int signal, prevsignal = EMPTY_VALUE;
int code[20] = {167,167,250,159,108,111,108,108,159, 178,167,167,250,83,159,108,108,108,250,119,250};
string text[20] = {"UPTHRUST","2-BAR REVERSAL UPTHRUST","NO DEMAND","EFFORT TO RISE","BUYING CLIMAX", "EFFORT TO FALL WITH NO RESULT", "HIDDEN POTENTIAL SELLING", "END OF A RISING MARKET", "SQUAT (UP)",
"STOPPING VOLUME", "SHAKEOUT", "2-BAR REVERSAL STOPPING VOLUME", "NO SUPPLY", "TEST OF SUPPLY", "EFFORT TO FALL", "SELLING CLIMAX", "BAG HOLDING", "HIDDEN POTENTIAL BUYING", "SQUAT (DOWN)", "EFFORT TO RISE WITH NO RESULT", "HIDDEN TEST"};
double pts, dprice, last_dprice;
int sctr, icolor = 0;
int strength = 1;
int weakness = -1;
int up = 1;
int down = -1;
int vperiod, speriod = 0;
int background, meter = 0;
int min2bar_reversal_length = 0;
double mid_body_ratio = 0.60;
double long_body_ratio = 0.80;
double shift=0;
double v0,v1,v2, spread, closelow, avgspread, avgvol, stdvol, stspread;
bool testmode = false;
string objprefix = "[VSA]";
int init()
{
// код доступен только после оплаты
}
int deinit()
{
for(int i=ObjectsTotal();i >= 0;i--)
{
if(StringSubstr(ObjectName(i),0,StringLen(objprefix))==objprefix)
{ ObjectDelete(ObjectName(i)); }
}
return(0);
}
int start()
{
// код доступен только после оплаты
}
double CalcRange(int bar, bool verify=false)
{
int counter, n=0;
double Range, AvgRange;
if (verify) n=1;
AvgRange=0;
for (counter=bar-n; counter<=bar+1;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/2;
return(Range);
}
void SetConstants()
{
shift =(WindowPriceMax()-WindowPriceMin())/30;
meter = 0;
background = 0;
switch (Period()) {
case PERIOD_M1:
vperiod = 40*vollbf;
speriod = 40*spdlbf;
min2bar_reversal_length = 10;
break;
case PERIOD_M5:
vperiod = 30*vollbf;
speriod = 30*spdlbf;
min2bar_reversal_length = 10;
break;
case PERIOD_M15:
vperiod = 25*vollbf;
speriod = 25*spdlbf;
min2bar_reversal_length = 10;
break;
case PERIOD_M30:
vperiod = 24*vollbf;
speriod = 24*spdlbf;
min2bar_reversal_length = 15;
break;
case PERIOD_H1:
vperiod = 20*vollbf;
speriod = 20*spdlbf;
min2bar_reversal_length = 25;
break;
case PERIOD_H4:
vperiod = 20*vollbf;
speriod = 20*spdlbf;
min2bar_reversal_length = 20;
break;
case PERIOD_D1:
vperiod = 20*vollbf;
speriod = 20*spdlbf;
min2bar_reversal_length = 30;
break;
case PERIOD_W1:
vperiod = 20*vollbf;
speriod = 20*spdlbf;
min2bar_reversal_length = 40;
break;
case PERIOD_MN1:
vperiod = 20*vollbf;
speriod = 20*spdlbf;
min2bar_reversal_length = 50;
break;
}
if (testmode)
Comment("vl=",vperiod," sl=",speriod);
}
int Session(datetime dt )
{
int session = 0;
int hour = TimeHour(dt);
if ( (hour >=AsiaBegin) || ( (AsiaBegin>AsiaEnd) && (hour <= AsiaEnd)) )
{
session = 1;
}
if ( hour >=EurBegin || ( (EurBegin>EurEnd) && ( hour <= EurEnd)) )
{
session = 2;
}
if ( (hour>=USABegin && hour>EurEnd) || ( (USABegin>USAEnd) && (hour <= USAEnd)) )
{
session = 3;
}
return (session);
}
double CalculateAverageSpread(int cbar)
{
double as, s = 0;
for (int i=cbar+speriod; i>=cbar; i--)
{
s = High[i]-Low[i];
as = as+s;
}
return(as/speriod);
}
double CalculateSpdStdDev(double av, int cbar)
{
double s, sd, sumspd = 0;
for (int i=cbar+speriod; i>=cbar; i--)
{
s = (High[cbar]-Low[cbar]) - av;
sumspd = sumspd+MathPow(s,2);
}
sd = MathSqrt(sumspd/speriod);
return(sd);
}
double CalculateAverageVolume(int cbar)
{
double av, v = 0;
for (int i=cbar+vperiod; i>=cbar; i--)
{
v = iVolume(NULL,Period(),i);
av = av+v;
}
return(av/vperiod);
}
double CalculateSessionAverageVolume(int bar)
{
double av, v = 0;
int i, c = 0;
i = bar;
while (c<vperiod)
{
if ( Session(iTime(NULL,Period(),i)) == Session(iTime(NULL,Period(),bar)) )
{
v = iVolume(NULL,Period(),i);
av = av+v;
c++;
}
i++;
if (i>2*lookbackbars) { break;}
}
return(av/vperiod);
}
double CalculateVolStdDev(double av, int cbar)
{
double v, sd, sumv2 = 0;
for (int i=cbar+vperiod; i>=cbar; i--)
{
v = iVolume(NULL,Period(),i) - av;
sumv2 = sumv2+MathPow(v,2);
}
sd = MathSqrt(sumv2/vperiod);
return(sd);
}
bool LocalHigh(int bar, int back)
{
if (bar == iHighest(NULL,0, MODE_HIGH,back,bar))
{ return(true); }
return(false);
}
Показано первые 50% кода (символов: 15276)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.