Problema con el código EA 2 (gestor de SL) - página 4

 
diostar:

Es posible que esto ofrezca alguna ayuda, espero.

Inicialmente, mis símbolos fue de 4 dígitos, todos los trailing stops, órdenes de parada / límite modificar, fue como se esperaba. Entonces mi corredor decidió ir fraccional. Hice los cambios necesarios y vi que mis pips fueron como -3.4, -4.5, 0.1, 4.6, 7.3, etc, etc. Pensé que esto estaba bien, pero en realidad no: Supongamos que establezco mi límite=7, y digamos que los nuevos tick 1,tick 2,tick 3 suceden secuencialmente:

1) 7.3>límite, entonces la orden se modifica... el corredor llena 1 deslizamiento fuera...

2) 7.5>límite, entonces la orden es modificada....el corredor llena 0 deslizamiento...

3) 7.1>límite, entonces la orden se modifica... el corredor llena 2 deslizamiento fuera...

Así que, en total, mis órdenes se modifican 3 veces para los 3 ticks. Habiéndome dado cuenta de esto, decidí usar MathRound() para redondearlas al entero más cercano, así que 1,2,3 se convierte en

1) mathround(7.3) =7 >limit, NOT TRUE, no modificado

2) mathround(7.5)=8 >limit, TRUE, se modifica el orden

3) mathround(7.1)=7>límite, NO VERDADERO, no se modifica

En realidad, todavía estoy trabajando en la forma de mejorar lo anterior ... hasta ahora están trabajando bien, pero creo que debe haber mejores maneras, que la mía.


Impresionante Diostar, eso es información muy muy útil para mí en realidad, sobre todo ese bit que highlighed.

Así que si arreglo mi problema, lo mejor que puedo esperar es:

cada vez que mis condiciones se satisfacen en el gap 00, 01, 02 etc, lo mejor que puedo esperar es 1,2,3 (respectivamente) desplazamientos de cada hey. Así que en el gap 03 modificará mi orden 02,01,00, luego 01,00,02 y luego 00,02,01 hasta que se modifiquen todas las órdenes? Si los desplazo hacia delante lo mismo, pero diferente orden, etc...

Creo que podría estar bien si esto sucede en realidad ... sin embargo, podría encontrar lo mismo que usted más tarde y quiere apretar, pero estoy feliz de abordar un puente a la vez .. ¡Gracias por la previsión, sin embargo!

todavía estoy por probar esa forumula...

 
esa fórmula fue bien también, gracias por el apoyo allí Diostar, yo estaba persiguiendo mi cola alrededor de las edades de aprendizaje de código, gracias..
 

Como siempre el camino hey, en retrospectiva a pensar en una solución diferente.....

Sólo para mi aprendizaje, sería el bloque de abajo trabajó como una alternativa solución a mi problema antes?


//---------------------------old attempt where it spammed modifies--------------------------------------
//---------------------------I got around this problem another way before-------------------------------
void ModifySellBlock()
{
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == SELL_Magic01)
        { 
            double Level_00_SL = Bid + Stoploss_Level_00*PipValue*Point;
            if (Stoploss_Level_00 == 0) Level_00_SL = 0;
            double Level_00_TP = Bid - Takeprofit_Level_00*PipValue*Point;
            if (Takeprofit_Level_00 == 0) Level_00_TP = 0;
            bool ret00 = OrderModify(OrderTicket(), OrderOpenPrice(), Level_00_SL, Level_00_TP, 0, Modify_Order_Colour);
            if (ret00 == false)
            Print("OrderModify() error - ", ErrorDescription(GetLastError()));
        }
    }
    
}

//-----------------------------however I am wondering now that I have fixed it------------------
//------------------------------would this of worked below?-------------------------------------

void ModifySellBlock()
{
    int orderstotal = OrdersTotal();
    int orders = 0;
    int ordticket[30][2];
    for (int i = 0; i < orderstotal; i++)
    {
        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
        if (OrderType() != OP_SELL || OrderSymbol() != Symbol() || OrderMagicNumber() != 1)
        {
            continue;
        }
        ordticket[orders][0] = OrderOpenTime();
        ordticket[orders][1] = OrderTicket();
        orders++;
    }
    if (orders > 1)
    {
        ArrayResize(ordticket,orders);
        ArraySort(ordticket);
    }
    for (i = 0; i < orders; i++)
    {
        if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET) == true)
        {
            double Level_00_SL = Bid + Stoploss_Level_00*PipValue*Point;
            if (Stoploss_Level_00 == 0) Level_00_SL = 0;
            double Level_00_TP = Bid - Takeprofit_Level_00*PipValue*Point;
            if (Takeprofit_Level_00 == 0) Level_00_TP = 0;
            bool ret00 = OrderModify(OrderTicket(), OrderOpenPrice(), Level_00_SL, Level_00_TP, 0, Modify_Order_Colour);
            if (ret00 == false)
            Print("OrderModify() error - ", ErrorDescription(GetLastError()));
        }
    }
    
}

