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

Extreme_Spike

extreme_spike@fxsignalspot.com.mq5
Вы автор или правообладатель?

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

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

О программе

Extreme_Spike — пользовательский индикатор для MetaTrader 4, основанный на логике Symphonie_Extreme_Cycle_Indikator. Он рассчитывает и отображает в отдельном окне аналитические сигналы о локальных и значимых экстремумах цены, используя данные закрытых баров. Индикатор строит гистограммы и линию, помогая визуально оценивать положение возможных вершин и впадин.

В коде предусмотрены пользовательские настройки: переключатель NoRepaint, числовые параметры высоты и ширины экстремумов, а также группа оповещений для разных типов сигналов. Все параметры задаются через extern-переменные и могут быть изменены без перекомпиляции. Индикатор не выполняет торговых операций и не даёт гарантий прибыли.

Обработка данных выполняется по событию start с учётом появления нового бара, если включён WaitForClose. Буферы отображают гистограммы для мажорных и минорных экстремумов, стрелки для неустойчивых сигналов и линию для стабильных уровней. Оповещения выводятся только при включённых соответствующих переключателях и однократно на каждый бар.

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

НастройкаОписание
NoRepaint Без перерисовки — Включает режим, при котором индикатор не перерисовывает уже отображённые экстремумы, что может приводить к задержке сигналов.
MinorMinExtremeHeightATRs Минимальная высота минорного экстремума в ATR — Минимальная высота минорного экстремума, выраженная в значениях ATR.
MajorToMinorHeightRatio Отношение высоты мажорного к минорному — Отношение минимальной высоты мажорного экстремума к минорному.
MinorMinExtremeWidth Минимальная ширина минорного экстремума — Минимальное количество баров, которое должно пройти после минорного экстремума, чтобы он считался значимым.
MajorMinExtremeWidth Минимальная ширина мажорного экстремума — Минимальное количество баров, которое должно пройти после мажорного экстремума, чтобы он считался значимым.
AlertMajorBottomEnabled Оповещение о мажорном нижнем экстремуме — Включает или отключает оповещение при обнаружении мажорного нижнего экстремума.
AlertMajorTopEnabled Оповещение о мажорном верхнем экстремуме — Включает или отключает оповещение при обнаружении мажорного верхнего экстремума.
AlertMinorTopEnabled Оповещение о минорном верхнем экстремуме — Включает или отключает оповещение при обнаружении минорного верхнего экстремума.
AlertMinorBottomEnabled Оповещение о минорном нижнем экстремуме — Включает или отключает оповещение при обнаружении минорного нижнего экстремума.
AlertStableEnabled Оповещение о стабилизации экстремума — Включает или отключает оповещение о том, что последний экстремум перестал перерисовываться.
WaitForClose Ожидание закрытия бара — Если включено, индикатор обрабатывает данные только после закрытия текущего бара.
Получить полный код

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

#property indicator_separate_window

#property indicator_minimum			-1.2
#property indicator_maximum			+1.2
#property indicator_buffers			5

#property indicator_color1			Red
#property indicator_width1			3
#property indicator_style1			STYLE_SOLID

#property indicator_color2			DodgerBlue
#property indicator_width2			3
#property indicator_style2			STYLE_SOLID

#property indicator_color3			DimGray
#property indicator_width3			0

#property indicator_color4			White
#property indicator_width4			1
#property indicator_style4			STYLE_SOLID

#property indicator_color5			White
#property indicator_width5			2
#property indicator_style5			STYLE_SOLID

#define ALERT_TOP		1
#define ALERT_BOTTOM	2
#define ALERT_STABLE	3

#define LINE_MINOR		1
#define LINE_MAJOR		2
#define LINE_SHADOW		3
#define LINE_STABLE		4

#define LINE_VALUE_UP		1.0
#define LINE_VALUE_FLAT		0.0
#define LINE_VALUE_DOWN		-1.0

#define MODE_LOOKING_FOR_BOTTOM	1
#define MODE_LOOKING_FOR_TOP	-1
#define MODE_UNDETERMINED		0

extern bool		NoRepaint					= FALSE;
extern double	MinorMinExtremeHeightATRs	= 2.0;
extern double	MajorToMinorHeightRatio		= 2.5;
extern int		MinorMinExtremeWidth		= 2;
extern int		MajorMinExtremeWidth		= 2;
extern bool		AlertMajorBottomEnabled		= FALSE;
extern bool		AlertMajorTopEnabled		= FALSE;
extern bool		AlertMinorTopEnabled		= FALSE;
extern bool		AlertMinorBottomEnabled		= FALSE;
extern bool		AlertStableEnabled			= FALSE;
extern bool    WaitForClose = true;

