mss ea.mq5
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «mss ea.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Это торговый советник для MetaTrader 5, работающий на событии OnTick. Он анализирует график цен текущего инструмента и таймфрейма, определяя точки разворота цены — swing highs и swing lows — и отслеживает пробой этих уровней. Советник хранит историю найденных разворотов и сравнивает их для определения смены рыночной структуры (Market Structure Shift). При обнаружении пробоя он выводит соответствующие сообщения в журнал и рисует графические объекты на графике: стрелки в точках разворотов и линии пробоя с подписями. Советник не выполняет никаких торговых операций и не взаимодействует с торговым терминалом для размещения или управления ордерами; он является исключительно аналитическим и визуализирующим инструментом.
Поиск по коду файла
#property version "1.00"
double swingHighs_Array[];
double swingLows_Array[];
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
}
void OnTick(){
// код доступен только после оплаты
}
static bool isNewBar = false;
int currBars = iBars(_Symbol,_Period);
static int prevBars = currBars;
if (prevBars == currBars){isNewBar = false;}
else if (prevBars != currBars){isNewBar = true; prevBars = currBars;}
const int length = 10; // >2
int right_index, left_index;
int curr_bar = length;
bool isSwingHigh = true, isSwingLow = true;
static double swing_H = -1.0, swing_L = -1.0;
if (isNewBar){
for (int a=1; a<=length; a++){
right_index = curr_bar - a;
left_index = curr_bar + a;
if ( (high(curr_bar) <= high(right_index)) || (high(curr_bar) < high(left_index)) ){
isSwingHigh = false;
}
if ( (low(curr_bar) >= low(right_index)) || (low(curr_bar) > low(left_index)) ){
isSwingLow = false;
}
}
if (isSwingHigh){
swing_H = high(curr_bar);
Print("WE DO HAVE A SWING HIGH @ BAR INDEX ",curr_bar," H: ",high(curr_bar));
drawSwingPoint(TimeToString(time(curr_bar)),time(curr_bar),high(curr_bar),77,clrBlue,-1);
if (ArraySize(swingHighs_Array) < 2){
ArrayResize(swingHighs_Array,ArraySize(swingHighs_Array)+1);
swingHighs_Array[ArraySize(swingHighs_Array)-1] = swing_H;
}
else if (ArraySize(swingHighs_Array) == 2){
ArrayRemove(swingHighs_Array,0,1);
ArrayResize(swingHighs_Array,ArraySize(swingHighs_Array)+1);
swingHighs_Array[ArraySize(swingHighs_Array)-1] = swing_H;
Print("POPULATED! New swing high prices data is as below:");
ArrayPrint(swingHighs_Array,_Digits," , ");
}
}
if (isSwingLow){
swing_L = low(curr_bar);
Print("WE DO HAVE A SWING LOW @ BAR INDEX ",curr_bar," L: ",low(curr_bar));
drawSwingPoint(TimeToString(time(curr_bar)),time(curr_bar),low(curr_bar),77,clrRed,+1);
if (ArraySize(swingLows_Array) < 2){
ArrayResize(swingLows_Array,ArraySize(swingLows_Array)+1);
swingLows_Array[ArraySize(swingLows_Array)-1] = swing_L;
}
else if (ArraySize(swingLows_Array) == 2){
ArrayRemove(swingLows_Array,0,1);
ArrayResize(swingLows_Array,ArraySize(swingLows_Array)+1);
swingLows_Array[ArraySize(swingLows_Array)-1] = swing_L;
Print("POPULATED! New swing low prices data is as below:");
ArrayPrint(swingLows_Array,_Digits," , ");
}
}
}
double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
if (swing_H > 0 && Ask > swing_H){
Print("$$$$$$$$$ BUY SIGNAL NOW. BREAK OF SWING HIGH");
int swing_H_index = 0;
for (int i=0; i<=length*2+1000; i++){
double high_sel = high(i);
if (high_sel == swing_H){
swing_H_index = i;
Print("BREAK HIGH FOUND @ BAR INDEX ",swing_H_index);
break;
}
}
bool isMSS_High = false;
if (ArraySize(swingHighs_Array) >= 2 && ArraySize(swingLows_Array) >= 2){
isMSS_High = swingHighs_Array[0] > swingHighs_Array[1]
&& swingLows_Array[0] > swingLows_Array[1];
}
if (isMSS_High){
Print("Alert! This is a Market Structure Shift (MSS) UPTREND");
drawBreakLevel_MSS(TimeToString(time(0)),time(swing_H_index),high(swing_H_index),
time(0),high(swing_H_index),clrDarkGreen,-1);
}
else if (!isMSS_High){
drawBreakLevel(TimeToString(time(0)),time(swing_H_index),high(swing_H_index),
time(0),high(swing_H_index),clrBlue,-1);
}
swing_H = -1.0;
return;
}
if (swing_L > 0 && Bid < swing_L){
Print("$$$$$$$$$ SELL SIGNAL NOW. BREAK OF SWING LOW");
int swing_L_index = 0;
for (int i=0; i<=length*2+1000; i++){
double low_sel = low(i);
if (low_sel == swing_L){
swing_L_index = i;
Print("BREAK LOW FOUND @ BAR INDEX ",swing_L_index);
break;
}
}
bool isMSS_Low = false;
if (ArraySize(swingHighs_Array) >= 2 && ArraПоказано первые 50% кода (символов: 6821)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.