MetaTrader 5 build 2121: nuovo design dello Strategy Tester - pagina 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);
     }
  }

Si prega di riportare il vecchio stile METAQUOTES o almeno di fare in modo che i codici scritti su una riga non siano formattati.

Esempio:

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

      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:

Per favore tornate al vecchio stile METAQUOTES o almeno fate in modo che i codici scritti in una riga non siano formattati.

usa lo stile Pico, è molto simile a quello che stai cercando

ma lo stile Pico divide la dichiarazione if - else su due righe se si usa { }

Il tuo codice dove usando { }

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

se non si usa { }

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

2133 Ecco un espediente come questo


 
Igor Makanu:

usa lo stile Pico, è molto simile a quello che stai cercando

ma lo stile Pico divide la dichiarazione if - else in 2 linee se si usa { }

Il tuo codice dove usando { }

se non si usa { }

Sì !!! ha fatto un'analisi completa degli stili disponibili e ha scelto PICO e RATLIFF

PICO è il più compatto.

RATLIFF è il più intelligente.

Ma è assurdo che METAQUOTES cambi uno stile che è stato usato per anni. Distruggerebbe la vita di tutti gli utenti. Un cambiamento irresponsabile. Qualche mese fa ho sbagliato qualcosa sul loro stile, ho pensato che fosse sbagliato muoversi nonostante i piccoli cambiamenti, ma ora hanno sbagliato.

 
Vladimir Pastushak:

2133 uma piada


Sì!!! sappiamo che è una versione beta, ma se qualcosa era corretto nelle vecchie versioni e ora è cambiato nella versione beta, è probabilmente con questi cambiamenti. Meglio lamentarsi ora per assicurarsi che tutto vada bene

 
Ci sono due suggerimenti che vorrei che METAQUOTES adottasse.
1) Mettere un blocco sul grafico per evitare che il grafico usato si chiuda insieme ai grafici non necessari quando si usa CTRL-F4.

2) Permettere all'utente di definire il numero di core da utilizzare sulla rete cloud. Per esempio: potrei limitare l'uso a 50 core in CLOUD NETWORK solo per aiutare e aumentare la velocità di ottimizzazione insieme ai 100 core che ho già sui miei server. In questo modo non dovrei comprare uno o due server in più.

Attualmente, non posso usare CLOUD NETWORK perché rende i miei server inutili e il valore dell'ottimizzazione diventa alto.
 
Dopo aver eseguito un test con una configurazione di terzi, la configurazione di default viene ripristinata. Non ci sono impostazioni di test quando il terminale viene avviato normalmente.
 
MetaQuotes Software Corp.:

La documentazione è obsoleta in questo caso.

Per motivi di efficienza, le stringhe sono ora preallocate più grandi di quanto richiesto, poiché nella stragrande maggioranza dei casi vengono incrementate dalle operazioni successive.

Questo è chiaro ora.
Ma non importa come cambio la lunghezza della stringa, il risultato di StringBufferLen rimane 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.:

La documentazione non è aggiornata in questo caso.

Per motivi di efficienza, le stringhe sono ora preallocate più grandi di quanto richiesto, poiché nella stragrande maggioranza dei casi vengono incrementate dalle operazioni successive.

È possibile in questo caso

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

s2 può aumentare in futuro?

Risultato: 260

Atteso: 100 o 0.

 

Ho aggiunto StringLen al test e ho inizializzato la stringa in modo diverso.
Nella documentazione è una cosa, ma di fatto si comporta diversamente.
E il buffer in questo caso mostra 0 invece di 260.
Quindi, o c'è un problema con l'inizializzazione delle stringhe. Oppure StringBufferLen sta fallendo.

 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
Motivazione: