Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 100
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 a todos, podéis ayudarme a encontrar un error en el código del EA, creo que lo he mirado todo, parece que todo está escrito correctamente en el código, pero el programa no opera correctamente por alguna razón! La idea es la siguiente: El asesor tiene que buscar dos velas largas de la misma dirección (la longitud entre las velas es ajustable en el asesor, es decir, entre las dos velas mínimas o máximas, dependiendo de la dirección), si el precio en la dirección opuesta rompe el mínimo o el máximo de la última vela, un acuerdo debe abrirse (Ejemplo situaciones de imagen en el gráfico adjunto al archivo). El asesor debería abrir operaciones en cada situación adecuada, pero por alguna razón sólo abre operaciones en las ventanas de negociación entre días. Esta es la situación, que no es difícil de los programadores, por favor, ayuda, arreglar el error. El código de EA se ve a continuación, así como en el archivo adjunto.
//+-----------------------------------------------------------------------------------------------+
//| Espaciamiento_Candelas.mq4 |
//| Copyright 2017, Vladim |
//| vk.com/id229534564 |
//| Correo: Vladim120385@yandex.ru |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2017, Vladim"
#enlace de propiedad "vk.com/id229534564"
#versión de la propiedad "1.00"
#propiedad estricta
//--- Parámetros EA
extern string paramEA = ""; // Parámetros EA
extern double volumen = 0.01; // Volumen
extern double stopLoss = 5; // StopLoss.
extern double takeProfit = 1.5; // TakeProfit
extern double maxSpacing = 150; // MaxSpacing
extern double minSpacing = 30; // MinSpacing
extern double TrailingStop = 0; // TrailingStop
extern int magic = 127; // Magia
//--- variables globales
datetime newCandle;
int tip;
//+-----------------------------------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEED);
}
//+-----------------------------------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+-----------------------------------------------------------------------------------------------+
void OnTick()
{
if(newCandle != Time[0]) FindPattern();
nuevaVela = Tiempo[0];
}
//+-----------------------------------------------------------------------------------------------+
void OpenOrder(int type) // Abrir una orden de mercado
{
if(type == OP_BUY) if(OrderSend(_Symbol, OP_BUY, volume, Ask, 0, 0, 0, "", magic, 0)) SetSLTP(OP_BUY);
if(type == OP_SELL) if(OrderSend(_Symbol, OP_SELL, volume, Bid, 0, 0, 0, 0, "", magic, 0)) SetSLTP(OP_SELL);
}
//+-----------------------------------------------------------------------------------------------+
void SetSLTP(int type) //configuración de órdenes stop
{
doble sl = 0;
doble tp = 0;
if(type == OP_BUY)
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_BUY && OrderStopLoss() == 0)
{
sl = NormalizeDouble(Low[1] - stopLoss * _Point, _Digits);
tp = NormalizeDouble(OrderOpenPrice() + (OrderOpenPrice() - Low[1]) * takeProfit, Dígitos);
if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) return;
}
if(type == OP_SELL)
for(int i = 0; i < OrdersTotal(); i++)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_SELL && OrderStopLoss() == 0)
{
sl = NormalizeDouble(High[1] + stopLoss * _Point, _Digits);
tp = NormalizeDouble(OrderOpenPrice() - (High[1] - OrderOpenPrice()) * takeProfit, Dígitos);
if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) return;
}
}
//+-----------------------------------------------------------------------------------------------+
void FindPattern() // Buscando la distancia entre velas
{
if(High[1] < High[2] && Bid > High[1] && Low[1] < Low[2])
{
double spacing = NormalizeDouble((High[2] - High[1]) / _Point, 0);
if(maxSpacing >= spacing && minSpacing <= spacing)
OpenOrder(OP_BUY);
}
if(Low[1] > Low[2] && Bid < Low[1] && High[1] > High[2])
{
double spacing = NormalizeDouble((Low[1] - Low[2]) / _Point, 0);
if(maxSpacing >= spacing && minSpacing <= spacing)
OpenOrder(OP_SELL);
}
{
if(TrailingStop!=0) TrailingStop();
}
}
//+-----------------------------------------------------------------------------------------------+
void TrailingStop()
{
doble StLo,OSL,OOP;
bool error=true;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS))
{
punta = OrderType();
if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
OSL = NormalizeDouble(OrderStopLoss(),Digits);
OOP = NormalizeDouble(OrderOpenPrice(),Digits);
si (punta==0)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits);
si (StLo < OOP) continuar;
si (StLo > OSL)
error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);
}
si (punta==1)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
si (StLo > OOP) continuar;
si (StLo < OSL || OSL==0 )
error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White);
}
if (!error) Alert("Error TrailingStop ",GetLastError()," ",Symbol()," SL ",StLo);
}
}
}
}
//+-----------------------------------------------------------------------------------------------+
¡Hola a todos, podéis ayudarme a encontrar un error en el código del EA, creo que lo he mirado todo, parece que se ha escrito correctamente en el código, pero el programa no opera correctamente por alguna razón! La idea es la siguiente: El asesor tiene que buscar dos velas largas de la misma dirección (la longitud entre las velas es ajustable en el asesor, es decir, entre las dos velas mínimas o máximas, dependiendo de la dirección), si el precio en la dirección opuesta rompe el mínimo o el máximo de la última vela, un acuerdo debe abrirse (Ejemplo situaciones de imagen en el gráfico adjunto al archivo). El asesor debería abrir operaciones en cada situación adecuada, pero por alguna razón sólo abre operaciones en las ventanas de negociación entre días. Esta es la situación, que no es difícil de los programadores, por favor, ayuda, solucionar el error. El código de EA se ve abajo y también en el archivo adjunto.
Quizás ya es suficiente, has acumulado posts en todos los hilos, mientras creabas los tuyos propios.
Hola.
Me pueden decir cómo limitar el comercio de EA por el tiempo.
He probado muchos métodos del foro, pero nada ha funcionado, no entiendo nada de escritura.
Estaría bien que se pudiera señalar lo que hay que poner.
Introdúzcalo después del inicio. y el eXpert negociará cada día en un intervalo de tiempo determinado en el terminal
¡Hola a todos, podéis ayudarme a encontrar un error en el código del EA, creo que lo he mirado todo, parece que todo está escrito correctamente en el código, pero el programa no opera correctamente por alguna razón! La idea es la siguiente: El asesor tiene que buscar dos velas largas de la misma dirección (la longitud entre las velas es ajustable en el asesor, es decir, entre las dos velas mínimas o máximas, dependiendo de la dirección), si el precio en la dirección opuesta rompe el mínimo o el máximo de la última vela, un acuerdo debe abrirse (Ejemplo situaciones de imagen en el gráfico adjunto al archivo). El asesor debería abrir operaciones en cada situación adecuada, pero por alguna razón sólo abre operaciones en las ventanas de negociación entre días. Esta es la situación, que no es difícil de los programadores, por favor, ayuda, solucionar el error. Vea el código de EA a continuación y también en el archivo adjunto.
comprobar la condición de entrada de compra y venta
¡Hola a todos, podéis ayudarme a encontrar un error en el código del EA, creo que lo he mirado todo, parece que se ha escrito correctamente en el código, pero el programa no opera correctamente por alguna razón! La idea es la siguiente: El asesor tiene que buscar dos velas largas de la misma dirección (la longitud entre las velas es ajustable en el asesor, es decir, entre las dos velas mínimas o máximas, dependiendo de la dirección), si el precio en la dirección opuesta rompe el mínimo o el máximo de la última vela, un acuerdo debe abrirse (Ejemplo situaciones de imagen en el gráfico adjunto al archivo). El asesor debería abrir operaciones en cada situación adecuada, pero por alguna razón sólo abre operaciones en las ventanas de negociación entre días. Esta es la situación, que no es difícil de los programadores, por favor, ayuda, solucionar el error. Vea el código de EA a continuación, así como en el archivo adjunto.
Es mejor escribir primero la parte del EA que marcaría en el gráfico las velas encontradas, para que todo quede claro. Y las siguientes líneas son innecesarias en su caso:
Por favor, ayude a la comunidad ...
*
Descargué el indicador del filtro Kalman del foro (código fuente adjunto).
Todo está bien en el gráfico.
Cuando intento leerlo en Expert Advisor aparece la siguiente línea
iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
Da como resultado el mismo número grande, obviamente no relacionado con el indicador:
¿Qué puede ser?
Ayuda de la comunidad ...
*
Descargué el indicador del filtro Kalman del foro (código fuente adjunto).
Todo está bien en el gráfico.
Cuando intento leerlo en Expert Advisor aparece la siguiente línea
iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
Da como resultado el mismo número grande, obviamente no relacionado con el indicador:
¿Qué puede ser?
VALOR_VACÍO
Valor vacío en la memoria intermedia del indicador
2147483647 (0x7FFFFFFFF)
VALOR_VACÍO
Valor vacío en la memoria intermedia del indicador
2147483647 (0x7FFFFFF)
:) Ya lo he encontrado...
¿Por qué sale?
:) Ya lo he encontrado...
¿Pero por qué sale?
El indicador tiene 2 matrices, porque 2 colores. Mientras haya una línea del primer color en la barra, el array con el segundo color es igual a VALOR_VACÍO,
iValue=iCustom(NULL,timeframe, "Kalmanfilter", 4,1,1,0,1);
iValue = EMPTY_VALUE, entonces la línea de 1 barra es naranja. (porque array blue = EMPTY_VALUE)
El indicador tiene 2 matrices, porque 2 colores. Mientras haya una línea del primer color en la barra, el array con el segundo color es igual a VALOR_VACÍO,
iValue=iCustom(NULL,timeframe, "Kalmanfilter", 4,1,1,0,1);
iValue = EMPTY_VALUE, entonces la línea de 1 barra es naranja. (Porque el array azul = EMPTY_VALUE)
Gracias, Nikolai...
Tomé de ambas líneas.
Luego los fusioné en uno solo (dejé un búfer). El mismo resultado.
*
Tengo una pregunta de este tipo:
El indicador tiene una variable draw_begin=500, es decir, el número de velas desde el final (desde la vela más reciente) donde se dibuja el gráfico.
Y cuando extraemos el valor del indicador utilizando el método iCustom(), ¿estos 500 puntos se cuentan a partir de qué vela?
Por qué es importante - draw_begin se utiliza no sólo para dibujar, sino que también participa en el cálculo del indicador ...