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

 

Y barma, asegúrate de que

//--------------------------------------------------------------- 5 --
// торговые критерии
if(vverh>0)
  {
   Opn_B=true;
   Cls_S=true;
   Opn_S=false;
   Cls_B=false;
  }
if(vverh>0)
  {
   Opn_S=true;
   Cls_B=true;
   Opn_B=false;
   Cls_S=false;
  }
  
//--------------------------------------------------------------- 6 --
si ha escrito correctamente las condiciones
 

¡Caballeros! Buenas noches (por la noche, por la mañana, por la tarde)

¿Podría responderme a una simple pregunta?

Qué función devuelve el precio de apertura de una orden, que:

- cerrado por última vez

- cerrado en un Stop Loss.

Gracias por su ayuda.

 
solnce600:

¡Caballeros! Buenas noches (por la noche, por la mañana, por la tarde)

Por favor, dígame la respuesta a una simple pregunta.

Qué función devuelve el precio abierto de la orden que:

- cerrado por última vez

- Cerrado en un Stop Loss.

Gracias por su ayuda.



no existe tal función - hay que escribir un poco de código
 
artmedia70:

Las variables sólo se pueden utilizar al probar la estrategia en el probador.

Para el mundo real, cada valor necesario para ejecutar la lógica debe calcularse en el momento adecuado, ya que los valores de estas variables son muy fáciles de perder, por ejemplo, durante un reinicio.



Artem, ¿y es posible dar un ejemplo? Después de todo, es posible incluso sustituir una variable por una función. Y no se puede sustituir una función por una variable :)

 

solnce600:


¡Caballeros! ¡Buenas tardes (noche, mañana y tarde) a todos!

Por favor, dígame la respuesta a una simple pregunta para usted.

Qué función devuelve el precio abierto de la orden, que :

- cerrado por última vez

- Cerrado en un Stop Loss.

Gracias por su ayuda.



Hayuna rama así, hay un montón de cosas allí, cosas interesantes.

Esta función devuelve la bandera para cerrar la última posición del tope

 

Muchas gracias por el consejo.

Esta es exactamente la función que estoy utilizando.

Después de cerrar una orden de stop, necesito codificar la apertura de órdenes de mercado al precio de

de la última orden cerrada en el stop.

He intentado memorizar el precio de apertura de la última orden cerrada en el stop en la variable
if (isCloseLastPosByStop()==True)                                            //если посл.орд.SELL  закрылся по стопу(стоп данного ордера SELL = 295 п.)

double PrStop = (Bid - 0.0295);                                              // от цены срабатывания СТОП-ЛОССА вычитаем 295 п. 
                                                                             // и запоминаем это значение,(т.е. цену открытия ордера)в переменной  PrStop         
if (Bid == PrStop )                                                          //если цена Bid будет равна значению PrStop
OrderSend(Symbol(),OP_BUY,0.1,Ask,1,Bid-2950*Point,Bid+150*Point,"jfh",123 );//открыть ордер.

Pero cuando el precio es igual al valor de PrStop, la orden no se coloca.

También he intentado colocar una orden cuando el precio es inferior al valor de PrStop.

Pero no volvió a poner una orden.

if (Bid < PrStop ) 

Creo que la razón puede ser que hasta que no se cierre la siguiente orden NO SE HACE EL STOP LOSS.

isCloseLastPosByStop () devolverá True en cada tick y la variable PrStop obtendrá

EN CADA TIC UN NUEVO VALOR.

He examinado atentamente todas las funciones de Kim, pero sus nombres parecen no ser adecuados para resolver mi problema.

Estaré muy agradecido a quienes me orienten en la dirección correcta.

 

¡Por favor, dame una pista! Estoy empezando a dar mis primeros pasos en la programación.

¿Cómo podría una función trabajar más rápido? (La función se llama 2 veces)

- si se llama desde la biblioteca

- si se describe fuera de la función start() directamente en el EA.

- si está en la propia función start()

 

solnce600, Andrei, ¡tienes la última posición cerrada en SL en tus manos! Y quién te impide averiguar todo lo que quieras sobre él, retocando un poco la función:

double GetOOPCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t; 
  double   ocp, osl, OOP;
  double p = 0;
  int    i, j=-1, k=OrdersHistoryTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
        if (op<0 || OrderType()==op) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            j=i;
//            p = OrderProfit()+OrderCommission()+OrderSwap();
            OOP = OrderOpenPrice();
  } } } } }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    ocp=NormalizeDouble(OrderClosePrice(), 5);
    osl=NormalizeDouble(OrderStopLoss(), 5);
