Trabalhe a hora como variável de data e use-a com iBarshift() para obter o número da barra, quando tiver o número da barra use aquele com Open[] ou iOpen()
Trabalhe a hora como variável de data e use-a com iBarshift() para obter o número da barra, quando tiver o número da barra use aquele com Open[] ou iOpen()
sim não é má idéia :)
Obrigado eu vou usá-lo!
E é possível fazer isso:
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);
O HeureSH é arraysize com as quatro horas
Porque se for uma hora específica a barra tem que ser diferente, mas crie um interruptor para ter apenas uma linha, não quatro linhas diferentes.
Está correto? o código está bem definido?
E é possível fazer isso:
O HeureSH é arraysize com as quatro horas
Porque se for uma hora específica, o bar tem que ser diferente, mas crie um interruptor para ter apenas uma linha, não quatro linhas diferentes.
Está correto? o código está bem definido?
Presumo que você tenha um erro de cópia/colagem, pois você tem o caso 1 duas vezes ... então eu assumo que o segundo caso 1 deve ser o caso 2
Para que isto funcione, os valores armazenados na matriz HeureSH[] são 1, 2, 3 ou 4 , é correto ? eles só podem ser valores int tipo. sem cordas ou duplas . . .
Em sua chamada iOpen() assumo que B deve ser Bar? ou você quis dizer que B(int) ? se você quiser usar a função naquela chamada você tem que fazer a função retornar o valor correto.
Você mesmo, e todos os outros, fará um grande favor se usar nomes significativos de variáveis e funções . . B, k e Bar não são muito descritivos.
Oh é um erro meu, copiei meu código mas não sei o que escrevi....... Eu resolvi isso.
No meu iopen, eu escrevi B que é "Bar" porque o tempo é diferente, então Bar também é diferente.
Ah sim os valores das cordas farão alguns problemas, eu acho que é o problema, então eu tentarei mudar.
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);Isto não vai funcionar. 1) iBarShift designado para Bar mas iOpen usa B. 2) StrToTime("23:00") retornará hoje às 23:00 que sempre será no futuro (ou na barra H1 atual).
#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); }
Olá WHRoeader,
para informação:
você disse que ibarshift foi designado para Bar, iOpen to B. Ok
Mas a função B(k), qual é essa função? por que ela está aqui?
Em meu código, eu a coloquei porque queria uma relação entre os tempos de arraysize das cordas (HeuresSH) e os diferentes tempos de StrToTime. Era falso assim.
Você o usou novamente, por quê?
Cumprimentos :)
Ok, eu inseri seu código no meu EA e ele funciona perfeitamente! Eu sorri quando vejo o EA executar como eu queria!!!
Muito obrigado, muito obrigado ......
Está no backtest porque o mercado está fechado...
Mas há um problema:
Ea Abrir posições corretamente, mas comprar nunca é fechado e vender imediatamente fechado quando aberto.
Meu estrato está:
Ao mesmo tempo, o EA tem que abrir Vender OU Comprar se os parâmetros forem verdadeiros. Não há SL ou TP.
E, ao mesmo tempo, tem que fazer loop e fechar todas as negociações se as próximas funções forem verdadeiras:
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);Tenho que adicionar um filtro de lucro, mas vou trabalhar sobre isso. Sem isso ele tem que fechar Comprar, mas nunca fechar, e tem que deixar a venda correr, mas a venda é fechada imediatamente. Há algum erro no último código?

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Oi, pessoal,
tenho uma nova pergunta, simples, acho eu.
Por exemplo, quando são 15h00, quero saber o preço aberto da vela, que era às 9h00.
Então, como escrever o código para obter o preço aberto da vela de hora pré-definida?