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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.