ChatGPTでcBotを作成する方法

 

ジェネレーティブAIが急速に進化しており、コードを一行も書かずにcBotを作成することは夢ではありません。それは現実です。この記事と対応する動画では、ChatGPTを使用してcBotを作成する方法を紹介します。また、ChatGPTが提供するcBotコードを評価し、AI生成のボットが数分で動作するようにする方法も示します。

正しいプロンプトの作成

このビデオでは、GPT-3.5モデルを使用します。これは誰でも無料で利用でき、新しいGPTモデルに比べて機能は少ないものの、優れた結果を生み出します。

ChatGPTで素晴らしいcBotを作成する最初のステップは、正しいプロンプトを入力することです。良いプロンプトのためのいくつかのルールを以下に示します:

  1. ChatGPTがプロのcBot開発者の役割を果たすように促す。

これを達成するには、"Let's play or game where you are a qualified algo developer for cTrader...""Pretend to be a professional developer of cBots for cTrader..."といった初期プロンプトを入力します。

  1. 具体的にする。

ChatGPTに提供する詳細が多いほど、結果は良くなります。"Create a profitable cBot for me..."のようなプロンプトは、AIを混乱させるだけです。

cBotの各部分をできるだけ具体的に指定することをお勧めします。パラメータ、反応する条件、実行する取引操作を考慮してください。カスタムトレーディングパネルを作成する場合は、UI要素がどこに配置されるべきかを考えてください。

  1. 礼儀正しく、敬意を持つ。

これは驚くかもしれませんが、礼儀正しくすることでChatGPTの出力品質が向上することが研究で示されています。"I would appreciate it if...""It would be nice if..."などのフレーズを含めると良いでしょう。

カラー取引cBotの作成

まず、各バーのオープンで新しいマーケットオーダーを出すシンプルなcBotを作成します。オーダーの方向は、前のバーが緑か赤かに依存します。バーが赤の場合、売り注文を出し、緑の場合、買い注文を出します。

以下に、正しいプロンプトを提供する方法を示します。

  • 開始文: "Pretend to be a professional developer of cBots for cTrader, Write very simple and understandable code"
  • 具体的な要件: "Create a cBot. On every bar, it should place a new market order with no protection mechanisms. The order volume (in units) should be a customisable parameter. A buy order should be placed if the previous bar was green. A sell order should be placed if the previous bar was red"
  • 礼儀: "I would really appreciate it if you do this task, thank you!"

ChatGPTが出力する正確なコードは異なるかもしれませんが、いずれにせよコードエディタウィンドウにコピーして貼り付け、正しいかどうか、希望するロジックが実装されているかを確認できます。

通常、修正が必要な非クリティカルなエラーがいくつかあります。今回の場合、修正が必要だった唯一の点は、ExecuteMarketOrderメソッドのSymbolオブジェクトをSymbolName文字列に変更することでした。以下は、すべてを実行した後の最終コードです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using cAlgo.API;
using cAlgo.API.Internals;
using cAlgo.API.Indicators;
using cAlgo.API.Requests;
using cAlgo.Indicators;
namespace SimpleColorBasedMarketOrders
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.FullAccess)]
    public class ColorBasedMarketOrders : Robot
    {
        [Parameter("Order Volume (Units)", DefaultValue = 10000, MinValue = 1000)]
        public int OrderVolume { get; set; }

        protected override void OnBar()
        {
            if (Bars.Count < 2)
                return;

            Color previousBarColor = Bars.Last(1).Close > Bars.Last(1).Open ? Color.Green : Color.Red;
            if (previousBarColor == Color.Green)
            {
                ExecuteMarketOrder(TradeType.Buy, SymbolName, OrderVolume, "Buy Order", null, null, null);
            }
            else if (previousBarColor == Color.Red)
            {
                ExecuteMarketOrder(TradeType.Sell, SymbolName, OrderVolume, "Sell Order", null, null, null);
            }
        }
    }
}

通常通り、ボットを保存してビルドします。’取引‘アプリケーションでは、ボットのインスタンスをチャートに追加し、意図通りに機能するか確認します。ボットは問題なく動作し、過去のバーの色に反応して新しい注文を出します。注文量もカスタマイズ可能なパラメータです。

