記事"マーケットでの公開前にトレードロボットに行うべき検査"についてのディスカッション - ページ 21

 

check_freezelevel.mq5ファイルのコード(140行目)にエラーがありました。

bool CheckPositionForFREEZE_LEVEL(ulong ticket)
  {
//--- SYMBOL_TRADE_FREEZE_LEVEL レベルを取得する。
   int freeze_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL);
   if(freeze_level!=0)
     {
      PrintFormat("SYMBOL_TRADE_FREEZE_LEVEL=%d: Cannot modify order"+
                  "  nearer than %d points from the activation price",freeze_level,freeze_level);
     }
//--- 作業位置を選択する
   if(!PositionSelectByTicket(ticket))
     {
      //--- ポジション選択に失敗
      return(false);
     }
//--- 注文データを取得する 
   ENUM_POSITION_TYPE pos_type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
   double sl=PositionGetDouble(POSITION_SL);
   double tp=PositionGetDouble(POSITION_TP);
//--- ストップロスとテイクプロフィットのチェック結果
   bool SL_check=false,TP_check=false;
//--- ポジションタイプ
   switch(pos_type)
     {
      //--- 買う
      case POSITION_TYPE_BUY:
        {
         SL_check=(Bid-sl>freeze_level*_Point);
         if(!SL_check)
            PrintFormat("Position %s #%d cannot be modified: Bid-StopLoss=%d points"+
                        " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                        EnumToString(pos_type),ticket,(int)((Bid-sl)/_Point),freeze_level);
         TP_check=(tp-Bid>freeze_level*_Point);
         if(!TP_check)
            PrintFormat("Position %s #%d cannot be modified: TakeProfit-Bid=%d points"+
                        " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                        EnumToString(pos_type),ticket,(int)((tp-Bid)/_Point),freeze_level);
         //--- 検査結果を返す
         return(SL_check&&TP_check);
        }
      break;
      //--- 販売
      case POSITION_TYPE_SELL:
        {
         SL_check=(sl-Ask>freeze_level*_Point);
         if(!SL_check)
            PrintFormat("Position %s cannot be modified: StopLoss-Ask=%d points"+
                        " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                        EnumToString(pos_type),(int)((sl-Ask)/_Point),freeze_level);
         TP_check=(Ask-tp>freeze_level*_Point);
         PrintFormat(" Position %s cannot be modified: Ask-TakeProfit=%d points"+
                     " < SYMBOL_TRADE_FREEZE_LEVEL=%d points)",
                     EnumToString(pos_type),(int)((Ask-tp)/_Point),freeze_level);
         //--- 検査結果を返す
         return(SL_check&&TP_check);
        }
      break;
     }
//--- ポジションはチェックを通過しなかった
   return (false);
  }
 
私の EA はニュースイベントに基づいて取引していますが、ストラテジーテスターでは 機能しません。私のEAはテスターで機能しないため、市場検証に失敗するのでしょうか?
 

一般的に、 SYMBOL_TRADE_STOPS_LEVELの 最小距離を 考慮して 、TakeProfitとStopLossレベルをチェックすると、以下のようになります:

  • 買いは 売呼値で行われます。テイクプロフィットとストップロス・レベルは、買呼値から少なくともSYMBOL_TRADE_STOPS_LEVELポイント離れて いなければなりません
  • 売りは 買値で行われる - TakeProfitとStopLossのレベルは少なくともSYMBOL_TRADE_STOPS_LEVELのポイントが売値から離れて いなければならない
買いは売呼値で行われます。
売りは買値で行われます。
テイクプロフィット - ビッド >= SYMBOL_TRADE_STOPS_LEVEL
ビッド - ストップロス >= SYMBOL_TRADE_STOPS_LEVEL
Ask - TakeProfit >= SYMBOL_TRADE_STOPS_LEVEL
StopLoss - Ask >= SYMBOL_TRADE_STOPS_LEVEL



どなたか、私が抱いている疑問について説明していただけませんか?

買いはアスクプライスで行われ、売りはビッドプライスで行われることは理解しています。また、損切りや利食いの ために買いの時に買値で比較する理由も理解できます(反対売買、つまり売りを行うので買値)。

なぜなら、もし買値としか比較しないのであれば、ユーザーは買値より高く、売値より低い値を設定する可能性があるからです。

ありがとうございました。

 

こんにちは、

私のEAは検証で「取引活動がない」と報告され、拒否されました。私のEAは特定のニュースの日付で取引するように設計されているので、EAの検証中に使用される履歴データを知る必要があります。そうすれば、検証のためにデフォルトの日付を提供することができます。

よろしくお願いします。

ティム

 
@Tim Arthur Herbert Kasprzyk #: 私のEAは検証で「取引活動がない」と報告され、拒否されました。私のEAは特定のニュースの日付で取引するように設計されているので、EAの検証中に使用される履歴データを知る必要があります。そうすれば、検証のためにデフォルトの日付を提供することができます。

投稿する前にこのトピックを読んでいないようですね。

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

取引ロボットが市場で公開する前に通過しなければならないチェック "の記事についての議論

フェルナンド-カレーロ、2022.12.24 18:46

Marketの製品ルールでは、EAを単一のシンボルに限定したり制限したりすることはできません。あなたのEAは、その使用目的が単一のシンボルであったとしても、すべてのシンボルで機能しなければなりません。

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

トレーディングロボットがマーケットで公開される前に通過しなければならないチェック "の記事についての議論

フェルナンド・カレイロ, 2023.03.27 01:50

EAを制限することはできません。たとえそれが指数用に設計されたものであったとしても、EAはあらゆるもので取引できなければなりません。マーケットルールを お読みください。

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

トレーディング・ロボットがマーケットで公開する前に通過しなければならないチェック "の記事についての議論

フェルナンド・カレイロ, 2023.06.01 13:15

あなたのEAは、すべてのシンボルとすべてのタイムフレームで取引できなければなりません。制限があってはなりません。

ログのサイズを小さくするには、以下を検討してください。

  • ログ出力への「prints」ステートメントの数を減らす。
  • 連続したトレーリング・ストップの代わりに、トレーリング・ステップまたはタイム・ステップを使用する。
  • 連続的に未決注文を作成、削除しない。仮想」未決注文の使用を検討する。
 
Fernando Carreiro #:

投稿する前にこのトピックを読んでいないようだ.

こんにちは、フェルナンド。実は、私のEAはシンボルや時間枠に制限されていません。FED金利ニュース日のような指定されたニュース日だけが必要です。また、EAにはデフォルトのニュース日付も用意しています。ですから、理論的には検証に合格するはずです。しかし、検証プロセスが私のデフォルトの日付をカバーしていない過去のデータを使用している可能性があります。そのため、どのヒストリカルデータが使用されているのか(どのシンボルやタイムフレームではなく、レポートで確認できます)を理解するのに役立つと思います。
 
@Tim Arthur Herbert Kasprzyk #: こんにちは、フェルナンド。実は、私のEAはシンボルや時間枠に制限されていません。FED金利ニュース日のような指定されたニュース日だけが必要です。 また、EAにはデフォルトのニュース日付も用意しています。ですから、理論的には検証に合格するはずです。しかし、検証プロセスが私のデフォルトの日付をカバーしていない過去のデータを使用している可能性があります。そのため、どのヒストリカルデータが使用されているのか(どのシンボルやタイムフレームではなく、レポートで確認できます)を理解するのに役立つと思います。

これはまだ制限です。任意の日付、シンボル、時間枠に関係なく取引ができるようにデフォルトのパラメータ値を設定することで、あらゆる制限を取り除くことができます。

EAも契約仕様を読み取り、それに従って調整する必要があります。

 
Strategy Tester Report not found" EURUSD 1H というメッセージが表示されます。

ストラテジーテスターで 何度も確認しましたが、私のEAは何のエラーもなく動作しています。

検証テスト "EAをコード化したのですが、そのEAは単に最小許容ボリュームでポジションをオープンし、数秒後にポジションをクローズするだけなのですが、同じエラーが発生します。

 

すべてのEAは取引しなければならないのでしょうか 私のEAはただチャートに描画しているだけです。

 

このような問題をお持ちの方はいらっしゃいますか?Metaquotes DEMOアカウントでは正常に動作し、テストでは検証を通過しませんでした。


Test on EURUSD,H1 (netting) 2021.06.30 23:59:59 ExpertRemove() function called removed itself within OnDeinit removed itself on 99% of testing intervalstrategy tester report 1 total trades