Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 230

 
Aleksey Mavrin:

e o que, há sempre mais lucro após 10 segundos?)

Nem sempre, é claro, mas acontece com freqüência que o preço voa em um minuto e a EA fecha sem problemas a um preço fixo.
 
Nargiz Ravanova:

Eu fiz como você disse, mas por alguma razão, depois de fechar o Expert Advisor, abri as negociações algumas vezes, apesar do fato de que depois da função CloseAll() eu tenho um deslize de uma hora.

datetime sleep = TimeCurrent();
if(sleep > TimeCurrent())
     return;
//---
double op = CalculateProfit();

if(op >= Profit && LastTime == 0)
     LastTime = TimeCurrent();
if(LastTime > 0 && TimeCurrent() - LastTime >= Second)

    {
     CloseAll();
     LastTime = 0;

     SendNotification("Trade is end");
     sleep = TimeCurrent()+60*60;
    }

É assim que é. É claro, estava escrito no meu joelho.

 
Konstantin Nikitin:

Algo parecido com isso. É claro que foi escrito na hora.

Obrigado, agora a EA fecha apenas um negócio entre todos os existentes no mercado, e eu tenho uma EA de grade.

Eu não tenho nenhum deslize e a EA está abrindo um novo negócio novamente e ignorando os deslizes. Se eu olhar para minha EA, não consigo perceber isso, basta devolvê-la como era antes. Não sei o que fazer com esta EA e não saberei o que fazer com ela.

 
Nargiz Ravanova:

Obrigado, agora a EA fecha apenas um negócio entre todos os existentes no mercado, e eu tenho uma EA de grade.

Tenho muitos problemas com isto, mas não tenho certeza do que fazer com ele, então não tenho certeza do que fazer com ele. Acho que não é possível implementá-lo, apenas o devolverei como era antes. Gostaria de agradecer a eles pela ajuda.

Você precisa implementá-lo como um todo
as razões podem ser diferentes

 
Nargiz Ravanova:

Obrigado, agora a EA fecha apenas um negócio entre todos os existentes no mercado, e eu tenho uma EA de grade.

Tenho muitos problemas com isto, mas não tenho certeza do que fazer com ele, então não tenho certeza do que fazer com ele. Acho que não é possível implementá-lo, apenas o devolverei como era antes. Eu já a implementei e ainda não foi implementada, portanto, vou apenas devolvê-la ao que era antes.

Isto deveria fazer mais sentido, certo?

input double Profit   = 100.0;
input int    Second   = 10;
//+------------------------------------------------------------------+
void CloseAllSleep(void)
    {
     static datetime sleep_all = TimeCurrent();
     static datetime LastTime = 0;
     if(sleep_all > TimeCurrent())
          return;
//---
     if(LastTime == 0)
         {
          if(CalculateProfit() < Profit)
               return;
          LastTime = TimeCurrent();
         }
     if(TimeCurrent() - LastTime >= Second)
          return;
//---
     if(!CloseAll())
          return;
     LastTime = 0;

     SendNotification("Trade is end");
     sleep_all = TimeCurrent()+60*60;
    }

//--- Считаем профит открытых позиций
double CalculateProfit(void)
    {
     return 0.0;
    }
//--- Закрываем все позиции
bool CloseAll(void)
    {
     return true;
    }

Mais uma vez, isto é puramente por clareza. E o que e como você precisa implementar, pense por si mesmo.

 
Nargiz Ravanova:
Claro que nem sempre, mas acontece com freqüência que o preço voa por um minuto e o consultor especializado fecha sem problemas a um preço fixo.

Ainda assim, eu acho que esta abordagem não é a ideal. Se o preço estiver voando, deve haver um deslize positivo. Se você esperar pelo tempo - é um jogo de roleta - então para que serve a estratégia, seu lucro já pode ser menor do que as 2 libras dadas.

É mais razoável medir a velocidade da mudança de preço, e se ela for alta em direção ao lucro - esperar, quando ela caiu - para cobrir.

 
Konstantin Nikitin:

Acho que isso faz mais sentido, você não acha?

Mais uma vez, isto é puramente por uma questão de compreensão. Cabe a você descobrir o que implementar e como fazer isso.

Não entendo, para ser honesto, esqueça, vou pensar em algo.

 
Aleksey Mavrin:

Ainda assim, eu acho que esta abordagem não é a ideal. Se o preço estiver voando, deve haver um deslize positivo. Se você esperar pelo tempo - é um jogo de roleta - então para que serve a estratégia, seu lucro já pode ser menor do que as 2 libras dadas.

É mais razoável medir a velocidade da mudança de preço, e se ela for alta em direção ao lucro - esperar, quando ela caiu - para cobrir.

não podemos corrigir um simples deslize aqui e você está falando de speed))))
 
Nargiz Ravanova:
não podemos corrigir um simples deslize aqui e você está falando de speed))))

Se você estabelecer metas elevadas para si mesmo, o Todo-Poderoso o ajudará a alcançá-las! ;)

 
Nargiz Ravanova:
não podemos corrigir um simples deslize aqui e você está falando de speed))))

Bem, para ser mais preciso, parece que você não pode. E sobre o SLEEP. Você quer congelar todo o Expert Advisor por algum tempo? Ou apenas uma determinada função, após ter sido trabalhada. Em qualquer caso, mesmo para interrupção do trabalho do Expert Advisor, é melhor usar a bandeira por longos atrasos, e ao verificá-la, se não houver permissão, basta sair para OnTick/OnTimer. Para pequenos atrasos, sim, você pode usarSLEEP.
A propósito,o SLEEP não funciona em indicadores.

A função Sleep() não pode ser chamada a partir de indicadores personalizados, porque os indicadores são executados na rosca de interface e não devem retardá-la.

Portanto, entenda o uso de bandeiras, você precisará delas no futuro.