Нужна помощь. Написал простой советник основанный на пересечении МА. Но почему то не работает как надо(.
Переделал немного ваш код.
//+------------------------------------------------------------------+
//| test05.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum mode_type
{
Консервативный,
Агрессивный,
};
input ENUM_TIMEFRAMES Time_Frame=PERIOD_CURRENT;//Таймфрейм
input mode_type Metod=Консервативный; // Метод
input int FastMA_Parametr=5; // Быстрая МА
input int MidMA_Parametr=8; // Средняя МА
input int SlowMA_Parametr=18; // Медленная МА
int Last_Signal=WRONG_VALUE;
int Cur_Signal=WRONG_VALUE;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
Last_Signal=GetSignal();
if(Last_Signal!=Cur_Signal)
{
Cur_Signal=Last_Signal;
if(Metod==Консервативный)
{
if(Last_Signal==OP_BUY)Alert(Symbol(),": ",PeriodToString((Time_Frame==PERIOD_CURRENT)?_Period:Time_Frame)," ----ВВЕРХ----. Консервативное");
if(Last_Signal==OP_SELL)Alert(Symbol(),": ",PeriodToString((Time_Frame==PERIOD_CURRENT)?_Period:Time_Frame)," ----ВНИЗ----. Консервативное");
}
if(Metod==Агрессивный)
{
if(Last_Signal==OP_BUY)Alert(Symbol(),": ",PeriodToString((Time_Frame==PERIOD_CURRENT)?_Period:Time_Frame)," ----ВВЕРХ----. Агрессивное");
if(Last_Signal==OP_SELL)Alert(Symbol(),": ",PeriodToString((Time_Frame==PERIOD_CURRENT)?_Period:Time_Frame)," ----ВНИЗ----. Агрессивное");
}
}
}
//+------------------------------------------------------------------+
int GetSignal()
{
double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,MODE_LWMA,0,0);// Быстрая МА
double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,MODE_LWMA,0,0);// Средняя МА
double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,MODE_EMA,0,0); //Медленная МА
if(Metod==Консервативный)
{
if(FastMA>MiddiMA && MiddiMA>SlowMA)return(OP_BUY);
if(FastMA<MiddiMA && MiddiMA<SlowMA)return(OP_SELL);
}
if(Metod==Агрессивный)
{
if(FastMA>MiddiMA)return(OP_BUY);
if(FastMA<MiddiMA)return(OP_SELL);
}
return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
string PeriodToString(int value)
{
switch(value)
{
case PERIOD_M1:return("M1");
case PERIOD_M5:return("M5");
case PERIOD_M15:return("M15");
case PERIOD_M30:return("M30");
case PERIOD_H1:return("H1");
case PERIOD_H4:return("H4");
case PERIOD_D1:return("D1");
case PERIOD_W1:return("W1");
case PERIOD_MN1:return("MN1");
}
return("Unknown TimeFrame");
}
//| test05.mq4 |
//| Sergey Gritsay |
//| https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link "https://www.mql5.com/ru/users/sergey1294"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
enum mode_type
{
Консервативный,
Агрессивный,
};
input ENUM_TIMEFRAMES Time_Frame=PERIOD_CURRENT;//Таймфрейм
input mode_type Metod=Консервативный; // Метод
input int FastMA_Parametr=5; // Быстрая МА
input int MidMA_Parametr=8; // Средняя МА
input int SlowMA_Parametr=18; // Медленная МА
int Last_Signal=WRONG_VALUE;
int Cur_Signal=WRONG_VALUE;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
Last_Signal=GetSignal();
if(Last_Signal!=Cur_Signal)
{
Cur_Signal=Last_Signal;
if(Metod==Консервативный)
{
if(Last_Signal==OP_BUY)Alert(Symbol(),": ",PeriodToString((Time_Frame==PERIOD_CURRENT)?_Period:Time_Frame)," ----ВВЕРХ----. Консервативное");
if(Last_Signal==OP_SELL)Alert(Symbol(),": ",PeriodToString((Time_Frame==PERIOD_CURRENT)?_Period:Time_Frame)," ----ВНИЗ----. Консервативное");
}
if(Metod==Агрессивный)
{
if(Last_Signal==OP_BUY)Alert(Symbol(),": ",PeriodToString((Time_Frame==PERIOD_CURRENT)?_Period:Time_Frame)," ----ВВЕРХ----. Агрессивное");
if(Last_Signal==OP_SELL)Alert(Symbol(),": ",PeriodToString((Time_Frame==PERIOD_CURRENT)?_Period:Time_Frame)," ----ВНИЗ----. Агрессивное");
}
}
}
//+------------------------------------------------------------------+
int GetSignal()
{
double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,MODE_LWMA,0,0);// Быстрая МА
double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,MODE_LWMA,0,0);// Средняя МА
double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,MODE_EMA,0,0); //Медленная МА
if(Metod==Консервативный)
{
if(FastMA>MiddiMA && MiddiMA>SlowMA)return(OP_BUY);
if(FastMA<MiddiMA && MiddiMA<SlowMA)return(OP_SELL);
}
if(Metod==Агрессивный)
{
if(FastMA>MiddiMA)return(OP_BUY);
if(FastMA<MiddiMA)return(OP_SELL);
}
return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
string PeriodToString(int value)
{
switch(value)
{
case PERIOD_M1:return("M1");
case PERIOD_M5:return("M5");
case PERIOD_M15:return("M15");
case PERIOD_M30:return("M30");
case PERIOD_H1:return("H1");
case PERIOD_H4:return("H4");
case PERIOD_D1:return("D1");
case PERIOD_W1:return("W1");
case PERIOD_MN1:return("MN1");
}
return("Unknown TimeFrame");
}
...
Файлы:
test05.mq4
8 kb
Олег:
input int Time_Frame=1;//Таймфрейм
input bool Metod=false; //Консервативный-TRUE | Агрессивный-FALSE
input int FastMA_Parametr=5;
input int MidMA_Parametr=8;
input int SlowMA_Parametr=18;
input int TrendMA=163;
input bool DemarkGo=false;
input int Demperiod=4;
int rez=0,rezgo;
string StrMetod;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnTick()
{
if(IsTradeAllowed())
{
Konservative();
Agressive();
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Konservative()
{
double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// Быстрая МА
double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Средняя МА
double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0);// Медленная МА
if(Metod==true)
{
if(FastMA>MiddiMA && MiddiMA>SlowMA && rez<=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВВЕРХ----. Консервативное");
rez=1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
return(rez);
}
// Проверка пересечения вниз 3-х линий
if(FastMA<MiddiMA && MiddiMA<SlowMA && rez>=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВНИЗ----. Консервативное");
rez=-1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
return(rez);
}
}
return(rez);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Agressive()
// Проверка пересечения вверх 2-х линий без медленной
{
double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// Быстрая МА
double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Средняя МА
double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0);// Медленная МА
if(Metod==false)
{
if(FastMA>MiddiMA && rez<=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВВЕРХ----. Агрессивное");
rez=1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
}
// Проверка пересечения вниз 2-х линий без медленной
if(FastMA<MiddiMA && rez>=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВНИЗ----. Агрессивное");
rez=-1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
}
}
return(rez);
}
//+------------------------------------------------------------------+
Не проверял :)
input bool Metod=false; //Консервативный-TRUE | Агрессивный-FALSE
input int FastMA_Parametr=5;
input int MidMA_Parametr=8;
input int SlowMA_Parametr=18;
input int TrendMA=163;
input bool DemarkGo=false;
input int Demperiod=4;
int rez=0,rezgo;
string StrMetod;
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
void OnTick()
{
if(IsTradeAllowed())
{
Konservative();
Agressive();
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Konservative()
{
double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// Быстрая МА
double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Средняя МА
double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0);// Медленная МА
if(Metod==true)
{
if(FastMA>MiddiMA && MiddiMA>SlowMA && rez<=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВВЕРХ----. Консервативное");
rez=1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
return(rez);
}
// Проверка пересечения вниз 3-х линий
if(FastMA<MiddiMA && MiddiMA<SlowMA && rez>=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВНИЗ----. Консервативное");
rez=-1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
return(rez);
}
}
return(rez);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
int Agressive()
// Проверка пересечения вверх 2-х линий без медленной
{
double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// Быстрая МА
double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Средняя МА
double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0);// Медленная МА
if(Metod==false)
{
if(FastMA>MiddiMA && rez<=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВВЕРХ----. Агрессивное");
rez=1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
}
// Проверка пересечения вниз 2-х линий без медленной
if(FastMA<MiddiMA && rez>=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВНИЗ----. Агрессивное");
rez=-1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
}
}
return(rez);
}
//+------------------------------------------------------------------+
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем доброго времени суток, как написал в шапке темы, это советник на основе МА. (КОД ПРИЛАГАЕТСЯ НИЖЕ) Сам не давно занялся написанием на MQL4, потому решил начать с простогоБ поэтому хотелось бы узнать, что я сделал не так. Суть советника проста: давать алерт при пересечении двух или трех МА (в зависимости от МЕТОДА: Агрессивный= пересечение двух МА, Консервативный= пересечение 3 МА)... И все. В рынок буду заходить сам. В советнике я прописал две функции: Агрессивную- это сигнал при простом пересечении двух самых быстрых МА и Консервативную, когда при пересечении двух быстрых МА нужно еще учитывать самую медленную (то есть сигнал по направлению тенденции). Проблема в том, что советник дает только ОДИН алерт (при его запуске или изменении таймфрейма), а на все последующие сигналы молчит! Буду признателен если скажете, в чем дело. Функции прописал по правилам MQL4 за всеми событиями. Можно было бы конечно без функций все прописать в событии On Tick, но хотелось бы функции отдельно прописывать, чтоб легко можно было вызывать функции и к тому же хочется со временем добавить новые функции "фильтры".
Код
================================================================================================
extern bool Metod=false; // выбор метода: Консервативний или Агрессивный
extern int Time_Frame=1;//Таймфрейм
input bool Metod=false; //Консервативный-TRUE | Агрессивный-FALSE
extern int FastMA_Parametr=5;
extern int MidMA_Parametr=8;
extern int SlowMA_Parametr=18;
extern int TrendMA=163;
extern bool DemarkGo=false;
extern int Demperiod=4;
int rez, rezgo;
//+------------------------------------------------------------------+
// Инициализируем МА
double FastMA=iMA(Symbol(),Time_Frame,FastMA_Parametr,0,3,0,0);// Быстрая МА
double MiddiMA=iMA(Symbol(),Time_Frame,MidMA_Parametr,0,3,0,0);// Средняя МА
double SlowMA=iMA(Symbol(),Time_Frame,SlowMA_Parametr,0,1,0,0); Медленная МА
string StrMetod;
//+------------------------------------------------------------------+
int OnInit()
{
rez=0;
return(INIT_SUCCEEDED);
}
//=======================================
//------------------------------------------------------------------------------
void OnDeinit(const int reason)
{
}
//=============================================
//+------------------------------------------------------------------+
int Konservative()
// Проверка пересечения вверх 3-х линий
{
if (Metod==true)
{
if(FastMA>MiddiMA&&MiddiMA>SlowMA&&rez<=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВВЕРХ----. Консервативное");
rez=1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
return(rez);
}
// Проверка пересечения вниз 3-х линий
if(FastMA<MiddiMA&&MiddiMA<SlowMA&&rez>=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВНИЗ----. Консервативное");
rez=-1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
return(rez);
}
}
return(rez);
}
//=================================================
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int Agressive()
// Проверка пересечения вверх 2-х линий без медленной
{
if (Metod==false)
{
if(FastMA>MiddiMA&&rez<=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВВЕРХ----. Агрессивное");
rez=1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
}
// Проверка пересечения вниз 2-х линий без медленной
if(FastMA<MiddiMA&&rez>=0)
{
Alert("Olegus MA Aert ver 1.2 ",Symbol(),Time_Frame," ----ВНИЗ----. Агрессивное");
rez=-1;
Comment("FastMA ",FastMA," MiddiMA ",MiddiMA," "," SlowMA ",SlowMA," rez ",rez);
}
}
return(rez);
}