[¡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

 
Mathemat:

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.

He conseguido registrarme, gracias.
 

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.

 
azik1306:

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
}

 
Probado tanto orderselect como majik, EA confunde los pedidos
 
azik1306:

el código es algo así:


Adjunte esos códigos anchos con un archivo, o al menos con SRC (seleccionable en la barra de edición superior), porque es fastidioso para el ojo leer esas líneas.
 
azik1306:

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

 
Gracias, lo probaré ahora.
 
Corregido el código, pero el EA no quiere abordar cada orden individualmente
Razón de la queja: