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スタイルを復活させるか、せめて1行に書かれたコードが整形されないようにしてください。

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

      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スタイルに戻すか、せめて1行に書かれたコードは整形しないようにしてください。

Pico styleを使用することで、あなたが求めているものと非常に近いものになります。

が、Picoスタイルでは{ }を使うとif - else文が2行に分割されます。

あなたのコードでは、{ }を使用しています。

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

を使用しない場合、{ }。

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

2133 こんなギミックがあります。


 
Igor Makanu:

Pico styleを使用することで、あなたが求めているものと非常に近いものが得られます。

が、Picoスタイルでは{ }を使うとif - else文が2行に分割されます。

あなたのコードでは、{ }を使用しています。

を使用しない場合、{ }。

そうなんです!!あらゆるスタイルを分析し、PICOとRATLIFFを選びました。

PICOは最もコンパクトです。

RATLIFFが一番賢い。

しかし、長年使われてきたスタイルをMETAQUOTESが変えるのは無茶な話です。すべてのユーザーの生活を混乱させることになる。無責任な変更です。数ヶ月前、彼らのスタイルについて何かを台無しにした、小さな変化にもかかわらず動くのは間違っていると思った、しかし今彼らは台無しにした。

 
Vladimir Pastushak:

2133 uma piada


はい!!ベータ版であることは承知していますが、もし旧バージョンで正しかったものがベータ版で変わったとしたら、それはおそらくこの変更に伴うものでしょう。今すぐ文句を言って、すべてがうまくいっていることを確認したほうがいい

 
METAQUOTESに採用してほしい提案は2つあります。
1) CTRL-F4使用時に不要なグラフと一緒に使用中のグラフも閉じてしまわないように、グラフにロックをかける。

2)クラウドネットワークで 使用するコア数をユーザーが定義できるようにする。例えば、CLOUD NETWORKで使用するコアを50個に制限して、すでに持っているサーバーの100コアと合わせて最適化速度を向上させることができるのです。そうすれば、もう1台も2台もサーバーを買わなくて済むからです。

現状では、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を追加し、文字列の初期化を変えて みました。
ドキュメント上では一つのことですが、実際は異なる挙動をします。
そして、この場合のバッファは260ではなく0を表示します。
つまり、文字列の初期化に問題があるかのどちらかです。または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