[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 636

 

Buenas gente, ayuda, no puedo entender, TrailingStop no está funcionando como debería, si el acuerdo se abre en el trall SELL funciona bien, pero si se abre BUY, a continuación, por alguna razón inmediatamente modificado stopper. ¿Dónde está el error que no puedo entender.... AQUÍ ESTÁ EL CÓDIGO:

extern int TP = 50;
extern int SL = 50;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int inicio()
{
//========= Calcular el nivel de equilibrio ======
int i;
double lotsBUY=0;
doble lotesSEL=0;
double sumBUY=0;
doble sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
si (OrderSymbol()!=Symbol()) continuar;
if (OrderType()==OP_BUY)
{
lotesBUY=lotesBUY+LotesOrdenados();
sumBUY=sumBUY+Lotes de pedido()*Precio de apertura del pedido();
}

if (OrderType()==OP_SELL)
{
lotsSEL=slotsSEL-OrderLots();
sumSEL=sumSEL-Lotes del pedido()*Precio abierto del pedido();
}
}
double priceBUY=0;
si (lotesBUY!=0) precioBUY=sumaBUY/lotesBUY;
doble precioSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;

//======== Posición abierta =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Precio de compraBUY>=Punto*Trailing && (Punto de compra*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE)
}
}
}
return(0);

}

Hay un momento, si cambio priceBUY a OrderOpenPrice() en el bloque TrailingStop, funciona, pero necesito seguir desde el nivel de equilibrio, no desde el precio de apertura..... En VENTA funciona, pero en compra por alguna razón no.... ¡¡¡¡¡¡¡¡No entiendo dónde está el error.....SOS!!!!!!!!

 
Roman.:


Esto no es un error - es un mensaje de que se ha alcanzado el saldo mínimo - es decir, la cuenta está agotada - la ejecución se termina y se inicia una nueva con otro conjunto de parámetros de entrada - ver las casillas de verificación y los valores límite establecidos en la pestaña Optimizar Probador:

Gracias.
 

¡¡¡Buenas tardes!!! Mi EA está retrayendo órdenes con este sitio.

 if(Summaprofita()>=Profit_v_balans )
        {
         for(int i=OrdersTotal()-1;i>=0;i--)
           {
              bool error=true;
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            
            if( magic==OrderMagicNumber( ) && OrderSymbol()==Symbol())
              {
              
                 OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE); error=false;
                           Sleep(1000);
             OrderDelete(OrderTicket());error=false;
         } } }
        

Mi EA ha ido bien antes, al menos hasta que tenía 2-5 pedidos. Ahora tenemos tantos pedidos como queramos: 20, 50 en cada lado. En resumen, no limpia. Bueno, dos o tres o cuatro veces sí, y de repente no.

¡Me pregunto cómo se ve en el probador - en general, elimina varios pedidos cerca del precio, pero no todos! ¿Qué tipo de desviaciones podemos prever, inventar, imaginar, que seguramente cerraría?

Realmente, antes estaba bien. Solía cerrar, ¿no? ¿Qué más necesita? ?????

 

Buenas gente, ayuda, no puedo entender, TrailingStop no está funcionando como debería, si el acuerdo se abre en el trall SELL funciona bien, pero si se abre BUY, a continuación, por alguna razón inmediatamente modificado stopper. ¿Dónde está el error que no puedo entender.... AQUÍ ESTÁ EL CÓDIGO:

extern int TP = 100;
extern int SL = 100;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Расчёт уровня безубытка ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

if (OrderType()==OP_SELL)
{
lotsSEL=lotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;



//======== Открытие позиции =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
return(0);
}

Hay un momento, si cambio priceBUY a OrderOpenPrice() en el bloque TrailingStop, todo funciona, pero necesito un trailing stop desde el nivel de equilibrio, no desde el precio de apertura..... En VENTA funciona, pero en compra por alguna razón no.... ¡¡¡¡¡¡¡¡No entiendo dónde está el error.....SOS!!!!!!!!
 
MIR-ASOV:

Buenas gente, ayuda, no puedo entender, TrailingStop no está funcionando como debería, si el acuerdo se abre en el trall SELL funciona bien, pero si se abre BUY, a continuación, por alguna razón inmediatamente modificado stopper. ¿Dónde está el error que no puedo entender.... AQUÍ ESTÁ EL CÓDIGO:

Hay un momento, si cambio priceBUY a OrderOpenPrice() en el bloque TrailingStop, todo funciona, pero necesito un trailing stop desde el nivel de equilibrio, no desde el precio de apertura..... En VENTA funciona, pero en compra por alguna razón no.... ¡¡¡¡¡¡¡¡No entiendo dónde está el error.....SOS!!!!!!!!

Pruebe a imprimir con Print() el valor de priceBUY antes de modificarlo para ver si cumple las expectativas...
 
Pruebe a imprimir con Print() el valor de priceBUY antes de modificarlo para ver si cumple las expectativas...
Sí, lo he comprobado, se corresponde completamente y ...... Esencialmente el nivel de equilibrio para la COMPRA es igual al precio de apertura de la orden, pero por alguna razón no funciona, pongo OrderOpenPrice() todo funciona, pongo priceBUY, no......
 
Lo más probable es que tenga un cero en la variablepriceBUY en el momento de la apertura, por lo que Bid-priceBUY(0)==Bid, y por tanto
 
Dimka-novitsek:

¡¡¡Buenas tardes!!! Mi EA está retrayendo órdenes con este sitio.

Mi EA parece haber estado haciendo bien antes, al menos hasta que tenía 2-5 órdenes. Ahora tengo una nueva variante con tantos pedidos como quiera: 20, 50 en cada lado. En resumen, no limpia. Bueno, dos o tres o cuatro veces sí, y de repente no.

Me pregunto cómo se ve en el probador - elimina varios pedidos cerca del precio, ¡pero no todos! ¿Qué tipo de desviaciones podemos inventar, de forma extravagante, para poder cerrarlas sin falta?

De verdad, ¿todo estaba bien antes? Solía cerrar, ¿no? ¿Qué más necesita? ?????

Uh, bueno, eso no va a funcionar.

  OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);

Mientras la orden no está cerrada, su OrderClosePrice es igual a 0, y en este lugar debe sustituir el precio real al que se cierra la orden, es decir, Ask en caso de orden SELL y Bid para BUY.

 
alsu:

Bueno, no funciona así.

Hasta que la orden se cierra, su OrderClosePrice es igual a 0, y en este lugar hay que poner el precio real al que se cierra la orden, es decir, Ask en caso de orden de VENTA y Bid para la de COMPRA.


No,OrderClosePrice() para una orden que no está cerrada no es igual a cero - comprobar.OrderCloseTime() - sí
 
¡¡¡Gracias!!! Lo intentaré, lo tengo.