Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет, Младен,
Я пытаюсь закодировать это в MT5, но мне кажется, что я не использую правильную реализацию,
моя идея состоит в том, чтобы использовать больше индикаторов, пожалуйста, дайте мне свет... ;-)
this is a sample to understand I'm trying to do..
in this sample:
I put only 3 indicadors.
//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
IN_OUT=0, //in & out
IN=1, //in
OUT=2, //out
};
I have a EA with indicators that I want to mix and optimize it in BackTest.
//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT; //Itrend usage => In & Out
RSI_InOut = IN_; //RSI usage =>only IN
MFI_InOut = OUT_; //MFI usage =>only OUT
//
//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls
//now the skeleton that I'm trying to make work (in future I will use much more indicators)
if(!PositionSelect(Symbol())) ///No opened it's first entrance
{
if (!iT_InOut==OUT_) //Itrend (only options with IN)
{
m_buy= (m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
if (!RSI_InOut==OUT_) //RSI (only options with IN)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
if (!MFI_InOut==OUT_) //MFI (only options with IN)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
///We have opened order it's EXIT
else
{
//Itrend (only options with EXIT)
if (!iT_InOut==IN_)
{
m_buy =(m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
//RSI (only options with EXIT)
if (!RSI_InOut==IN_)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
//MFI (only options with EXIT)
if (!MFI_InOut==IN_)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
Привет, Младен,
Я пытаюсь закодировать это в MT5, но мне кажется, что я не использую правильную реализацию,
моя идея состоит в том, чтобы использовать больше индикаторов, пожалуйста, дайте мне свет... ;-)
this is a sample to understand I'm trying to do..
in this sample:
I put only 3 indicadors.
//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
IN_OUT=0, //in & out
IN=1, //in
OUT=2, //out
};
I have a EA with indicators that I want to mix and optimize it in BackTest.
//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT; //Itrend usage => In & Out
RSI_InOut = IN_; //RSI usage =>only IN
MFI_InOut = OUT_; //MFI usage =>only OUT
//
//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls
//now the skeleton that I'm trying to make work (in future I will use much more indicators)
if(!PositionSelect(Symbol())) ///No opened it's first entrance
{
if (!iT_InOut==OUT_) //Itrend (only options with IN)
{
m_buy= (m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
if (!RSI_InOut==OUT_) //RSI (only options with IN)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
if (!MFI_InOut==OUT_) //MFI (only options with IN)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
///We have opened order it's EXIT
else
{
//Itrend (only options with EXIT)
if (!iT_InOut==IN_)
{
m_buy =(m_buy && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
}
//RSI (only options with EXIT)
if (!RSI_InOut==IN_)
{
m_buy =(m_buy && m_rsi0[0]>m_rsi1[0]);
m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
}
//MFI (only options with EXIT)
if (!MFI_InOut==IN_)
{
m_buy =(m_buy && m_mfi0[0]>m_mfi1[0]);
m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
}
}
Здравствуйте, ребята,
Мне очень нужна помощь, я создаю эксперта с индикатором скальпинга waddah attar, логика работает, все хорошо.
За исключением одного момента, как вы видите на скриншоте бэктеста, на каждом зеленом баре эксперт открывает покупку, то же самое для красных баров. Я хочу только 1 сделку на смену цвета.
Что я хочу?
ИНДИКАТОР ЗЕЛЕНЫЙ ---> он открывает покупку ---> покупка закрывается ---> ИНДИКАТОР КРАСНЫЙ ---> он открывает продажу ---> продажа закрывается ---> повтор.
Я хочу только 1 сделку на изменение цвета.
Вот мой код: (то же самое для коротких)
bool SendLong = false, SendShort = false;
double clnowsell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar);
double clpresell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar+1);
double clnowbuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar);
double clprebuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar+1);
//Long trade
//Specific system filters
//if (some condition) SendLong = true;
if (clnowbuy > 0) SendLong = true;
Кто-нибудь может предложить простое решение, посмотрите на строку 1265, логика приходит сюда.
Большое спасибо!
Здравствуйте, ребята,
Мне очень нужна помощь, я создаю эксперта с индикатором скальпинга waddah attar, логика работает, все хорошо.
За исключением одного момента, как вы видите на скриншоте бэктеста, на каждом зеленом баре эксперт открывает покупку, то же самое для красных баров. Я хочу только 1 сделку на смену цвета.
Что я хочу?
ИНДИКАТОР ЗЕЛЕНЫЙ ---> он открывает покупку ---> покупка закрывается ---> ИНДИКАТОР КРАСНЫЙ ---> он открывает продажу ---> продажа закрывается ---> повтор.
Я хочу только 1 сделку на изменение цвета.
Вот мой код: (то же самое для коротких)
bool SendLong = false, SendShort = false;
double clnowsell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar);
double clpresell = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,1,clbar+1);
double clnowbuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar);
double clprebuy = iCustom(Symbol(),WAScalpingTimeFrame,"Waddah_Attar_Scalping",IPeriod,P1,P2,0,clbar+1);
//Long trade
//Specific system filters
//if (some condition) SendLong = true;
if (clnowbuy > 0) SendLong = true;
Кто-нибудь может предложить простое решение, посмотрите на строку 1265, логика приходит сюда.
Большое спасибо!
Измените условие на
То же самое для шорт
Спасибо, Младен!
Иногда мы застреваем, и нам нужен свежий взгляд на нашу работу.
Еще раз спасибо!
Спасибо, Младен!
Иногда мы застреваем, и нам нужен свежий взгляд на нашу работу.
Еще раз спасибо!
Bonjour,
Ravi de voir une Française, tiens moi au courant des tes résultats avec waddah attar ;)
Зеленые пипки
Привет ребята, я пытаюсь отредактировать индикатор ema-rsi, который может показывать стрелку вверх или вниз, когда происходит пересечение 4 ema и rsi > или < 50.
Моя проблема в том, что эти стрелки не обновляются длякаждого тика после их появления, мне нужно менять таймфрейм, если я хочу проверить, все ли еще условия хороши для показа стрелки. Подскажите, пожалуйста, в чем проблема? Я выкладываю код.
Спасибо
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_width1 4
#property indicator_width2 4
double CrossUp[];
double CrossDown[];
extern int FasterEMA1 = 6;
extern int SlowerEMA1 = 12;
extern int FasterEMA2 = 7;
extern int SlowerEMA2 = 14;
extern int RSInowPeriod = 6;
extern int barsBack = 2000;
extern bool AlertsMessage = true;
extern bool AlertsSound = true;
extern bool debug = false;
extern double K = 1.0 ;
bool EMACrossedUp = false;
bool RSICrossedUp = false;
bool EMACrossedDown = false;
bool RSICrossedDown = false;
int SignalLabeled = 0; // 0: initial state; 1: up; 2: down.
int upalert=false,downalert=false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_ARROW, EMPTY);
SetIndexArrow(0, 241);
SetIndexBuffer(0, CrossUp);
SetIndexStyle(1, DRAW_ARROW, EMPTY);
SetIndexArrow(1, 242);
SetIndexBuffer(1, CrossDown);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
int limit, i, counter;
double fasterEMA1now, slowerEMA1now, fasterEMA1previous, slowerEMA1previous, fasterEMA2now, slowerEMA2now, fasterEMA2previous, slowerEMA2previous;
double RSInow;
double Range, AvgRange;
int counted_bars=IndicatorCounted();
//---- check for possible errors
if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=MathMin(Bars-counted_bars,barsBack);
for(i = limit; i>=0; i--) {
counter=i;
Range=0;
AvgRange=0;
for (counter=i ;counter<=i+9;counter++)
{
AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
}
Range=AvgRange/10;
fasterEMA1now = iMA(NULL, 0, FasterEMA1, 0, MODE_EMA, PRICE_CLOSE, i);
fasterEMA1previous = iMA(NULL, 0, FasterEMA1, 0, MODE_EMA, PRICE_CLOSE, i+1);
fasterEMA2now = iMA(NULL, 0, FasterEMA2, 0, MODE_EMA, PRICE_CLOSE, i);
fasterEMA2previous = iMA(NULL, 0, FasterEMA2, 0, MODE_EMA, PRICE_CLOSE, i+1);
slowerEMA1now = iMA(NULL, 0, SlowerEMA1, 0, MODE_EMA, PRICE_CLOSE, i);
slowerEMA1previous = iMA(NULL, 0, SlowerEMA1, 0, MODE_EMA, PRICE_CLOSE, i+1);
slowerEMA2now = iMA(NULL, 0, SlowerEMA2, 0, MODE_EMA, PRICE_CLOSE, i);
slowerEMA2previous = iMA(NULL, 0, SlowerEMA2, 0, MODE_EMA, PRICE_CLOSE, i+1);
RSInow=iRSI(NULL,0,RSInowPeriod,PRICE_CLOSE,i);
if (RSInow > 50) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" RSI UP ");
RSICrossedUp = true;
RSICrossedDown = false;
}
if (RSInow < 50) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" RSI DOWN ");
RSICrossedUp = false;
RSICrossedDown = true;
}
if ((fasterEMA1now >= slowerEMA1now) && (fasterEMA1previous < slowerEMA1previous) && (fasterEMA2now >= slowerEMA2now) && (fasterEMA2previous < slowerEMA2previous) ) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" EMA UP ");
EMACrossedUp = true;
EMACrossedDown = false;
}
if ((fasterEMA1now <= slowerEMA1now) && (fasterEMA1previous > slowerEMA1previous) && (fasterEMA2now <= slowerEMA2now) && (fasterEMA2previous > slowerEMA2previous)) {
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" EMA DOWN ");
EMACrossedUp = false;
EMACrossedDown = true;
}
if ((EMACrossedUp == true) && (RSICrossedUp == true) && (SignalLabeled != 1)) {
CrossUp[i] = Low[i] - K*Range;
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" SIGNAL UP ");
if(i<=2 && AlertsMessage && !upalert)
{
Alert (Symbol()," ",Period(),"M BUY SIGNAL ");
//SendMail("EMA Cross Up on "+Symbol(),"");
upalert=true;
downalert=false;
}
if(i<=2 && AlertsSound && !upalert)
{
PlaySound("alert.wav");
upalert=true;
downalert=false;
}
SignalLabeled = 1;
}
else if ((EMACrossedDown == true) && (RSICrossedDown == true) && (SignalLabeled != 2)) {
CrossDown[i] = High[i] + K*Range;
if (debug)Print(TimeToStr(Time[i],TIME_DATE)+TimeToStr(Time[i],TIME_SECONDS)+" SIGNAL DOWN ");
if(i<=2 && AlertsMessage && !downalert)
{
Alert (Symbol()," ",Period(),"M SELL SIGNAL ");
//SendMail("EMA Cross Down on "+Symbol(),"");
downalert=true;
upalert=false;
}
if(i<=2 && AlertsSound && !downalert)
{
PlaySound("alert.wav");
downalert=true;
upalert=false;
}
SignalLabeled = 2;
}
}
return(0);
}
//end
В этом коде я вообще не вижу использования индикатора (и как значения копируются в соответствующие массивы).
Привет, Младен,
Вот "sample-ea-modular.mq5" с некоторым кодом внутри... и с интерфейсом, который имеет идею, которую я хочу.
Я пытаюсь сделать его модульным, идея состоит в том, чтобы оптимизировать отдельно вход/выход каждого индикатора...
Если я смогу сделать это с помощью "sample-ea-modular.mq5", я изменю реальный советник.
Реальной базой является Ea-sample.mq5. (выкладываю только для того, чтобы вы увидели все индикаторы).
Уважаемый @mladen,
Если вы сможете решить указанную ниже ошибку, пожалуйста, будьте очень рады.
Спасибо...
"Вопрос : Есть предупреждение, когда я прикрепляюсь к графику и использую автоматическое смещение gmt.
oguz
Как обычно (вы уже знаете это), я не комментирую декомпилированный код, но я вижу, что вы на правильном пути: если это работает (вариант), используйте это. Если не работает, то не используйте. Насколько я понимаю, это просто сообщение (не ошибка), так что ...
Уважаемый @mladen,
Если вы сможете решить указанную ниже ошибку, пожалуйста, будьте очень рады.
Спасибо...
"Вопрос : Есть предупреждение, когда я прикрепляюсь к графику и использую автоматическое смещение gmt.