注記

ChatGPTが出力したコードを読む必要さえありませんでした。コードエディタに表示された警告をすべて修正し、その後ボットを起動しただけです。

トレンド取引cBotの作成

先ほどのcBotは素晴らしいものでしたが、単純なロジックを使用しており、市場のトレンドを考慮していませんでした。同じプロンプトのアプローチを使用して、より複雑なものを作成してみましょう。

  • 開始文: "Let's imagine you are a skilled cBot developer for cTrader. I will be your client"
  • 具体的な要件: "Create a cBot. On every bar, it should check whether the 50-day moving average is above or below the 200-day moving average. If it is above, the bot should place a buy order. If it is below, the bot should place a sell order. The bot should not place an order if there already exists an open position in the same direction. The order volume should be a customisable parameter".
  • 礼儀: "Thank you for the help!"

再び、ChatGPTから提供されたコードをそのままコードエディタウィンドウにコピーしてボットをビルドしてみます。以下は、取得したすべてのビルドエラーです。

  • コードが古いMarketSeriesAPIメンバーを使用しているため、Bars.ClosePricesコレクションに置き換えます。
  • 再び、Symbol引数をSymbolNameに置き換える必要があります。
  • ExecuteMarketOrderメソッドの不要な引数を削除する必要もあります。

また、ロジックがどのように実現されたかも見てみましょう。OnStart()メソッドでは、移動平均を初期化しています。ChatGPTは移動平均期間をカスタマイズ可能なパラメータにしていますが、これによりコアロジックに影響はないため、そのままにしておきます。

しかし、OnBar()メソッドでは、ポジションが存在しない場合にのみ新しい注文を出します(Positions.Count ==0)。これは、ポジションの方向も確認する必要があるため、望ましいものではありません。コードを少し変更して、次のようなボットを作成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using cAlgo.API;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
using cAlgo.Indicators;
namespace MovingAverageCrossBot
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class MovingAverageCrossBot : Robot
    {
        [Parameter("MA50 Periods", DefaultValue = 50)]
        public int MA50Periods { get; set; }

        [Parameter("MA200 Periods", DefaultValue = 200)]
        public int MA200Periods { get; set; }

        [Parameter("Volume", DefaultValue = 10000, MinValue = 1000)]
        public int Volume { get; set; }

        private ExponentialMovingAverage MA50;
        private ExponentialMovingAverage MA200;

        protected override void OnStart()
        {
            MA50 = Indicators.ExponentialMovingAverage(Bars.ClosePrices, MA50Periods);
            MA200 = Indicators.ExponentialMovingAverage(Bars.ClosePrices, MA200Periods);
        }

        protected override void OnBar()
        {
            if (MA50.Result.LastValue > MA200.Result.LastValue && Positions.FindAll("Buy Order").Length == 0) 
            {
                // Place a buy order
                ExecuteMarketOrder(TradeType.Buy, SymbolName, Volume, "Buy Order");
            }
            else if (MA50.Result.LastValue < MA200.Result.LastValue && Positions.FindAll("Sell Order").Length == 0)
            {
                // Place a sell order
                ExecuteMarketOrder(TradeType.Sell, SymbolName, Volume, "Sell Order");
            }
        }
    }
}

指定されたラベルのすべてのポジションを取得し、その数を計算するためにPositions.FindAll(string label)メソッドを使用しました。

ボットをビルドすると、チャートに追加できます。50日と200日の移動平均も追加して、cBotの動作を評価します。しばらく待つと、ボットが期待通りに機能することがわかります。新しい注文が必要に応じて出されますが、同じ方向に複数のオープンポジションは存在しません。

まとめ

ChatGPTは、正確に定義されたロジックで迅速にcBotを作成する必要がある場合に価値のあるツールです。ChatGPTは多少のエラーを生成しますが、通常は重要でなく、すぐに修正できます。この記事とビデオが役立ったことを願っています。新しいビデオを公開するたびに通知を受け取るために、YouTubeチャンネルを登録してください。

私たちのYouTubeチャンネルを登録してください

 

目次

このページについて