Alguém pode explicar como usar o tempo com iBarShift?
Página 1 de 742 1 2 ÚltimaÚltima
Results 1 to 10 of 18

Thread: Alguém pode explicar como usar o tempo com iBarShift?

  1. #1
    Suponha que eu queira dados de uma barra de um determinado horário aberto todos os dias. Como devo proceder? Parece que eu poderia ir para timecurrent () e calcular quanto tempo em segundos o tempo de abertura está a partir da barra em que desejo as informações e usar timecurrent () - segundos passados.

    Isso parece uma grande solução alternativa para o que é essencialmente um cálculo muito fácil: se o gráfico é 1M e eu quero saber a barra que começa em 58 minutos, quão difícil pode ser apenas obter essa maldita barra a cada hora? Posso apenas usar datetime em 58 minutos? Porque em datetime o arquivo de ajuda afirma que usará a data de compilação, o que para mim parece indie funcionaria uma vez na mesma hora e não mais se eu especificar apenas o número de minutos em 58 e nada mais.

    editar: Suponho que um cálculo mais fácil seria usar Minute () e calcular quantos minutos se passaram, mas usando isso, estou apenas usando meu próprio loop em vez de usar ibarshift.

  2. #2
    1 Anexo(s)
    editar: ok ok ok então basta adicionar uma verificação simples se o horário for um dia da semana 0 ou 6 e adicionar apenas a soma se for falso. Isso deve garantir que funcione com todos os corretores.
    Bem, se você tem certeza de que não há ticks em seu corretor durante os fins de semana ou não se importa se houver um erro, se houver, você pode ignorar os fins de semana. Menos trabalho. Aqui está um char de Oanda: Alguns ticks no sábado, os ticks de domingo começam às 12:00
    https://www.tradingintuitivo.com/tra...s/638-wiz.html

  3. #3
    Eu estava totalmente superando isso. Agora eu sei para que serve o ibarshift. Código inserido int i; hora de início da string; int closetime = SessionOpenHour 8; if ((closetime) lt;10) {starttime = 0 closetime :00;} else {starttime = closetime :00;} datetime start = StrToTime(starttime); int stop = (NumberofDays*24) iBarShift(pair,PERIOD_H1,start,true); dupla hsoma=0; soma dupla = 0; if(iTime(pair,PERIOD_H1,0) lt;= start) {start = start - 86400;} for (i=iBarShift(pair,PERIOD_H1,start,true);ilt;stop;i =i 24) {/Print(i: ,i, iTime: ,TimeToStr(iTime(par,PERIOD_H1,i),TIME_DATE), ,TimeToStr(iTime(par,PERIOD_H1,i),TIME_MINUTES)); hsum = hsum iHigh(par,PERIOD_H1,iHighest(par,PERIOD_H1,MODE_HI GH,9,i)); lsum = lsum iLow(par,PERIOD_H1,iLowest(par,PERIOD_H1,MODE_LOW, 9,i));/Imprime(i: ,i, hsum: ,hsum, lsum: ,lsum); } Descubra o barshift para encontrar o primeiro compasso às 16:00. Comece o loop nisso, adicione 24 (porque está em um gráfico horário e porque queremos saber as máximas entre horários específicos (08:00 e 16:00 neste caso), um gráfico diário não pode ser usado) a cada ciclo . Agora você tem a soma correta da alta e da baixa daquele tempo. Não há necessidade de verificar o tempo, não há necessidade de verificar os fins de semana porque ibarshift e itime ignoram os fins de semana. Muito obrigado por toda a ajuda, agora eu sei como e por que usar o ibarshift, lol ... edit: talvez seja uma coisa do corretor, mas parece estar ignorando os fins de semana para o MBT perfeitamente para mim: 03:58:39 AverageDailyRange EURGBP,H1: i: 293 iTime: 2012.02.20 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 293 hsum: 10,938 lsum: 10,8962 03:58:39 AverageDailyRange EURGBP,H1: i: 317 iTime: 2012.02.17 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 317 hsum: 11,7716 lsum: 11,726 03:58:39 AverageDailyRange EURGBP,H1: i: 341 iTime: 2012.02.16 16:00 03:58: 39 AverageDailyRange EURGBP,H1: i: 341 hsum: 12,6034 lsum: 12,5537 03:58:39 AverageDailyRange EURGBP,H1: i: 365 iTime: 2012.02.15 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 365 hsum : 13.4391 lsum: 13.3853 03:58:39 AverageDailyRange EURGBP,H1: i: 389 iTime: 2012.02.14 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 389 hsum: 14.279 lsum: 14.2209 03:58:39 AverageDailyRange EURGBP,H1: i: 413 iTime: 2012.02.13 16:00 03:58:3 9 AverageDailyRange EURGBP,H1: i: 413 hsum: 15,118 lsum: 15,0552 03:58:39 AverageDailyRange EURGBP,H1: i: 437 iTime: 2012.02.10 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 437 hsum : 15,9558 lsum: 15,8902 03:58:39 AverageDailyRange EURGBP,H1: i: 461 iTime: 2012.02.09 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 461 hsum: 16,7959 lsum: 16,7255 093:58:3 AverageDailyRange EURGBP,H1: i: 485 iTime: 2012.02.08 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 485 hsum: 17,6347 lsum: 17,5598 03:58:39 AverageDailyRange EURGBP,H1: i: 509 iTime: 2012.02.07 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 509 hsum: 18,4699 lsum: 18,3888 03:58:39 AverageDailyRange EURGBP,H1: i: 533 iTime:2012.02.06 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 533 hsum: 19.3002 lsum: 19.2151 03:58:39 AverageDailyRange EURGBP,H1: i: 557 iTime: 2012.02.03 16:00 03:58: 39 AverageDailyRange EURGBP,H1: i: 557 hsum: 20,1341 lsum: 20,0441 03:58:39 AverageDailyRange EURGBP,H1: i: 581 iTime: 2012.02.02 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 581 hsum : 20.9672 lsum: 20.8717 03:58:39 AverageDailyRange EURGBP,H1: i: 605 iTime: 2012.02.01 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 605 hsum: 21.8003 lsum: 21.7021 093:58:38:39 AverageDailyRange EURGBP,H1: i: 629 iTime: 2012.01.31 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 629 hsum: 22,6359 lsum: 22,5301 03:58:39 AverageDailyRange EURGBP,H1: i: 653 iTime: 2012.01.30 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 653 hsum: 23.4729 lsum: 23.3652 03:58:39 AverageDailyRange EURGBP,H1: i: 677 iTime: 2012.01.27 16:00 03:58: 39 AverageDailyRange EURGBP,H1: i: 677 hsum: 24,3138 lsum: 24,1991 03:58:39 AverageDa ilyRange EURGBP,H1: i: 701 iTime: 2012.01.26 16:00 03:58:39 AverageDailyRange EURGBP,H1: i: 701 hsum: 25.1536 lsum: 25.0339 edit: ok ok ok então basta adicionar uma verificação simples se itime for um timedayofweek 0 ou 6, e apenas adicione à soma se for falso. Isso deve garantir que funcione com todos os corretores.

  4. #4

    Uhm...O iTime ignora fins de semana? Não volta uma vez então. Então uhm... foi como eu pensei antes? Nem o iBarShift nem o iTime precisam de verificações de fim de semana simplesmente porque o ignoram? E eu só vou para 52 (54 agora) porque não encontra o horário de início porque o horário de início foi no fim de semana. Ele simplesmente pula e nunca o encontra. Portanto, preciso adicionar uma verificação se for fim de semana e se for apenas remover mais 24 horas do horário de início até que não seja mais TimeDayOfWeek 0 ou 6.
    Nenhuma das funções ignora os fins de semana. Eles operam com os dados da barra disponíveis e não há barras durante a maior parte do fim de semana, então sim, pode parecer que eles são ignorados. O desafio é que alguns corretores às vezes têm tiques durante o fim de semana, e também se o fuso horário do servidor estiver longe o suficiente do gmt, você terá um pouco de sobreposição no fim de semana. Portanto, você não pode confiar que não haverá dados durante os finais de semana. Sim, você terá que verificar os finais de semana e remover 24 horas conforme sugerido acima.

  5. #5

    Sim, fiz isso com if(iTime(pair,PERIOD_H1,0) lt;= starttime) {starttime = starttime - 86400;} e starttime = starttime - 86400; Portanto, diminui em 24 horas se for maior ou igual ao tempo de abertura da barra atual (não quero ou preciso dos valores do dia atual, por isso i = 1 em vez de 0) e diminui em 24 horas se consegue encontrar a barra correta.
    Não tenho certeza porque não funciona. Parece que deveria. Não está claro onde você verificou a hora de início. Você também pode tentar iterar os dados com o método sugerido.

  6. #6
    Sim, fiz isso com if(iTime(pair,PERIOD_H1,0) lt;= starttime) {starttime = starttime - 86400;} e starttime = starttime - 86400; Portanto, diminui em 24 horas se for maior ou igual ao tempo de abertura da barra atual (não quero ou preciso dos valores do dia atual, por isso i = 1 em vez de 0) e diminui em 24 horas se consegue encontrar a barra correta. Editado: Claro. Oh Deus. Funciona como iBarShift. Quão insanamente estúpido da minha parte. Edit2: Uhm... O iTime ignora fins de semana? Não volta uma vez então. Então uhm... foi como eu pensei antes? Nem o iBarShift nem o iTime precisam de verificações de fim de semana simplesmente porque o ignoram? E eu só vou para 52 (54 agora) porque não encontra o horário de início porque o horário de início foi no fim de semana. Ele simplesmente pula e nunca o encontra. Portanto, preciso adicionar uma verificação se for fim de semana e se for apenas remover mais 24 horas do horário de início até que não seja mais TimeDayOfWeek 0 ou 6.

  7. #7

    Interessante. o horário de início é 16:00. 16:00 de 8 de março de 2012 para ser exato. Alguém tem um Tardis?
    Está fazendo exatamente como você instruiu. Você não especificou a data, então está usando a data atual. No mesmo dia que os relatórios de tempo do servidor. Você deve verificar a hora atual e ajustar a hora de início/parada de acordo.
    02:29:00 AverageDailyRange EURGBP,H1: i: 4 hsum: 9 lsum: 11 02:29:00 AverageDailyRange EURGBP,H1: i: 28 hsum: 40 lsum: 46 02:29:00 AverageDailyRange EURGBP,H1: i: 52 hsum: 100 lsum: 104 Por que não vou além de 52 apesar de deixar de ser 720? Por que hsum é menor que lsum? Mais alto = mais baixo que o mais baixo? Como isso é possível?
    Edit: eu estava um pouco confuso. iHighest/iLowest retorna o índice de uma barra. Você precisará ler os dados da barra disso. ex: Código inserido session_high=High#91;iHighest(pair,PERIOD_H1,MODE_ HIGH,9,i)#93;;

  8. #8

    De qualquer forma, isso é um problema... como faço para criar um loop não infinito que verifica todos os dias às 16:00?
    Código inserido para (int i=0; ilt;Bars; i ) { if (TimeToStr(Time#91;i#93;,TIME_MINUTES) == 16:00) {/fazer coisas } } ou código inserido para (int i=0; ilt;Bars; i ) { if (MathMod(Time#91;i#93;,86400) == 16*60*60) {/faz coisas } }

  9. #9
    Interessante. o horário de início é 16:00. 16:00 de 8 de março de 2012 para ser exato. Alguém tem um Tardis? De qualquer forma, isso é um problema... como faço para criar um loop não infinito que verifica todos os dias às 16:00? String de código inserida starttime = StrToTime(16:00); if(iTime(pair,PERIOD_H1,0) lt;= starttime) {starttime = starttime - 86400;} for (i=1;ilt;=stop;i ) { if (iTime(pair,PERIOD_H1,i) == starttime/TimeDayOfWeek(iTime(pair,PERIOD_H1,i)) != 0/TimeDayOfWeek(iTime(pair,PERIOD_H1,i)) != 6 ) {hsum = hsum iHighest(pair,PERIOD_H1,MODE_HIGH,9,i) ; lsum = lsum iLowest(par,PERIOD_H1,MODE_LOW,9,i); starttime = starttime - 86400;} } 02:29:00 AverageDailyRange EURGBP,H1: i: 4 hsum: 9 lsum: 11 02:29:00 AverageDailyRange EURGBP,H1: i: 28 hsum: 40 lsum: 46 02:29: 00 AverageDailyRange EURGBP,H1: i: 52 hsum: 100 lsum: 104 Por que não estou indo além de 52 apesar de parar de ser 720? Por que hsum é menor que lsum? Mais alto = mais baixo que o mais baixo? Como isso é possível?

  10. #10
    Você precisará aprender a depurar código sem um depurador. -Imprima os dados de entrada antes do início do loop para verificar se estão corretos. starttime, closetime etc. - Imprima os dados relevantes de cada iteração do loop e verifique se está conforme o esperado. Ferramentas: DebugView:
    https://www.tradingintuitivo.com/tra...face-pro4.htmlLista de comentários:
    http://forum.mql4.com/16962
    https://www.tradingintuitivo.com/tra...kes-pause.html

Permissões de Publicação

  • Não pode publicar novos tópicos
  • Não pode publicar respostas
  • Não pode publicar anexos
  • Não pode editar as suas publicações
  •  
  • Código BB está Ativo
  • Smilies estão Ativos
  • Código [IMG] está Ativo
  • Código [VIDEO] está Ativo
  • Código HTML está Desligado
O site da tradingintuitivo utiliza cookies
O site da tradingintuitivo utiliza cookies, alguns já foram definidos. Pode ler sobre a nossa utilização de cookies aqui. Por favor, clique no botão à direita para aceitar os nossos cookies. Se continuar a usar o site da tradingintuitivo, vamos supor que aceita os nossos cookies.