MetaTrader 5 build 2121: Nuevo diseño del Probador de Estrategias - 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);
     }
  }

Por favor, recupera el antiguo estilo METAQUOTES o al menos asegúrate de que los códigos escritos en una línea no tengan formato.

Ejemplo:

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

      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:

Por favor, vuelva al antiguo estilo METAQUOTES o, al menos, asegúrese de que los códigos escritos en una línea no estén formateados.

utilizar el estilo Pico, es muy similar a lo que estás buscando

pero el estilo Pico divide la declaración if - else en dos líneas si utiliza { }

Su código donde se usa { }

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

si no se utiliza { }

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

2133 Aquí hay un truco como este


 
Igor Makanu:

utilizar el estilo Pico, es muy similar a lo que estás buscando

pero el estilo Pico divide la declaración if - else en 2 líneas si utiliza { }

Su código donde se usa { }

si no se utiliza { }

Sí !!! hizo un análisis completo de los estilos disponibles y eligió PICO y RATLIFF

PICO es el más compacto.

RATLIFF es el más inteligente.

Pero es absurdo que METAQUOTES cambie un estilo que se ha utilizado durante años. Esto perturbaría la vida de todos los usuarios. Un cambio irresponsable. Hace unos meses metí la pata en algo de su estilo, pensé que estaba mal moverme a pesar de los pequeños cambios, pero ahora han metido la pata.

 
Vladimir Pastushak:

2133 uma piada


Sí !!! sabemos que es una versión beta, pero si algo era correcto en las versiones antiguas y ahora ha cambiado en la versión beta, probablemente sea con estos cambios. Mejor reclamar ahora para asegurarse de que todo va bien

 
Hay dos sugerencias que me gustaría que METAQUOTES adoptara.
1) Poner un candado en el gráfico para evitar que el gráfico utilizado se cierre junto con los gráficos innecesarios al utilizar CTRL-F4.

2) Permitir al usuario definir el número de núcleos a utilizar en la red de la nube. Por ejemplo: podría limitar el uso a 50 núcleos en CLOUD NETWORK sólo para ayudar y aumentar la velocidad de optimización junto con los 100 núcleos que ya tengo en mis servidores. Así no tendría que comprar uno o dos servidores más.

Actualmente, no puedo utilizar CLOUD NETWORK porque inutiliza mis servidores y el valor de la optimización se vuelve alto.
 
Después de ejecutar una prueba con una configuración de terceros, se restablece la configuración por defecto. No hay ajustes de prueba cuando el terminal se inicia normalmente.
 
MetaQuotes Software Corp.:

La documentación es obsoleta en este caso.

En aras de la eficiencia, las cadenas se preasignan más grandes de lo que se solicita, ya que en la gran mayoría de los casos se amplían con las operaciones posteriores.

Esto está claro ahora.
Pero no importa cómo cambie la longitud de la cadena, el resultado de StringBufferLen siempre se mantiene en 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.:

En este caso, la documentación está desfasada.

En aras de la eficiencia, las cadenas se preasignan más grandes de lo solicitado, ya que en la gran mayoría de los casos se incrementan con las operaciones posteriores.

¿Es posible en este caso

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

s2 puede aumentar en el futuro?

Resultado: 260

Esperado: 100 o 0.

 

He añadido StringLen a la prueba, y he inicializado la cadena de forma diferente.
En la documentación es una cosa, pero en los hechos se comporta de manera diferente.
Y el buffer en este caso muestra 0 en lugar de 260.
Así que, o bien hay un problema con la inicialización de la cadena. O StringBufferLen está fallando.

 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
Razón de la queja: