プログラミングなんて知らなくても自動売買を作れる?ChatGPTを使ってEA開発してみた。

AI

今回はChatGPTで自動売買システム(MT4のEA)を作ってみたいと思います。

まずは簡単に、移動平均線のクロスで売買するシステムを作ってもらおうと思います。

ChatGPTに「MQL4を使って、移動平均線のクロスで売買するEAを作ってください。」と頼んでみましょう。

// EAの基本構造
void start()
{
  // 短期移動平均線を計算する
  double short_ma = iMA(Symbol(), PERIOD_CURRENT, 5, 0, MODE_SMA, PRICE_CLOSE, 0);

  // 長期移動平均線を計算する
  double long_ma = iMA(Symbol(), PERIOD_CURRENT, 10, 0, MODE_SMA, PRICE_CLOSE, 0);

  // 現在のポジションを取得する
  int current_position = PositionsTotal();

  // 短期移動平均線が長期移動平均線を上から下にクロスした場合に売りのシグナルが発生する
  if(short_ma < long_ma)
  {
    // 逆張りのポジションを取る
    if(current_position == 0)
    {
      // 売り注文を発注する
      double lot_size = 0.1;
      double stop_loss = 20;
      double take_profit = 40;

      OrderSend(Symbol(), OP_SELL, lot_size, Bid, 3, Bid + stop_loss * Point, Bid - take_profit * Point, "Sell Order", 0, 0, Red);
    }
  }

  // 短期移動平均線が長期移動平均線を下から上にクロスした場合に買いのシグナルが発生する
  if(short_ma > long_ma)
  {
    // 新規のポジションを取る
    if(current_position == 0)
    {
      // 買い注文を発注する
      double lot_size = 0.1;
      double stop_loss = 20;
      double take_profit = 40;

      OrderSend(Symbol(), OP_BUY, lot_size, Ask, 3, Ask - stop_loss * Point, Ask + take_profit * Point, "Buy Order", 0, 0, Green);
    }
  }
}

void end()
{
  // EAの終了処理をここに書く
}

移動平均やロットはパラメーターにしてもらいたいのですが、とりあえずこれでいいでしょう。MetaEditorに貼り付けてコンパイル、バックテストを実行してみます。

するとコンパイルエラーが出ました‥。

'PositionsTotal' - function not defined ChatGPT_MACross.mq4 21 26

そこで「PositionsTotalでコンパイルエラーになりましたが‥」と問いただしてみました。

おっしゃる通りです。PositionsTotal()は関数ではなく、組み込みの変数であるため、括弧をつける必要がありません。つまり、以下のように修正する必要があります。
// 現在のポジションを取得する
current_position = PositionsTotal;
ご指摘いただきありがとうございます。コードを修正して、正しく動作するようにしてください。

これでもエラーになります‥。「それでもコンパイルエラーが出ます。これはMQL5の構文ではないんですか?」と聞いてみます。


おっしゃる通りです。私が書いたコードは、MQL5の構文であり、MQL4では動作しない可能性があります。お詫び申し上げます。

MQL4では、PositionsTotal()関数は正しい構文であり、括弧が必要です。したがって、以下のようにコードを修正する必要があります


// 現在のポジションを取得する
current_position = PositionsTotal();
ご指摘いただきありがとうございました。MQL4の構文に合わせてコードを修正してください。

戻ってしまいました。仕方ありません、ここは私の知識で対応しましょう。

「OrdersTotalでしょ?」と言ってみます。

おっしゃる通りです。私の前回の回答が誤りでした。MQL4では、現在のポジション数を取得するためには、OrderTotal()関数を使用する必要があります。正しいコードは以下のようになります。


// 現在のポジションを取得する
current_position = OrdersTotal();
お詫び申し上げます。ご指摘いただきありがとうございました。

今のChatGPT(無料版 Ver3.5)では、まったくプログラムを知らないと間違って教えられた場合に対応できないですね‥。どうもMQL5が優先されているようなので、MQL5で開発した方が良いかも知れません。

これから開発するのであればMQL5の方がいいですし、問題は無いのかも。

と思っていましたが実際にやってみるとMQL5で作るほうが問題が多いようです。(2023/4/30 追記)

さて、本題に戻りましょう。OrdersTotal()に置き換えてコンパイルします。これでコンパイルが通りました。バックテストしてみます。

いや違う、こうじゃない‥(苦笑)

「移動平均がクロスした瞬間だけトレードしてほしい。」と伝えます。すると修正案が提示されるのでもう一度コピペ、コンパイルして再実行。

完成しました!何度かやり取りは必要でしたが、サクサクっと作ることができました。

今回は移動平均線のクロスという単純なものでしたが、やや難解な動作でも何度かやりとしながら一緒に作っていけば、プログラムを知らない方でも作ることができるのではないでしょうか。

ちなみに「移動平均の日数とロットはパラメーターにしてください」って言ったらちゃんとやってくれました。しかも、ついでにストップロスとテイクプロフィットもパラメーターにしてくれています。

結論

  • MQLプログラミングを知っている人であれば開発時間の短縮になる
  • まったく知らない場合にはMQL5の方を使ったほうが良さそう これは嘘でした(2023/4/30追記)
  • 一回では自分の欲しい物が手に入らない可能性は高いが、日本語でやり取りするだけで修正できる

現行の無料バージョンを「検索」に使った場合には「情報が古く、結構、誤った情報を出してくるので、ある程度知識がある分野じゃないと使えない」という印象でしたが‥。

プログラミングに使う場合には間違っていたらエラーになるのでわかりますし、間違っている部分を指摘すれば(だいたいは)修正してくれるので十分使えそうだなと思いました!

「こういうコンセプトではどうだろうか?」とちょっと思いついたものをコード化するのに非常に便利そうなので、私は今後、ChatGPTを「プロトタイプ」の開発に使うつもりでいます。

コメント

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