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.