[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 87
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Lo siento, pero definitivamente está en los Anales. La ignorancia del idioma inglés no es excusa.
No sé cuál es el spread del EURUSD en el micro, sinceramente. Probablemente estés expulsado de este foro. Estos bastardos siempre están pensando en algo para mantenerte fuera.
Hola, por favor, ayuda con un punto, creo que elemental.
int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,0,0);
Alert(GetLastError());
return;
}
El script abre una orden de mercado y todo está bien. Pero si establezco cualquier valor de SL o TP, obtengo el error "Wrong Stop".
int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,Bid-50*Point,Bid+50*Point);
Alert(GetLastError());
return;
}
Este código ya no funciona. ¿Qué pasa? No puedo entenderlo...
int start()
{
OrderSend(Symbol(),OP_BUY,1,Ask,2,1.31845,1.40000);
Alert(GetLastError());
return;
}
Y no funciona aunque introduzca valores numéricos de stop y profit. La distancia mínima de la orden a la orden de parada está bien.
Estimados profesionales Tengo una pregunta. Tengo un EA, opera por varios criterios, ¿cómo hacer que modifique las órdenes por separado? por ejemplo, abrí dos órdenes de COMPRA por diferentes señales, un nivel de equilibrio es de 90pp con incrementos de 40pp, otro es de 50pp con incrementos de 50pp. no pude hacerlo. Como ya lo he probado he visto la cantidad de señales que tengo, y no sé cómo usarlas. Muchas gracias de antemano.
Estimados profesionales Tengo una pregunta. Tengo un EA, opera por varios criterios, ¿cómo hacer que modifique las órdenes por separado? por ejemplo, abrí dos órdenes de COMPRA por diferentes señales, un nivel de equilibrio es de 90pp con incrementos de 40pp, otro es de 50pp con incrementos de 50pp. no pude hacerlo. Como ya lo he probado he visto la cantidad de señales que tengo, y no sé cómo usarlas. Ya lo he probado y no tengo ni idea de cómo utilizarlo.
-Es posible abrir operaciones por diferentes señales con diferentes números Magic.
-Es posible poner "marcas" (por ejemplo, el mismo nivel de arrastre) en el campo de comentarios al abrir las operaciones y luego analizarlo
sin ver el código de tu pregunta, no entiendo muy bien qué quieres hacer exactamente por separado
El código es aproximadamente el siguiente:
for( int c=1; c<=OrdersTotal(); c++) // Bucle de órdenes
{
OrderSelect(c-1,SELECT_BY_POS); // Si hay otra
// Análisis de órdenes:
if(OrderMagicNumber()<1000)
if (R==1 && SL<OrderOpenPrice() && Bid-OrderOpenPrice()>((NoLoss)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*(NoLoss),OrderTakeProfit(),0,Blue);
return;
}
if (R==2 && SL>OrderOpenPrice() && OrderOpenPrice()-Ask>((NoLoss)*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*(NoLoss),OrderTakeProfit(),0,Blue);
return;
}
if (R==1 && SL>=OrderOpenPrice() && Bid - SL > ((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss,OrderTakeProfit(),0,Blue);
return;
}
if (R==2 && SL<=OrderOpenPrice() && SL-Ask>((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss,OrderTakeProfit(),0,Blue);
return;
}
return;
}
//--------------------------------------------------------------------
for(c=1; c<=OrdersTotal(); c++) // Bucle de órdenes
{
OrderSelect(c-1,SELECT_BY_POS); // Si hay otra
// Análisis de órdenes:
if (OrderMagicNumber()>1000)
if (Z==3 && Bid-OrderOpenPrice()>((NoLoss1)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z==4 && SL1>OrderOpenPrice() && OrderOpenPrice()-Ask>NoLoss1*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z==3 && SL1>=OrderOpenPrice() && Bid - SL1 > ((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
if (Z==4 && SL1<=OrderOpenPrice() && SL1-Ask>((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
return;
}
return;
}
//--------------------------------------------------------------------
// Valores de la orden
RefreshRates(); // Refrescar datos
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // Min. lotes
Free =AccountFreeMargin(); // Fondos libres
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// Valor de 1 lote
Step =MarketInfo(Symb,MODE_LOTSTEP); // Tamaño del cambio de paso
if (Lots > 0) // Si se establecen los lotes, entonces
Lts =Lots; // trabaja con ellos
else // % fondos libres
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// Para abrir
if(Lts < Min_Lot) Lts=Min_Lot; // No menos que el mínimo
if(Lts*One_Lot > Free) // Lotes más caros que los libres.
{
Alert(" No hay suficiente dinero ", Lts," Lotes");
return; // Salir de start()
}
//--------------------------------------------------------------- 8 --
// Órdenes de apertura
{
if (Total<2 && Opn_B==true && B==false)
{
// criterio para abrir una orden de compra. Comprar
RefreshRates(); // Actualizar datos
SL=Bid - New_Stop(StopLoss)*Point; // Cálculo de SL abierto.
TP=Bid + New_Stop(TakeProfit)*Point; // Cálculo de TP abierto.
Alert("Intentando abrir la compra. Esperando respuesta...");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP,NULL,y);//Abrir la compra
if (Ticket > 0) // Ha funcionado :)
{
Alert ("Orden de compra abierta ",Ticket);
B=true;
S=false;
Y=OrderMagicNumber();
R=1;
return; // Salir de start()
}
if (Fun_Error(GetLastError())==1) // Manejo de errores
continue; // Reintentar
// Salir start()
}
if (Total<2 && Opn_S==true && S==false) // Abrir órdenes. none +
{
Sleep(10000); // open Sell crit. Venta
RefreshRates(); // Actualizar datos
SL=Ask + New_Stop(StopLoss)*Point; // Cálculo de SL abierto.
TP=Ask - New_Stop(TakeProfit)*Point; // Cálculo de TP abierto.
Alert("Intentando abrir Venta. Esperando respuesta...");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP,NULL,y);//Abrir Sel
if (Ticket > 0) // Funcionó :)
{
Alert ("Orden de venta abierta ",Ticket);
S=true;
B=false;
Y=OrderMagicNumber();
R=2;
return; // Salir de start()
}
if (Fun_Error(GetLastError())==1) // Manejo de errores
continue; // Reintentar
// Salir start()
}
if (Total<2 && Opn_B1==true && B1==false)
{
RefreshRates(); // Actualizar datos
SL1=Bid - New_Stop1(StopLoss1)*Point; // Calcular SL abierto
TP1=Bid + New_Stop1(TakeProfit1)*Point; // Cálculo del TP abierto.
Alert("Intentando abrir la compra. Esperando respuesta...");
Ticket=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL1,TP1,NULL,x);//Abrir la compra
if (Ticket > 0) // Funcionó :)
{
Alert ("Orden de compra abierta ",Ticket);
B1=true;
S1=false;
X=OrderMagicNumber();
Z=3;
return; // Salir de start()
}
if (Fun_Error(GetLastError())==1) // Manejo de errores
continue; // Reintentar
// Salir start()
}
if (Total<2 && Opn_S1==true && S1==false) // Abrir órdenes. none +
{
Sleep(10000); // open Sell crit. Vender
RefreshRates(); // Actualizar datos
SL1=Ask + New_Stop1(StopLoss1)*Point; // Cálculo de la apertura del SL.
TP1=Ask - New_Stop1(TakeProfit1)*Point; // Cálculo de la apertura del TP.
Alert("Intentando abrir Venta. Esperando respuesta...");
Ticket=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL1,TP1,NULL,x);//Abrir Sel
if (Ticket > 0) // Funcionó :)
{
Alert ("Orden de venta abierta ",Ticket);
S1=true;
B1=false;
X=OrderMagicNumber();
Z=4;
return; // Salir de start()
}
if (Fun_Error(GetLastError())==1) // Manejo de errores
continue; // Reintentar
// Salir de start()
}
break; // Salir mientras
}
el código es algo así:
el código es aproximadamente el siguiente:
for( int c=1; c<=TotalPedidos(); c++) // Bucle de pedidos
{
OrderSelect(c-1,SELECT_BY_POS); // Si hay un siguiente
// Análisis de pedidos:
if(OrderMagicNumber()<1000)
if(R==1 && SL<OrderOpenPrice() && Bid-OrderOpenPrice()>((NoLoss)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*(NoLoss),OrderTakeProfit(),0,Blue);
volver;
}
if (R==2 && SL>OrderOpenPrice() && OrderOpenPrice()-Ask>((NoLoss)*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*(NoLoss),OrderTakeProfit(),0,Blue);
volver;
}
if (R==1 && SL>=OrderOpenPrice() && Bid - SL > ((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss,OrderTakeProfit(),0,Blue);
volver;
}
if (R==2 && SL<=OrderOpenPrice() && SL-Ask>((NoLoss*Point)+(StepLoss*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss,OrderTakeProfit(),0,Blue);
volver;
}
volver;
}
//--------------------------------------------------------------------
// En principio, no es necesario escribir nada más: no se ejecutará de todos modos
for(c=1; c<=TotalPedidos(); c++) // Bucle de pedidos
{
OrderSelect(c-1,SELECT_BY_POS); // Si hay un siguiente
// Análisis de pedidos:
if (OrderMagicNumber()>1000)
if (Z==3 && Bid-OrderOpenPrice()>((NoLoss1)*Point) )
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
volver;
}
if (Z==4 && SL1>OrderOpenPrice() && OrderOpenPrice()-Ask>NoLoss1*Point)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
volver;
}
if (Z==3 && SL1>=OrderOpenPrice() && Bid - SL1 > ((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*NoLoss1,OrderTakeProfit(),0,Blue);
volver;
}
if (Z==4 && SL1<=OrderOpenPrice() && SL1-Ask>((NoLoss1*Point)+(StepLoss1*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*NoLoss1,OrderTakeProfit(),0,Blue);
volver;
}
volver ; // Pero "para estar seguros", también hay una "toma de prueba" ;)
}
........ Nada más importa .......
//
//--------------------------------------------------------------------
// Valor del pedido