MetaTrader 5 build 2121: 策略测试器的新设计 - 页 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);
     }
  }

请带回旧的METAQUOTES风格,或者至少确保写在一行上的代码没有格式化。

例子。

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

      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:

请恢复旧的METAQUOTES风格,或者至少确保写在一行的代码没有格式化。

使用Pico风格,它与你要找的东西非常相似。

但如果你使用{ },Pico风格会将if - else语句分成两行。

你的代码中使用{ }的地方

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

如果不使用 { }

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

2133 这里有一个这样的噱头


 
Igor Makanu:

使用Pico风格,它与你要找的东西非常相似。

但如果你使用{ },Pico风格会将if - else语句分成两行。

你的代码中使用{ }的地方

如果不使用 { }

是的!!对现有的风格进行了全面分析,并选择了PICO和RATLIFF。

PICO是最紧凑的。

RATLIFF是最聪明的。

但METAQUOTES改变已经使用多年的风格是很荒谬的。这将扰乱所有用户的生活。一个不负责任的变化。几个月前,我把他们的作风搞乱了,我认为尽管有小的变化,但现在他们搞乱了,这是不对的。

 
Vladimir Pastushak:

2133 uma piada


是的!!我们知道这是一个测试版,但如果有些东西在旧版本中是正确的,而现在在测试版中发生了变化,那可能是与这些变化有关。最好现在就投诉,以确保一切正常进行

 
有两个建议,我希望METAQUOTES能够采纳。
1)在图形上加一个锁,防止使用CTRL-F4时,使用过的图形与不必要的图形一起关闭。

2)允许用户定义在云网络上 使用的核心数量。例如:我可以在CLOUD NETWORK中限制使用50个核心,只是为了帮助和提高优化速度,同时我的服务器上已经有100个核心。这样我就不必再买一到两台服务器了。

目前,我不能使用CLOUD NETWORK,因为它使我的服务器失去作用,优化的价值变得很高。
 
在用第三方配置运行测试 后,默认配置被重置。当终端正常启动时,没有测试设置。
 
MetaQuotes Software Corp.:

在这种情况下,文件是过时的。

为了提高效率,现在预分配的字符串比要求的要大,因为在绝大多数情况下,它们会被后续操作提升。

这一点现在已经很清楚了。
但无论我如何改变字符串的长度,StringBufferLen的结果总是保持在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.:

在这种情况下,文件是过时的。

为了提高效率,现在预分配的字符串比要求的要大,因为在绝大多数情况下,它们会被后续操作增加。

在这种情况下,是否有可能

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

s2在未来能不能增加?

结果:260

预期:100或0。

 

我在测试中加入了StringLen,并以不同方式初始化了字符串
在文件中,它是一件事,但事实上它的行为是不同的。
而在这种情况下,缓冲区显示为0,而不是260。
所以,要么是字符串的初始化有问题。或者StringBufferLen失败。

 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