コンテンツにスキップ

AIを使用してPythonでFX取引ボットを作成する方法

この記事と動画では、AIを使用してcTrader用の無料Python取引ボットを作成する方法を紹介します。

注意

cTraderは、ネイティブのPythonサポートを提供する唯一の主要プラットフォームであり、誰でも強力なPythonロボットを作成して取引戦略を自動化できます。 アダプターや複雑な回避策は必要ありません。

デモンストレーションではChatGPTを使用していますが、AIを使用して取引ボットを作成する手順は、Gemini、Claude、DeepSeekなどにも適用されます。

Pythonテンプレートを選択

cTrader WindowsまたはMacでcTrader Algoを開き、新規作成をクリックして新しい取引ボットの作成を開始します。

アルゴリズム作成ウィザードで、新しいアルゴリズムを作成し、名前を付けます。

プログラミング言語としてPythonを選択し、テンプレートを使用オプションを選択します。

cTraderは、あらゆる戦略タイプ、分析スタイル、または自動取引アクティビティをカバーする多様なPythonテンプレートを提供しています。 これらの事前構築されたアルゴリズムは、完全な取引ロジックと調整可能なパラメーターを含んでいるため、保存してビルドするだけで使用できます。

注意

アルゴリズムテンプレートの完全なコレクションは、cTrader WindowsまたはMacのアルゴリズム作成ウィザードで利用可能であり、公開リポジトリでもアクセスできます。

ブレイクアウト取引に特化しているとします。 そのため、Sample Breakout cBotを選択します。

注意

Breakout cBotを含む人気のアルゴリズムテンプレートの詳細な説明は、ナレッジベースで利用できます。

Breakout cBotは、事前に定義されたサポートまたはレジスタンスレベルを超える価格変動を利用し、Bollinger Bandsインジケーターがその決定を駆動します。 取引ボットをビルドしてバックテストしましょう。

++ctrl+b++を押すか、コードエディターの上部にあるビルドをクリックします。

ビルドが成功したら、cBot名の下にある利用可能なインスタンスをクリックします。

メイングリッドで、バックテストタブに移動します。 デフォルトのパラメーターを使用して1年間のバックテストを実行し、ロボットの結果を評価します。 cBotはこの期間に22%の利益を生み出し、取引統計タブに記録された194回の取引のうち74回の勝利取引を達成しました。

AIでcBotをアップグレード

AIの支援により、取引ボットのコードをアップグレードしてより良い結果を得たり、より高いリターンを生み出すパラメーターの組み合わせを特定したりできます。

RSIは、弱いブレイクアウトや誤ったシグナルをフィルタリングするモメンタムインジケーターです。 このインジケーターは、Sample Breakout cBotで使用されるBollinger Bandsと完璧に調和し、補完するはずです。 参考として、ヘルプセンター記事で提供されているSuper cBotのRSI統合を取得できます。

RSI統合スニペットを取り、必要なすべての情報を含むプロンプトに添付し、AIツールにフィードします。

プロンプト

Super cBot における RSI の統合を確認し、その後、同じ RSI フィルターを Special cBot に実装してください。

[Special cBot のコード]

[RSI を統合した Super cBot のコード]

AIが考え、RSIと統合されたSpecial cBotのコードを提供します。

 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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import clr

clr.AddReference("cAlgo.API")

# <strong>Import cAlgo API types</strong>
from cAlgo.API import *

# <strong>Import trading wrapper functions</strong>
from robot_wrapper import *

