Perguntas de um "boneco" - página 40

 

Explique por favor porque é que nenhum dos EAs do MetaTrader 5 é testado no testador de estratégias. Carrego no início e nada acontece. Por favor, explique.

 
PATRIOT:

Explique por favor porque é que nenhum dos EAs do MetaTrader 5 está a ser testado no testador de estratégias. Carrego no início e nada acontece. Por favor, explique.

Procure no livro de bordo (para começar).
 

Não é possível recuperar dados de estruturas pré-definidas em funções criadas. Por exemplo:

void OnTick()
{
//--- Объявляем структуру
 MqlRates rates[];
 ArraySetAsSeries(rates,true);

//--- Скопировать необходимое количество значений в массив
 if(CopyRates(NULL,0,0,4,rates) < 0) { Print(ErrorDescription(GetLastError())); return; }
...
}

Depois, ao tentar recuperar valores numa função criada:

void Trailing_Stop_Loss(ENUM_POSITION_TYPE Type, double Trailing_Stop)
{
 string Val_Time = TimeToString(rates[1].time,TIME_DATE|TIME_MINUTES);

...
}

Recebemos uma mensagem de erro:

Como declarar estruturas para que estejam disponíveis em todas as partes do programa?

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
tol64:

Não é possível recuperar dados de estruturas pré-definidas em funções criadas. Por exemplo:

Depois, ao tentar recuperar valores numa função criada:

Recebemos uma mensagem de erro:

Como declarar estruturas para que estejam disponíveis em todas as partes do programa?

No âmbito global. Fora da função.
 
Que funções podem ser usadas para verificar se um fio comercial está livre para realizar uma operação comercial? Na MQL4, as funções IsTradeAllowed() e IsTradeContextBusy() foram concebidas para este fim.

A classe CAccountInfo da biblioteca padrão tem a função TradeAllowed(). Está escrito na ajuda que significa:"É permitido/obrigado negociar para esta conta". Não encontrei um código de erro nos códigos de retorno do servidor comercial, o que significa que o fluxo comercial pode estar ocupado. Este cheque está agora no próprio terminal comercial? Por favor, esclareça.


 
tol64:
Que funções podem ser usadas para verificar se um fio comercial está livre para realizar uma operação comercial? Na MQL4, as funções IsTradeAllowed() e IsTradeContextBusy() foram concebidas para este fim.

A classe CAccountInfo da biblioteca padrão tem a função TradeAllowed(). Está escrito na ajuda que significa:"É permitido/obrigado negociar para esta conta". Não encontrei um código de erro nos códigos de retorno do servidor comercial, o que significa que o fluxo comercial pode estar ocupado. Este cheque está agora no próprio terminal comercial? Por favor, esclareça.

Em MT5, o fio comercial nunca está ocupado porque as operações comerciais são assíncronas. Alegre-se.
 
tol64:
Que funções podem ser usadas para verificar se um fio comercial está livre para realizar uma operação comercial? Na MQL4, as funções IsTradeAllowed() e IsTradeContextBusy() foram concebidas para este fim.

A classe CAccountInfo da biblioteca padrão tem a função TradeAllowed(). Está escrito na ajuda que significa:"É permitido/obrigado negociar para esta conta ". Não encontrei um código de erro nos códigos de retorno do servidor comercial, o que significa que o fluxo comercial pode estar ocupado. Este cheque está agora no próprio terminal comercial? Por favor explique.


No MetaTrader5 não existe um fio comercial ocupado, enquanto que no MT4 só se poderia processar uma ordem de um comerciante, no MT5 muitas ordens são processadas em paralelo. Os códigos de retorno do servidor para qualquer encomenda podem ser obtidos na função OnTrade().
 
uncleVic:

Só é preciso fixar o preço.

Se nenhum preço for definido (por defeito é 0,0) ou se o preço de mercado for definido, a CExpertTrade é convidada pela CExpert a abrir uma posição no mercado.

Se o preço for estabelecido melhor que o mercado (abaixo do preço actual de compra e acima do preço actual de venda), a CExpertTrade colocará uma ordem limite (se a margem for respeitada).

Se o preço for inferior ao mercado (acima da oferta actual e abaixo da oferta actual), a CExpertTrade colocará uma ordem de paragem (sujeita a indentação).

bool Chhhh::OpenLongParams(double& price, double& sl, double& tp, datetime& expiration)
{
   printf("11111111");
   if(2+2==4)
   {
      price=1.5;
      sl=0;
      tp=0;
      expiration=0;
      return(true);
   }
   else
   {
      return(false);
   }
}

int Chhhh::LongCondition()
{
  printf("222222222");
  return(60);
}
O OpenLongParams não funciona, nem sequer devolve "1111111111",
e a LongCondition devolve "2222222" e abre uma encomenda,
é algo de errado ou é definido de forma diferente?
 
sergeev:

O tipo específico é definido quando a encomenda é feita. OrderSend
O que é que a OrderSend tem a ver com isto ?
 
Lodar:
OpenLongParams não executa nada, nem sequer escreve "1111111111",
mas LongCondition escreverá "222222222" e abrirá uma ordem,
estou a fazer algo de errado ou está definido de forma diferente?

Em princípio, as coisas são muito mais simples. Em 99 por cento dos casos, o nível de entrada pode ser ajustado utilizando um parâmetro de entrada:

input double Inp_Signal_PriceLevel    =0.0;

O valor é fixado em "grandes" pips (ou seja, 2/4 dígitos).

Valor = 0 - entrada no mercado.

Valor > 0 - entrada por ordem de limite.

Valor < 0 - entrada por ordem de paragem.

O parâmetro diz respeito ao sinal principal (no qual os sinais seleccionados no Wizard são recolhidos para votação). O algoritmo de fixação dos níveis de preços já está implementado na classe base CExpertSignal (cujo exemplo é o sinal principal).

Mas se quiser usar um algoritmo que difere do implementado... Mas isso é para mais tarde, quando será interessante.