MetaTrader 5 build 2121 : Nouveau design du testeur de stratégie - page 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);
     }
  }

Veuillez rétablir l'ancien style METAQUOTES ou au moins faire en sorte que les codes écrits sur une ligne ne soient pas formatés.

Exemple :

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

      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:

Veuillez revenir à l'ancien style METAQUOTES ou au moins faire en sorte que les codes écrits sur une ligne ne soient pas formatés.

utilisez le style Pico, il est très similaire à ce que vous recherchez

mais le style Pico divise l'instruction if - else sur deux lignes si vous utilisez { }

Votre code où vous utilisez { }

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

si pas d'utilisation { }

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

2133 Voici un gadget comme celui-ci


 
Igor Makanu:

utilisez le style Pico, il est très similaire à ce que vous recherchez

mais le style Pico divise l'instruction if - else en 2 lignes si vous utilisez { }

Votre code où vous utilisez { }

si pas d'utilisation { }

Oui ! !! J'ai fait une analyse complète des styles disponibles et j'ai choisi PICO et RATLIFF.

PICO est le plus compact.

RATLIFF est le plus intelligent.

Mais il est absurde que METAQUOTES change un style utilisé depuis des années. Cela perturberait la vie de tous les utilisateurs. Un changement irresponsable. Il y a quelques mois, j'ai fait une erreur de style, je pensais que c'était une erreur de déménager malgré les petits changements, mais maintenant ils ont fait une erreur.

 
Vladimir Pastushak:

2133 uma piada


Oui ! !! nous savons que c'est une version bêta, mais si quelque chose était correct dans les anciennes versions et a maintenant changé dans la version bêta, c'est probablement avec ces changements. Il vaut mieux se plaindre maintenant pour s'assurer que tout se passe bien.

 
Il y a deux suggestions que j'aimerais que METAQUOTES adopte.
1) Mettez un verrou sur le graphique pour éviter que le graphique utilisé ne se ferme avec les graphiques inutiles lorsque vous utilisez CTRL-F4.

2) Permettre à l'utilisateur de définir le nombre de cœurs à utiliser sur le réseau en nuage. Par exemple, je pourrais limiter l'utilisation à 50 cœurs dans CLOUD NETWORK juste pour aider et augmenter la vitesse d'optimisation en plus des 100 cœurs dont je dispose déjà sur mes serveurs. Ainsi, je n'aurais pas à acheter un ou deux serveurs supplémentaires.

Actuellement, je ne peux pas utiliser CLOUD NETWORK car cela rend mes serveurs inutiles et la valeur de l'optimisation devient élevée.
 
Après avoir exécuté un test avec une configuration tierce, la configuration par défaut est réinitialisée. Il n'y a pas de paramètres de test lorsque le terminal est démarré normalement.
 
MetaQuotes Software Corp.:

Dans ce cas, la documentation est obsolète.

Dans un souci d'efficacité, les chaînes de caractères sont désormais préallouées à une taille supérieure à celle demandée, car dans la grande majorité des cas, elles sont remplies par les opérations suivantes.

C'est clair maintenant.
Mais quelle que soit la façon dont je modifie la longueur de la chaîne, le résultat de StringBufferLen reste toujours égal à 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.:

Dans ce cas, la documentation n'est pas à jour.

Pour des raisons d'efficacité, les chaînes de caractères sont maintenant pré-allouées plus grandes que celles demandées, puisque dans la grande majorité des cas, elles sont incrémentées par les opérations suivantes.

Est-il possible dans ce cas

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

s2 peut augmenter dans le futur ?

Résultat : 260

Attendu : 100 ou 0.

 

J'ai ajouté StringLen au test, et initialisé la chaîne différemment.
Dans la documentation, c'est une chose, mais en fait, elle se comporte différemment.
Et dans ce cas, la mémoire tampon affiche 0 au lieu de 260.
Donc, soit il y a un problème avec l'initialisation de la chaîne. Ou StringBufferLen échoue.

 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