Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 237

 
Sergey Likho:

O indicador do MT5 desenha uma linha em duas cores.

Os valores da linha estão no mesmo buffer.

Existe alguma maneira de identificar a cor da linha ao solicitar valores do indicador?

Você pode. A cor da linha é armazenada no buffer de cores. Se houver apenas uma linha, o valor buffer é 0 e o buffer de cor é 1. Assim, em CopyBuffer, você coloca o segundo parâmetro 1.
 
Ventura:

Se não for possível exibir programticamente a janela de parâmetros, favor informar se os parâmetros podem ser inicializados de alguma forma

input double BuyStop=100;
double MyBuyStop=BuyStop;


.........
if(something) MyBuyStop=200;
 
Евгений:

O que você recomenda?

Primeiro os mandados têm que ser peneirados por símbolo e magia. Você fica com duas ordens. Você seleciona aquele que deseja excluir em sua condição. Você apaga um e muda o stop loss.

 
Aleksei Stepanenko
input double BuyStop=100;
double MyBuyStop=BuyStop;


.........
if(something) MyBuyStop=200;

Alexey, pedi uma sugestão sobre como chamar a função de cálculo de parâmetros ANTES de aparecer a janela de parâmetros, não depois.

A pergunta está aberta: é possível chamar a janela de parâmetros PROGRAMAMaticamente ? Caso contrário, é possível rubricar parâmetros a partir de uma função ANTES de aparecer a janela de parâmetros.

Eu gostaria de fazer algo como isto

input double BuyStop = GetMyBuyStop();

Mas recebo um erro dizendo que só constante pode estar do lado certo (

 
Ventura:

Alexey, pedi uma sugestão sobre como chamar a função de cálculo de parâmetros ANTES de aparecer a janela de parâmetros, não depois.

A pergunta está aberta: é possível chamar a janela de parâmetros PROGRAMAMaticamente ? Caso contrário, é possível rubricar parâmetros a partir de uma função ANTES de aparecer a janela de parâmetros.

Eu gostaria de fazer algo como isto

input double BuyStop = GetMyBuyStop();

Mas ocorre um erro que só pode haver uma constante à direita (

Não há nada antes da janela de parâmetros aparecer, tudo começa apenas mais tarde, quando a janela já está carregada

 

Exatamente o que Vitaly disse!

Criar um painel no gráfico, gerenciar as variáveis a partir dele.

 
Vitaly Muzichenko:

Não há nada antes de aparecer a janela de parâmetros, ela só começa depois, quando a janela já está carregada

Eu sei disso, é por isso que estou esperando por conselhos profissionais. Talvez isso possa ser feito por meios não-padronizados, através do Win API ou outra coisa.

Não há realmente uma maneira de mostrar a janela programmaticamente, a partir do código?

 
Ventura:

Eu sei disso, é por isso que estou esperando por conselhos profissionais. Talvez isso possa ser feito por meios não-padronizados, através do Win API ou outra coisa.

Não há como mostrar a janela programmaticamente, a partir do código?

Antes da inicialização da EA (e os parâmetros são inseridos antes da inicialização), a EA não está disponível, não funciona... Antes da inicialização do Expert Advisor, a janela de seus parâmetros está à sua disposição. Mas isso não lhe convém. Portanto, use outra entrada dos valores que você precisa - após a inicialização da EA. Você tem acesso à janela MessageBox(). Mas isso não o ajudará muito - não há campos de entrada de valor - basta concordar/desacordar/cancelar botões.

Portanto - você precisa usar sua própria janela. Você mesmo pode criá-lo a partir de objetos. Procure-o em ObjectCreate(). Ou usar Tela. Mas o kanvas não é para o simples artesanato.

Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
ObjectCreate - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

A EA não está disponível antes da inicialização (e os parâmetros são inseridos antes da inicialização), ela não funciona... Antes que a EA seja inicializada, sua janela de parâmetros está à sua disposição. Mas isso não lhe convém. Portanto, use outra entrada dos valores que você precisa - após a inicialização da EA. Você tem acesso à janela MessageBox(). Mas isso não o ajudará muito - não há campos de entrada de valor - basta concordar/desacordar/cancelar botões.

Portanto - você precisa usar sua própria janela. Você mesmo pode criá-lo a partir de objetos. Procure-o em ObjectCreate(). Ou usar Tela. Mas o kanvas não é para o simples artesanato.

Artem, obrigado, eu estava esperando seus conselhos. Enquanto esperava, eu mesmo estava procurando por possíveis soluções. Esta manhã trabalhei como mostrar a janela de ajustes de forma programática !

Descobri que a janela é chamada pressionando F7. Uma pesquisa na Internet mostrou que a MQL pode ser usada para fazer uma impressão com teclas macias.

O resto é uma questão de técnica. Aqui está o código que pode ser útil para alguém:

BuyStop duplo externo, SellStop;

...

void SetParams()
  {
   BuyStop = CalcBuyStop();
   SellStop = CalcSellStop();
   int handle = WindowHandle(Symbol(), 0);
   PostMessageA(handle,WM_KEYDOWN,VK_F7,0);
  } 
 

Mas eu me regozijei muito cedo. Consegui abrir programticamente a janela de parâmetros, mas os valores que atribuí aos parâmetros no procedimento não foram salvos (((

Ou seja, quando abro a janela de parâmetros, vejo os valores especificados durante a inicialização, no meu caso zeros.

Existe alguma forma de fazer com que os valores calculados sejam transferidos para o formulário de parâmetros?