Ayuda a la codificación - página 395

 

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.

Archivos adjuntos:
 
secretcode:
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

secretcode

secretcode

Aquí hay una versión con bandas añadidas : ema_variation__filter_amp_bands_amp_mtf.ex4

Archivos adjuntos:
 
mladen:
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

 
tfi_markets:
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;

}

}

}

}

¡Gracias de antemano!

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

Archivos adjuntos:
 
pgtips:
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.mq4

PG

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()

Archivos adjuntos:
objects.gif  49 kb
 

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

mladen:
PG

Funciona bien (ver la lista de objetos creados). Comprueba si hay precios superpuestos (eso puede hacer que algunas líneas sean invisibles)

 
pgtips:
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,

PG

Los 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

Archivos adjuntos:
signals.png  31 kb