Um bug na função OrderSend() ? - página 5

 
Sepulca:

A estática funciona 100%. Aqui está o teste:

E os resultados:


Bem, funciona para mim como antes... Nenhuma mudança! Eu tenho até a função de abrir um novo bar:

bool isNewBar()
   {
      static datetime lastBar;                                   // Задаём переменную для времени открытия последнего бара
      datetime currBar;                                                  // Задаём переменную для времени открытия текущего бара
      currBar = iTime(Symbol(),PERIOD_M1,0);          // Находим время открытия текущего бара
      if(lastBar!=currBar)                                               // Если время открытия последнего бара не равно времени открытия текущего бара, то...
         {
            lastBar=currBar;
            return(true);
         }
      return(false);
   }

que também funciona corretamente. É por isso que o meu código está sendo escolhido sem fundamento. E a pergunta estava geralmente correta. Aparentemente, o testador está com falhas, então as leituras estão todas erradas. Na M5 é de alguma forma mais limpa, na M15 também a H1 já é parecida.

 
hoz:


Está funcionando da mesma forma que antes. Não há mudanças! Eu tenho até mesmo uma nova função de abertura de bar:

que também funciona bem. É por isso que meu código está sendo criticado sem fundamento. Mas a pergunta estava correta em geral. Aparentemente, o testador está com falhas e as leituras estão erradas. Na M5 é de alguma forma mais limpa, na M15 também a H1 já é abismal.


Eu aconselharia a escrever se (última barra<currBar) imediatamente, embora isso dificilmente mudará alguma coisa. Vou mais longe em seus postos, talvez eu diga outra coisa.
 
hoz:


Está funcionando da mesma forma que antes. Não há mudanças! Tenho até uma função para abrir um novo bar:

que também funciona bem. É por isso que meu código está sendo criticado sem fundamento. Mas a pergunta estava correta em geral. Aparentemente, o testador está com falhas e as leituras estão erradas. Na M5 é de alguma forma mais limpa, na M15 também a H1 já é abismal.



Isso pode ajudar. Sua função start() está um pouco retrabalhada. Não entrou profundamente no assunto, mas mesmo assim:

int start()
{
   fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,1);
   slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,1);
   
 /*  Print("Bid = ", Bid);
   Print("Ask = ", Ask);
   Print("fastMa = ", fastMa);
   Print("i_thresholdFromMa * pt = ", i_thresholdFromMa * pt);
   */
// Отслеживание открытия нового бара
   static datetime lastBarTime = iTime(NULL, 0, 1));    // Время проведения последних рассчётов, изначально принимаем предыдущий бар
   
   if (lastBarTime < iTime(NULL, 0, 0))         // Если случился новый бар
 // Рассчёт сигнала 
    {
     if("На этом баре случилось что-то, что вынуждает ждать следуещего бара")
      {
       ..........// Выполняем действия открытия/закрытия или что-то там ещё...
       lastBarTime = iTime(NULL, 0, 0);              // На текущем баре все необходимые действия выполнены, ждём следуещего бара..
      }
     else
      {
       "Ничего не случилось, ждем до следуещего тика"
      }
    }
                                       // .. успешно выполнены
  return (0);
}
 
Sepulca:



Isso pode ajudar. Sua função de início() é um pouco retrabalhada. Não entrou profundamente no assunto, mas mesmo assim:


Bem, aqui o tempo de cálculo é tirado da barra anterior. Não parece lógico. Precisamos da barra atual.
 
PapaYozh:

Pessoalmente, eu nunca encontrei um statik que não funcionasse.

Aqui está um exemplo de um especialista, se você quiser verificá-lo em um gráfico:

1. Inicie o Expert Advisor.

2. Mude a TF.

3. Certifique-se de que o cc não se torne 20 novamente.

 
hoz:


Está funcionando da mesma forma que antes. Não há mudanças! Eu tenho até mesmo uma nova função de abertura de bar:

que também funciona bem. É por isso que meu código está sendo criticado sem fundamento. Mas a pergunta estava correta em geral. Aparentemente, o testador está com falhas e as leituras estão erradas. Na M5 é de alguma forma mais limpa, na M15 também a H1 já é abismal.

Com respeito à sua situação:

O tempo foi inicializado uma vez - quando você inicia a EA, ela não será inicializada novamente, então quando você mudar de M1 para D1 você terá que esperar cerca de um dia para atualizar o gráfico :(

 
tara:

Aplica-se à sua situação:

O tempo foi inicializado uma vez - quando você inicia o EA, ele não será inicializado novamente, então quando você muda de M1 para D1 você terá que esperar cerca de um dia para que o gráfico seja atualizado :(



O Expert Advisor trabalha em um TF específico. Por que eu precisaria trocá-lo?
 
tara:

3. Certifique-se de que o cc não tenha se tornado 20 novamente.

Esta é uma característica documentada dos EAs.
 
TheXpert:
Esta é uma característica documentada dos EAs.


O que é Static então? É mais um Fatalic...


A propósito, onde está documentado?

 
hoz:

O Expert Advisor trabalha em um TF específico. Por que eu precisaria trocá-lo de repente?

Você pode simplesmente mudar alguns parâmetros. A reação ocorrerá somente após o primeiro tique de uma nova barra no conjunto TF.

Mas você mesmo se perguntou por que o Expert Advisor é inexplicável em um TF superior:)