TPOChart Session v1.20
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «ay-tpochart-session.v1.20.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный индикатор отображает TPO-профили (Time Price Opportunity) торговых сессий (Азия, Европа, США) в отдельном окне графика MetaTrader 4. Он рисует профили с буквенными метками, отображает Point of Control, границы Value Area (VAH/VAL) и уровни Initial Balance для каждой сессии, используя данные из внешней библиотеки ay-mplib.v102.ex4.
Поддерживаются настройки времени начала сессий, объединение профилей (Азия+Европа, Европа+США, все вместе), отображение разделённых профилей и горизонтального объёма. Буквы на объёме раскрашиваются по цвету в зависимости от направления объёма (рост/падение/нейтральный), а также опционально отображаются соотношения объёмов.
В информационной панели окна показываются ключевые данные сессии: OHLC, объём, диапазон, VAH, POC, VAL, IBH и IBL. Все визуальные элементы настраиваются по цветам, обновление происходит при появлении нового бара и смене сессии.
Настройки программы
| Настройка | Описание |
|---|---|
| EnableMergeProfile | Включить объединение профилей — Включает/выключает объединение профилей сессий. |
| MergeProfileInfo | Описание объединения профилей — Информационный текст с описанием режимов объединения профилей. |
| MergeProfile | Режим объединения профилей — Режим объединения профилей: A — Азия+Европа, B — Европа+США, C — Все. |
| ExtendIB | Расширенные линии IB — Включает/выключает отображение расширенных линий Initial Balance. |
| ShowSplitProfile | Показать разделённый профиль — Включает/выключает отображение разделённого профиля. |
| PaintLettersOnVolume | Рисовать буквы на объёме — Включает/выключает отрисовку букв на объёме. |
| ShowHorizontalVolume | Показать горизонтальный объём — Включает/выключает отображение горизонтального объёма. |
| ShowVolumeRatio | Показать соотношение объёмов — Включает/выключает отображение соотношения объёмов. |
| MinVolumeRatio | Минимальное соотношение объёма — Минимальное соотношение объёма для отображения метки объёмного отношения. |
| AsiaOpen | Время открытия Азии — Время начала азиатской сессии в формате "ЧЧ:ММ". |
| EuropeOpen | Время открытия Европы — Время начала европейской сессии в формате "ЧЧ:ММ". |
| USOpen | Время открытия США — Время начала американской сессии в формате "ЧЧ:ММ". |
| NumDays | Количество дней — Количество дней для отображения профилей. |
| SplitProfileNumDays | Количество дней разделённого профиля — Количество дней для отображения разделённого профиля. |
| RowHeight | Высота строки — Высота строки профиля в пунктах. |
| ProfileDataTf | Таймфрейм данных профиля — Таймфрейм для данных профилей (числовой идентификатор таймфрейма). |
| VAPercent | Процент Value Area — Процент объёма для расчёта Value Area. |
| IBNumBars | Количество баров IB — Количество баров для расчёта Initial Balance. |
| UpdateInterval | Интервал обновления — Интервал обновления данных. |
| spr1 | Разделитель цветов — Текстовый разделитель группы настроек цветов. |
| AsColor | Цвет Азии — Цвет отрисовки элементов сессии Азии. |
| EuColor | Цвет Европы — Цвет отрисовки элементов европейской сессии. |
| UsColor | Цвет США — Цвет отрисовки элементов американской сессии. |
| VAColor | Цвет Value Area — Цвет области Value Area. |
| POCColor | Цвет POC — Цвет Point of Control. |
| HistogramColor | Цвет гистограммы — Цвет гистограммы объёма. |
| C'0,200,0'; (BarBullColor) | Цвет бычьей свечи — Цвет бычьих свечей. |
| C'200,0,0'; (BarBearColor) | Цвет медвежьей свечи — Цвет медвежьих свечей. |
| BarNetralColor | Цвет нейтральной свечи — Цвет нейтральных свечей. |
| OpenCloseColor | Цвет открытия/закрытия — Цвет маркеров открытия и закрытия свечей. |
| WindowInfoColor | Цвет информационной панели — Цвет текста информационной панели окна. |
| UpVolumeColor | Цвет растущего объёма — Цвет букв объёма при растущем объёме. |
| DownVolumeColor | Цвет нисходящего объёма — Цвет букв объёма при снижающемся объёме. |
| NeutralVolumeColor | Цвет нейтрального объёма — Цвет букв объёма при нейтральном объёме. |
Поиск по коду файла
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 14
/******************************************************************\\\
* MP Library
* dont change anything in this mp library block, unless YKWYD.....
******************************************************************///say something here...
#include <ay-mplib.const.v102.mqh> //
#import "ay-mplib.v102.ex4" //
void MpGet //
( //
double dparam[4] //
, int iparam[4] //
, double arates[][6] //
, double& mpdataperrow[][MPSIZE] //result: price per row (price, tpo, vol)
, int& mplinesidx[MPLNSIZE] //result: lines index
, double& mptotal[MPTSIZE] //result: total (tpo, vol)
, int& mpletter[][MPLTSIZE] //result: letter
); //
#import //
/******************************************************************\\\
* End MP Library
******************************************************************///
/******************************************************************\\\
* Indicator Constant
******************************************************************///
#define IND_NAME "TPOChart Session v1.20"
#define SES_START 0 //
#define SES_END 1 //
#define A_SES 0 // Asia Session
#define E_SES 1 //Europe Session
#define U_SES 2 // US Session
#define MPLFONTNAME "lucida sans typewriter bold"
#define MPLFONTNAME2 "lucida sans typewriter"
#define MPLFONTSIZE 8
#define MG_ASIA_EUROPE "A"
#define MG_EUROPE_US "B"
#define MG_ALL "C"
/******************************************************************\\\
* End Indicator Constant
******************************************************************///
extern bool EnableMergeProfile = false;
extern string MergeProfileInfo = "A Asia+Europe, B Europe+US, C All";
extern string MergeProfile = "A";
extern bool ExtendIB = false;
extern bool ShowSplitProfile = true;
extern bool PaintLettersOnVolume = true;
extern bool ShowHorizontalVolume = false;
extern bool ShowVolumeRatio = true;
extern double MinVolumeRatio = 1.5;
extern string AsiaOpen = "20:00";
extern string EuropeOpen = "03:00";
extern string USOpen = "08:00";
extern int NumDays = 10;
extern int SplitProfileNumDays = 0;
extern int RowHeight = 5;
extern int ProfileDataTf = 30;
extern double VAPercent = 70.0;
extern int IBNumBars = 2;
extern int UpdateInterval = 0;
extern string spr1 = "Colors.............";
extern color AsColor = White;
extern color EuColor = Aqua;
extern color UsColor = Khaki;
extern color VAColor = C'25,25,45';
extern color POCColor = Purple;
extern color HistogramColor = C'0,64,128';
extern color BarBullColor = MediumBlue;//C'0,200,0';
extern color BarBearColor = Maroon;//C'200,0,0';
extern color BarNetralColor = DimGray;
extern color OpenCloseColor = Gray;
extern color WindowInfoColor = Silver;
extern color UpVolumeColor = PaleGreen;
extern color DownVolumeColor = Chocolate;
extern color NeutralVolumeColor = DodgerBlue;
int giStep
, giDigits
, giWinId
;
double gdaRates[][6]
, gdOneTick
, gdPoint
;
color gcHistoColor;
bool gbFirstRun = true;
string gsaLetter[] =
{
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
,"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"
}
, gsPref = "ay.mpls."
;
color gcSesColor[3];
datetime gdtaMST[][3][2]; //--array market session time;
#include <ay-object.func.v1.1.mqh>
#include <ay-TPOChart-Session.v1.20.helper.mqh>
int init()
{
// код доступен только после оплаты
}
int deinit()
{
delObjs();
return(0);
}
int start()
{
// код доступен только после оплаты
}
void createProfile
(
int maxdays
, datetime currtime
, datetime currsesstart
)
{
static int lastmaxtpo;
double hh, ll, hhday, llday
, rhh, rhhday //round hh to rowheight
, rll, rllday //round ll to rowheight;
;
int sb, eb, sbday, ebday;
double mpdata [][MPSIZE];
int mplines [MPLNSIZE];
double mptotal [MPTSIZE];
int mpletter[][MPLTSIZE];
double dparam[4];
int iparam[4];
int ratessize = iBars(NULL, ProfileDataTf)
, mpdatasize;
double poc, midrowpoc, vpoc,vah, val, open, close
, rg = (giStep/1.0)/(MathPow(10,giDigits))
, ibh, ibl
;
int iday, ises
, maxtpo
, startprofile, startprofileday
, laststartprofile = 0
, space = 4 //--space between profile
, objtotal, iobj, objtype
, idaydelim1, idaydelim2, isesdelim1, isesdelim2
, idayobj, isesobj
, textwidth
;
bool bcurrsession
, newbar = isNewBarDataTf()
, isobjmp
, bmaxdays1andcurrses
, bmaxtpochange
, bmaxtpochangeornewbar
, bmaxtpochangeandnewbar
, bobjnotincurrses
, bobjincurrses
;
string objname, strinfo[12];
if (ShowHorizontalVolume) space += 5;
if (ShowVolumeRatio) space += 4;
for (iday=0; iday<maxdays; iday++)
{
for (ises=2; ises>=0; ises--)
{
if (gdtaMST[iday][ises][SES_START] > currtime ) continue;
if ( EnableMergeProfile
&&
(
(MergeProfile == MG_ASIA_EUROPE && ises==1)
||
(MergeProfile == MG_EUROPE_US && ises==2)
||
(MergeProfile == MG_ALL && (ises==1 || ises==2))
)
) continue;
if ( gdtaMST[iday][ises][SES_START] == currsesstart )
bcurrsession = true;
else bcurrsession = false;
if (maxdays == 1 && !bcurrsession) break;
getSesSE
(
ProfileDataTf
, gdtaMST[iday][ises][SES_START]
, gdtaMST[iday][ises][SES_END]
, sb
, eb
);
if ( sb<0
|| eb<0
|| ( sb==eb && iday != 0 ) //stupid sunday bar... arrgghh when asia start set to sydney open
)
{
continue;
}
getHHLL(ProfileDataTf, sb, eb, hh, ll);
rhh = MathCeil(hh/rg) * rg;
rll = MathCeil(ll/rg) * rg;
if (rhh < hh) rhh += rg;
if (rll > ll) rll -= rg;
dparam[MPDP_ONETICK] = gdOneTick;
dparam[MPDP_HH] = rhh;
dparam[MPDP_LL] = rll;
dparam[MPDP_VAPERCENT] = VAPercent;
iparam[MPIP_STARTBAR] = sb;
iparam[MPIP_ENDBAR] = eb;
iparam[MPIP_DIGITS] = giDigits;
iparam[MPIP_STEP] = giStep;
MpGet
(
dparam //double dparam[4]
Показано первые 50% кода (символов: 13957)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.