class SampleBreakoutcBot():
    Label = "Sample Breakout cBot"

    def on_start(self):
        # Bollinger Bands for breakout consolidation logic
        self.bollingerBands = api.Indicators.BollingerBands(api.Source, api.Periods, api.Deviations, api.MAType)

        # Track consolidation bars
        self.consolidation = 0

        # --- RSI filter (same style as grid cBot) ---
        self.rsi_period = getattr(api, "RsiPeriod", 14)
        self.rsi_overbought = getattr(api, "RsiOverbought", 70)
        self.rsi_oversold = getattr(api, "RsiOversold", 30)
        self.rsi = api.Indicators.RelativeStrengthIndex(api.Bars.ClosePrices, self.rsi_period)

    def on_bar(self):
        top = self.bollingerBands.Top.Last(1)
        bottom = self.bollingerBands.Bottom.Last(1)

        # Detect consolidation via band height
        if top - bottom <= api.BandHeightPips * api.Symbol.PipSize:
            self.consolidation += 1
        else:
            self.consolidation = 0

        if self.consolidation >= api.ConsolidationPeriods:
            volumeInUnits = api.Symbol.QuantityToVolumeInUnits(api.Quantity)

            # Breakout up
            if api.Ask > top:
                if self.passes_rsi_filter():
                    api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, volumeInUnits, self.Label, api.StopLossInPips, api.TakeProfitInPips)
                    self.consolidation = 0
                else:
                    api.Print("RSI filter blocked BUY breakout (RSI={:.2f}, range {}-{})"
                              .format(self.get_rsi_value(), self.rsi_oversold, self.rsi_overbought))

            # Breakout down
            elif api.Bid < bottom:
                if self.passes_rsi_filter():
                    api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, volumeInUnits, self.Label, api.StopLossInPips, api.TakeProfitInPips)
                    self.consolidation = 0
                else:
                    api.Print("RSI filter blocked SELL breakout (RSI={:.2f}, range {}-{})"
                              .format(self.get_rsi_value(), self.rsi_oversold, self.rsi_overbought))

    # --- Helpers copied in spirit from the grid cBot ---
    def get_rsi_value(self):
        # Use the last CLOSED bar for stability
        return self.rsi.Result.Last(1)

    def passes_rsi_filter(self):
        r = self.get_rsi_value()
        return (r > self.rsi_oversold) and (r < self.rsi_overbought)

次に、AIに私たちの戦略に基づいて取引ボットの最適なパラメーター設定を推奨するよう依頼します。

プロンプト

RSI フィルターと自然に組み合わさる、より滑らかで遅いシグナルを cBot に生成させたいです。
取引回数は少なくても、より明確なブレイクアウトを重視します。
ボラティリティが圧縮された瞬間に即座に動作させたいので、
コンソリデーション期間を 1 に設定しています。

この目的に最適な移動平均の種類はどれですか?

AIが考え、いくつかの有用な情報を提供します。 私たちの戦略に最適な移動平均タイプとしてWilders Smoothingを推奨します。

AIの推奨を適用

cTraderのコードエディターに戻り、推奨された変更を適用します。 更新されたコードを貼り付け、アップグレードされたcBotをビルドします。

再度バックテストタブを開きます。 AIが推奨した通り、移動平均をWilders Smoothingに設定し、同じ1年間のバックテストを実行します。

今回は、同じ期間のバックテストレポートが97%の利益を示し、元のcBotロジックが提供した22%と比較して大幅な改善が見られました。

この新しい結果は、取引ボットのパフォーマンスを洗練し、優れた結果を提供するためにパラメーターを最適化する際に、AIのガイダンスがどれほど効果的であるかを示しています。 ロボットの勝率も大幅に向上し、93回の取引のうち51回の勝利取引を達成しました。

クラウドでcBotを開始

クラウド同期のおかげで、新しいcBotは、cTrader IDがアクティブなすべてのcTraderアプリから自動的に利用可能です。 cTrader MobileまたはWebで取引ボットを開始することもできます。

開始アイコンをタップするだけです。

cBotはクラウドで実行されるため、cTraderアプリが閉じられたりデバイスがオフになったりしても、24時間ノンストップで取引を続けます。 VPSは必要ありません。

cBotを収益化

オプションとして、cTraderストアでcBotを収益化できます。これは、取引製品の購入者と販売者を結びつける安全でダイナミックなマーケットプレイスです。

製品を公開するには、クラウドから直接販売したいcBotを選択するか、ファイルをアップロードし、必要な詳細を提供します。 公開されると、アルゴリズムはcTraderストアで公開され、何百万ものcTraderユーザーが購入できるようになります。

注意

cTraderストアを介したアルゴリズムの配布は完全に安全です。ソースコードが公開またはアップロードされることはありません。 また、各製品の購入は単一ユーザーであり譲渡不可であるため、知的財産も尊重されます。

Image title