![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
¡Estoy escribiendo la versión 3 de la Cruz EMA!
¿Alguna idea nueva?
¿Algún comentario?
¡GRACIAS POR TODOS LOS POEPLES ME COMPARTIÓ ESTE HILO¿Podría ser capaz de escribir una versión que funciona igual, pero puedo establecer una configuración para decirle que no comprar y no vender. No quiero comprar más cuando la venta está desactivada, simplemente no hacer nada![](https://c.mql5.com/forextsd/smiles/smile.png)
Las operaciones son lo suficientemente largas como para ayudar a tener esto, ya que siempre podría el comercio con el interés
¿Podría escribir una versión que funcione de la misma manera pero que pueda establecer una configuración para decirle que no compre y que no venda? No quiero comprar más cuando la venta está apagada, simplemente no hacer nada
Hola a todos,
En primer lugar, gracias por todo su esfuerzo![](https://c.mql5.com/forextsd/smiles/smile.png)
¿Sería posible codificar una función para enviar un correo electrónico una vez al día con "el resultado del día" (ganancias/pérdidas del día), es decir, a las 21:00 horas?
De nuevo, gracias por el esfuerzo.![](https://c.mql5.com/forextsd/smiles/You_Rock_Emoticon.png)
I'm writing the version 3 of the EMA Cross!
¿Alguna idea nueva?
¿Algún comentario?
¡GRACIAS POR TODOS LOS POEPLES COMPARTIDOS ME ESTE HILO !He pasado algún tiempo estudiando este EA. Se basa en el retroceso en gran medida. Para que realmente funcione tiene que haber un método para detectar cuando es poco probable que se produzca un retroceso suficiente y no entrar en posiciones en la dirección que tendrá que retroceder hasta el TP. Si puedes hacer eso realmente tendrás algo aquí. También he estado trabajando con un EA similar que sólo abre una posición a la vez en la dirección de la señal. Tiene el mismo problema en cuanto a que no detecta los límites de los patrones de canalización y acaba en posiciones que se abandonan como hace este EA. La modificación es sencilla en teoría, no permitir posiciones largas cuando se encuentren cerca de niveles de resistencia de canales fuertes y no permitir posiciones cortas cerca de niveles de soporte de canales fuertes. Evite que el programa entre en ellos. Manténgalo mirando hacia el interior del canal y no hacia el exterior para hacer sus ganancias. Es cuando mira fuera del canal que crea posiciones abandonadas que lo perjudican.
¿cómo detectar los canales? Todavía no sé qué funciona para eso...
https://www.mql5.com/en/forum/general
Shi Chanel
Querido Aaragon Esto es un indicador
Estimado Aaragon Este es el indicador
¡Gracias por eso expertlive!
Tengo una pregunta sobre a qué líneas de canal de marco de tiempo prestar más atención. Lo que realmente necesito saber es cómo incluir este indicador en la lógica de ejecución del ea con el que estoy trabajando. Todavía no estoy muy lejos con mi aprendizaje de la programación. Me gustaría utilizar estas líneas de canal para limitar que el EA entre en posiciones que tendrían que cerrar fuera del canal. Estoy trabajando en un gráfico de 5m pero el canal en ese TF es demasiado pequeño.
El gráfico de 15m muestra un tamaño de canal de 65 y una pendiente de 0,53 mientras que el gráfico de 30m muestra un tamaño de canal de 246 y una pendiente de -1,62. Eso es bastante divergente. La única manera que conozco para manejar este tipo de dilema es poner los tornillos de backtest hacia abajo en él y ser capaz de cambiar la configuración del indicador en cuanto a que TF se utiliza y ver lo que funciona mejor.
También encontré este indicador de ruptura..
//| 5dayBreakout.mq4 |
//| Bill Sica |
//| http://www.tetsuyama.com |
//+------------------------------------------------------------------+
#property copyright "Bill Sica"
#property link "http://www.tetsuyama.com"
#property indicator_chart_window
//---- input parameters
extern int DAYS=5;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
//---- indicators
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
double daily_high1[20];
double daily_low1[20];
double yesterday_close;
double phigh,plow;
int i=1;
//---- TODO: add your code here
ArrayResize(daily_high1,DAYS);
ArrayResize(daily_low1,DAYS);
ArrayInitialize(daily_high1,0);
ArrayInitialize(daily_low1,0);
ArrayCopySeries(daily_low1, MODE_LOW, Symbol(), PERIOD_D1);
ArrayCopySeries(daily_high1, MODE_HIGH, Symbol(), PERIOD_D1);
/* initialise */
plow=daily_low1[1];
phigh=daily_high1[1];
for(i=1;i<DAYS;i++)
{
if(plow>daily_low1)
{
plow =daily_low1;
}
}
for(i=1;i<DAYS;i++)
{
if(phigh<daily_high1)
{
phigh =daily_high1;
}
}
Comment("\n5dayH ",phigh,"\n5dayL ",plow);
ObjectDelete("5dayHigh1");
ObjectDelete("5dayLow1");
ObjectCreate("5dayHigh1", OBJ_HLINE,0, CurTime(),phigh);
ObjectSet("5dayHigh1",OBJPROP_COLOR,SpringGreen);
ObjectSet("5dayHigh1",OBJPROP_STYLE,STYLE_SOLID);
ObjectCreate("5dayLow1", OBJ_HLINE,0, CurTime(),plow);
ObjectSet("5dayLow1",OBJPROP_COLOR,Red);
ObjectSet("5dayLow1",OBJPROP_STYLE,STYLE_SOLID);
ObjectsRedraw();
return(0);
}
//+------------------------------------------------------------------No sé lo que podría funcionar mejor. ¡Sé que hay una manera de averiguar
construir ambos y probarlos!
//----------------------------------
#property indicator_chart_window
//----------------------------------
extern int Hours=24;
extern color col=SkyBlue;
//------------------
double lr,lr0,lrp;
double sx,sy,sxy,sx2,aa,bb;
int p,sName,fs;
int f,f0,f1;
double dh,dl,dh_1,dl_1,dh_2,dl_2;
int ai_1,ai_2,bi_1,bi_2;
double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;
double price_p1,price_p0,price_p2,price_01,price_00,price_02;
int p1,p0,p2,fp;
//*****************************************
int init() {
p=Hours*60/Period();
if (fs==0) {sName=CurTime(); fs=1;}
return(0);}
//*******************************
int deinit() {
ObjectDelete("1"+sName);
ObjectDelete("0"+sName);
ObjectDelete("2"+sName); }
//*******************************
int start() {
int i,n;
//------------------------------------------------------------------------------
if (f==1) {
p1=iBarShift(Symbol(),Period(),ObjectGet("1"+sName,OBJPROP_TIME1));
p0=iBarShift(Symbol(),Period(),ObjectGet("0"+sName,OBJPROP_TIME1));
p2=iBarShift(Symbol(),Period(),ObjectGet("2"+sName,OBJPROP_TIME1));
if (fp==0 && p!=p1) {p=p1; fp=1;}
if (fp==0 && p!=p0) {p=p0; fp=1;}
if (fp==0 && p!=p2) {p=p2; fp=1;}
}
//====================================================
sx=0; sy=0; sxy=0; sx2=0;
for (n=0; n<=p; n++) {sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2);}
aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);
//----------------------------------------------------
for (i=0; i<=p; i++) {
lr=bb+aa*i;
dh=High-lr; dl=Low-lr;
//----------------------------------------------------
if (i<p/2) {if (i==0) {dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;}
if (dh>=dh_1) {dh_1=dh; ai_1=i;}
if (dl<=dl_1) {dl_1=dl; bi_1=i;}}
//----------------------------------------------------
if (i>=p/2) {if (i==p/2) {dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;}
if (dh>=dh_2) {dh_2=dh; ai_2=i;}
if (dl<=dl_2) {dl_2=dl; bi_2=i;}}}
//-------------------------------------
lr0=bb; lrp=bb+aa*(i+p);
//===================================================
if (MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;
if (MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;
if (MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2)) {if (MathAbs(dh_1-dh_2)=MathAbs(dl_1-dl_2)) f=2;}
//=================================================
if (f==1) {
for (n=0; n<=20; n++) { f1=0;
for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
if (i==0 || i==p/2) dhm=0.0;
if (High-hai>dhm && i<p/2) {ai_1=i; f1=1;}
if (High-hai>dhm && i>=p/2) {ai_2=i; f1=1;} }
if (f==0) break;}
//----------------------------
for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
dli=Low-hai;
if (i==0) dlm=0.0; if (dli<dlm) dlm=dli;}
ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1);
hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);
//----------------------------
price_p1=hap;
price_p0=hap+dlm/2;
price_p2=hap+dlm;
price_01=ha0;
price_00=ha0+dlm/2;
price_02=ha0+dlm;
}
//=================================================
if (f==2) {
for (n=0; n<=20; n++) { f1=0;
for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);
if (i==0 || i==p/2) dlm=0.0;
if (Low-lai<dlm && i<p/2) {bi_1=i; f1=1;}
if (Low-lai=p/2) {bi_2=i; f1=1;}}
if (f==0) break;}
//----------------------------
for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);
dhi=High-lai;
if (i==0) dhm=0.0; if (dhi>dhm) dhm=dhi;}
la0=Low*(0-bi_2)/(bi_1-bi_2)+Low*(0-bi_1)/(bi_2-bi_1);
lap=Low*(p-bi_2)/(bi_1-bi_2)+Low*(p-bi_1)/(bi_2-bi_1);
//----------------------------------------------------------------
price_p1=lap;
price_p0=lap+dhm/2;
price_p2=lap+dhm;
price_01=la0;
price_00=la0+dhm/2;
price_02=la0+dhm;
}
//===================================================================================
ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01);
ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);
ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02);
//-----------------------------------------------------------------
ObjectSet("1"+sName,OBJPROP_COLOR,col);
ObjectSet("0"+sName,OBJPROP_COLOR,col);
ObjectSet("0"+sName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet("2"+sName,OBJPROP_COLOR,col);
//---------------------------------------------
ObjectSet("1"+sName,OBJPROP_TIME1,Time[p]);
ObjectSet("1"+sName,OBJPROP_PRICE1,price_p1);
ObjectSet("1"+sName,OBJPROP_TIME2,Time[0]);
ObjectSet("1"+sName,OBJPROP_PRICE2,price_01);
ObjectSet("0"+sName,OBJPROP_TIME1,Time[p]);
ObjectSet("0"+sName,OBJPROP_PRICE1,price_p0);
ObjectSet("0"+sName,OBJPROP_TIME2,Time[0]);
ObjectSet("0"+sName,OBJPROP_PRICE2,price_00);
ObjectSet("2"+sName,OBJPROP_TIME1,Time[p]);
ObjectSet("2"+sName,OBJPROP_PRICE1,price_p2);
ObjectSet("2"+sName,OBJPROP_TIME2,Time[0]);
ObjectSet("2"+sName,OBJPROP_PRICE2,price_02);
//==================================================================
f=1; p1=p; p0=p; p2=p; fp=0;
//*************************************************************************************
return(0);}
//=====================================================================================ok este no me da diferentes pendientes en cada marco de tiempo. Depende de lo lejos que dibuje las líneas en cuanto a la pendiente...
hum, eso es tres maneras de hacerlo ahora ...
una que usa los máximos y mínimos más altos, otra que tiene pendientes divergentes y esta....Estoy tímido en la que da pendientes divergentes en cada TF. Si voy a hacer un filtro a partir de él no me entra en la cabeza que la pendiente cambie con tanta volatilidad.
shi shanel-v.2 nuevo
querido Aaragorn ... esta es una nueva versión y una tabla de imágenes para que sepas cómo usarla
Estimado Aaragorn ... esta es una nueva versión y un gráfico de la imagen para que usted sepa cómo usarlo
Gracias por tu trabajo expertlive. Estoy teniendo problemas para conseguir que se cargue en la plataforma con éxito.
Lo descomprimo en la carpeta de indicadores pero no aparece cuando reinicio la plataforma. No estoy seguro de por qué.
¿Podría adjuntarlo o publicar el código aquí directamente sin comprimir y tal vez eso podría funcionar?
¿Se supone que esto va en la carpeta de expertos o en la carpeta de indicadores? ¿Esto realmente ejecuta órdenes de compra/venta o es sólo el indicador?
Está claro por la imagen que has publicado que entiendes lo que estoy tratando de hacer aquí. Mantener el programa dentro del canal. ¿Sabes cómo programarlo para hacer esto?
shi shanel v.2 nuevo
gracias por su trabajo expertlive. Estoy teniendo problemas para conseguir que se cargue en la plataforma con éxito.
Lo descomprimo en la carpeta de indicadores pero no aparece cuando reinicio la plataforma. No sé por qué.
¿Podría adjuntarlo o publicar el código aquí directamente sin comprimirlo y tal vez eso podría funcionar?
¿Se supone que esto va en la carpeta de expertos o en la carpeta de indicadores? ¿Esto realmente ejecuta órdenes de compra/venta o es sólo el indicador?
Está claro por la imagen que has publicado que entiendes lo que estoy tratando de hacer aquí. Mantener el programa dentro del canal. ¿Sabes cómo programarlo para hacer esto?use esto si no funciona dígame que lo envíe de nuevo
¡eso funciona muy bien expertlive, gracias! ¿Podrías modificar este indicador de la misma manera? Creo que me gusta más este indicador que el shi aunque sean tan parecidos, este me parece más estable. ¿Puedes instruirme en cómo hacer que el indicador modificado forme parte de un EA para que pueda hacer backtest? o ¿podrías hacerlo tú? Me gustaría añadir esto como un filtro para estos dos EA's (ver adjunto)
//----------------------------------
#property indicator_chart_window
//----------------------------------
extern int Hours=24;
extern color col=SkyBlue;
//------------------
double lr,lr0,lrp;
double sx,sy,sxy,sx2,aa,bb;
int p,sName,fs;
int f,f0,f1;
double dh,dl,dh_1,dl_1,dh_2,dl_2;
int ai_1,ai_2,bi_1,bi_2;
double hai,lai,dhi,dli,dhm,dlm,ha0,hap,la0,lap;
double price_p1,price_p0,price_p2,price_01,price_00,price_02;
int p1,p0,p2,fp;
//*****************************************
int init() {
p=Hours*60/Period();
if (fs==0) {sName=CurTime(); fs=1;}
return(0);}
//*******************************
int deinit() {
ObjectDelete("1"+sName);
ObjectDelete("0"+sName);
ObjectDelete("2"+sName); }
//*******************************
int start() {
int i,n;
//------------------------------------------------------------------------------
if (f==1) {
p1=iBarShift(Symbol(),Period(),ObjectGet("1"+sName,OBJPROP_TIME1));
p0=iBarShift(Symbol(),Period(),ObjectGet("0"+sName,OBJPROP_TIME1));
p2=iBarShift(Symbol(),Period(),ObjectGet("2"+sName,OBJPROP_TIME1));
if (fp==0 && p!=p1) {p=p1; fp=1;}
if (fp==0 && p!=p0) {p=p0; fp=1;}
if (fp==0 && p!=p2) {p=p2; fp=1;}
}
//====================================================
sx=0; sy=0; sxy=0; sx2=0;
for (n=0; n<=p; n++) {sx+=n; sy+=Close[n]; sxy+=n*Close[n]; sx2+=MathPow(n,2);}
aa=(sx*sy-(p+1)*sxy)/(MathPow(sx,2)-(p+1)*sx2); bb=(sy-aa*sx)/(p+1);
//----------------------------------------------------
for (i=0; i<=p; i++) {
lr=bb+aa*i;
dh=High-lr; dl=Low-lr;
//----------------------------------------------------
if (i<p/2) {if (i==0) {dh_1=0.0; dl_1=0.0; ai_1=i; bi_1=i;}
if (dh>=dh_1) {dh_1=dh; ai_1=i;}
if (dl<=dl_1) {dl_1=dl; bi_1=i;}}
//----------------------------------------------------
if (i>=p/2) {if (i==p/2) {dh_2=0.0; dl_2=0.0; ai_2=i; bi_2=i;}
if (dh>=dh_2) {dh_2=dh; ai_2=i;}
if (dl<=dl_2) {dl_2=dl; bi_2=i;}}}
//-------------------------------------
lr0=bb; lrp=bb+aa*(i+p);
//===================================================
if (MathAbs(ai_1-ai_2)>MathAbs(bi_1-bi_2)) f=1;
if (MathAbs(ai_1-ai_2)<MathAbs(bi_1-bi_2)) f=2;
if (MathAbs(ai_1-ai_2)==MathAbs(bi_1-bi_2)) {if (MathAbs(dh_1-dh_2)=MathAbs(dl_1-dl_2)) f=2;}
//=================================================
if (f==1) {
for (n=0; n<=20; n++) { f1=0;
for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
if (i==0 || i==p/2) dhm=0.0;
if (High-hai>dhm && i<p/2) {ai_1=i; f1=1;}
if (High-hai>dhm && i>=p/2) {ai_2=i; f1=1;} }
if (f==0) break;}
//----------------------------
for (i=0; i<=p; i++) {hai=High[ai_1]*(i-ai_2)/(ai_1-ai_2)+High[ai_2]*(i-ai_1)/(ai_2-ai_1);
dli=Low-hai;
if (i==0) dlm=0.0; if (dli<dlm) dlm=dli;}
ha0=High[ai_1]*(0-ai_2)/(ai_1-ai_2)+High[ai_2]*(0-ai_1)/(ai_2-ai_1);
hap=High[ai_1]*(p-ai_2)/(ai_1-ai_2)+High[ai_2]*(p-ai_1)/(ai_2-ai_1);
//----------------------------
price_p1=hap;
price_p0=hap+dlm/2;
price_p2=hap+dlm;
price_01=ha0;
price_00=ha0+dlm/2;
price_02=ha0+dlm;
}
//=================================================
if (f==2) {
for (n=0; n<=20; n++) { f1=0;
for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);
if (i==0 || i==p/2) dlm=0.0;
if (Low-lai<dlm && i<p/2) {bi_1=i; f1=1;}
if (Low-lai=p/2) {bi_2=i; f1=1;}}
if (f==0) break;}
//----------------------------
for (i=0; i<=p; i++) {lai=Low*(i-bi_2)/(bi_1-bi_2)+Low*(i-bi_1)/(bi_2-bi_1);
dhi=High-lai;
if (i==0) dhm=0.0; if (dhi>dhm) dhm=dhi;}
la0=Low*(0-bi_2)/(bi_1-bi_2)+Low*(0-bi_1)/(bi_2-bi_1);
lap=Low*(p-bi_2)/(bi_1-bi_2)+Low*(p-bi_1)/(bi_2-bi_1);
//----------------------------------------------------------------
price_p1=lap;
price_p0=lap+dhm/2;
price_p2=lap+dhm;
price_01=la0;
price_00=la0+dhm/2;
price_02=la0+dhm;
}
//===================================================================================
ObjectCreate("1"+sName,2, 0,Time[p],price_p1,Time[0],price_01);
ObjectCreate("0"+sName,2, 0,Time[p],price_p0,Time[0],price_00);
ObjectCreate("2"+sName,2, 0,Time[p],price_p2,Time[0],price_02);
//-----------------------------------------------------------------
ObjectSet("1"+sName,OBJPROP_COLOR,col);
ObjectSet("0"+sName,OBJPROP_COLOR,col);
ObjectSet("0"+sName,OBJPROP_STYLE,STYLE_DOT);
ObjectSet("2"+sName,OBJPROP_COLOR,col);
//---------------------------------------------
ObjectSet("1"+sName,OBJPROP_TIME1,Time[p]);
ObjectSet("1"+sName,OBJPROP_PRICE1,price_p1);
ObjectSet("1"+sName,OBJPROP_TIME2,Time[0]);
ObjectSet("1"+sName,OBJPROP_PRICE2,price_01);
ObjectSet("0"+sName,OBJPROP_TIME1,Time[p]);
ObjectSet("0"+sName,OBJPROP_PRICE1,price_p0);
ObjectSet("0"+sName,OBJPROP_TIME2,Time[0]);
ObjectSet("0"+sName,OBJPROP_PRICE2,price_00);
ObjectSet("2"+sName,OBJPROP_TIME1,Time[p]);
ObjectSet("2"+sName,OBJPROP_PRICE1,price_p2);
ObjectSet("2"+sName,OBJPROP_TIME2,Time[0]);
ObjectSet("2"+sName,OBJPROP_PRICE2,price_02);
//==================================================================
f=1; p1=p; p0=p; p2=p; fp=0;
//*************************************************************************************
return(0);}
//=====================================================================================la imagen .gif muestra la diferencia de los dos en un gráfico. El número de barras que mira esto cambia la forma en que se mueve en el gráfico también. ¿qué idioma es shi mostrando en el gráfico? ¿Podría mostrar el inglés?
En la EMA CROSS no sólo quiero que el stop loss se fije en el nivel del filtro, sino que no quiero que la EMA CROSS abra una posición que tendría que cerrar fuera del canal. Eso dependería del objetivo del TP pero así es como me gustaría que funcionara el filtro en la EMA CROSS y en el EA "como sea".
Admiro tu capacidad de programación me gustaría saber hacerlo más.