MetaTrader 5 build 2121: Novo projeto do Testador de Estratégia - página 6

 
//+------------------------------------------------------------------+
//| СТИЛЬ И ДРЕВНЕЕ ФОРМАТИРОВАНИЕ МЕТАQUOTES                        |
//+------------------------------------------------------------------+
void OrderEntry(int direction)
  {
   if(direction==0 && tradenow==1 && cFunctions.TotalVolume(Ativo,0)<fatorMaxTrade && 
      flotbuy<=lotemaxtrade && flotbuy<=MaxLot && cFunctions.CheckMoneyForTrade(Ativo,flotbuy,ORDER_TYPE_BUY))
     {
      tradenow=0;
      if(TakeProfit>0){btp=Ask+(TakeProfit*Point());}else{btp=0;}
      if(StopLoss>0){bsl=Ask-(StopLoss*Point());}else{bsl=0;}
      if(trade.Buy(flotbuy,Ativo,Ask,bsl,btp,Commentt)){lastpriceBid=Ask;}
      flotbuy=NormalizeDouble(flotbuy*FatorMartingale,digitoslote);
     }

   if(direction==1 && tradenow==1 && cFunctions.TotalVolume(Ativo,1)<fatorMaxTrade &&
      flotsell<=lotemaxtrade && flotsell<=MaxLot && cFunctions.CheckMoneyForTrade(Ativo,flotsell,ORDER_TYPE_SELL))
     {
      tradenow=0;
      if(TakeProfit>0){stp=Bid-(TakeProfit*Point());}else{stp=0;}
      if(StopLoss>0){ssl=Bid+(StopLoss*Point());}else{ssl=0;}
      if(trade.Sell(flotsell,Ativo,Bid,ssl,stp,Commentt)){lastpriceAsk=Bid;}
      flotsell=NormalizeDouble(flotsell*FatorMartingale,digitoslote);
     }
  }


//+------------------------------------------------------------------+
//| СТИЛЬ И НОВОЕ ФОРМАТИРОВАНИЕ МЕТАQUOTES                          |
//+------------------------------------------------------------------+
void OrderEntry(int direction)
  {
   if(direction==0 && tradenow==1 && cFunctions.TotalVolume(Ativo,0)<fatorMaxTrade &&
      flotbuy<=lotemaxtrade && flotbuy<=MaxLot && cFunctions.CheckMoneyForTrade(Ativo,flotbuy,ORDER_TYPE_BUY))
     {
      tradenow=0;
      if(TakeProfit>0)
        {
         btp=Ask+(TakeProfit*Point());
        }
      else
        {
         btp=0;
        }
      if(StopLoss>0)
        {
         bsl=Ask-(StopLoss*Point());
        }
      else
        {
         bsl=0;
        }
      if(trade.Buy(flotbuy,Ativo,Ask,bsl,btp,Commentt))
        {
         lastpriceBid=Ask;
        }
      flotbuy=NormalizeDouble(flotbuy*FatorMartingale,digitoslote);
     }

   if(direction==1 && tradenow==1 && cFunctions.TotalVolume(Ativo,1)<fatorMaxTrade &&
      flotsell<=lotemaxtrade && flotsell<=MaxLot && cFunctions.CheckMoneyForTrade(Ativo,flotsell,ORDER_TYPE_SELL))
     {
      tradenow=0;
      if(TakeProfit>0)
        {
         stp=Bid-(TakeProfit*Point());
        }
      else
        {
         stp=0;
        }
      if(StopLoss>0)
        {
         ssl=Bid+(StopLoss*Point());
        }
      else
        {
         ssl=0;
        }
      if(trade.Sell(flotsell,Ativo,Bid,ssl,stp,Commentt))
        {
         lastpriceAsk=Bid;
        }
      flotsell=NormalizeDouble(flotsell*FatorMartingale,digitoslote);
     }
  }

Favor trazer de volta o antigo estilo METAQUOTES ou pelo menos certifique-se de que os códigos escritos em uma linha não estejam formatados.

Exemplo:

Старая модель и я считаю ее идеальной моделью для однострочных кодов.

      if(TakeProfit>0){btp=Ask+(TakeProfit*Point());}else{btp=0;}
      if(StopLoss>0){bsl=Ask-(StopLoss*Point());}else{bsl=0;}



Новый стиль, который портит всех моих роботов.

      if(TakeProfit>0)
        {
         btp=Ask+(TakeProfit*Point());
        }
      else
        {
         btp=0;
        }
      if(StopLoss>0)
        {
         bsl=Ask-(StopLoss*Point());
        }
      else
        {
         bsl=0;
        }
 
Joao Luiz Sa Marchioro:

Favor reverter ao antigo estilo METAQUOTES ou pelo menos certificar-se de que os códigos escritos em uma linha não estejam formatados.

usar o estilo Pico, é muito semelhante ao que você está procurando

