[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 125

 
hoz:



Así que tengo un cheque para este caso:

Si parada - nueva parada (en b.u.) no es igual a cero... entonces modificamos... Si no, no modificamos. Por eso no me queda claro cómo ocurre esto. Al fin y al cabo, entiendo que tengo que comprobar la igualdad de la parada pasada y la nueva y lo he hecho.

Aquí se ve cómo compruebo desde arriba y desde abajo cuando se arrastra sin error un bai:

          if(OrderStopLoss() > OrderOpenPrice())
          {
            if(NormalizeDouble(Bid-OrderStopLoss()-plus*tral,Digits) > prev)
            if(Bid > NormalizeDouble(OrderStopLoss()+plus*tral+prev,Digits))
            {
              SL = NormalizeDouble(OrderStopLoss()+plus*part*tral,Digits);
              ModifyOrder(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Blue);return(0);
          } }

Puedo dar la función ModifyOrder(), buena para todas las modificaciones de orden y posición.

 
Vinin:

Edita este código para que no parezca un hack
No lo entiendo.
¿Cómo se edita? ¿A qué se refiere?
 
borilunad:
Yo aconsejaría modificarlo no por barras, sino por tantos pips. Si es necesario, para eso están los recursos. Y el error "no hay error" aparece cuando se repite el precio para una modificación que ya existe. Así que tienes que ir paso a paso como te aconsejé al principio.


La U.B. se dibuja, por supuesto, por pips. Me refería a llamar a la función B.U. en cada tick o en la apertura de la barra, por ejemplo... Pero eso sería una tontería. El precio puede saltar mucho por barra. Entonces, la llamada será similar a la del tickwise, ¿no? Estaba pensando que quizás habría que añadir alguna condición para que no se llame en cada tick. Creo que deberíamos comparar el STOP actual y el que se va a poner, más o menos...

En general. Qué cosa más extraña.

He añadido una condición para empezar y así ha funcionado:

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }

Ahora no hay errores.

Lo que no entiendo es que la propia función MovingStopLossToBU( ) cambia sólo si el stop no es igual al Stop Loss:

if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
    if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
    {
       Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
    }
¿Cómo lo entiendes entonces?
 
Buenas noches, ¿podrían decirme cómo colorear las velas por encima de la media MA(10) en verde y por debajo en rojo?
 
hoz:


La U.B. se dibuja, por supuesto, por pips. Me refería a llamar a la función B.U. en cada tick o en la apertura de la barra, por ejemplo... Pero eso sería una tontería. El precio puede saltar mucho por barra. Entonces, la llamada será similar a la del tickwise, ¿no? Estaba pensando que quizás habría que añadir alguna condición para que no se llame en cada tick. Creo que deberíamos comparar el STOP actual y el que se va a poner, más o menos...

En general. Qué cosa más extraña.

He añadido una condición para empezar y así ha funcionado:

Ahora no hay errores.

Lo que no entiendo es que la propia funciónMovingStopLossToBU( ) cambia sólo si el stop no es igual al Stop Loss:

¿Cómo lo entiendes entonces?

En tu ejemplo, cuando el stop es cero, significa que acabas de abrir una posición sin stop. Y te he dado el caso de que ya estás en el punto de equilibrio.

Pero mira por encima, ¡te he dado mi arrastre sin el punto de equilibrio! Y puedo darte la función.

 
agat8430:
No lo entiendo.
¿Cómo se edita? ¿Cómo se entiende?
Entonces has venido al lugar equivocado si no lo entiendes. Estudia lo que no entiendas, ya preguntarás. Y si no entiendes nada, no lo necesitas.
 
borilunad:
Vea más arriba, ¡le he dado mi arrastre sin errores! Y puedo darte la función.


No vi su respuesta cuando escribí. Voy a echar un vistazo ahora.

Pero en general, me gustaría ver su función de modificación, tal vez voy a aprender algo nuevo para mí.

 
borilunad:

En tu ejemplo, cuando el stop es cero, significa que acabas de abrir una posición sin stop. Y te di el caso cuando ya está en el punto de equilibrio.

Mira arriba, ¡te he dado mi arrastre sin que haya un punto de equilibrio! Y puedo darte la función.


No, no sin una parada. Sólo he publicado una parte. Esta es mi función de equilibrio:

//+-------------------------------------------------------------------------------------+
//| Перевод в б.у. рыночных ордеров                                                     |
//+-------------------------------------------------------------------------------------+
void MovingStopLossToBU()
{
    double priceBU;
    int type = OrderType();
    for (int i=OrdersTotal() - 1; i>=0; i--)
    {
        if (!OrderSelect(i,SELECT_BY_POS)) continue;
        if (i_magic != -1) if (OrderMagicNumber() != i_magic) continue;
        if (OrderSymbol() != Symbol()) continue;
        if (OrderType() > 1) continue;
        
        RefreshRates();
        
        if (type == 0)
        {
           double price = Ask;
           int li_cmd = 1;
        }
        else
        {
           price = Bid;
           li_cmd = -1;
        }

           if (li_cmd * (price - OrderOpenPrice()) >= i_triggerForBU * pt)
           {
             priceBU = ND(OrderOpenPrice() + li_cmd * (i_preservedProfit * pt));
             if (ND(OrderStopLoss() - priceBU * pt) != 0.0)
             {

                 if (!OrderModify(OrderTicket(), OrderOpenPrice(), priceBU, OrderTakeProfit(), 0, CLR_NONE ))
                 {
                     Print ("Ошибка модификации ордера ", OrderType(), " - ", GetLastError());
                 }
               
                     Comment ("Ордер успешно переведён в безубыток");
                     Print ("Ордер успешно переведён в безубыток");
             }
           }
    }
}

En la línea se ve claramente que si el tope calculado es igual al que ya existe, ¡no habrá ninguna modificación! ¿Verdad? ¿Así que el cheque originalmente era? Pero el error 1 aparecía constantemente, hasta que introduje otra condición en el inicio antes de la función de modificación:

if (priceBU != OrderStopLoss())
   {
       MovingStopLossToBU();
   }
Por eso .... eso es lo que estoy tratando de averiguar. Creo que he descrito todo a fondo.
 
hoz:
Entonces has venido al lugar equivocado si no lo entiendes. Estudia lo que no entiendas, ya preguntarás. Y si no entiendes nada, no lo necesitas.


Si no entiendes nada, no lo necesitas. Pues dime cómo editar el código para que no parezca hackeado si lo entiendes todo. Es mi primera vez en el foro, y he recibido una respuesta tan agradable.

"Los genios tienen una respuesta genial".

 
agat8430:


Bueno entonces dime como editar el código que no se parezca a un hack si todos lo entendéis. He venido a la rama para principiantes. He entrado en el foro por primera vez en el foro y he recibido una buena respuesta.

"Los genios tienen una respuesta genial".

Para los recién llegados primero:

Un navegador de foros y respuestas a las preguntas más frecuentes. Lectura muy recomendada.( 1 2 3 4 5 6 ) 51 18.02.2011 PREGUNTAS FRECUENTES