Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1347
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
No puedo terminar el Asesor Experto. La esencia es simple - primero dibujo un rectángulo, que es un disparador de compra, en caso de que el precio llegue a su área, luego dibujo el segundo - cuando el precio llega allí, el trato debe ser cerrado.
Pero ocurre lo contrario: el precio comienza a abrirse y cerrarse dentro de la zona. ¿Qué estoy haciendo mal?
//+------------------------------------------------------------------+
//| RECTANGLES OP_BUY.mq4 ||
//+------------------------------------------------------------------+
#property copyright ""
#enlace de la propiedad ""
#versión de la propiedad "1.00"
#propiedad estricta
extern int Magia = 777701;
extern double Lote = 0,01;
extern int Deslizamiento = 3;
int ticket;
int OrderOfSymbol;
//+------------------------------------------------------------------+
//| 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()
{
//---
//Comprobar si hay un rectángulo:
if(ObjectsTotal(OBJ_RECTANGLE)==0)
{Comentario("¡Dibuja un rectángulo para abrir una operación de compra!");}
//Obtener el NOMBRE del rectángulo:
for(int n=0;n<ObjectsTotal();n++)
{
string name=Nombre del objeto(n);
if(ObjectType(name)==OBJ_RECTANGLE)
{
datetime t1a = (datetime) ObjectGet(name,OBJPROP_TIME1);
datetime t2a = (datetime) ObjectGet(name,OBJPROP_TIME2);
double p1a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);
double p2a=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);
OrderOfSymbol=CounterOrderTradeType(-1);
si (OrderOfSymbol<1)
si (Cierre[1]>Apertura[1])
if(TimeCurrent()>t1a && TimeCurrent()< t2a &&
Oferta < p1a && Oferta > p2a )
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, 0, 0, "open buy order", Magic, 0, Blue);
}
}
}
//Comprobar si ya hay un segundorectángulo:
if(ObjectsTotal(OBJ_RECTANGLE)==1)
{Comentario("¡Dibuja un segundo rectángulo para cerrar la operación de compra!");}
//Obtener el NOMBRE del rectángulo:
for(int n=0;n<ObjectsTotal();n++)
{
string name=Nombre del objeto(n);
if(ObjectType(name)==OBJ_RECTANGLE)
{
datetime t1b = (datetime) ObjectGet(name,OBJPROP_TIME1);
datetime t2b = (datetime) ObjectGet(name,OBJPROP_TIME2);
double p1b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE1),Digits);
double p2b=NormalizeDouble(ObjectGet(name,OBJPROP_PRICE2),Digits);
if(TimeCurrent()>t1b && TimeCurrent()< t2b &&
Oferta < p1b && Oferta > p2b )
CerrarCompraPosiciones1();
}
}
//Comprobar si ya hay un segundo rectángulo:
if(ObjectsTotal(OBJ_CHANNEL)==2)
{Comentario("Las áreas de apertura y cierre de la orden de compra están establecidas - ¡la operación está en marcha!");}
}
//+------------------------------------------------------------------+
void CerrarCompras1()
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderMagicNumber() == Magic)
if(OrderSymbol() == Symbol())
{
if(OrderType()==OP_BUY)
{
if(OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL)){Print("Order Close");}
}
}
}
//+------------------------------------------------------------------+
//| Conteo de órdenes |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE tipo_orden)
{
int cnt=0;
//----
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
if(OrderSymbol()!=_Symbol) continuar;
if(order_type == OrderType() || order_type == -1) cnt++;
}
//----
return(cnt);
}
Hay una función para publicar código como este, hará que sea más fácil para todos leer su código para ayudar.
Hay una función para publicar código como este, facilitaría que todos leyeran tu código para ayudar.
No le ayudará. Las líneas en blanco sólo las lee gente como él.
Порт-моне тв:
¿Qué estoy haciendo mal?
No hay unicidad en el nombre de la plaza, tienes cualquier plaza como condición para comprar y vender
Esto también le ayudará a
Por favor, indique cómo corregir el error
Este es el error
'CornerInfo' - constant cannot be modified Wa.mq4 22 1 'CornerInfo1' - constant cannot be modified Wa.mq4 23 1 2 errors, 0 warnings 3 1
Gracias.
De nada.)
¿Podría decirme cómo corregir el error?
Aquí hay un error
Las variables de entrada no se pueden modificar.
Puedes hacerlo así:
De nada.)
lasvariables de entrada no pueden ser modificadas.
Puedes hacerlo así:
Gracias. Lo tengo.
Esto también te ayudará.
No lo hizo. Y me he dado cuenta de que los valores del cuadrado no se toman de dos como debería ser, sino del último. No sé cómo superar eso. ¿No me habría dado cuenta por mi cuenta? No domino el mql, por eso te pregunto aquí y me ofreces peines.
no ayudó. Y me he dado cuenta de que los valores del cuadrado no se toman de dos como debería ser, sino del último. No sé cómo superar eso. Yo mismo no lo habría adivinado. No domino el mql, por eso te pregunto y me ofreces peines.
Te ofrezco peines para que tu código sea fácil de leer para aquellos a los que te diriges (sin malicia).
En cuanto a tus cuadrados, para identificarlos correctamente debes entender su origen, es decir, los dibujas tú o el EA