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
El EA no abre una posición contraria
Hola MQL Coders,
Tengo una pregunta con respecto a un error en mi EA. Parece que no abre una posición de contra-tendencia (ver captura de pantalla adjunta).
Se está cerrando el comercio, pero no es abrir un nuevo comercio para seguir la nueva dirección de la tendencia dada.
// Indicator HMA NMC
double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
//+------------------------------------------------------------------+
//| BUY |
//+------------------------------------------------------------------+
if(trendc!=trendp)
{
if(trendc==1) // code for buy
OpenBuy();
return(0);
}
//+------------------------------------------------------------------+
//| SELL |
//+------------------------------------------------------------------+
if(trendc==-1) // code for sell
{
OpenSell();
return(0);
}
}
[/CODE]
[CODE]
void CheckForClose()
{
RefreshRates();
double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
for(int i=0;i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!= MAGIC) continue;
if(OrderSymbol() != s_symbol) continue;
//+-------------------------------------------------------------------------------+
//| Close BUY |
//+-------------------------------------------------------------------------------+
if(trendc_c!=trendp_c) // Check trend
{
if(OrderType()==OP_BUY)
{
if(trendc_c==-1) //is buy?
{
bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);
if(buyClose==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts == true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
//+--------------------------------------------------------------------------------+
//| Close SELL |
//+--------------------------------------------------------------------------------+
if(trendc_c!=trendp_c)
{
if(OrderType()==OP_SELL)
{
if(trendc_c==1) // SELL
{
bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);
if(sellClose == false)
{
ErrorCode = GetLastError();
ErrDesc = ErrorDescription(ErrorCode);
ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
}
}
Gracias de antemano.
Estimado Mladen
¿Es posible 'añadir banda' en el indicador adjunto como en este post : https://www.mql5.com/en/forum/172894/page45
Ese indicador es de la sección de élite, pero me gusta la forma en que añadir la banda en él
Gracias por cualquier ayuda
secretcodesecretcode
Aquí hay una versión con bandas añadidas : ema_variation__filter_amp_bands_amp_mtf.ex4
secretcode Aquí hay una versión con bandas añadidas : ema_variation__filter_amp_bands_amp_mtf.ex4
Gracias Mladen Realmente aprecio su experiencia
Sinceramente
secretcode
Hola Coders MQL,
Tengo una pregunta con respecto a un error en mi EA. Parece que no abre una posición de contra-tendencia (ver captura de pantalla adjunta).
Se cierra la operación, pero no se abre una nueva operación para seguir la nueva dirección de la tendencia dada.
// Indicator HMA NMC
double trendc = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
//+------------------------------------------------------------------+
//| BUY |
//+------------------------------------------------------------------+
if(trendc!=trendp)
{
if(trendc==1) // code for buy
OpenBuy();
return(0);
}
//+------------------------------------------------------------------+
//| SELL |
//+------------------------------------------------------------------+
if(trendc==-1) // code for sell
{
OpenSell();
return(0);
}
}
[/CODE]
[CODE]
void CheckForClose()
{
RefreshRates();
double trendc_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,1);
double trendp_c = iCustom(Symbol(),0,"Hull moving average 2 strict nmc", "", HMA_Period, HMA_Price, HMA_Speed,0,3,2);
for(int i=0;i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!= MAGIC) continue;
if(OrderSymbol() != s_symbol) continue;
//+-------------------------------------------------------------------------------+
//| Close BUY |
//+-------------------------------------------------------------------------------+
if(trendc_c!=trendp_c) // Check trend
{
if(OrderType()==OP_BUY)
{
if(trendc_c==-1) //is buy?
{
bool buyClose=OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),Slippage*pipMultiplier,clCloseBuy);
if(buyClose==false)
{
int ErrorCode = GetLastError();
string ErrDesc = ErrorDescription(ErrorCode);
string ErrAlert= StringConcatenate("Close Buy Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts == true) Alert(ErrAlert);
string ErrLog=StringConcatenate("Bid: ",MarketInfo(s_symbol,MODE_BID)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
//+--------------------------------------------------------------------------------+
//| Close SELL |
//+--------------------------------------------------------------------------------+
if(trendc_c!=trendp_c)
{
if(OrderType()==OP_SELL)
{
if(trendc_c==1) // SELL
{
bool sellClose= OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),Slippage*pipMultiplier,clCloseSell);
if(sellClose == false)
{
ErrorCode = GetLastError();
ErrDesc = ErrorDescription(ErrorCode);
ErrAlert=StringConcatenate("Close Sell Order - Error ",ErrorCode,": ",ErrDesc);
if(ShowAlerts==true) Alert(ErrAlert);
ErrLog=StringConcatenate("Ask: ",MarketInfo(s_symbol,MODE_ASK)," Lots: ",OrderLots()," Ticket: ",OrderTicket());
Print(ErrLog);
}
}
break;
}
}
}
}
tfi_markets
Trate de mover ambas declaraciones de ruptura una línea hacia arriba (para estar dentro de la "}" )
Hola Mladen,
sería tan amable de decirme dónde me he equivocado con este código.
Adjunto el indicador All Pivots, lo he rehecho para que muestre también la línea de apertura del día anterior, la línea de cierre del día anterior y la línea de apertura del día actual.
Pero el indicador es inconsistente. Siempre muestra los pivotes correctamente, pero rara vez muestra mi código añadido para las líneas de apertura diaria, de apertura y de cierre del día anterior.
No entiendo por qué, el código se ve igual que el código de pivote por lo que todos deben mostrar y a veces lo hace, pero no siempre. He hecho algo mal pero no estoy seguro de qué.
Muchas gracias
PG
allpivots_daily.mq4
Hola Mladen,
Sería tan amable de decirme en qué me he equivocado con este código.
Adjunto el indicador All Pivots, lo he rehecho para que muestre también la línea de apertura del día anterior, la línea de cierre del día anterior y la línea de apertura del día actual.
Pero el indicador es inconsistente. Siempre muestra los pivotes correctamente, pero rara vez muestra mi código añadido para las líneas de apertura diaria, de apertura y de cierre del día anterior.
No entiendo por qué, el código se ve igual que el código de pivote por lo que todos deben mostrar y a veces lo hace, pero no siempre. He hecho algo mal pero no estoy seguro de qué.
Muchas gracias
PG
allpivots_daily.mq4PG
Funciona bien (ver la lista de objetos creados). Comprueba si hay precios superpuestos (eso puede hacer que algunas líneas sean invisibles)
Además, no olvides añadir las líneas recién creadas también en la función ObjectDel()
Gracias Mladen, seguí revisando y parece que es quisquilloso con los nombres de las líneas dentro del "" que no es lo que espero.
Como siempre gracias por tu tiempo y ayuda,
PG
PG
Funciona bien (ver la lista de objetos creados). Comprueba si hay precios superpuestos (eso puede hacer que algunas líneas sean invisibles)
Gracias Mladen, seguí revisando y parece ser quisquilloso con los nombres de las líneas dentro del "" que no es lo que espero.
Como siempre gracias por tu tiempo y ayuda,
PGLos nombres del objeto siempre deben ser únicos - pero por lo que vi te encargaste de eso
Por favor, ayúdenme con esto https://www.mql5.com/en/forum/174385/page263
Gracias, Mladen,
tengo un problema y es que :
mi primera señal de compra después de la última venta, necesito que sea después de que la barra se cierre por encima de la resistencia o "srUp" del código
lo mismo para la venta, tiene que ser la barra cerrada por debajo del soporte o "srDown"
¿Cómo puedo arreglar esto en el código?
Y en segundo lugar, fue el número uno anterior preguntó, es ¿cómo puedo arreglar en mi código para mostrar la primera señal de compra después de vender en un color diferente?
#property estricta
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 clrLime
#property indicator_color2 clrRed
#propiedad indicator_color3 clrMagenta
#propiedad indicador_color4 clrCyan
#define COMPRA 1
#define VENDER 2
doble Compra[],
Vender[],
PrimeraCompra[],
PrimeraVenta[];
int OnInit() {
SetIndexBuffer(0,PrimeraCompra);
SetIndexBuffer(1,PrimeraVenta);
SetIndexBuffer(2,Compra);
SetIndexBuffer(3,Venta);
for(int i=0; i<4; i++) {
SetIndexStyle (i,DRAW_ARROW,STYLE_SOLID,2);}
SetIndexArrow (0,233);
SetIndexArrow (1,234);
SetIndexArrow (2,233);
SetIndexArrow (3,234);
return(INIT_SUCCEED);}
void OnDeinit(const int reason) {}
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[],
const double &open[], const double &high[], const double &low[],
const double &close[], const long &tick_volume[], const long &volume[],
const int &spread[]) {
static int lastSignal=0;
for(int i=MathMin(rates_total-prev_calculated, rates_total-1); i>=0; i--) {
PrimeraCompra=PrimeraVenta=Compra=Venta=Valor_Empleo;
datetime when=Time;
int w=iBarShift(NULL,PERIOD_H4, when),
x=iBarShift(NULL,PERIOD_H1, when),
y=iBarShift(NULL,PERIOD_M15,cuando),
z=iBarShift(NULL,PERIOD_M5, cuando);
double srUpH4 = iCustom(NULL,PERIOD_H4, "Soporte y Resistencia (Barry)",0,w),
srDownH4 = iCustom(NULL,PERIOD_H4, "Soporte y Resistencia (Barry)",1,w),
MidH4 = (srUpH4+srDownH4)/2,
srUpH1 = iCustom(NULL,PERIOD_H1, "Soporte y Resistencia (Barry)",0,x),
srDownH1 = iCustom(NULL,PERIOD_H1, "Soporte y Resistencia (Barry)",1,x),
MidH1 = (srUpH1+srDownH1)/2,
srUp15M = iCustom(NULL,PERIOD_M15, "Soporte y Resistencia (Barry)",0,y),
srDown15M = iCustom(NULL,PERIOD_M15, "Soporte y Resistencia (Barry)",1,y),
Mid15M = (srUp15M+srDown15M)/2,
srUp5M = iCustom(NULL,PERIOD_M5, "Soporte y Resistencia (Barry)",0,z),
srDown5M = iCustom(NULL,PERIOD_M5, "Soporte y Resistencia (Barry)",1,z),
Mid5M = (srUp5M+srDown5M)/2,
srUp = iCustom(NULL,0, "Soporte y Resistencia (Barry)",0,i),
srDown = iCustom(NULL,0, "Soporte y Resistencia (Barry)",1,i);
if(ClosesrUp) { // primera señal de compra
Comprar=Punto_bajo; }
si no {
Comprar=Valor_de_Empleo; }
if(Close>Mid5M && Close>srUp) { // segunda señal de compra
Comprar=Punto_bajo; }
si no {
Buy=EMPTY_VALUE; }
if(Close>MidH4 && Close>Mid15M && Close<srDown) { // primera señal vender
Vender=Alto+_Punto; }
si no {
Vender=Valor_de_Empleo; }
if(Close<Mid5M && Close<srDown) { // segunda señal vender
Vender=Alto+_Punto; }
else {
Vender=EMPTY_VALUE; }}
return(rates_total);}
esto es lo que tengo para las alertas, ¿lo utilizo o en su lugar utilizo el Alert( t("texto para el pop up"))?
void SoundAlert(datetime i, string dir) {
static datetime lastAlert=0;
if(lastAlert!=i) {
Alert(StringFormat("Señal %s en %s a %s",dir,Symbol(),TimeToStr(i));
lastAlert=i;}}
gracias mladen