//--------------------------any problems with this block?----------------------------------------------
 
 
//-----------------------------however I am wondering now that I have fixed it------------------
//------------------------------would this of worked below?-------------------------------------

void ModifySellBlock()
{
    int orderstotal = OrdersTotal();
    int orders = 0;
    int ordticket[30][2];<-----then, arrayinitialize
    
    for (int i = 0; i < orderstotal; i++)
    {
        OrderSelect(i, SELECT_BY_POS, MODE_TRADES);<-----if(orderselect...

        if (OrderType() != OP_SELL || OrderSymbol() != Symbol() || OrderMagicNumber() != 1)
        {
            continue;
        }
        ordticket[orders][0] = OrderOpenTime();
        ordticket[orders][1] = OrderTicket();
        orders++;
    }
    if (orders > 1)<----orders >0
    {
        ArrayResize(ordticket,orders);
        ArraySort(ordticket);
    }
    for (i = 0; i < orders; i++)
    {
        if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET) == true)<---if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET)

        {
            double Level_00_SL = Bid + Stoploss_Level_00*PipValue*Point;
            if (Stoploss_Level_00 == 0) Level_00_SL = 0;
            double Level_00_TP = Bid - Takeprofit_Level_00*PipValue*Point;
            if (Takeprofit_Level_00 == 0) Level_00_TP = 0;      
         
            can consider if(SL>0 || TP>0){
          
            bool ret00 = OrderModify(OrderTicket(), OrderOpenPrice(), Level_00_SL, Level_00_TP, 0, Modify_Order_Colour);
            if (ret00 == false)
            Print("OrderModify() error - ", ErrorDescription(GetLastError()));
        }
    }
    
}
 
diostar:


Gracias por tu tiempo con eso Diostar. En su momento, no tenía los conocimientos necesarios para que se me ocurriera esta idea. Incluso ahora lo he remodelado a partir de algunos trozos de código, ya que todavía estoy aprendiendo a hacer ARRAYS...

Honestamente no puedo creer lo difícil que fue hacer una sección de código, que sólo SELECCIONA TODOS LOS PEDIDOS, y los MODIFICA UNA VEZ... si el flujo de datos se enviara aquí CADA VEZ...

Aprecio su tiempo con sus adiciones, voy a darles un ir ... Hey también Diostar, creo que me estoy dando cuenta de lo que dijiste antes también, gracias por la previsión para saber que no era mi código.... Veo que el desplazamiento a través de las modificaciones (* # órdenes que he ido), y me doy cuenta de deslizamiento que viene en él ... te mantendré informado si me pongo en torno a ella, posiblemente con el código anterior como un comienzo para ser honesto, gracias de nuevo ;)

 
Funky:


Gracias por tu tiempo con eso Diostar. En su momento, no tenía los conocimientos necesarios para que se me ocurriera esta idea. Incluso ahora lo he remodelado a partir de algunos trozos de código, ya que todavía estoy aprendiendo a hacer ARRAYS...

Honestamente no puedo creer lo difícil que fue hacer una sección de código, que sólo SELECCIONA TODOS LOS PEDIDOS, y los MODIFICA UNA VEZ... si el flujo de datos se enviara aquí CADA VEZ...

Aprecio su tiempo con sus adiciones, voy a darles un ir ... Hey también Diostar, creo que me estoy dando cuenta de lo que dijiste antes también, gracias por la previsión para saber que no era mi código.... Veo que el desplazamiento a través de las modificaciones (* # órdenes que he ido), y me doy cuenta de deslizamiento que viene en él ... te mantendré informado si me pongo en torno a ella, posiblemente con el código anterior como un comienzo para ser honesto, gracias de nuevo ;)

De nada. El deslizamiento, al igual que la propagación, hacer fuera de cotización el resultado en cualquier precio de modificación, sl, tp. Pero yo siempre ordersend() con slippage cero, todavía. Puede ser bueno tener 1,2 puntos, pero hasta el momento, tan bueno.