//    if (ocp==osl) return(p);
    if (ocp==osl) return(OOP);
  }
  return(0);
}
He comentado las dos líneas que me dan el beneficio de cierre, y he añadido dos líneas para obtener el precio de apertura de esa posición cerrada. No lo he probado, pero debería funcionar, ya que todo funciona cuando sustituyo lo que necesito. Compruébalo.
 
borilunad:

solnce600, Andrei, ¡tienes la última posición cerrada en SL en tus manos! Y quién te impide averiguar todo lo que quieras sobre ella ajustando un poco la función:

He comentado las dos líneas que me dan el beneficio de cierre y he añadido dos líneas para obtener el precio de apertura de esa posición cerrada. ¡No lo he probado, pero debería funcionar ya que todo funciona cuando pongo lo que necesito! Compruébalo.

Muchas gracias por su pronta ayuda.

También le agradecería que me diera una idea sobre .....

Mi estrategia es muy sencilla.

Si el precio se mueve hacia arriba (300 pips) más rápido desde la apertura (iOpen (Symbol (),0,0) que una distancia menor (10 pips) en la dirección opuesta

-Después de que el precio se invierta y vaya en dirección contraria, abra órdenes de mercado al precio de apertura de cada vela ( iOpen (Symbol (),0,0) .

Para poner en práctica esta idea lo primero que se me ocurre es

1.En el precio de apertura de cada vela, coloque una orden de mercado con un stop grande y un beneficio pequeño.

Si la orden cerró más rápido en el stop que en el beneficio, establezca una orden de mercado al precio de apertura de la orden que cerró en el stop.

Este método permite detectar velas a sus precios de apertura que posteriormente deben ser fijados como órdenes de mercado.....Pero para ello tengo que colocar el mercado

órdenes con grandes stops y pequeños beneficios en la apertura de cada corriente.

Y no necesito colocar órdenes en la apertura de cada vela en el comercio real.

Lo primero que se me ocurre es

- Debemos abrir una orden en la apertura de cada vela en una cuenta demo que tendrá un EA adjunto a su gráfico.

- Y debo abrir las órdenes sólo por las condiciones descritas anteriormente en una cuenta real con otro EA adjuntado al gráfico.

Pero me parece que operar con dos cuentas y dos EAs tampoco es la variante más conveniente y óptima, me gustaría operar con una cuenta y un EA.

PREGUNTA: ¿Cómo puedo encontrar las condiciones de apertura de posiciones descritas anteriormente sin abrir órdenes de mercado en la apertura de cada vela?

Gracias.

 
solnce600:

Muchas gracias por su pronta ayuda.

También le agradecería que me diera una idea sobre .....

Mi estrategia es muy sencilla

Si el precio desde el principio de una vela (iOpen (Symbol (),0,0) subió(bajó) más distancia(300 pips) más rápido que una distancia menor(10 pips) en la dirección opuesta

-luego, después de que el precio se dé la vuelta y vaya en dirección contraria, abra órdenes de mercado al precio de la vela ( iOpen (Symbol (),0,0) en la apertura de cada vela.

Para poner en práctica esta idea, lo primero que se me ocurre es

1. al precio de apertura de cada vela, coloque una orden de mercado con un stop grande y un beneficio pequeño.

2. Si la orden se cierra más rápido en el stop que en el beneficio, establezca una orden de mercado al precio de apertura de la orden que se cerró en el stop.

Este método permite detectar velas a sus precios de apertura que posteriormente deben ser fijados como órdenes de mercado.....Pero para ello tengo que colocar el mercado

órdenes con grandes stops y pequeños beneficios en la apertura de cada corriente.

Y no necesito colocar órdenes en la apertura de cada vela en el comercio real.

Lo primero que se me ocurre es

- Debemos abrir una orden en la apertura de cada vela en una cuenta demo que tendrá un EA adjunto a su gráfico.

- Y debo abrir las órdenes sólo por las condiciones descritas anteriormente en una cuenta real con otro EA adjuntado al gráfico.

Pero me parece que operar con dos cuentas y dos EAs tampoco es la variante más conveniente y óptima, me gustaría operar con una cuenta y un EA.

P: ¿De qué otra manera puedo detectar las condiciones para la apertura de la posición sin abrir la orden de mercado en la apertura de cada vela?

Gracias.

Pues claro, te has lucido como si lo hubieras visto de verdad, ¡que lo dudo! ¡No entiendo bien tu idea, pero te sugiero que pruebes, trazando las velas en las condiciones y, si estas condiciones coinciden con las tuyas, a colocar las órdenes pendientes a las distancias deseadas de la vela cero de apertura, mientras colocas los stops y los beneficios, modificándolos inmediatamente después de colocarlos aplicando de la misma manera otra función de Kim para determinar los datos de la última orden colocada! Examine cuidadosamente su lógica, experimente y siga adelante. Buena suerte.