Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Lo siento - Es mi culpa por no explicarlo bien. Miro en D1, 4Hr y finalmente 1Hr para que las MA's se separen en abanico (entre un montón de otros filtros) - Una vez que todos se alinearon, en el H1 esperará hasta que cualquier barra retroceda a la 21 EMA UNA VEZ, y luego desde allí colocará una orden por encima de los máximos y una parada por debajo de la 60 EMA - ATR.
El retroceso a la EMA 21 sólo ocurre una vez. A partir de ahí, dejará de buscar cualquier retroceso a la EMA 21. Lo que debería hacer, sin embargo, es asegurarse de que la orden pendiente abierta actual esté precisamente al día con los lotes, stops y tomas de beneficios DESPUÉS del cierre de cada hora. Sin embargo, no puedo entender por qué a veces funciona perfectamente, y actualiza la orden pendiente después de cada cierre H1, y otras veces no lo hace. La razón por la que la orden pendiente se actualiza es porque ""if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0, 1, 0, 0) - ATR) ".
Si eso no es cierto entonces no lo hará - SIN EMBARGO, hay innumerables veces en las que eso es cierto, sin embargo no eliminará la orden y colocará una nueva con los nuevos valores?
No estoy seguro de si se puede ver algo en ese código de arriba en relación con el vídeo? (Primer código que corrigió). Espero que sea más claro.
Creo que vas a tener que hacerlo de la manera difícil y laboriosa... imprimir las variables relevantes, moverte a través del tiempo en el Probador de Estrategias, tick por tick si es necesario, verificando cuales son las variables... entonces si encuentras que deberían hacer que algo suceda y no lo hicieron puedes enfocarte en ese código.
Es relativamente fácil detectar simples problemas de sintaxis en el código de otra persona, es más difícil y consume mucho más tiempo detectar errores en la codificación de su estrategia, por un lado, para poder hacer eso la estrategia tiene que ser entendida tan bien, si no mejor, que la persona que hace la codificación.
Una cosa que necesito tener clara en mi cabeza es; este código aquí, en el bucle, ¿cómo me aseguro de que se está llevando a cabo la función OrderDelete() y el bucle es el bucle en cada cierre H1? ¿Es porque tengo esto en el "int start" que representa si el bucle se hace o no en una base H1? (El "IsNewCandle()") ?
CheckForMATrade() se llama una vez por cada barra nueva, si está ejecutando en un gráfico H1 que será una vez al comienzo de la nueva barra H1... el resto se ejecuta cada tick.
¿Está calculando el valor correcto de ATR para el inicio de la nueva barra? Teniendo en cuenta que acaba de empezar la barra 0, ¿realmente quiere obtener el MA basado en la barra 0? Los indicadores no son lo mío, así que no asuma que estoy diciendo que está equivocado, sólo estoy preguntando
Sí, acabo de hacer una impresión para volver a comprobar las matemáticas MA-ATR. Es correcto. Lo estoy haciendo en la barra 1 (la barra H1 cerrada más recientemente). La matemática es correcta, sólo que no creo que los cálculos se hagan consistentemente en CADA cierre de barra H1...
Sin embargo, la MA no está en la barra 1...
Una última pregunta, si no te importa, es que me sigue apareciendo el error 1 de modificación de pedidos. Resulta que viene de aquí cuando lo imprimo? ¿Alguna idea?
Buen punto, gracias :) Creo que ya sé por qué no se borra la orden... SI el OrderStopLoss NO es > que el MA-ATR, entonces no hará nada... Así que tiene sentido... Solo que a veces lo miro, y es como si no quisiera borrar la orden y colocar una nueva cuando debería?
Una última pregunta, si no te importa, es que sigo recibiendo el error 1 de modificación de pedidos. Resulta que viene de aquí cuando lo imprimo? ¿Alguna idea?
Esta es la cuestión... (similar para la OP_SELL)
if( OrderStopLoss() < BuyStopPrice )
. . y cuando obtienes un error 1 es porque OrderStopLoss() == BuyStopPrice por lo que estás modificando la orden para que tenga el mismo valor de StopLoss, de ahí el error 1 por lo que ahora te preguntas cómo por un lado OrderStopLoss() == BuyStopPrice y por otro OrderStopLoss() < BuyStopPrice
¿Has seguido el enlace del post y lo has leído hasta que te sangren los ojos? Apuesto a que no lo hiciste... https://www. mql5.com/en/forum/146380 si sigues ignorando este tema te seguirá atrapando y seguirás perdiendo el tiempo... entiéndelo, no lo sufras más, sé feliz
Ok voy a leer todo eso de nuevo - volviendo a la cuestión con el vídeo adjunto, cómo creo que he resuelto es a continuación, sin embargo, no funciona en el lado de la compra? Por alguna razón, no hay operaciones se activa en absoluto. Sin embargo, en el lado de la venta, está trabajando EXACTAMENTE como yo quiero?
Todo es EXACTAMENTE inverso para el lado de la compra. Todas esas declaraciones "if" son sólo promedios móviles. La línea específica que he cambiado es "triggerBarTime+H1_high>= ema21". En el lado de la compra se vería como = "triggerBarTime+H1_low<= ema21" - Si quito "triggerBarTime" entonces funcionará tanto en órdenes de compra como de venta. ¡Sin embargo, si dejo en "triggerBarTime" funcionará perfectamente en el lado de la venta (como en, cerrar las órdenes en CADA barra, recalcularla perfectamente y colocar una nueva orden con los parámetros ajustados!) PERO no colocará NINGUNA orden son intentar hacer nada en el lado de la Compra? Este es un ajuste realmente importante que necesito hacer...
Mira este video: http: //screencast.com/t/uJu3nlNxAXDF - ¡Espero que esto lo explique bien! :D
No te preocupes si no puedes ayudar :)