Especialistas: Cidomo

 

Cidomo:

O Expert Advisor usa ordens pendentes Buy Stop e Sell Stop.

Cidomo

Autor: Vladimir Karputov

 
Onde está a área

 
Habibur Rohman :
Onde está a área

O consultor não foi a lugar algum. O consultor está em seu lugar:


 

Quero refinar o Expert Advisor para mim, mas, para isso, preciso entender muitas coisas! (Eu não entendo muitas coisas). Farei perguntas em partes.

Há um código:

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {
      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }
      if(m_need_delete_sell_stop)
        {
         if(count_sell_stops>0)
           {
            DeleteOrders(ORDER_TYPE_SELL_STOP);
            return;
           }
         else
           {
            m_need_delete_sell_stop=false;
            return;
           }
        }
     }

O que ele faz?

 
Sysmart:

Quero refinar o Expert Advisor para mim, mas, para isso, preciso entender muitas coisas! (Eu não entendo muitas coisas). Farei perguntas em partes.

Há um código:

O que ele faz?

Se o sinalizador"m_need_delete_buy_stop" ("é necessário excluir ordens pendentes de parada de compra") ou "m_need_delete_sell_stop" ("é necessário excluir ordens pendentes de parada de venda") for levantado

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {

prosseguir com a exclusão.


Calculamos quantas ordens pendentes o Expert Advisor colocou no momento:

      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);


Se "é necessário excluir as ordens pendentes de parada de compra":

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }

e o número de ordens de parada de compra colocadas for maior que zero ('count_buy_stops') - exclua-as. Se o número for igual a zero, redefina o sinalizador"m_need_delete_buy_stop".


Fazemos o mesmo se "for necessário excluir ordens pendentes de sell stop" ...

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

Obrigado!

Outro código que não entendo:

//--- trabalhamos somente no momento do nascimento da nova barra
   static datetime PrevBars=0;
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   PrevBars=time_0;
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
 
Sysmart:

Obrigado!

Outro código que não entendo:

Esse código faz o seguinte: ele funciona apenas uma vez - quando uma nova barra nasce.

 
Vladimir Karputov:

Esse código faz o seguinte: ele funciona apenas uma vez - no momento em que uma nova barra nasce.

Obrigado. Foi isso que entendi no final:

//--- trabalhamos somente no momento do nascimento da nova barra
   // lembrar o horário de abertura da última barra na variável estática
   static datetime PrevBars=0;
   // hora atual (iTime - retorna o valor da hora de abertura da barra)
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   // se o tempo for diferente porque a condição passou if(time_0==PrevBars)
   // lembre-se da hora
   PrevBars=time_0;
   // se as cotações não tiverem sido atualizadas, redefina a hora da abertura da última barra
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
   // Se você chegou a esse lugar, não é um bar novo.

Sem o seu link, eu não teria entendido)

 
Sysmart:

Obrigado a você. Aqui está o que eu percebi no final:

Eu não teria descoberto isso sem seu link)

Pequena correção. Este é o

 // Se você chegou a esse lugar, não é um bar novo.

está incorreto. Está correto:

 // você chegou a esse ponto, então a barra é nova.
 

A propósito, o código está logo abaixo:

   if(!RefreshRates() || !m_symbol.Refresh())
     {
      PrevBars=0;
      return;
     }

Acho que ele duplica parcialmente o código discutido acima:

   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }

Acho que ele pode ser excluído

 
Vladimir Karputov:

Uma pequena correção. Este é o

está incorreto. Está correto:

Thank you)!