← К каталогу
Исходный код · ID 1265

SHI Channel

shi_channel_colour_talk.mq5
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Индикатор SHI Channel строит на графике канал на основе двух найденных опорных точек (максимумов или минимумов) и отображает его в виде трёх трендовых линий: верхней границы, нижней границы и средней линии. Канал рассчитывается на заданном количестве баров с возможностью настройки периода для определения фрактальных точек.

Индикатор вычисляет ширину канала и угол наклона, отображает их в комментарии на графике. При изменении ширины канала или направления наклона проверяется условие для уведомлений, если параметр ChannelTalk включён. Цвет линий канала и средняя линия устанавливаются синими, стиль и толщина задаются в коде.

Индикатор использует один буфер для отрисовки ценового маркера на графике. Обработка происходит при каждом новом баре, параметры настраиваются через extern-переменные.

Настройки программы

НастройкаОписание
AllBars Максимальное количество баров для анализа и построения канала. Если установлено в 0 или меньше, чем доступное число баров, используется текущее количество баров.
BarsForFract Количество баров для определения фрактальных точек. Если установлено в 0, значение выбирается автоматически в зависимости от текущего таймфрейма.
ChannelAlert Пороговое значение ширины канала, используемое для определения условий изменения цвета линий канала.
SlopeAlert Пороговое значение угла наклона, используемое для определения условий изменения цвета средней линии канала.
ChannelTalk Переключатель, включающий или отключающий проверку и уведомление при изменении ширины канала или направления его наклона.
Получить полный код

Поиск по коду файла

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
double ExtMapBuffer1[];

extern int       AllBars=240;
extern int       BarsForFract=0;
extern int       ChannelAlert=50;
extern int       SlopeAlert=25;
extern bool      ChannelTalk=true;
int CurrentBar=0;
int alertTag;
double Step=0;
int B1=-1,B2=-1;
int UpDown=0;
double P1=0,P2=0,PP=0;
double OldChannelWidth,OldSlopeAngle;
int i=0,AB=300,BFF=0;
int ishift=0;
double iprice=0;
datetime T1,T2;
int firsttime=0;

int init()
  {
      // код доступен только после оплаты
   }

int deinit()
  {

   return(0);
  }

void DelObj()
{
	ObjectDelete("TL1");
	ObjectDelete("TL2");
	ObjectDelete("MIDL");
}

int start()
  {
      // код доступен только после оплаты
   }
   int    counted_bars=IndicatorCounted();

   string symbolTxt;
   string WhatTxt;
if (Symbol()=="EURUSD") { symbolTxt = "Euro Dollar"; }
if (Symbol()=="EURJPY") { symbolTxt = "Euro Yen "; }
if (Symbol()=="EURAUD") { symbolTxt = "Euro Aussie "; }
if (Symbol()=="EURCAD") { symbolTxt = "Euro Canadian"; }
if (Symbol()=="EURCHF") { symbolTxt = "Euro Swiss"; }
if (Symbol()=="GBPUSD") { symbolTxt = "Cable Dollar"; }
if (Symbol()=="GBPJPY") { symbolTxt = "Cable Yen "; }
if (Symbol()=="GBPCHF") { symbolTxt = "Cable Swiss"; }
if (Symbol()=="AUDUSD") { symbolTxt = "Aussie"; }
if (Symbol()=="USDCHF") { symbolTxt = "Swiss Dollar"; }
if (Symbol()=="USDCAD") { symbolTxt = "Canada"; }
if (Symbol()=="USDJPY") { symbolTxt = "Yen Dollar"; } 
if (Symbol()=="CHFJPY") { symbolTxt = "Swiss Yen "; }
if (Symbol()=="GOLD")   { symbolTxt = "Gold"; }

	if ((AllBars==0) || (Bars<AllBars)) AB=Bars; else AB=AllBars; //AB-?????????? ????????????? ?????
	if (BarsForFract>0) 
		BFF=BarsForFract; 
	else
	{
		switch (Period())
		{
			case 1: BFF=12; break;
			case 5: BFF=48; break;
			case 15: BFF=24; break;
			case 30: BFF=24; break;
			case 60: BFF=12; break;
			case 240: BFF=15; break;
			case 1440: BFF=10; break;
			case 10080: BFF=6; break;
			default: DelObj(); return(-1); break;
		}
	}
	CurrentBar=2; //??????? ? ???????? ????, ????? ??????? "??????????
	B1=-1; B2=-1; UpDown=0;
	while(((B1==-1) || (B2==-1)) && (CurrentBar<AB))
	{

		if((UpDown<1) && (CurrentBar==Lowest(Symbol(),Period(),MODE_LOW,BFF*2+1,CurrentBar-BFF))) 
		{
			if(UpDown==0) { UpDown=-1; B1=CurrentBar; P1=Low[B1]; }
			else { B2=CurrentBar; P2=Low[B2];}
		}
		if((UpDown>-1) && (CurrentBar==Highest(Symbol(),Period(),MODE_HIGH,BFF*2+1,CurrentBar-BFF))) 
		{
			if(UpDown==0) { UpDown=1; B1=CurrentBar; P1=High[B1]; }
	

Показано первые 50% кода (символов: 4395)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
439,50₽ ≈ $5.37