vitaliy zamkovoy atual e o compararmos com uma determinada constante para a abertura subsequente de uma ordem, como isso pode ser escrito no Expert Advisor?
Veja este código:
//+------------------------------------------------------------------+//| Test.mq5 |//| Copyright 2022, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2022, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"
//ВХОДНОЙ ПАРАМЕТР
inputushort Constanta=50; //Константа//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create timerEventSetTimer(20);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
}
//+------------------------------------------------------------------+
vitaliy zamkovoy #: Infelizmente, não poderei verificá-lo nos próximos dois dias, mas aceite meus agradecimentos!
Obrigado, mas observe que esse não é um código pronto, mas apenas a direção do meu pensamento. Ele pode estar errado. Você precisa verificá-lo. Você pode considerar outra opção - remover OnTimer e tentar o mesmo código em OnTick(). Em resumo, tente.
vitaliy zamkovoy atual e compará-lo com alguma constante com a abertura subsequente de uma ordem, como você registra isso?
Registre o preço e a hora atuais. Compare o tempo com o tempo atual em cada tick; se for mais de 20 segundos, lembre-se do segundo preço. Calcule a diferença entre o primeiro preço e o segundo preço. Compare o resultado obtido com uma constante e tome a decisão de abrir uma ordem.
Lembrar o preço e a hora atuais. Compare a hora com a hora atual em cada tick; se houver mais de 20 segundos, lembre-se do segundo preço. Calcule a diferença entre o primeiro preço e o segundo. Compare o resultado obtido com uma constante e tome a decisão de abrir uma ordem.
Entendi corretamente: você precisa lembrar o preço atual a cada segundo para compará-lo com o preço atual quando cada valor dessa série for removido por 20 segundos?
Entendi corretamente: você precisa lembrar o preço atual a cada segundo, de modo que, quando cada valor dessa série for excluído por 20 segundos, você possa compará-lo com o atual?
A comparação deve ser contínua.
Se for necessário verificar todos os ticks, então todos os ticks devem ser memorizados e comparados. Se for possível fazer isso com menos frequência, de acordo com o algoritmo, use um cronômetro e, após um segundo, lembre-se do preço e, após 20 segundos, lembre-se também e compare. Ou melhor, você deve lembrar todos os preços ou preços em um segundo dentro de 20 segundos e comparar com um novo tick. Pode haver 1 tick por segundo, pode haver um em 5 segundos e pode haver 100 em um segundo. Você precisa decidir como agir quando houver um tick a cada 5 segundos e quando houver 100 ticks por segundo.
Os ticks não são uniformes, a questão está no algoritmo, então, se você precisa verificar todos os ticks, todos eles devem ser memorizados e comparados. Se for possível ser menos frequente de acordo com o algoritmo, então um cronômetro e, após um segundo, lembrar o preço e, após 20 segundos, também lembrar e comparar. Ou melhor, você deve lembrar todos os preços ou preços em um segundo dentro de 20 segundos e comparar com um novo tick. Pode haver 1 tick por segundo, pode haver um em 5 segundos e pode haver 100 em um segundo. Você precisa decidir como agir quando houver um tick a cada 5 segundos e quando houver 100 ticks por segundo.
Não é uma questão de escolher uma opção, é uma questão de dificuldade para que eu a escreva.... Estou aqui pela primeira vez hoje. Sou totalmente amador.
Não é uma questão de escolher uma opção, é uma questão de dificuldade para eu escrevê-la..... Esta é minha primeira vez aqui hoje. Totalmente amador.
Só quero testar minha ideia.
O algoritmo deve ser preciso e compreender as condições de sua aplicação. Não é possível escrever código de outra forma. O código é a realização de um algoritmo de ações, ele não pode ser impreciso.
E aqui é melhor escrever você mesmo primeiro, e talvez você corrija os erros.
Veja este código:
Atenciosamente, Vladimir.Dê uma olhada neste código:
Atenciosamente, Vladimir.Infelizmente, não poderei verificá-lo nos próximos dois dias, mas aceite meus agradecimentos!
Obrigado, mas observe que esse não é um código pronto, mas apenas a direção do meu pensamento. Ele pode estar errado. Você precisa verificá-lo. Você pode considerar outra opção - remover OnTimer e tentar o mesmo código em OnTick(). Em resumo, tente.
Saudações, Vladimir.
Registre o preço e a hora atuais. Compare o tempo com o tempo atual em cada tick; se for mais de 20 segundos, lembre-se do segundo preço. Calcule a diferença entre o primeiro preço e o segundo preço. Compare o resultado obtido com uma constante e tome a decisão de abrir uma ordem.
Lembrar o preço e a hora atuais. Compare a hora com a hora atual em cada tick; se houver mais de 20 segundos, lembre-se do segundo preço. Calcule a diferença entre o primeiro preço e o segundo. Compare o resultado obtido com uma constante e tome a decisão de abrir uma ordem.
Entendi corretamente: você precisa lembrar o preço atual a cada segundo para compará-lo com o preço atual quando cada valor dessa série for removido por 20 segundos?
A comparação deve ser contínua.
Entendi corretamente: você precisa lembrar o preço atual a cada segundo, de modo que, quando cada valor dessa série for excluído por 20 segundos, você possa compará-lo com o atual?
A comparação deve ser contínua.
Se for necessário verificar todos os ticks, então todos os ticks devem ser memorizados e comparados. Se for possível fazer isso com menos frequência, de acordo com o algoritmo, use um cronômetro e, após um segundo, lembre-se do preço e, após 20 segundos, lembre-se também e compare. Ou melhor, você deve lembrar todos os preços ou preços em um segundo dentro de 20 segundos e comparar com um novo tick.
Pode haver 1 tick por segundo, pode haver um em 5 segundos e pode haver 100 em um segundo. Você precisa decidir como agir quando houver um tick a cada 5 segundos e quando houver 100 ticks por segundo.
Os ticks não são uniformes, a questão está no algoritmo, então, se você precisa verificar todos os ticks, todos eles devem ser memorizados e comparados. Se for possível ser menos frequente de acordo com o algoritmo, então um cronômetro e, após um segundo, lembrar o preço e, após 20 segundos, também lembrar e comparar. Ou melhor, você deve lembrar todos os preços ou preços em um segundo dentro de 20 segundos e comparar com um novo tick.
Pode haver 1 tick por segundo, pode haver um em 5 segundos e pode haver 100 em um segundo. Você precisa decidir como agir quando houver um tick a cada 5 segundos e quando houver 100 ticks por segundo.
Não é uma questão de escolher uma opção, é uma questão de dificuldade para que eu a escreva.... Estou aqui pela primeira vez hoje. Sou totalmente amador.
Só quero testar minha ideia...
Não é uma questão de escolher uma opção, é uma questão de dificuldade para eu escrevê-la..... Esta é minha primeira vez aqui hoje. Totalmente amador.
Só quero testar minha ideia.
O algoritmo deve ser preciso e compreender as condições de sua aplicação. Não é possível escrever código de outra forma. O código é a realização de um algoritmo de ações, ele não pode ser impreciso.
E aqui é melhor escrever você mesmo primeiro, e talvez você corrija os erros.
Você entende os sinais de igual, mais é menos.
Buffer de anel:
Pegue um buffer - uma matriz estática grande o suficiente de estruturas "price, time" (ou duas matrizes separadas).
Pegamos duas variáveis - "ponteiros" (índices) para a cabeça e a cauda do buffer.
Em cada tick, adicionamos um elemento à cabeça e avançamos o ponteiro.
Comparamos o tempo com o elemento na cauda e, se necessário, movemos o ponteiro.
Compare o preço com o elemento na cauda.
Se algum ponteiro tiver chegado ao final da matriz, redefinimos esse ponteiro para zero.
Pegamos duas variáveis - "ponteiros" (índices) para a cabeça e a cauda do buffer.
Em cada tick, adicionamos um elemento à cabeça e movemos o ponteiro.
Compare o tempo com o elemento na cauda e, se necessário, mova o ponteiro.
Compare o preço com o elemento na cauda.
Se algum ponteiro tiver chegado ao final da matriz, redefina esse ponteiro para zero.