mas o estilo Pico divide o "se" em duas linhas, se você usar { }

Seu código onde usar { }

if(TakeProfit > 0) btp = Ask + (TakeProfit * Point());}
else {btp = 0;}

se não usar { }

if(TakeProfit > 0) btp = Ask + (TakeProfit * Point()); else btp = 0;
 

2133 Aqui está um artifício como este


 
Igor Makanu:

usar o estilo Pico, é muito semelhante ao que você está procurando

mas o estilo Pico divide o if - senão a declaração em 2 linhas se você usar { }

Seu código onde usar { }

se não usar { }

Sim!!! fez uma análise completa dos estilos disponíveis e escolheu PICO e RATLIFF

O PICO é o mais compacto.

A RATLIFF é a mais inteligente.

Mas é um absurdo para METAQUOTES mudar um estilo que vem sendo usado há anos. Isso atrapalharia a vida de todos os usuários. Uma mudança irresponsável. Há alguns meses atrás eu estraguei algo no estilo deles, pensei que era errado se mover apesar das pequenas mudanças, mas agora eles estragaram tudo.

 
Vladimir Pastushak:

2133 uma piada


Sim!!! nós sabemos que é uma versão beta, mas se algo estava correto nas versões antigas e agora mudou na versão beta, provavelmente é com estas mudanças. É melhor reclamar agora para ter certeza de que tudo está indo bem

 
Há duas sugestões que eu gostaria que METAQUOTES adotasse.
1) Colocar um cadeado no gráfico para evitar que o gráfico usado feche junto com gráficos desnecessários ao usar CTRL-F4.

2) Permitir que o usuário defina o número de núcleos a serem utilizados na rede de nuvens. Por exemplo: eu poderia limitar o uso a 50 núcleos na CLOUD NETWORK apenas para ajudar e aumentar a velocidade de otimização junto com os 100 núcleos que eu já tenho em meus servidores. Desta forma, não teria que comprar um ou dois servidores a mais.

Atualmente, não posso usar a REDE CLOUD porque ela torna meus servidores inúteis e o valor da otimização se torna alto.
 
Após executar um teste com uma configuração de terceiros, a configuração padrão é redefinida. Não há configurações de teste quando o terminal é iniciado normalmente.
 
MetaQuotes Software Corp.:

Neste caso, a documentação é obsoleta.

Por uma questão de eficiência, as cordas são agora pré-alocadas maiores do que o solicitado, pois na grande maioria dos casos elas são aumentadas por operações subseqüentes.

Isto está claro agora.
Mas não importa como eu mude o comprimento da corda, o resultado StringBufferLen permanece sempre 260.

string str; 
StringInit(str, 1, '_'); 
Print("str = ", str); 
Print("str = ", str, ": StringBufferLen(str) = ", StringBufferLen(str));
2019.09.03 03:30:47.490 Test    str = _
2019.09.03 03:30:47.490 Test    str = _: StringBufferLen(str) = 260


string str; 
StringInit(str,100,'_'); 
Print("str = ",str); 
Print("str = ",str,": StringBufferLen(str) = ", StringBufferLen(str));
2019.09.03 03:32:57.789 Test    str = ____________________________________________________________________________________________________
2019.09.03 03:32:57.789 Test    str = ____________________________________________________________________________________________________: StringBufferLen(str) = 260
 
MetaQuotes Software Corp.:

Neste caso, a documentação está desatualizada.

Por uma questão de eficiência, as cordas são agora pré-alocadas maiores do que o solicitado, uma vez que na grande maioria dos casos elas são incrementadas por operações subseqüentes.

É possível, neste caso

void OnStart() 
{ 
        string s1; 
        StringInit(s1,100,'_'); 
        const string s2 = s1;
        Print( StringBufferLen( s2 ));
}

s2 pode aumentar no futuro?

Resultado: 260

Esperado: 100 ou 0.

 

Adicionei StringLen ao teste, e inicializei a corda de forma diferente.
Na documentação é uma coisa, mas na verdade se comporta de maneira diferente.
E o tampão neste caso mostra 0 em vez de 260.
Portanto, ou há um problema com a inicialização das cordas. Ou StringBufferLen está falhando.

 string str = "_"; 

 Print("str = ", str);
 Print("str = ", str, ": StringBufferLen(str) = ", StringBufferLen(str), " StringLen(str) = ", StringLen(str)); 
   
 str = "__________";  

 Print("str = ", str, ": StringBufferLen(str) = ", StringBufferLen(str), " StringLen(str) = ", StringLen(str));
2019.09.03 03:55:45.145 Test    str = _
2019.09.03 03:55:45.145 Test    str = _: StringBufferLen(str) = 0 StringLen(str) = 1
2019.09.03 03:55:45.145 Test    str = __________: StringBufferLen(str) = 0 StringLen(str) = 10