記事"MQL5 Cookbook:トレードレベルを設定変更する際エラーを避ける方法"についてのディスカッション - ページ 2

 
tatankaska:
こんにちは、GOLDのストラテジーテスターであなたのエキスパートアドバイザーをテストしたとき、いつも「ポジションのオープンに失敗しました - 無効なストップ - ポジションがオープンされませんでした」というプロンプトが表示されました。何がいけなかったのでしょうか?このようなエラーを避けるために書かれたのでしょうか?
恐れ入りますが、お役に立つにはコードが必要です。最も可能性が高いのは、このエラーがあなたのコードに存在することです。ストップが最小許容距離より大きいかどうか、ひょっとして売りと買いのストップを間違えていないかどうかを確認してください。また、お使いのブローカーがポジションを建てる際にストップを指定できることを確認してください。ブローカーによっては、既存のポジションにのみストップを追加する必要があります(いわゆる「市場執行」)。
 
marketeer:
お力になるには、コードが必要です。最も可能性が高いのは、あなたのコードにエラーが存在することです。ストップが最小許容距離より大きいかどうか、ひょっとして売りと買いのストップを間違えていないかどうかを確認してください。また、お使いのブローカーがポジションオープン時にストップを指定できることを確認してください。ブローカーによっては、既存のポジションにのみストップを追加する必要があります(いわゆる「市場執行」)。

こんにちは、取引レベルの設定/変更時にエラーを回避する方法の記事(Positionpropertiesplus)に添付されているエキスパートアドバイザーのみを、変更なしでテストしました。InstaforexのInstatraderプラットフォームです。このアドバイザーの関数は、間違ったストップパラメーターを設定した場合、許容される最低値に設定されるように書かれています。だから、通常、私はエラーのプロンプトが表示されないはずです - それは外国為替ペアによって真である。しかし、このプラットフォームのGOLDでは、ポジションプロパティーズプラスEAがストップでポジションをオープンしようとするたびに、エラープロンプトが無効なストップであり、ストラテジーテスターではポジションがオープンされていません。instatraderプラットフォームとブローカーの問題でしょうか?GOLDのシンボルプロパティには即時約定と書かれています。

このEAのストップロス計算関数の例ですが、私はこの記事に添付されているEAをそのまま使いました:

//+------------------------------------------------------------------+

//| ストップロスの計算|

//+------------------------------------------------------------------+

double CalculateStopLoss(ENUM_ORDER_TYPE order_type)

  {

//--- ストップ・ロスが必要な場合

   if(StopLoss>0)

     {

      //--- 計算されたストップロス値について

      double sl=0.0;

      //--- 買いポジションの値を計算する必要がある場合

      if(order_type==ORDER_TYPE_BUY)

        {

         // レベルを計算する

         sl=NormalizeDouble(sym_ask-CorrectValueBySymbolDigits(StopLoss*sym_point),sym_digits);

         //--- 計算された値がストップ・レベルの下限値より低ければ、その値を返す。

         // 値が高いか等しい場合は、調整後の値を返す。

         return(sl<sym_down_level ? sl : sym_down_level-sym_offset);

        }

      //--- 売りポジションの値を計算する必要がある場合

      if(order_type==ORDER_TYPE_SELL)

        {

         //--- レベルを計算する

         sl=NormalizeDouble(sym_bid+CorrectValueBySymbolDigits(StopLoss*sym_point),sym_digits);

         //--- 計算された値がストップ・レベルの上限値より高ければ、その値を返す。

         // 値が小さいか等しい場合は、調整後の値を返す。

         return(sl>sym_up_level ? sl : sym_up_level+sym_offset);

        }

     }

//---

   return(0.0);

  } 
 
tatankaska:
...

取引、自動取引システム、取引戦略のテストに関するフォーラム


こんにちは、

コードを投稿するときは、SRCボタンを 使用してください。ありがとうございます。


今回は私が編集しました。


 
tatankaska:

取引レベルの設定・変更時にエラーが発生しないようにする方法(Positionpropertiesplus)の記事に添付されているエキスパートアドバイザーだけをテストしました。InstaforexのInstatraderプラットフォーム。このアドバイザーの関数は、間違ったストップパラメーターを設定した場合、許容される最低値に設定されるように書かれています。だから、通常、私はエラーのプロンプトが表示されないはずです - それは外国為替ペアによって真である。しかし、このプラットフォームのGOLDでは、ポジションプロパティーズプラスEAがストップでポジションをオープンしようとするたびに、エラープロンプトが無効なストップであり、ストラテジーテスターではポジションがオープンされていません。instatraderプラットフォームとブローカーの問題でしょうか?GOLDのシンボルプロパティには即時約定と書かれています。

このEAのストップロス計算関数の例ですが、私はこの記事に添付されているEAをそのまま使用し、FXペアの代わりにGOLDを使用しただけです:

そうです。InstatraderのGOLDでは、ストップはポジションを建てた後にしか設定できませんでした。ストップなしでポジションをオープンしたときと、変更後にポジションをオープンしたときは、すべて問題ありませんでした。ありがとうございます。
 

もう一度、添付の EA のストップ(SL/TP)の計算について - これらは、シンボルポイント = シンボルのティックサイズである金融商品でのみ正しく計算されます。GOLDの場合はそうではありません。

この場合、ストップは(GOLDによって)有効なシンボルのティックサイズに修正されなければなりません。

つまり、GOLDによるエラープロンプトは、マーケットの実行 結果ではないのです。EAをGOLDと併用する場合は、SL/TPの計算を少し修正する必要があります。

 
ポジションの決済については どうですか?エキスパートアドバイザーでポジションを決済する条件(シグナル)がある場合、どのようにすればいいのでしょうか?
 
Nauris:
ポジションの決済については どうですか?Expert Advisor でポジションを決済する条件(シグナル)がある場合、どのようにすればよいのでしょうか。
標準ライブラリのCTrade クラスを使用しています。このクラスにはPositionClose メソッドがあります。それを使うことができます。
 
私はコードを次のように修正した。

//+------------------------------------------------------------------+
//| 情報パネルの設定|
//|------------------------------------------------------------------+
void SetInfoPanel()
  {
//--- 可視化またはリアルタイム・モード
   if(ShowInfoPanel && (IsVisualMode() || IsRealtime()))
     {
     // SetInfoPanel()関数の残りのコード
     // ...
     }
  }