[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 301

 
laveosa:

Eu fiz tudo exatamente da mesma maneira e mais de uma vez, mas ainda há aquele buraco.
Então procure Cheburashka em sua residência! Certamente, suas artimanhas! ;)
 
laveosa,mantenha a história até ontem eurusdm1 download via importação entre aspas.
Arquivos anexados:
eurusd1.zip  548 kb
 
Tentei verificar um indicador, coloquei os números no gráfico mas eles não mudam, vou tentar colocá-lo de outra forma, preciso do indicador anexo para fixar o preço como uma cruz que fica em ziguezague ou alerta ou impressão, mas congela na conexão.
Arquivos anexados:
 

Uma pergunta para os especialistas!

Muitas vezes tenho feiticeiros nos meus EAs. A fim de não "lixo" o código com momentos repetitivos, como por exemplo:

double maFast = iMA(NULL, 0, i_maFastPeriod, 0, i_maMethod, i_maPrice, index);
double maSlow = iMA(NULL, 0, i_maSlowPeriod, 0, i_maMethod, i_maPrice, index);

Tais repetições podem estar em ordem. Eu queria me livrar deles, escrevendo funções separadas.

Aqui é o começo:

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   if (GetMA(1, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex) > 
      GetMA(2, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex))
      return (CROSS_UP);
}

Podemos ir mais longe, declarando variáveis globais para toalhetes, por exemplo, fastMA e slowMA, e devolvê-las por referência através da função :

GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)

Você conseguiria algo assim:

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA);
   if (fastMA > slowMA)
       return (CROSS_UP);
   if (fastMA < slowMA)
       return (CROSS_DN);
   return (CROSS_NO);
}

A questão é esta:

Ouvi dizer ou li em algum lugar que o operador do interruptor é lento, não afetará o desempenho da EA em geral, neste caso? Em geral, quão lento é o processo?

Muitos parâmetros aparecem aqui, isso não vai atrasar um Expert Advisor?

Estou escrevendo e pensando em produtividade, então a questão surge, como não sou um programador por treinamento, para entendê-la eu mesmo, não sai realmente...

 

Victor, a chamada de função é muito mais um freio do que um interruptor. Você mesmo pode verificar a velocidade. Escreva um código de teste com um laço. Onde você irá verificar seu código. Meça o tempo na entrada. Em seguida, compará-lo com o tempo de saída.

O operador do interruptor é um dos operadores mais rápidos. É mais rápido do que correr pelas condições.

O interruptor deve ser usado com um padrão de exceções. Para que, no caso de uma condição incorreta, você saiba por que o código não funciona.

 

Hmm. Acho que você não pode usar uma constante para o caso como variável, de acordo com a documentação. Diz algum tipo de constante alvo, constante de caráter ou expressão de caráter.

Só funciona se você definir uma letra tipo string, ou seja, 1 caractere (se mais de 1 caractere, o compilador jura) ou um número.

Nada mais.
Diz algumas constantes de destino, expressões de caráter e constantes de caráter.

 

Onde posso ler sobre o uso de variáveis terminais globais com exemplos práticos? Especificamente, quero fazer com que cada Consultor Especialista negocie apenas sua parte do depósito e seu lucro/slippage não afete o MM de outros Consultores Especialistas.

 
Ekburg:

Olá a todos

Você pode aconselhar o que pode ser a causa do erro de "desligamento por tempo limite", ao executar o Expert Advisor no terminal e como resolver este problema?

 
[É isso mesmo, não parece ter nada a ver com a cozinha: a ordem de venda está no registro da EA. é claro, você pode assumir que o corretor mudou o código do distributivo MT4 baixado e corrige a direção do negócio, mas seria muito impudente, acho eu.
 
Posso anexar códigos de programas em vez de copiar o código inteiro aqui? O que os administradores estão olhando?
Razão: