Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1427

 
Valeriy Yastremskiy #:

O algoritmo deve ser preciso e deve haver um entendimento das condições de sua aplicação. É impossível escrever um código de outra forma. O código é a realização de um algoritmo de ações, não pode ser impreciso.

E aqui é melhor escrever você mesmo primeiro, e talvez os erros sejam corrigidos.

Você entende os sinais de igual, mais é menos.

Olá, Valery! Concordo plenamente com você. Para escrever um código correto, você precisa de uma condição exata para abrir uma posição. Esse código também funciona:

//+------------------------------------------------------------------+
//|                                                         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"
//ВХОДНОЙ ПАРАМЕТР
input ushort Constanta=50; //Константа
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Tick function                                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   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);
  }
//+------------------------------------------------------------------+

mas a questão é se ele deve funcionar como Vitaly pretendia. Falando francamente, não entendo muito bem por que, a cada 20 segundos (ou mesmo a cada 10, 5 ou 1 segundo), devemos verificar a diferença de preço. O que isso nos dará em termos de determinar a direção do movimento futuro do preço?

Atenciosamente, Vladimir.

 
MrBrooklin #:

Olá, Valery! Concordo plenamente com você. Para escrever um código correto, você precisa de uma condição exata para abrir uma posição. Esse código também funciona:

mas a questão é se ele deve funcionar como Vitaly pretendia. Falando francamente, não entendo muito bem por que, a cada 20 segundos (ou mesmo a cada 10, 5 ou 1 segundo), precisamos verificar a diferença de preço. O que isso fará em termos de determinar a direção do movimento futuro do preço?

Atenciosamente, Vladimir.

MrBrooklin #:

Olá, Valery! Concordo plenamente com você. Para escrever um código correto, você precisa de uma condição exata para abrir uma posição. Esse código também funciona:

mas a questão é se ele deve funcionar como Vitaly pretendia. Falando francamente, não entendo muito bem por que, a cada 20 segundos (ou mesmo a cada 10, 5 ou 1 segundo), precisamos verificar a diferença de preço. O que isso fará em termos de determinar a direção do movimento futuro do preço?

Atenciosamente, Vladimir.

Você descreveu a tarefa incorretamente! Não se trata de "uma vez a cada 20 segundos", mas de verificar a cada segundo com os indicadores que já passaram há algum tempo. Quanto ao "por que", essa não é uma pergunta para esta discussão. (E 20 segundos é apenas um exemplo).

É como uma média móvel, em que o primeiro candle é comparado ao segundo candle. Só que eu tenho que calcular tudo dentro do candle atual (zero) minuto (ou, melhor ainda, em um gráfico de linhas). Afinal de contas, 20 segundos podem fluir para o primeiro candle).

 
vitaliy zamkovoy #:
Você não está descrevendo a tarefa corretamente! Não se trata de "uma vez a cada 20 segundos", mas de verificar a cada segundo os valores que passaram há algum tempo. Quanto ao "por quê", essa não é uma pergunta para esta discussão. (E 20 segundos é apenas um exemplo).

Sim, meu erro, não entendi completamente o que você quer fazer/verificar.

Saudações, Vladimir.

 

Mas se a distância igual à sua constante for percorrida não em um número par de segundos, mas, por exemplo, em 10,964 segundos ou 11,283 segundos, o que acontecerá? A condição será atendida ou não?

Atenciosamente, Vladimir.

 
MrBrooklin #:

Mas se a distância igual à sua constante for percorrida não em um número par de segundos, mas, por exemplo, em 10,964 segundos ou em 11,283 segundos, o que acontecerá? A condição será atendida ou não?

Atenciosamente, Vladimir.

No termo "comparação com uma constante", não me refiro à igualdade, mas a "mais" "menos". Em caso de diferença positiva, comparamos com a constante com o sinal +, e em caso de diferença negativa, comparamos com a constante com o sinal " - ". Se, no primeiro caso, excedermos a constante, compraremos. No segundo caso, se o valor for menor - venda.
 
vitaliy zamkovoy #:
No termo "comparação com uma constante", não quero dizer igualdade, mas "mais" "menos".

Agora tudo está claro.

Saudações, Vladimir.

 
MrBrooklin #:

Agora tudo faz sentido.

Saudações, Vladimir.

Atualizei as mensagens aqui. Por favor, leia-as novamente.
 

Estou cansado de ler todas essas bobagens... Afinal de contas, o código tem apenas QUATRO linhas e as discussões têm 3 páginas.

  MqlTick mqlTick[], symbTick; // объявили переменные
  SymbolInfoTick(_Symbol, symbTick); // это последний тик
  CopyTicksRange(_Symbol, mqlTick, COPY_TICKS_ALL, symbTick.time_msc, symbTick.time_msc-20000); // Получили все тики за последние 20 секунд
  double delta = NormalizeDouble(mqlTick[ArraySize(mqlTick)-1].bid-mqlTick[0].bid, _Digits); // получили разницу крайних значений массива

20.000 mil issegundos são 20 segundos.

Em seguida, coloque uma condição no tamanho da variável delta mais/menor, esquerda/direita ou norte/yuh....

 
MrBrooklin #:

Agora tudo faz sentido.

Saudações, Vladimir.

MrBrooklin #:

Agora tudo faz sentido.

Saudações, Vladimir.

vitaliy zamkovoy #:
Atualizei as mensagens lá. Por favor, releia-as.
Alexey Viktorov é um esnobe, mas percebeu o truque imediatamente. 😆
 
vitaliy zamkovoy #:
No termo "comparação com uma constante", não me refiro à igualdade, mas a "mais" "menos". Se a diferença for positiva, nós a comparamos com uma constante com sinal de + e, se a diferença for negativa, nós a comparamos com uma constante com sinal de -. Se, no primeiro caso, excedermos a constante, compraremos. No segundo caso, se o valor for menor - venda.

Agora tudo está claro.

Saudações, Vladimir.

P.S. A única coisa que posso recomendar é que você assista à minha mensagem aqui, por uma questão de interesse, e depois veja como o preço se comportou após essa mensagem. Ele recuou para 0,98000, ou mais precisamente para 0,9806, e depois subiu novamente, como mostra a seta vermelha na captura de tela do gráfico de preços. Essa recomendação é apenas para sua reflexão.

Razão: