MT4用フリーツール:ChatGPT(GPTs)で作成:設定したリスクリワードで指値または逆指値を自動設定する

無料インジケータ・ツール
スポンサーリンク

設定したリスクリワードで指値または逆指値を自動設定するツール(EA)の作成

ChatGPT(GPTs)にお願いして、ちょっと便利なツール(EA)を作ってもらいました。
逆指値または指値のどちらかを設定すると、パラメータで設定したリスクリワードに従って、指値または逆指値を自動でツールです。

使用GPTs:EA Creator

依頼内容と実行結果

少し手直ししましたが、ほぼほぼそのまま使えるものを作ってもらえました。

依頼内容(1回目)

以下の仕様で、EAの作成をお願いします

#パラメータ
・注文ロット数
・リスクリワード(損益を1として利益の比率を設定する)
その他、必要なものあれば追加

#仕様
(1)保持しているポジションの中に、指値のみが設定されているポジションがあった場合、以下の条件で逆指値を設定する
・エントリー価格と指値より見込み利益を計算する
・見込み利益とリスクリワードより算出した損益となる価格に逆指値を設定する
(2)保持しているポジションの中に、逆指値のみが設定されているポジションがあった場合、以下の条件で指値を設定する
・エントリー価格と逆指値より見込み損益を計算する
・見込み損益とリスクリワードより算出した利益となる価格に指値を設定する

#余計なパラメータを入れてしまいました。。

ChatGPT出力結果

以下の仕様に基づいて、指定されたリスクリワード比率を使用して逆指値と指値を設定するEAのMQL4コードを提供します。このEAは、保有中のポジションをチェックし、条件に応じて逆指値や指値を設定します。

//+------------------------------------------------------------------+
//|                                                 RiskRewardEA     |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property strict

input double LotSize = 0.1; // 注文ロット数
input double RiskRewardRatio = 2.0; // リスクリワード比率
input int Slippage = 3; // スリッページ
input int MagicNumber = 0; // マジックナンバー

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   // ポジションをチェック
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS))
        {
         // 損益を計算し、逆指値または指値を設定
         CheckModifyOrders();
        }
     }
  }
//+------------------------------------------------------------------+
//| ポジションをチェックし、逆指値または指値を設定する関数            |
//+------------------------------------------------------------------+
void CheckModifyOrders()
  {
   double entryPrice = OrderOpenPrice();
   double tp = OrderTakeProfit();
   double sl = OrderStopLoss();
   double newSl, newTp;

   // 指値のみが設定されている場合
   if(tp > 0 && sl == 0)
     {
      double expectedProfit = MathAbs(tp - entryPrice);
      double risk = expectedProfit / RiskRewardRatio;

      if(OrderType() == OP_BUY)
        {
         newSl = NormalizeDouble(entryPrice - risk, Digits);
        }
      else if(OrderType() == OP_SELL)
        {
         newSl = NormalizeDouble(entryPrice + risk, Digits);
        }

      OrderModify(OrderTicket(), entryPrice, newSl, tp, 0, clrRed);
     }

   // 逆指値のみが設定されている場合
   if(tp == 0 && sl > 0)
     {
      double expectedLoss = MathAbs(entryPrice - sl);
      double reward = expectedLoss * RiskRewardRatio;

      if(OrderType() == OP_BUY)
        {
         newTp = NormalizeDouble(entryPrice + reward, Digits);
        }
      else if(OrderType() == OP_SELL)
        {
         newTp = NormalizeDouble(entryPrice - reward, Digits);
        }

      OrderModify(OrderTicket(), entryPrice, sl, newTp, 0, clrGreen);
     }
  }
//+------------------------------------------------------------------+

説明

  1. パラメータ
  • LotSize: 注文ロット数
  • RiskRewardRatio: リスクリワード比率
  • Slippage: スリッページ
  • MagicNumber: マジックナンバー
  1. 初期化 (OnInit)
  • 特に初期化は必要ありません。
  1. ティックイベント (OnTick)
  • 保有中のポジションをチェックし、逆指値または指値を設定します。
  1. ポジションのチェックおよび設定 (CheckModifyOrders)
  • 保有中のポジションに対して、以下の条件に基づいて逆指値または指値を設定します。
    • 指値のみが設定されている場合
    • エントリー価格と指値より見込み利益を計算し、リスクリワード比率を使用して逆指値を設定します。
    • 逆指値のみが設定されている場合
    • エントリー価格と逆指値より見込み損益を計算し、リスクリワード比率を使用して指値を設定します。

このEAは、保有中のポジションを監視し、指定されたリスクリワード比率に基づいて逆指値および指値を設定します。MetaTrader 4のエディタにこのコードをコピーし、コンパイルして実行することで動作を確認できます。

依頼内容(2回目)

EA_RiskRewardManager の修正と仕様追加をお願いします
・RiskRewardRatio 以外のパラメータは使っていないと思うので削除
・OnTickで、ポジションチェックを行う間隔を秒単位で設定できるようにする(処理負荷の調整)
・newSl, newTpを未初期化使うケースがあるので、0で初期化

依頼内容(3回目)

DigitsをMarketInfoを使って、変更対象のポジションの通貨ペアの桁数をとるようにしてもらえますか

ChatGPT出力結果

もちろんです。以下のコードでは、DigitsMarketInfo関数を使用して、変更対象のポジションの通貨ペアの桁数を取得するように修正しました。

//+------------------------------------------------------------------+
//|                                             EA_RiskRewardManager |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property strict

input double RiskRewardRatio = 2.0; // リスクリワード比率
input int CheckIntervalSeconds = 60; // ポジションチェックの間隔(秒)
input int Slippage = 3; // スリッページ

datetime lastCheckTime = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime currentTime = TimeCurrent();

   if (currentTime - lastCheckTime >= CheckIntervalSeconds)
     {
      lastCheckTime = currentTime;

      // ポジションをチェック
      for(int i = OrdersTotal() - 1; i >= 0; i--)
        {
         if(OrderSelect(i, SELECT_BY_POS))
           {
            // 損益を計算し、逆指値または指値を設定
            CheckModifyOrders();
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| ポジションをチェックし、逆指値または指値を設定する関数            |
//+------------------------------------------------------------------+
void CheckModifyOrders()
  {
   string symbol = OrderSymbol();
   int digits = (int)MarketInfo(symbol, MODE_DIGITS);

   double entryPrice = OrderOpenPrice();
   double tp = OrderTakeProfit();
   double sl = OrderStopLoss();
   double newSl = 0, newTp = 0;

   // 指値のみが設定されている場合
   if(tp > 0 && sl == 0)
     {
      double expectedProfit = MathAbs(tp - entryPrice);
      double risk = expectedProfit / RiskRewardRatio;

      if(OrderType() == OP_BUY)
        {
         newSl = NormalizeDouble(entryPrice - risk, digits);
        }
      else if(OrderType() == OP_SELL)
        {
         newSl = NormalizeDouble(entryPrice + risk, digits);
        }

      OrderModify(OrderTicket(), entryPrice, newSl, tp, 0, clrRed);
     }

   // 逆指値のみが設定されている場合
   if(tp == 0 && sl > 0)
     {
      double expectedLoss = MathAbs(entryPrice - sl);
      double reward = expectedLoss * RiskRewardRatio;

      if(OrderType() == OP_BUY)
        {
         newTp = NormalizeDouble(entryPrice + reward, digits);
        }
      else if(OrderType() == OP_SELL)
        {
         newTp = NormalizeDouble(entryPrice - reward, digits);
        }

      OrderModify(OrderTicket(), entryPrice, sl, newTp, 0, clrGreen);
     }
  }
//+------------------------------------------------------------------+

説明

  1. パラメータ
  • RiskRewardRatio: リスクリワード比率
  • CheckIntervalSeconds: ポジションチェックの間隔(秒)
  • Slippage: スリッページ
  1. 初期化 (OnInit)
  • 特に初期化は必要ありません。
  1. ティックイベント (OnTick)
  • ポジションチェックを設定された間隔で行うための条件を追加しました。
  1. ポジションのチェックおよび設定 (CheckModifyOrders)
  • OrderSymbol関数を使用してポジションの通貨ペアを取得し、MarketInfo関数を使用してその通貨ペアの桁数を取得します。
  • newSlおよびnewTpを0で初期化しました。
  • 保有中のポジションに対して、以下の条件に基づいて逆指値または指値を設定します。
    • 指値のみが設定されている場合
    • エントリー価格と指値より見込み利益を計算し、リスクリワード比率を使用して逆指値を設定します。
    • 逆指値のみが設定されている場合
    • エントリー価格と逆指値より見込み損益を計算し、リスクリワード比率を使用して指値を設定します。

このEAは、保有中のポジションを監視し、指定されたリスクリワード比率に基づいて逆指値および指値を設定します。MetaTrader 4のエディタにこのコードをコピーし、コンパイルして実行することで動作を確認できます。

ツール(EA)

作成したEAを上げておきます。
基本的な動作確認はしておりますが、不具合を原因とする場合を含め、利用者の損失を補填することは致しかねますのでご了承ください。
ご自身の責任の範囲で(ご自身でも動作確認するなど)ご利用ください。

設定したリスクリワードで指値または逆指値を自動設定するツール(EA) (164 ダウンロード )

🚀 ご利用ありがとうございます!ご協力のお願いです 🚀

このたびは、インジケーター・ツールをご利用いただき、誠にありがとうございます!
FXトレードの成功を後押しする、厳選したサービスをご紹介します。
ご利用頂けたら幸いです。
私のこの活動の励みになり、さらに良いツールをご提供していけるのではないかと思います!!

💼 海外FX口座の開設で収益UP!
🌍 Exness口座 – 私が最も信頼するブローカー!
  • スプレッドが業界最安水準で、コスト削減が可能
  • MT4/MT5完全対応、自動売買(EA)との相性も抜群
  • 即時出金対応で、資金管理もスムーズ

👉 Exness口座を今すぐ開設する(特別オファー)

こちらの記事もご参考に。⇒ 私のおすすめのExness口座の開設



💸 キャッシュバックありの海外口座で取引コストを削減!
 🚀 TariTali – 高還元率で差がつくキャッシュバック!
  • 高還元率キャッシュバックで取引コストを最小化
  • MT4/MT5対応ブローカーが豊富 → 自動売買との相性抜群!
  • リアルタイムでキャッシュバック履歴を確認可能
  • 国内銀行への迅速な出金サポートも充実

👉 TariTaliで賢く取引コストを削減する!
詳しくは:「なぜFX海外口座が人気なのか?MT4/MT5のEAも使用可能、入金/取引キャッシュバックあり、トレーダのための究極ガイド」

海外FXキャッシュバック口座開設ならTariTali(タリタリ)

🔥 Money Charger – 海外FXキャッシュバックの新定番!
  • 取引ごとに自動でキャッシュバック → 取引量が多いほどお得!
  • 業界最高水準のキャッシュバック率で、利益効率が大幅アップ
  • シンプルな登録&即日キャッシュバック対応
  • 対応ブローカー多数で、好きな口座を選べる柔軟性

  👉 Money Chargerでキャッシュバックを今すぐスタート!

詳しくは:海外FX取引のキャッシュバック

🇯🇵 国内FX口座も強力サポート!
📈 DMM FX – 国内No.1取引量!



詳しくはこちらの記事「あなたのFX取引を加速させるDMM.com証券のキャッシュバックキャンペーン」をご参照ください。

🔥 その他FX口座の開設

MT4対応口座等もピックアップしています。こちらの記事「FX取引: 国内口座の選択とおすすめ業者の比較、MT4 EA対応口座は」からお願いします。

手軽にお小遣い稼ぎ
 🚀 モッピーでポイ活

少しでもお金を増やしたいと思っているすべての方へ。
スマホやPCを使って手軽にポイントを稼げるサービス「モッピー」を紹介します!

アプリインストール・ゲームアプリで無料で簡単にポイントが貯まる!楽しくポイ活するならモッピー

🤖 トレードシステム(EA)で自動化して利益を加速!
🔥 私が開発した高精度EAをご紹介

👉 EAの詳細はこちら「FXトレーダー必見!MT4向け利益追求型自動売買EAの紹介

📊 人気の売れ筋EAもチェック!
  • 多くのトレーダーが愛用しているEAを厳選
  • 稼働実績や収益データも公開中

👉 人気EAランキングを今すぐ見る

関連記事

スポンサーリンク
海外FXキャッシュバック口座開設ならTariTali(タリタリ)

コメント

タイトルとURLをコピーしました