Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Hola Mladen,
Estoy intentando codificar esto en MT5, pero creo que no estoy usando la implementación correcta,
mi idea es usar más indicadores, por favor dame una luz... ;-)
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]);
}
}
Hola Mladen,
Estoy intentando codificar esto en MT5, pero creo que no estoy usando la implementación correcta,
mi idea es usar más indicadores, por favor dame una luz... ;-)
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]);
}
}
Hola chicos,
Realmente necesito ayuda, estoy construyendo un experto con el indicador waddah attar scalping, la lógica está funcionando, todo está bien.
Excepto una cosa, como se ve en la captura de pantalla backtest, en cada barra verde el experto abre una compra, lo mismo para las barras rojas. Quiero sólo 1 operación por cambio de color.
Lo que quiero es :
EL INDICADOR SE PONE VERDE ---> abre una compra ---> la compra se cierra ---> EL INDICADOR SE PONE ROJO ---> abre una venta ---> la venta se cierra ---> repite
Quiero sólo 1 operación por cambio de color.
Este es mi código: (lo mismo para los cortos)
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;
Puede alguien por favor venir con una solución simple, mira la línea 1265, la lógica viene aquí.
Muchas gracias.
Hola chicos,
Realmente necesito ayuda, estoy construyendo un experto con el indicador waddah attar scalping, la lógica está funcionando, todo está bien.
Excepto una cosa, como se ve en la captura de pantalla backtest, en cada barra verde el experto abre una compra, lo mismo para las barras rojas. Quiero sólo 1 operación por cambio de color.
Lo que quiero es :
EL INDICADOR SE PONE VERDE ---> abre una compra ---> la compra se cierra ---> EL INDICADOR SE PONE ROJO ---> abre una venta ---> la venta se cierra ---> repite
Quiero sólo 1 operación por cambio de color.
Este es mi código: (lo mismo para los cortos)
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;
Puede alguien por favor venir con una solución simple, mira la línea 1265, la lógica viene aquí.
Muchas gracias.
Cambia la condición a
Lo mismo para los cortos
¡Gracias Mladen !
A veces nos atascamos y necesitamos una nueva mirada a nuestro trabajo.
Gracias de nuevo.
¡Gracias Mladen !
A veces nos atascamos y necesitamos una nueva mirada a nuestro trabajo.
Gracias de nuevo.
Bonjour,
Ravi de voir une Française, tiens moi au courant des tes résultats avec waddah attar ;)
Pips verdes
Hola chicos estoy tratando de editar un indicador ema-rsi que puede mostrar una flecha hacia arriba o hacia abajo cuando 4 ema cruz ocurre y rsi es > o < 50.
Mi problema es que estas flechas no se actualizan porcada tick una vez que aparecen, tengo que cambiar el marco de tiempo si quiero comprobar si las condiciones siguen siendo buenas para mostrar la flecha. ¿Me pueden decir dónde está el problema? He publicado el código.
Gracias
#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
En ese código no veo para nada el uso de los indicadores (y cómo se copian los valores a los arrays correspondientes)
Hola Mladen,
Aquí está el "sample-ea-modular.mq5" con algo de código dentro... y con la interfaz que tiene la idea que quiero.
Estoy tratando de hacerlo modular , la idea es optimizar por separado la entrada/salida de cada indicador..
Si consigo hacer esto con el "sample-ea-modular.mq5" cambiaré el EA real.
la base real es el Ea-sample.mq5. (lo pongo solo para que veas todos los indicadores)
Estimado @mladen,
Si eres capaz de resolver el error que se menciona a continuación, por favor, muy contentos.
Gracias...
"Pregunta: Hay una advertencia cuando attched a la carta y el uso de auto gmt offset.
oguz
Como siempre (ya lo sabes) no comento el código descompilado, pero veo que vas por buen camino : si funciona (la opción), úsala. Si no lo hace entonces no lo hagas. Por lo que veo eso es sólo un mensaje (no un error) así que ...
Estimado @mladen,
Si eres capaz de resolver el error que se menciona a continuación, por favor, muy contentos.
Gracias...
"Pregunta: Hay una advertencia cuando attched al gráfico y el uso de auto gmt offset.