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

 
-Aleks-:
Dois anos - em testador :) Está a decorrer há um ano na demonstração... Muitos insectos lá, quando tive de o ligar por causa de classes externas. E agora há um tal insecto, que não sei como corrigir - vou apenas aumentar o tamanho da matriz em um dígito, por agora. Porque não existe um tamanho automático, como para um buffer gráfico, ou existe?

Experimente desta forma.

Inicializar a matriz OrderBU[1].

Primeiro aumentar o tamanho da matriz ( ArrayResize(OrderBU,NorderBU+1) ), depois OrderBU[NorderBU]=OrderTicket();NorderBU++;

 
new-rena:

Experimente desta forma.

Inicializar a matriz OrderBU[1].

Primeiro aumentar o tamanho da matriz ( ArrayResize(OrderBU,NorderBU+1) ), depois OrderBU[NorderBU]=OrderTicket();NorderBU++;

Obrigado - farei experiências à minha vontade.
 
Por favor, aconselhar como implementar o seguinte no código.
Existe uma variável de base A, se for inferior a zero, então usamos mais cinco variáveis - os valores são atribuídos a partir da função de chamada de indicador - iCustom.
Tendo recebido os valores, devemos classificá-los - encontrar valores acima e abaixo da variável A e definir a partir dos dois grupos - valor máximo, mínimo, médio.
Penso que é necessário utilizar uma matriz, mas não compreendo bem como.
 

Pode por favor aconselhar-nos sobre este ponto?

Por exemplo, temos um indicador Williams Percent Range (%R) numa carta e arrastamos o indicador On Balance Volume (OBV) para a sua janela a partir do navegador.

https://charts.mql5.com/8/675/xauusd-h4-metaquotes-software-corp.png

A %R funciona no intervalo 0 -100%, o OBV não tem uma ligação específica.

Quando o OBV está na janela %R, vemos visualmente que vai além de -20 ou -80%.

Como podemos obter OBV acima de -20% ou abaixo de -80% na nossa EA?

Como ligar o OBV no indicador personalizado ao intervalo de 0 -100%? Normalizá-lo a ele (alcance)? Como é que isto pode ser feito?

Compreendo que não é necessário normalizar o OBV para %R (a imagem será diferente).

Talvez seja elementar, apenas ainda não o encontrei.

 
-Aleks-:
Por favor, aconselhar como implementar o seguinte no código.
Existe uma variável de base A, se for inferior a zero, então usamos mais cinco variáveis - os valores são atribuídos a partir da função de chamada de indicador - iCustom.
Tendo recebido os valores, devemos classificá-los - encontrar valores acima e abaixo da variável A e definir a partir dos dois grupos - valor máximo, mínimo, médio.
Penso que deveríamos utilizar a matriz, mas não compreendo bem como.

if (p1>p2&&p1>p3) , if (p2>p1&&p2>p3) , if (p3>p2&&p3>p1)

Faço-o desta forma,

 

Preciso de um parâmetro de lote flutuante, o primeiro lote é definido pelo utilizador, depois este parâmetro não é mais tratado, e a EA funciona por si mesma e em caso de perda é aumentada pelo lote máximo especificado no programa (ou uma variável externa), em caso de lucro é reduzida pelo montante especificado .

Se eu escrever o parâmetro no "Init", a EA deixará de aceder ao lote de variáveis externas ?

ou como é que o faço ?

esta é uma expressão aproximada .

 
Olá. Pode por favor dizer-me como utilizar os dados de notícias na minha EA? Preciso de um indicador para isso, ou a EA pode encontrar notícias importantes por si só?
 
Leanid Aladzyeu:

if (p1>p2&&p1>p3) , if (p2>p1&&p2>p3) , if (p3>p2&&p3>p1)

Faço-o desta forma,

Não é conveniente, especialmente com um grande número de parâmetros...

A solução via array é interessante. Especialmente interessante como encontrar o valor mais próximo de uma variável quando se faz a média do número total de valores.

 
first_may:

Boa noite. Tentar escrever uma simples EA em tenkan e kinjun crossing. Aqui está o código:

nulo OnTick()

nulo OnTick()

{

TradeSignal_20();

}


int TradeSignal_20()

{

int sig=0;


if(h_ich==INVALID_HANDLE)

{

h_ich=iIchimoku(Símbolo(),Período(),IKHtenkansen,IKHkijunsen,IKHsenkouspanb);

return(0);

}

senão

{

if (CopyBuffer(h_ich,0,0,3,ich1_buffer)<2) return(0); // TENKANSEN_LINE

if (CopyBuffer(h_ich,1,0,3,ich2_buffer)<2) return(0); // KIJUNSEN_LINE

if (!ArraySetAsSeries(ich1_buffer,true)) return(0);

if (!ArraySetAsSeries(ich2_buffer,true)) return(0);

}

//--- verificar condição e valor definido para sig

if(ich1_buffer[1]>ich2_buffer[1]) sig=1;

senão se(ich1_buffer[1]<ich2_buffer[1]) sig=-1;

senão sig=0;

if (ich1_buffer[1]>ich2_buffer[1])

if (ich1_buffer[2]<ich2_buffer[2])

Alerta(Símbolo()+": compra");

if (ich1_buffer[1]<ich2_buffer[1])

if (ich1_buffer[2]>ich2_buffer[2])

Alerta(Símbolo()+": venda");

//--- devolver sinal comercial

devolução (sig);

}

//+------------------------------------------------------------------+

Como posso fazer com que o alerta seja chamado apenas uma vez e não constantemente?

Executar não todos os tick, mas conforme necessário.
 
Vasiliy Smirnov:
Não correr nem todas as carraças, mas conforme necessário.
E como deve ser? Quando um novo bar abre - então faça um cheque para um novo bar...