初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 1494

 
Maksim Burov #:

こんにちは。

得られた最適化パラメータを別の期間で再実行する方法を教えてください。

エクセルに記録された1つの通貨ペアのパラメータを過去半年間最適化しました。昨年1年間の期間を設定し、そのパラメータを実行したい。
通過するもの、しないものをチェックし、エクセルに書き出す。例えば、過去2年間を実行する。

データを実行したい期間を選択する。そして、得られたパラメータのタブで、必要なパラメータを右クリックし、単一テストを選択する。
 
Roman Kutemov #:
データを実行したい期間を選択する。そして、取得したパラメータのタブで、必要なパラメータを右クリックし、単一テストを選択します。

ありがとうございます。
また、各パラメータをつつかず、すべてスコープ内で行うにはどうすればよいでしょうか?

 

計算方法を教えてください。


利食いはストップの3倍必要です。うまくいっているように見えますが、何かがおかしいのです。)このロボットは金と株価指数では取引しますが、通貨では取引を拒否します(計算はすべて正しく行われますが)。

まず、ローソク足1の安値にストップを設定します:

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

次に、ASKから ストップまでの距離をポイントで計算し、この値をパ-トポイントに 割り当てます:

//---Опредеяем размер стопа в пунктах
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
      Print("Размер стопа ", points);

その後、ストップもピップで計算します:

//---Считаем тейкпрофит
   double TP = NormalizeDouble(points * 3, _Digits);
   Print("Размер тейка ", TP);


その後、取引をオープンし、TRを ASKに 追加します:

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + TP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }


テスターではすべての計算が正しく、5桁のポイントで、ストップはLow1にもあり、ストップのサイズも5桁のポイントで正しい。しかし、テイクプロフィットが507ピップスではなく、5070ピップスになっています。



 

こんにちは、セルゲイ。

ストップを計算するとき、価格の距離からpipsの距離に移動します。次に、3倍して、テイクアウトまでの距離をpipsで求めます。そして、そのpips数をアスク価格に加えます。

1ピップの大きさで割らないようにするか、もう一度掛けるのを忘れないようにします。

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
      Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   double points = NormalizeDouble((ask - low) / _Point, _Digits);
   double points = NormalizeDouble((ask - low), _Digits);
      
//--- ...

または次のようにします。

//---Устанавливаем стоп
   double stoploss = iLow(_Symbol,PERIOD_CURRENT,1);
   Print("Цена стопа ", stoploss);

//---Опредеяем размер стопа в пунктах (это целое число)
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double low = iLow(_Symbol, 0, 1);
   int points = (ask - low) / _Point;
   Print("Размер стопа ", points);

//---Считаем тейкпрофит
   int TP = points * 3;
   Print("Размер тейка ", TP);

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, NormalizeDouble(ask + TP * _Point, _Digits),"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
 
Yuriy Bykov #:

やあ、セルゲイ。


どうもありがとう!本当に価格とアイテムで迷ってしまいました。今やってみます))

 
今、すべてがカウントされ、正しく設定されていますが、USDJPY、XAUUSDと任意のインデックスでのみです。しかしUSDCADやEURUSDのような通貨ではフクロウは取引せず、エラー4756を送信します。ヘルプで値を調べましたが、役に立ちませんでした。)
 
Sergey Izhutov #:
今、すべてがカウントされ、正しく設定されていますが、USDJPY、XAUUSDと任意のインデックスでのみです。しかし、USDCADやEURUSDのような通貨では、フクロウは取引せず、エラー4756を送信します。私はヘルプで値を調べましたが、何もしませんでした。)

前の投稿のように、ポジションをオープンするコードを提供してください。そうすれば、何かアドバイスができるかもしれません。USDJPYとUSDCADの間に根本的な違いはないはずで、おそらく些細なエラーがあるのでしょう。

 
Yuriy Bykov #:

前回の記事と同じように:

以下はそのコードです。

//---Открываем сделку на покупку
         if(Close > maHandle && Close > Open)
            {
               if(trade.Buy(Lot,_Symbol,SYMBOL_ASK,stoploss, ask + BuyTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта покупка");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
            
    //---Открываем сделку на продажу
         if(Close < maHandle && Close < Open)
            {
               if(trade.Sell(Lot,_Symbol,SYMBOL_ASK,stoploss,ask - SellTP,"Это я, твой робот") == true)
                  {
                     Print("Открыта продажа");
                  }
                 else
                     {
                         // Получение кода ошибки
                         int error_code = GetLastError();
                         Print("Ошибка отправки заявки: ", GetLastError());
                     }
                  
                     return;
            }
 

エラーはここにある可能性が高いです:

if(Close > maHandle && Close > Open)

あなたのロジックによると、maHandleは価格であるべきで、これはハンドル、つまり整数、つまりロードされたすべてのインジケータのシリアル番号である可能性が高いです。インジケーターの値を取得する正しい方法については、MQL5のヘルプを参照してください。

 
Yuriy Bykov #:

おそらくここに間違いがある:

あなたのロジックによると、maHandleは価格であるべきで、これはおそらくハンドル、つまり整数、つまりロードされたすべてのインジケータの中のインジケータのシリアル番号です。インジケーターの値を取得する正しい方法については、MQL5のヘルプをご覧ください。

私も夕方同じことを考えました。私はまだインジケーターと友達になっていません。ただ、4ではClose > MAと書くだけで、すべてがうまくいったのをなんとなく覚えています。ハンドルネームをコメントアウトして結果を見てみます。

理由: