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

 
Roni Iron:

Bom dia a todos!


Pergunta: qual é a maneira mais fácil de determinar os tempos altos e baixos de um bar?

Otempo de abertura/fecho do bar não é interessante.

No MT4.

Obrigado!

fez isto

postado em KBhttps://www.mql5.com/ru/code/25897

 

Por favor, diga-me, no MT4 havia uma variável pré-definida dupla Ask, e como eu entendo, dentro do vazio OnTick() sem forçar

RereshRates seu valor NÃO mudaria.

No MT5, Ask é substituído por MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); duplo Ask=last_tick.ask ; seu valor é sempre atualizado por um novo tick.

Meu problema é que preciso definir a coordenada da linha pelo valor de Ask + X, mas não posso fazê-lo em MT5 porque a linha muda suas coordenadas depois que o valor muda

Ask=last_tick.ask. Qual é o seu conselho?

Документация по MQL5: Предопределенные переменные
Документация по MQL5: Предопределенные переменные
  • www.mql5.com
Для каждой выполняющейся mql5-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql5-программы на выполнение...
 
WinProject:

Por favor, diga-me, no MT4 havia uma variável pré-definida dupla Ask, e como eu entendo, dentro do vazio OnTick() sem forçar

RereshRates seu valor NÃO mudaria.

No MT5, Ask é substituído por MqlTick last_tick; SymbolInfoTick(_Symbol,last_tick); duplo Ask=last_tick.ask ; seu valor é sempre atualizado por um novo tick.

Meu problema é que preciso definir a coordenada da linha pelo valor de Ask + X, mas não posso fazê-lo em MT5 porque a linha muda suas coordenadas depois que o valor muda

Ask=last_tick.ask. Qual é o seu conselho?

Como isso não mudou? Mudou a cada tique. Mas, no circuito, não mudou. Talvez você tenha ficado um pouco confuso com isso?

Mas em mql5 você pode determinar o preço atual antes do laço e ele não mudará até que você saia do laço.

 
Pessoal, desculpem a pergunta idiota. No terminal mt4 mostra lucro incluindo comissões, swaps, etc. No mt5 mostra "nua". Não consigo encontrá-lo, existe alguma configuração para o mt5 mostrá-lo como mt4? Ou não é capaz de fazer isso?
 

Existe alguma forma de medir a largura em pixels do texto escrito em OBJ_TEXT?

 
Alexey Viktorov:

Como isso não mudou? Mudou a cada tique. Mas no ciclo, sim, não o fez. Talvez, você tenha ficado um pouco confuso com essa?

Mas em mql5 você pode determinar o preço atual antes do laço e ele não mudará até que você saia do laço.

Sim, obrigado, minha suposição se revelou errada, mas a questão é um pouco diferente. Eu tenho um código, o mesmopara MT4 e MT5:

 void OnTick()
              {
              string S=Symbol();
              double LastAsk= SymbolInfoDouble(S,SYMBOL_ASK);
              ObjectCreate(0,"hLine",OBJ_HLINE,0,0,LastAsk +500*Point());
              }

A questão é que na MT4 a linha criada será fixada no preço ao qual foi criada, mas na MT5 toda vez que em um novo tick a linha será desenhada a um novo valor da LastAsk e sua posição mudará junto com o preço. Como posso evitá-lo no MT5?

 
WinProject:

Sim, obrigado, minha suposição estava errada, mas a questão é um pouco diferente. Existe um código,o mesmo para MT4 e MT5:

A questão é que na MT4 a linha criada será estacionária ao preço pelo qual foi criada, mas na MT5 toda vez que em um novo tick a linha será desenhada com um novo valor LastAsk e sua posição mudará junto com o preço. Como posso evitá-lo no MT5?

Verifique a disponibilidade da linha pelo nome. Se não houver, crie um. Estas são as noções básicas em geral
 
Artyom Trishkin:
Procure uma linha pelo nome. Se não houver linha, crie uma. Este é o básico em geral.

Obrigado, o que mais posso ler sobre essas lógicas de programação básicas? Parece elementar, mas é difícil de entender a partir do zero.

 if(ObjectFind(0,"hLine"))

Eu acrescentei uma condição e tudo funcionou.

 
WinProject:

Obrigado, o que mais posso ler sobre estas lógicas de programação básicas? Parece elementar, mas é difícil de entender a partir do zero.

Eu acrescentei uma condição e tudo funcionou.

De repente (como de costume) ObjectGetInteger(0,objectName,OBJPROP_TYPE) funciona mais rápido.

ObjectFind é um comando síncrono, ou seja, espera por uma atualização completa (e disponibilidade) dos objetos gráficos.

Se você trabalha com seus próprios objetos (ou seja, criados em seu próprio estoque), então você não deve usar ObjectFind - você já sabe em que janela o objeto foi criado e que ele provavelmente existe e é o tipo certo.
O pior que pode acontecer é que o usuário apague o objeto ou mude o imóvel

 
WinProject:

Sim, obrigado, minha suposição estava errada, mas a questão é um pouco diferente. Existe um código,o mesmo para MT4 e MT5:

A questão é que na MT4 a linha criada será estacionária ao preço pelo qual foi criada, mas na MT5 toda vez que em um novo tick a linha será desenhada com um novo valor LastAsk e sua posição mudará junto com o preço. Como posso evitá-lo no MT5?

Não me lembro, preciso verificá-lo, mas não quero. Talvez, em mql4 ao tentar criar um objeto com o nome de um já existente, um erro tenha sido apenas devolvido, enquanto em mql5 não é um erro mas uma modificação de parâmetro, se as coordenadas forem diferentes.

Como disse Artem - verificar a existência do objeto

int  ObjectFind( 
   long    chart_id,     // идентификатор графика 
   string  name          // имя объекта 
   );
Razão: