Calcula la hora como una variable de fecha y úsala con iBarshift() para obtener el número de barra, cuando tengas el número de barra úsalo con Open[] o iOpen()
Calcula la hora como una variable datetime y úsala con iBarshift() para obtener el número de barra, cuando tengas el número de barra úsalo con Open[] o iOpen()
si, no es mala idea :)
Gracias, lo usaré.
Y es posible hacerlo:
int Bar; double OpenPrice; int B(k); { switch(HeureSH[k]) { case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00")); break; case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00")); break; } } OpenPrice= iOpen(Symbol(), PERIOD_H1, B);
HeureSH es arraysize con las cuatro horas
Porque si es una hora específica la barra tiene que ser diferente, ithough crear un interruptor para tener una sola línea, no cuatro différents líneas.
Oh, ¿es correcto? ¿el código está escrito correctamente?
Y es posible hacerlo:
HeureSH es arraysize con las cuatro horas
Porque si es una hora específica la barra tiene que ser diferente, ithough crear un interruptor para tener una sola línea, no cuatro différents líneas.
Oh, ¿es correcto? ¿el código está escrito correctamente?
Supongo que tienes un error de copia/pega ya que tienes el caso 1 dos veces... así que asumiré que el segundo caso 1 debería ser el caso 2
Para que esto funcione los valores almacenados en el array HeureSH[] son 1, 2, 3 o 4, ¿es correcto? sólo pueden ser valores de tipo int. no strings o doubles . . .
En tu llamada a iOpen() supongo que B debería ser Bar? o querías decir que era B(int) ? si quieres usar la función en esa llamada tienes que hacer que la función devuelva el valor correcto.
Te harás a ti mismo, y a todos los demás, un gran favor si utilizas nombres de variables y funciones con sentido... B, k y Bar no son muy descriptivos.
Oh, es un error mío, copié mi código pero no sé lo que escribí....... Lo he resuelto.
En mi iopen, escribí B que es "Bar" porque el tiempo es diferente, así que Bar es diferente también.
Ah, sí, los valores de las cadenas de hacer algunos problemas, creo que es el problema, así que voy a tratar de cambiar.
int B(k); { switch(HeureSH[k]) { case 0: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("23:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("09:00")); break; case 1: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("15:00")); break; case 3: Bar= iBarShift(Symbol(), PERIOD_H1, StrToTime("19:00")); break; } } OpenPrice= iOpen(Symbol(), PERIOD_H1, B);Esto no funcionará. 1) iBarShift asignado a Bar pero iOpen utiliza B. 2) StrToTime("23:00") devolverá la fecha de hoy a las 23:00 que siempre estará en el futuro (o barra H1 actual.)
#define HR2400 86400 // 24 * 3600 datetime TimeOfDay(datetime when){ return( when % HR2400 ); } datetime DateOfDay(datetime when){ return( when - TimeOfDay(when) ); } int B(k); { #define HR0900 23400 // 9*3600 #define HR1500 54000 #define HR1900 68400 #define HR2300 59800 int times[]={ HR2300, HR0900, HR1500, HR1900 }; datetime now = TimeCurrent(), Bod = DateOfDay(now), want= Bod + times[HeureSH[k]]; if (want > now){ // Yesterdays? datetime prevTradingDate = iTime(Symbol(), PERIOD_D1, 1); want = prevTradingDate + times[HeureSH[k]]; } int iBar= iBarShift(Symbol(), PERIOD_H1, want); OpenPrice= iOpen(Symbol(), PERIOD_H1, iBar); }
Hola WHRoeader,
para información:
dijiste que ibarshift estaba asignado a Bar, iOpen a B. Ok
Pero la función B(k), ¿qué es esta función? ¿por qué está aquí?
En mi código, lo puse porque quería una relación entre el tamaño de las cadenas de tiempo (HeuresSH) y los diferentes StrToTime. Es era falso así que.
¿Usted lo utilizó de nuevo, por qué?
Saludos :)
¡Ok, he insertado tu código en mi EA y funciona perfectamente ! ¡¡¡Sonreí cuando vi que el EA se ejecutaba como yo quería !!!
Muchas gracias muy muy ......
Está en backtest porque el mercado está cerrado...
Pero hay un problema:
El EA abre correctamente las posiciones, pero las compras nunca se cierran y las ventas se cierran inmediatamente cuando se abren.
Mi estrategia es:
En el mismo tiempo, el EA tiene que abrir vender o comprar si los parámetros son verdaderos. No hay SL o TP.
Y al mismo tiempo, tiene que hacer un bucle y cerrar todas las operaciones si las siguientes funciones son verdaderas:
if(OrdersTotal()>0) { for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime(Symbol(), PERIOD_H1, 1)) { if(OrderType() == OP_BUY) { OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE); } if(OrderType() == OP_SELL) { OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE);Tengo que añadir un filtro de beneficios, pero voy a trabajar en esto. Sin eso tiene que cerrar la compra, pero nunca se cierra, y tiene que dejar que la venta se ejecute pero la venta se cierra inmediatamente. ¿Hay algún error en el último código?
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Hola chicos,
Tengo una nueva pregunta, simple creo.
Así que cuando por ejemplo son las 15:00, quiero saber el precio de apertura de la vela cuya hora era las 9:00.
Entonces, ¿cómo escribir el código para obtener el precio de apertura de la vela de la hora predefinida?