Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 219

 
Alexey Viktorov:

Artyom, eu não comecei minha resposta com as palavras


O parabólico tem uma alternância rigorosa, dois sinais em uma direção, mesmo em barras diferentes, são impossíveis. E você não tem que inventar nada para isso, não chocalha nem mesmo na barra zero, como o MA.

Rattling - Eu já notei isso mais de uma vez antes. Talvez algo tenha mudado desde então, mas o ponto sobre a barra zero pode desaparecer - foi.

Estou procedendo como sempre da situação de que mais tarde se pode mudar o indicador para outro - e este bloco de código já vai funcionar independentemente - hábito ...

 
Artyom Trishkin:
Isso ajudaria? Eu coloquei lá um modelo, a partir do qual você pode fazer o que quiser.

Obrigado, aplicado de forma aproximada, mas ainda parece que às vezes ele muda SL imediatamente quando um comércio é aberto.
 
AlGuru:

Obrigado, eu apliquei de forma aproximada, mas ainda tenho a sensação de que às vezes ele muda SL imediatamente quando uma negociação é aberta.
Então você precisa desenrolar os valores SL e colocar Print() dentro da rede de arrasto também, para que ele relate sobre seu trabalho e os valores que atinge - caso contrário o sentimento é apenas um sentimento ;)
 
Uma pergunta surgiu, pessoal! Existe um limite para o número de dígitos em um número magik? Quantos dígitos devem existir?
 
Rustam Bikbulatov:
Aqui está uma pergunta para vocês! Existe um limite para o número de dígitos no número mágico? Quantos dígitos devem existir?


Um magik é normalmente definido por um tipo int inteiro.

int

O tipo int inteiro tem um tamanho de 4 bytes (32 bits). O valor mínimo é -2.147.483.648, o valor máximo é 2.147.483.647.

Assim.

 
Alekseu Fedotov:


Uma magia é geralmente definida pelo tipo int inteiro.

int

O tipo int inteiro tem um tamanho de 4 bytes (32 bits). O valor mínimo é -2.147.483.648, o valor máximo é 2.147.483.647.

Assim.


Muito obrigado!
 

Olá a todos, eu escrevi um EA e não consigo descobrir o código. Preciso que a função funcione a cada tique e a cada segundo do servidor. Acabei de chamar minha função 2 vezes, através doOnTick e depois através doOnTimer parece ter feito tudo corretamente, mas ainda falta muitas vezes um segundo e por causa disso às vezes não funciona no momento certo. A ajuda, quem sabe, ficaria muito grato). Talvez por causa de uma pausa em conexão com o servidor deixa de funcionar? É possível fazê-la funcionar a cada segundo, mesmo que haja uma interrupção na comunicação, e os segundos foram estritamente sincronizados com o tempo do servidor?


int OnInit()

  {

   EventSetTimer(1);

   return(INIT_SUCCEEDED);

  }

void OnTick()

{

Clicker (); //-- старт каждый тик

}

void OnTimer()

{

Clicker (); //-- старт каждую секунду

}

void Clicker()

  {

//--- тут идёт порядка 30 строк кода, вырезал чтобы никого не грузить

   Comment("Sek = " + (Seconds()));

   return;                                      // Выход из start()  

  }

 
Meus amigos, por favor, ajudem um programador MQL4 iniciante com alguns conselhos.
Escrevi um código que deve determinar o preço máximo de Abertura da base para as últimas n barras, mas por alguma razão a EA considera o preço máximo de Abertura de todas as barras no gráfico.

void OnTick()
{
   for (int i = 1; i <= BarTotal; i++)
   {
      double High_Open = iOpen(Symbol(), PERIOD_H1, i); 
      if (High_Open >= Current_High)
      {
         Current_High = High_Open;
         Print (Current_High); 
      }
   }
}

Obrigado)

 
ivan-baaton:
Amigos, por favor, ajudem um programador MQL4 iniciante com alguns conselhos.
Escrevi um código que deve determinar o preço máximo Aberto da base para as últimas n barras, mas a EA, por alguma razão, considera o preço máximo Aberto de todas as barras no gráfico.

...

Obrigado)

Tente uma função como esta:

//+------------------------------------------------------------------+
double GetMaxOpen(const string symbol_name,const ENUM_TIMEFRAMES timeframe,uint start_pos,const uint count){
   double array[];
   ResetLastError();
   if(CopyOpen(symbol_name,timeframe,start_pos,count,array)==count) return(array[ArrayMaximum(array)]);
   Print(__FUNCTION__," > Ошибка копирования в массив: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

Eu não olhei para ele, praticamente o escrevi por conta própria, então poderia ter perdido algo.

 

Compreendi meu erro, mas não entendi como resolvê-lo. A tarefa normalmente é iniciada a cada segundo, mas o tempo desde o início da vela atual não é contado corretamente.

A função Segundos() sai segundos dos dados do último tick conhecido, mas preciso de alguma forma contar o número real de segundos desde a abertura da vela de minuto no momento em que a função é chamada, mesmo que não tenha havido nenhum tick nos últimos segundos.

TimeSeconds (TimeLocal()) ou ( TimeLocal() - Time[0]) também não funcionará, porque a hora local pode diferir do servidor em vários segundos. Como resolver o problema?