double line1[];	// lineMajorUp	
double line2[];	// lineMajorDown
double line3[];	// lineShadowUp, lineShadowDown	
double line4[];	// lineStableUp,  lineStableDown	
double line5[];	// lineMinorUp, lineMinorDown	

int		MinorLowExtremeIdx		= 1;
bool	MinorFirstLow			= TRUE;
int		MinorHiExtremeIdx		= 1;
bool	MinorFirstHigh			= TRUE;
int		MinorExtremeMode		= 0;
double	MinorLowExtremePrice;
double	MinorHiExtremePrice;

int		MajorLowExtremeIdx		= 1;
bool	MajorFirstLow			= TRUE;
int		MajorHiExtremeIdx		= 1;
bool	MajorFirstHigh			= TRUE;
int		MajorExtremeMode		= 0;
double	MajorLowExtremePrice;
double	MajorHiExtremePrice;

double	MinorMinExtremeHeight;
double	MajorMinExtremeHeight;

datetime AlertMinorTopIdx;
datetime AlertMinorBottomIdx;
datetime AlertMajorTopIdx;
datetime AlertMajorBottomIdx;
datetime AlertStableIdx;

string	periodName;
int		BarNumber;
bool     JustStarted = true;

#define RANGE_AVERAGING_PERIOD 250

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

int deinit() {
	return(0);
}

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

void processBar() {

	switch( BarNumber ) { 
		case 0:
			break;
		case 1:
			periodName				= getPeriodName();
			AlertMinorTopIdx		= Time[Bars-1];
			AlertMinorBottomIdx		= Time[Bars-1];
			AlertMajorTopIdx		= Time[Bars-1];
			AlertMajorBottomIdx		= Time[Bars-1];
			MinorLowExtremePrice	= getLow();
			MinorHiExtremePrice		= getHigh();
			MajorLowExtremePrice	= getLow();
			MajorHiExtremePrice		= getHigh();
			break;
		default:
			MinorMinExtremeHeight	= average() * MinorMinExtremeHeightATRs;
			MajorMinExtremeHeight	= MinorMinExtremeHeight * MajorToMinorHeightRatio;
			checkForExtremes(	MinorLowExtremeIdx,	MinorLowExtremePrice,	MinorFirstLow, 
								MinorHiExtremeIdx,	MinorHiExtremePrice,	MinorFirstHigh, 
								MinorExtremeMode,	MinorMinExtremeHeight,	MinorMinExtremeWidth, LINE_MINOR );
			checkForExtremes(	MajorLowExtremeIdx,	MajorLowExtremePrice,	MajorFirstLow, 
								MajorHiExtremeIdx,	MajorHiExtremePrice,	MajorFirstHigh, 
								MajorExtremeMode,	MajorMinExtremeHeight,	MajorMinExtremeWidth, LINE_MAJOR );
			break;
	}

	return (0);
}

void checkForExtremes(	int& lowExtremeIdx,	double& lowExtremePrice,	bool& firstLow, 
						int& hiExtremeIdx,	double& hiExtremePrice,		bool& firstHigh, 
						int& extremeMode, double MinExtremeHeight, int MinExtremeWidth, int lineType ) {

	if( extremeMode > -1 ) {
		if( getLow() < lowExtremePrice ) {
			if( !firstLow )
				eraseExtreme( lineType, lowExtremeIdx, LINE_VALUE_DOWN );	// to repaint (erase) the spike
			lowExtremePrice = getLow();									// set LowestLow to this low (getLow)
			lowExtremeIdx = BarNumber;									// remember the LL bar number
			firstLow = FALSE;											// the was a Bottom
		}
		else
		if( getLow() > lowExtremePrice ) {								// higher low (getLow) - not necesserally higher than the last bar - could be lower than the last bar, but still higher than the bottom

			drawExtreme( lineType, lowExtremeIdx, LINE_VALUE_DOWN );	// update LowestLow bar with the spike DOWN and mark it as unstable

			alert( ALERT_BOTTOM, lineType, lowExtremeIdx );

			firstLow = FALSE;

			if(	((getLow() - lowExtremePrice)	>= MinExtremeHeight) 	// the bottom was distinct enough (difference between it and price is big enough)   
			&&	((BarNumber - lowExtremeIdx)	>= 

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

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

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

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

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

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

Стоимость полного кода
853,40₽ ≈ $10.43