Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 818
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
if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {
// время time[i] попало внутрь бара открытого в time_m1
}
OK) una flecha, pero por esta condición en M15 y superior la flecha se fija en 21:00
y si sólo utiliza+PeriodSeconds(PERIOD_M1) sinPeriod()*, no se establece en absoluto)
OK) una flecha, pero por esta condición en M15 y superior la flecha se fija en 21:00
Y si sólo utiliza+PeriodSeconds(PERIOD_M1) sinPeriod()*, no se establece en absoluto)
Lea la documentación :-) Period() devuelve sólo el id del periodo actual - ¿por qué se multiplica por él?
en lugar de PERIOD_M1 (que se da como ejemplo), pásalo a PeriodSeconds( Period() ) - y luego obtener cuántos segundos en 1 barra del período actual.
Hasta aquí el enigma del "paralelepípedo de las Bermudas".
A mí me funciona :) Incluso he intentado abrir y cerrar el terminal.
PD: Artyom, has movido la pregunta del cinco al tema del cuatro... Lo encontré por accidente.
Línea EMA 20 23.04.2019 00:00
Al encender MT5, SIN conexión online, aparece inmediatamente el mensaje "array out....".
Los errores varían, pero siempre están presentes. Puede replicarse en línea, pero suele estar presente cuando la MT está encendida.
Tal es el misterio del "paralelepípedo de las Bermudas"
A mí me funciona :) Incluso he intentado abrir y cerrar el terminal.
PD: Artyom, has movido la pregunta del cinco al tema del cuatro... Lo encontré por accidente.
Este es un tema común - aquí ayudamos no sólo con MQL4, sino también para la migración a MQL5. Así que está en el tema.
¡Hola!
He descargado el video tutorial de programación de MQL4.
He creado un Asesor Experto según la lección.
Pero no funciona cuando estoy comerciando.
No tengo ningún error al compilarlo.
Como estoy al principio de mi viaje, es difícil encontrar el error hasta ahora.
Pido ayuda si alguien puede ayudarme.
Gracias.
Código:
/+----Входные параметры----------------+
extern inttern BarCount=10;
extern int HourStart=14;
extern double Lots=0.1;
extern int StopLoss=120;
extern int TakeProfit=300;
extern int Magia=1456;
//+------------Глобальные переменные----------------+
double minprice=999999,mp,
maxprice=-99999,SL,TP;
int ticket;
//+------------------------------------------------------------------+
//| Función de inicialización de expertos |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| Función de desinicialización experta |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| función de tic experto |
//+------------------------------------------------------------------+
void OnTick()
{
GetMinPrice();
GetMaxPrice();
if(HoraHora(HoraActual())==HoraInicio)
{
if(BuyLimitCount()&& BuyCount() ==0)
{
SL=NormalizeDouble(minprice-StopLoss*Point,5);
TP=NormalizeDouble(minprice+TakeProfit*Point,5);
ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,minprice,5,SL,TP,"",Magic,0,Blue);
if(ticket<0)
Print("Fallo en la apertura del límite de compra");
}
if(SellLimitCount()&& SellCount()==0)
{
SL=NormalizeDouble(maxprice+StopLoss*Point,5);
TP=NormalizeDouble(maxprice-TakeProfit*Point,5);
ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,maxprice,5,SL,TP,"",Magic,0,Red);
if(ticket<0)
Print("Fallo en la apertura del Límite de Venta");
}
}
Comment("Precio mínimo: "+DoubleToStr(precio mínimo,5)+"\NPrecio máximo: "+DoubleToStr(precio máximo,5));
}
//+FUNCIÓN PARA DEFINIR EL PRECIO MÍNIMO EN EL NÚMERO DE BARRA DE BARCOUNT
void GetMinPrice()
{
for(int i=0; i<BarCount; i++)
{
mp=iLow(Symbol(),PERIOD_CURRENT,i);
if(mp<minprice)
precio mínimo=mp;
}
volver;
}
//+FUNCIÓN PARA DETERMINAR EL PRECIO MÁXIMO EN EL NÚMERO DE BARRAS
void GetMaxPrice()
{
for(int i=0; i<BarCount; i++)
{
mp=iHigh(Symbol(),PERIOD_CURRENT,i);
si(mp>precio máximo)
maxprice=mp;
}
volver;
}
//+FUNCIÓN DEL NÚMERO DE ÓRDENES LIMITADAS ABIERTAS PARA COMPRAR
int CantidadLímiteDeCompra()
{
int count=0;
for(int i=Total de Pedidos()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUYLIMIT)
{
cuenta++;
}
}
return(count);
}
//+FUNCIÓN DEL NÚMERO DE ÓRDENES LIMITADAS DE VENTA ABIERTAS
int CantidadLímiteDeVenta()
{
int count=0;
for(int i=Total de Pedidos()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELLLIMIT)
{
cuenta++;
}
}
return(count);
}
//+FUNCIÓN DEL NÚMERO DE ÓRDENES DE MERCADO ABIERTO
int CuentaDeCompra()
{
int count=0;
for(int i=Total de Pedidos()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
{
cuenta++;
}
}
return(count);
}
//+FUNCIÓN DEL NÚMERO DE ÓRDENES DE VENTA EN EL MERCADO ABIERTO
int CuentaVenta()
{
int count=0;
for(int i=Total de Pedidos()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
{
cuenta++;
}
}
return(count);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
Seric29
Gracias, añadiré su información a mi equipaje.
¿Puede usted por favor aconsejar cómo escribir conceptualmente el código de EA, que toma los precios de comercio de archivo .csv. Por qué surge esta pregunta: En cada tick el EA comparará el precio actual con el precio en el archivo .csv, que es leído en su totalidad por la función fileopen, si lo entiendo correctamente. Pero el archivo contiene más de 5000 líneas para el año pasado, cada línea tiene el nombre del instrumento, el precio, el tipo de operación (compra/venta), la fecha de registro, la fecha de cancelación de la orden. Al hacer la prueba, el Asesor Experto recorrerá todas las líneas del archivo en cada tick para entender si es el momento de colocar una orden? O, para probar, ¿debemos hacer que nuestro EA establezca todas las órdenes con la fecha de cancelación a la vez durante la inicialización y comprobar las órdenes reales por su fecha de vencimiento en cada tick para la negociación real? Puede que no sea correcto en cuanto a recursos o que haya otras variantes (por ejemplo, habría que hacer objetos gráficos y comparar el precio actual con ellos, pero ahí también hay un bucle); por favor, aconséjenme.
Normalmente se intenta leer (escribir) en el archivo el menor número de veces posible.
Para su tarea, sería mejor leer los datos en un array al cargar (aunque probablemente sea más conveniente hacerlo en una estructura) y luego comparar los valores de precio y tiempo actuales con los valores del array
SZY: búsqueda en la base de código "archivo" o "csv" fue una vez tales Asesores Expertos listos - leer de un archivo de comercio de los datos
Normalmente se intenta leer (escribir) en el archivo el menor número de veces posible.
Para su tarea, sería mejor leer los datos en un array al cargar (aunque probablemente sea más conveniente hacerlo en una estructura) y luego comparar los valores de precio y tiempo actuales con los valores del array
ZS: buscar en codebase "archivo" o "csv" fue una vez tales EAs listos - leer de un archivo de comercio en que los datos
Muchas gracias, tengo la respuesta que quería.