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

Thread: Algum pode explicar como usar o tempo com iBarShift?

  1. #1
    Suponha que eu queira dados de uma barra de um determinado horrio 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 informaes e usar timecurrent () - segundos passados.

    Isso parece uma grande soluo alternativa para o que essencialmente um clculo muito fcil: se o grfico 1M e eu quero saber a barra que comea em 58 minutos, quo difcil 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 compilao, o que para mim parece indie funcionaria uma vez na mesma hora e no mais se eu especificar apenas o nmero de minutos em 58 e nada mais.

    editar: Suponho que um clculo mais fcil seria usar Minute () e calcular quantos minutos se passaram, mas usando isso, estou apenas usando meu prprio loop em vez de usar ibarshift.

  2. #2
    1 Anexo(s)
    editar: ok ok ok ento basta adicionar uma verificao simples se o horrio 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 no h ticks em seu corretor durante os fins de semana ou no 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 sbado, os ticks de domingo comeam 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. Cdigo inserido int i; hora de incio 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 grfico horrio e porque queremos saber as mximas entre horrios especficos (08:00 e 16:00 neste caso), um grfico dirio no pode ser usado) a cada ciclo . Agora voc tem a soma correta da alta e da baixa daquele tempo. No h necessidade de verificar o tempo, no 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 ento basta adicionar uma verificao 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? No volta uma vez ento. Ento uhm... foi como eu pensei antes? Nem o iBarShift nem o iTime precisam de verificaes de fim de semana simplesmente porque o ignoram? E eu s vou para 52 (54 agora) porque no encontra o horrio de incio porque o horrio de incio foi no fim de semana. Ele simplesmente pula e nunca o encontra. Portanto, preciso adicionar uma verificao se for fim de semana e se for apenas remover mais 24 horas do horrio de incio at que no seja mais TimeDayOfWeek 0 ou 6.
    Nenhuma das funes ignora os fins de semana. Eles operam com os dados da barra disponveis e no h barras durante a maior parte do fim de semana, ento sim, pode parecer que eles so ignorados. O desafio que alguns corretores s vezes tm tiques durante o fim de semana, e tambm se o fuso horrio do servidor estiver longe o suficiente do gmt, voc ter um pouco de sobreposio no fim de semana. Portanto, voc no pode confiar que no 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 (no 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.
    No tenho certeza porque no funciona. Parece que deveria. No est claro onde voc verificou a hora de incio. Voc tambm pode tentar iterar os dados com o mtodo 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 (no 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. Quo insanamente estpido da minha parte. Edit2: Uhm... O iTime ignora fins de semana? No volta uma vez ento. Ento uhm... foi como eu pensei antes? Nem o iBarShift nem o iTime precisam de verificaes de fim de semana simplesmente porque o ignoram? E eu s vou para 52 (54 agora) porque no encontra o horrio de incio porque o horrio de incio foi no fim de semana. Ele simplesmente pula e nunca o encontra. Portanto, preciso adicionar uma verificao se for fim de semana e se for apenas remover mais 24 horas do horrio de incio at que no seja mais TimeDayOfWeek 0 ou 6.

  7. #7

    Interessante. o horrio de incio 16:00. 16:00 de 8 de maro de 2012 para ser exato. Algum tem um Tardis?
    Est fazendo exatamente como voc instruiu. Voc no especificou a data, ento est usando a data atual. No mesmo dia que os relatrios de tempo do servidor. Voc deve verificar a hora atual e ajustar a hora de incio/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 no vou alm de 52 apesar de deixar de ser 720? Por que hsum menor que lsum? Mais alto = mais baixo que o mais baixo? Como isso possvel?
    Edit: eu estava um pouco confuso. iHighest/iLowest retorna o ndice de uma barra. Voc precisar ler os dados da barra disso. ex: Cdigo inserido session_high=High#91;iHighest(pair,PERIOD_H1,MODE_ HIGH,9,i)#93;;

  8. #8

    De qualquer forma, isso um problema... como fao para criar um loop no infinito que verifica todos os dias s 16:00?
    Cdigo inserido para (int i=0; ilt;Bars; i ) { if (TimeToStr(Time#91;i#93;,TIME_MINUTES) == 16:00) {/fazer coisas } } ou cdigo inserido para (int i=0; ilt;Bars; i ) { if (MathMod(Time#91;i#93;,86400) == 16*60*60) {/faz coisas } }

  9. #9
    Interessante. o horrio de incio 16:00. 16:00 de 8 de maro de 2012 para ser exato. Algum tem um Tardis? De qualquer forma, isso um problema... como fao para criar um loop no infinito que verifica todos os dias s 16:00? String de cdigo 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 no estou indo alm de 52 apesar de parar de ser 720? Por que hsum menor que lsum? Mais alto = mais baixo que o mais baixo? Como isso possvel?

  10. #10
    Voc precisar aprender a depurar cdigo sem um depurador. -Imprima os dados de entrada antes do incio do loop para verificar se esto corretos. starttime, closetime etc. - Imprima os dados relevantes de cada iterao do loop e verifique se est conforme o esperado. Ferramentas: DebugView:
    https://www.tradingintuitivo.com/tra...face-pro4.htmlLista de comentrios:
    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.