[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
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.
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)
{
case1: return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
case2: return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
case3: 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)
{
case1: return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
case2: return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
case3: 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.
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.
Eu fiz tudo exatamente da mesma maneira e mais de uma vez, mas ainda há aquele buraco.
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:
Tais repetições podem estar em ordem. Eu queria me livrar deles, escrevendo funções separadas.
Aqui é o começo:
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 :
Você conseguiria algo assim:
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.
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?