Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 426

 
Boss11:

Bom dia queridos usuários do fórum.

Por favor, ajude-me na seguinte tarefa:

Preciso obter os dados indicadores em mt4 usando mql, por exemplo, MA5 com prazo 1d, a partir das 14h30 de anteontem.

Ou seja, se eu executasse o roteiro com o iMA anteontem às 14h30, não haveria dúvidas, mas como obtê-lo hoje.

ao menos me diga onde cavar

É muito simples. Você precisa definir 7 parâmetros para calcular o iMA. O primeiro parâmetro, o nome do símbolo, é óbvio. Como segundo, o cronograma, defina M1. O terceiro parâmetro - o período - definido quantas vezes você precisar, quantos dias é mais de um minuto. O quarto parâmetro - shift = 0. Os dois parâmetros seguintes - o método de cálculo da média e o tipo de preço - você sabe. O último é o número da barra. Por favor, calcule o número da barra se você souber o tempo necessário. Isso é tudo! Verifique novamente, fazendo cálculos para os prazos M5 e M15. Talvez até para M30.

 
STARIJ:

É muito simples. A fim de calcular o iMA, são necessários 7 parâmetros. O primeiro parâmetro, o nome do símbolo, é óbvio. Como segundo parâmetro, o cronograma, defina M1. O terceiro parâmetro - o período - definido quantas vezes você precisar, quantos dias é mais de um minuto. O quarto parâmetro - shift = 0. Os dois parâmetros seguintes - o método de cálculo da média e o tipo de preço - você sabe. O último é o número da barra. Por favor, calcule o número da barra se você souber o tempo necessário. Isso é tudo! Verifique novamente, fazendo cálculos para os prazos M5 e M15. Talvez até mesmo para M30.

Infelizmente, não é fácil. Se pegarmos o MA5, horário 1440 (1 dia), selecionar a barra número 2 (anteontem), obteremos o MA5 para a abertura ou o fechamento da última vela, mas não o momento 14.30. E isso é o que precisamos especificar. Mais uma vez. Os indicadores técnicos são calculados a partir de vários castiçais, eles abrem às 00h00 (se estivermos falando de um dia), fecham às 23h59, mas o último castiçal (se for 0 bar) não está fechado, e tomamos o último preço da barra 0 para seu cálculo. Se o MA estiver na barra zero, isso é fácil, mas se não for na barra zero mas no meio do dia anterior, o que devemos fazer? Como podemos calcular МА no meio do dia anterior em TF 1440?

 
Artyom Trishkin:

Muito obrigado! Vou começar a escrever o código :) Eu o informarei sobre os resultados.

 
Boss11:

Infelizmente, não é fácil. Se pegarmos o MA5, horário 1440 (1 dia), selecionar a barra número 2 (anteontem), obteremos o MA5 para a abertura ou o fechamento da última vela, mas não o momento 14.30. E isso é o que precisamos especificar. Mais uma vez. Os indicadores técnicos são calculados a partir de vários castiçais, eles abrem às 00h00 (se estivermos falando de um dia), fecham às 23h59, mas o último castiçal (se for 0 bar) não está fechado, e tomamos o último preço da barra 0 para seu cálculo. Se o MA estiver na barra zero, isso é fácil, mas se não for na barra zero mas no meio do dia anterior, o que devemos fazer? Como posso calcular МА no meio do dia anterior com o prazo de 1440?


É muito simples

void OnStart()
  {
// Формируем время  
   Alert("14.30  позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));

//14.30  позавчерашнего дня
   datetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");

//Бар 14.30  позавчерашнего дня
   int     shift=iBarShift(NULL,0,time);

//Машка 14.30  позавчерашнего дня  
   double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);

   Alert("Машка 14.30  позавчерашнего дня = ",DoubleToString(ma,Digits));
}

Assim

 

Alguma idéia de como organizar o envio de sinais por roteiro?

 

Preciso da ajuda do conhecedor

Eu tenho um código fonte EA, compilado em 2014 e tudo estava bem.

Decidi escrever uma nova conta e compilar a EA sobre ela, mas ela não quer compilar

Eu tenho 23 erros como estes ( } )

O que eu devo fazer e o que mudou desde 2014 ?

 
Boss11:

Infelizmente, não é fácil. Se pegarmos o MA5, horário 1440 (1 dia), selecionar a barra número 2 (anteontem), obteremos o MA5 para a abertura ou o fechamento da última vela, mas não o momento 14.30. E isso é o que precisamos especificar. Mais uma vez. Os indicadores técnicos são calculados a partir de vários castiçais, eles abrem às 00h00 (se estivermos falando de um dia), fecham às 23h59, mas o último castiçal (se for 0 bar) não está fechado, e tomamos o último preço da barra 0 para seu cálculo. Se o MA estiver na barra zero, isso é fácil, mas se não for na barra zero mas no meio do dia anterior, o que devemos fazer? Como posso calcular o MA no meio do dia anterior em TF 1440?

É muito simples. A fim de calcular o iMA, são necessários 7 parâmetros. O primeiro parâmetro, o nome do símbolo, é óbvio. Como segundo parâmetro, o cronograma, defina M1. O terceiro parâmetro - o período - definido quantas vezes você precisar, quantos dias é mais de um minuto. O quarto parâmetro - shift = 0. Os dois parâmetros seguintes - o método de cálculo da média e o tipo de preço - você sabe. O último é o número da barra. Por favor, calcule o número da barra se você souber o tempo necessário. Isso é tudo! Verifique novamente, fazendo cálculos para os prazos M5 e M15. Talvez até mesmo para M30.
 

Olá. Graças àSTARIJ eArtyom Trishkin pela última consulta. Mas como ainda sou um novato, surgem outras questões. Por exemplo, o seguinte. Eu uso a seguinte função para abrir apenas uma posição em um bar:

void Fun_New_Bar()                              // Ф-ия обнаружения нового бара   
  {                                             
   static datetime New_Time=0;                  // Время текущего бара  
   New_Bar=false;                               // Нового бара нет  
   if(New_Time!=Time[0])                        // Сравниваем время  
     {  
      New_Time=Time[0];                         // Теперь время такое  
      New_Bar=true;                             // Поймался новый бар  
     }  
  }

E surge imediatamente uma pergunta: por que preciso enviar uma variável estática "para o início do tempo" cada vez que tenho acesso à função? Afinal, ele aceita o valor zero por si só na primeira chamada, e depois deixa armazenar o valor da barra de zero anterior até a próxima chamada, em vez de ser reposto a zero. Talvez esta simples função pudesse ser simplificada. Entretanto, eu mesmo tenho medo de estragar tudo. E mais uma pergunta sobre esta função: não será o caso da expressãoNew_Time=Time[0]; não capta o milissegundo quando um novo bar abre? O que acontecerá então? Obrigado.

 
novichok2018:

Olá. ObrigadoSTARIJ pela última consulta também. Mas como ainda sou um novato, surgem outras questões. Por exemplo, o seguinte. Eu uso a seguinte função para abrir apenas uma posição em um bar:

E imediatamente surge uma pergunta: por que preciso enviar uma variável estática "para o início do tempo" cada vez que tenho acesso à função? Afinal, ele aceita o valor zero por si só na primeira chamada, e depois deixa armazenar o valor da barra de zero anterior até a próxima chamada, em vez de ser reposto a zero. Talvez esta simples função pudesse ser simplificada. Entretanto, eu mesmo tenho medo de estragar tudo. E mais uma pergunta sobre esta função: não será o caso da expressãoNew_Time=Time[0]; não capta o milissegundo quando um novo bar abre? O que acontecerá então? Obrigado.

E você pode ler quantas vezes uma variável estática é inicializada. E a questão em si desaparecerá por seu absurdo ;)
 
novichok2018:

Olá. Graças àSTARIJ eArtyom Trishkin pela última consulta. Mas como ainda sou um novato, surgem outras questões. Por exemplo, o seguinte. Eu uso a seguinte função para abrir apenas uma posição em um bar:

E surge imediatamente uma pergunta: por que preciso enviar uma variável estática "para o início do tempo" cada vez que tenho acesso à função? Afinal, ele aceita o valor zero por si só na primeira chamada, e depois deixa armazenar o valor da barra de zero anterior até a próxima chamada, em vez de ser reposto a zero. Talvez esta simples função pudesse ser simplificada. Entretanto, eu mesmo tenho medo de estragar tudo. E tenho mais uma pergunta a respeito desta função: não é possível que a expressãoNew_Time=Time[0]; não pegue o milissegundo quando um novo bar abrir? O que acontecerá então? Obrigado.


A respeito da segunda pergunta,

se o primeiro tique não pegar, o segundo pegará.

Razão: