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

 
Igor Makanu:

Sim, sou da mesma opinião, mas não apenas da história e do número de buffers indicadores - ou seja, novamente sobre a alocação de memória, se o MT4 devorou toda a memória, então ele está diminuindo a velocidade - aparentemente começa a liberar áreas de memória

Definitivamente, os desenvolvedores podem responder, mas estamos falando do MetaTrader 4, e aqui ...

 
Alexander Fedosov:

Por que fazer algum cálculo no código?

Não faça cálculos - o tópico não foi inteligente, e eu estava interessado em verificar o que o otimizador faz, então eu redigi o código

Você pode adicioná-lo ao seu código de tal forma:

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle=FileOpen("tst.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   FileSeek(handle,0,SEEK_END);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileWriteString(handle,DoubleToString(Value1),DoubleToString(Value2)+"\n");
      FileClose(handle);
     }
  }
//+------------------------------------------------------------------+
void OnTick()
  {
  }

ou seja, basta escrever os parâmetros de otimização no arquivo, se ele estiver pendurado, no arquivo você pode ler no último passo quais foram os parâmetros e o tempo do arquivo será o tempo do "último suspiro" do testador

 
Artyom Trishkin:

Os desenvolvedores poderão responder sem ambigüidade, mas estamos falando do MetaTrader 4, e ali ...

E aqui... nada vai mudar. Nós usamos o que temos.

 

Olá, você pode me dizer se o sistema comercial abre uma posição somente na abertura de um novo bar de hora em certas condições? Preciso ter certeza de que se eu fechar a posição usando um stop loss na barra atual, o comércio não abrirá novamente. Eu a implementei desta forma :

se (OrderTotal()==0 && ticket!=-1) // não há lotes abertos mas o ticket existe

{

se (OrderSelect(ticket,SELECT_BY_TICKET)==verdadeiro)

{

datetime tct=OrderCloseTime(); // hora de fechamento do pedido

datatime tob=iTime(NULL,PERÍODO_H1,0); // hora de abertura da barra atual

se (tob>tct) // não permite abrir uma nova ordem se o comércio foi fechado no mesmo castiçal que abriu

{

FUNÇÃO PARA ABRIR UMA POSIÇÃO

}


No testador de estratégia, as posições reabertas não são mais abertas, mas quando se negocia ao vivo, uma posição é aberta. Você pode me dizer o que está errado?)

 
kmerlin:

Olá, você pode me dizer se o sistema comercial abre uma posição somente na abertura de um novo bar de hora em certas condições? Preciso ter certeza de que se eu fechar a posição usando um stop loss na barra atual, o comércio não abrirá novamente. Eu a implementei desta forma :

se (OrderTotal()==0 && ticket!=-1) // não há lotes abertos mas o ticket existe

{

se (OrderSelect(ticket,SELECT_BY_TICKET)==verdadeiro)

{

datetime tct=OrderCloseTime(); // hora de fechamento do pedido

datatime tob=iTime(NULL,PERÍODO_H1,0); // hora de abertura da barra atual

se (tob>tct) // não permite abrir uma nova ordem se o comércio foi fechado no mesmo castiçal que abriu

{

FUNÇÃO PARA ABRIR UMA POSIÇÃO

}


No testador de estratégia, as posições reabertas não são mais abertas, mas quando se negocia ao vivo, uma posição é aberta. Você pode me dizer o que está errado?)

Será?

 
Alexander Fedosov:

Será?


não realmente. O que há de errado com minha variante ? a condição principal é não poder voltar a entrar na vela de hora em hora ! É uma condição bastante simples, o que há de errado com ela e por que não funciona?

 
kmerlin:

não realmente. O que há de errado com minha variante? a condição principal é que não é possível reentrar na vela atual! É uma condição bastante simples, o que há de errado com ela e por que não funciona?

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}

E que bilhete você escolheu na OrderSelect?

 
Alexander Fedosov:

Que bilhete você selecionou na OrderSelect?

O bilhete é enviado em último... Quando uma ordem é aberta, não é possível abrir novas ordens no sistema e nenhuma ordem pendente pode ser colocada. Portanto, o último bilhete é a última parada ou ordem de lucro.
 
kmerlin:
O bilhete é passado para a última encomenda. Quando uma ordem é aberta, a abertura de novas ordens é impossível dentro do sistema, e as ordens pendentes também não podem ser feitas. Portanto, o último bilhete é o último pedido em parada ou lucro.

Como você passa o bilhete do último pedido?

E OrdensTotal() passa o número total de ordens em aberto e pendentes.

Aqui está a nova barra de tempo atual.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
   static datetime prevtime=0;
   if(prevtime==Time[0])
      return(false);
   else
     {
      prevtime=Time[0];
      return(true);
     }
  }
 
Alexander Fedosov:

Como você passa o bilhete do último pedido?

E OrdensTotal() passa o número total de ordens em aberto e pendentes.

Aqui está a nova barra de tempo atual.

O bilhete é declarado como uma variável global. Um bilhete é passado para comprar ou vender. Em meu sistema, várias ordens não podem ser abertas, apenas uma ordem pode ser aberta, e também não pode haver nenhuma ordem pendente. Portanto, o último bilhete, como eu o entendo, é uma ordem fechada com lucro ou parada.

ok, minha cabeça está zumbindo... eu vou repensar seu conselho amanhã

Razão: