¡Ayúdame a cerrar el orden al final del bar! - página 3

 
RaptorUK:

Sí, se llama a start() por cada tick a menos que se siga ejecutando...

Sí, pero eso no es lo que pediste en tu primer mensaje en este hilo... ahora estás diciendo que está bien que el cierre se retrase por Período y luego otro Período, etc. Si quieres cerrar lo más cerca posible del final de la barra entonces tienes que hacerlo en el primer tick de la siguiente barra, y debes comprobar si el cierre ha fallado y reintentarlo de la manera correcta para que consigas cerrarlo.

No tengo otras soluciones, si las tuviera las haría.


COSUDE:

Es bastante raro que el precio de cierre de una barra no se repita en la barra siguiente, no necesariamente su precio de apertura ...

Si, a veces una barra se abre por debajo o por encima del cierre de la vela anterior y a veces justo en ese nivel, pero a veces hay estas brechas que arruinan todo, por eso me hubiera gustado una mejor solución, para evitarlas, pero ahora veo que no es posible.
 

Problema, gran problema:

/////////////////OrderSelect() and other stuff

if( OrderType() == OP_BUY ){
    
if( /* blablabla condition && */ Time[0]>OrderOpenTime()  ){

OrderClose( OrderTicket(), OrderLots(),OrderClosePrice() ,TAKEPROFITPIPS,CLR_NONE);             
RefreshRates();    

}}

Así que usé este código para cerrar esa desagradable operación en lo más cercano al final de la vela, pero el problema es que en backtesting funciona como magia, pero cuando lo probé en una cuenta demo en vivo, fue muy tonto.Comenzó a cerrar las posiciones justo después de abrirlas.No entiendo por qué, ya que Time[0] debe ser el tiempo de apertura de la barra actual, y ¿cómo puede ser mayor que el tiempo actual cuando la operación se puso después de la apertura de la vela? Es un sinsentido.

Pero aun así es eso, así que para descartar cualquier error solo utilicé:

if( Time[0]>OrderOpenTime()  )

Esto en el if, para descartar otras interferencias, pero sí, el problema está en esta prueba:

Time[0]>OrderOpenTime() 

¡¿Cómo puedo evitarlo, o puede alguien por favor encontrar otra prueba equivalente a esta que funciona en la cuenta real también, por favor ayuda!

 
Proximus:

Problema, gran problema:

Así que usé este código para cerrar esa desagradable operación en lo más cercano al final de la vela, pero el problema es que en backtesting funciona como magia, pero cuando lo probé en una cuenta demo en vivo, fue muy tonto.Comenzó a cerrar las posiciones justo después de abrirlas.No entiendo por qué, ya que Time[0] debe ser el tiempo de apertura de la barra actual, y ¿cómo puede ser mayor que el tiempo actual cuando la operación se puso después de la apertura de la vela? Es un sinsentido.

Ha sucedido, así que encuentre la razón... por ejemplo, si su OrderSelect() falla ( ¿comprueba si funcionó o falló? ) entonces OrderType() devolverá el valor incorrecto o el correcto sólo por casualidad, OrederOpenTime() devolverá el valor incorrecto... quizás cero y cero es menor que Time[0]... ¿imprimió el valor de OrderOpenTime() cuando intentaba averiguar qué estaba fallando? por qué no?

Hay buenas razones por las que sigo publicando este enlace. . . ¿Qué son los valores de retorno de las funciones? ¿Cómo los utilizo ? ¿Por qué ignoras continuamente los buenos consejos?

 
Proximus:

No tengo otras soluciones. Si las tuviera, las haría.

Si, a veces una barra se abre por debajo o por encima del cierre de la vela anterior y a veces justo en ese nivel, pero a veces hay estos huecos que arruinan todo, por eso me hubiera gustado una mejor solución, para evitarlos, pero ahora veo que no es posible.

¿Tiene que ser exactamente el precio de cierre? Que tal si pruebas algo como... el tiempo de la diferencia entre la llegada de los ticks durante la formación de la barra... si están llegando rápido como 1 por segundo toma el precio si llega menos de 5 segundos desde el cierre de la barra, si los ticks están llegando lento como 1 por minuto toma el precio si un tick llega en los últimos 30 segundos de la barra, si no llega ningún tick durante ese tiempo toma el precio de apertura de la barra subsiguiente.

 
SDC:

¿Tiene que ser exactamente el precio de cierre? ¿Qué tal si intenta algo como... cronometrar la diferencia entre la llegada de ticks durante la formación de la barra... si llegan rápido como 1 por segundo tome el precio si llega a menos de 5 segundos del cierre de la barra, si los ticks llegan lento como 1 por minuto tome el precio si llega un tick en los últimos 30 segundos de la barra, si no llega ningún tick durante ese tiempo tome el precio de apertura de la barra siguiente.


No tiene que ser exactamente el Close[1] ya que en los posts anteriores descartamos que eso es imposible que llegue exactamente a ese nivel.Pero el segundo mejor / más cercano a eso también lo hará.Puedes por favor escribir tu idea en un código, para ver que es.
 

Volumen[0]==1 ;// nueva barra = última barra cerrada.

o.

bool NuevaBarra()

{

static datetime lastbar;

datetime curbar = Tiempo[0];

if(lastbar!=curbar)

{

lastbar=curbar;

return (true);

}

si no

{

return(false);

}

}


if (Signal=="BUY" && NewBar())

 
Gracias por la ayuda, he resuelto el problema, en realidad era que tenía muchos gráficos abiertos a la vez y todos tenían el mismo número mágico, ahora se han generado aleatoriamente, así que está bien.
 

Hola,

¿Hay alguna forma de cerrar una posición abierta 5 minutos antes de que termine la barra en el marco de tiempo H4?

 
jonjon:

Hola,

¿Hay alguna forma de cerrar una posición abierta 5 minutos antes de que termine la barra en el marco de tiempo H4?



sí, existe
 
Mehmet: Volumen[0]==1 ;// nueva barra = última barra cerrada.
  1. Si se pierde el primer tick de una barra, su código falla y se pierde toda la barra. Utiliza SIEMPRE el tiempo.
  2. No pegues el código
    Reproducir vídeo
    Por favor, edite su mensaje.
    Para grandes cantidades de código, adjúntelo.
Razón de la queja: