🎊 cTrader 5.4でPython cBotが書ける!ネイティブPythonサポート完全ガイド【Open APIとの違いも解説】
🎊 cTrader 5.4でPython cBotが書ける!ネイティブPythonサポート完全ガイド
ビッグニュース:cTraderでPythonが使える!
2024年末、cTrader 5.4がリリースされ、ネイティブPythonサポートが追加されました!
これまでcTraderでの自動売買といえば:
- cAlgo(C#) → cTrader内で動くcBot
- Open API → 外部からPythonなどで操作
という選択肢でした。
そこに新たに:
- ネイティブPython cBot → cTrader内でPythonが動く!
という選択肢が加わったのです!🎉
Open API vs ネイティブPython:何が違う?
比較表
| 特徴 | Open API | ネイティブPython cBot |
|---|---|---|
| 動作場所 | 外部(VPS、PC) | cTrader内 |
| cTrader必要? | 不要 | 必要 |
| 認証 | OAuth2必要 | 不要(ログイン済み) |
| セットアップ | 複雑 | 簡単 |
| 対応OS | 全OS | Windows/Mac |
| 向いている用途 | サーバー運用、Web連携 | 個人の自動売買 |
| MQLからの移行 | やや難しい | 簡単! |
どっちを選ぶべき?
ネイティブPython cBot がおすすめ:
- 個人で自動売買したい
- MQLからの移行を楽にしたい
- サーバー管理は面倒
- シンプルに始めたい
Open API がおすすめ:
- VPSで24時間稼働させたい
- Webアプリと連携したい
- 複数口座を一元管理したい
- cTraderを起動せず運用したい
環境構築:超簡単!
Step 1: cTrader 5.4以上をインストール
- cTrader公式サイト からダウンロード
- インストール後、対応ブローカーの口座でログイン
Step 2: Pythonの確認
cTrader 5.4以降にはPython環境が内蔵されています!
つまり、あなたのPCに別途Pythonをインストールする必要なしです。
(外部ライブラリを使いたい場合は別途設定が必要)
最初のPython cBotを作ろう
Step 1: Automateパネルを開く
- cTraderを開く
- 左下の「Automate」タブをクリック
- 「cBots」を選択
Step 2: 新規cBot作成
- 「New」ボタンをクリック
- 名前を入力(例:MyFirstPythonBot)
- Language: Python を選択 👈 ここが重要!
- 「Create」をクリック
Step 3: コードを書く
エディタが開いたら、以下のコードを入力:
from ctrader_algo import *
class MyFirstPythonBot(Robot): """ 私の最初のPython cBot! 起動時に「Hello World」と表示するだけのシンプルなボット """
def on_start(self): """cBot起動時に呼ばれる""" self.print("🎉 Hello World! Python cBotが動いています!") self.print(f"📊 現在の通貨ペア: {self.symbol.name}") self.print(f"💰 口座残高: {self.account.balance}")
def on_tick(self): """ティック毎に呼ばれる(MQLのOnTick相当)""" bid = self.symbol.bid ask = self.symbol.ask spread = (ask - bid) / self.symbol.pip_size # 毎ティック表示すると大量になるのでコメントアウト # self.print(f"Bid: {bid}, Ask: {ask}, Spread: {spread:.1f} pips")
def on_stop(self): """cBot停止時に呼ばれる""" self.print("👋 cBotを停止しました")Step 4: ビルド & 実行
- 「Build」ボタンをクリック
- エラーがなければ「▶️」(実行)をクリック
- チャートとアカウントを選択
- 「Start」!
🎉 Hello World! Python cBotが動いています!📊 現在の通貨ペア: EURUSD💰 口座残高: 10000.0おめでとう!最初のPython cBotが動きました!🎊
MQL経験者のための対応表
基本構造
| MQL | Python cBot |
|---|---|
OnInit() | on_start() |
OnTick() | on_tick() |
OnDeinit() | on_stop() |
OnTimer() | on_timer() |
OnBar() | on_bar() |
価格・シンボル情報
| MQL | Python cBot |
|---|---|
Bid | self.symbol.bid |
Ask | self.symbol.ask |
Symbol() | self.symbol.name |
Digits | self.symbol.digits |
Point | self.symbol.pip_size |
口座情報
| MQL | Python cBot |
|---|---|
AccountBalance() | self.account.balance |
AccountEquity() | self.account.equity |
AccountFreeMargin() | self.account.free_margin |
注文
| MQL | Python cBot |
|---|---|
OrderSend(OP_BUY) | self.execute_market_order() |
OrderClose() | position.close() |
OrderModify() | self.modify_position() |
実践:移動平均線クロス戦略
MQLで定番の「ゴールデンクロス/デッドクロス」戦略をPythonで書いてみましょう。
from ctrader_algo import *
class MACrossBot(Robot): """ 移動平均線クロス戦略 - 短期MAが長期MAを上抜け → 買い - 短期MAが長期MAを下抜け → 売り """
# パラメータ(MQLのextern/input相当) fast_period = Parameter(10, min_value=1) slow_period = Parameter(20, min_value=1) volume = Parameter(0.01, min_value=0.01) stop_loss_pips = Parameter(20.0) take_profit_pips = Parameter(40.0)
def on_start(self): """初期化""" self.print(f"🚀 MA Cross Bot 起動") self.print(f" Fast MA: {self.fast_period}") self.print(f" Slow MA: {self.slow_period}") self.print(f" ロット: {self.volume}")
# 移動平均線インジケーターを作成 self.fast_ma = self.indicators.simple_moving_average( self.bars.close_prices, self.fast_period ) self.slow_ma = self.indicators.simple_moving_average( self.bars.close_prices, self.slow_period )
# 前回のクロス状態 self.previous_fast_above = None
def on_bar(self): """新しいバー(足)が確定したときに呼ばれる""" # 現在のMA値 fast_current = self.fast_ma.result[-1] slow_current = self.slow_ma.result[-1]
# 現在のクロス状態 fast_above = fast_current > slow_current
# 初回は状態を記録するだけ if self.previous_fast_above is None: self.previous_fast_above = fast_above return
# クロス検出 if fast_above and not self.previous_fast_above: # ゴールデンクロス! self.print("📈 ゴールデンクロス検出!") self.close_all_sells() self.open_buy()
elif not fast_above and self.previous_fast_above: # デッドクロス! self.print("📉 デッドクロス検出!") self.close_all_buys() self.open_sell()
# 状態を更新 self.previous_fast_above = fast_above
def open_buy(self): """買いポジションを開く""" if self.has_buy_position(): return
sl_price = self.symbol.bid - (self.stop_loss_pips * self.symbol.pip_size) tp_price = self.symbol.ask + (self.take_profit_pips * self.symbol.pip_size)
result = self.execute_market_order( trade_type=TradeType.BUY, symbol_name=self.symbol.name, volume=self.symbol.quantity_to_volume_in_units(self.volume), label="MACross", stop_loss_pips=self.stop_loss_pips, take_profit_pips=self.take_profit_pips )
if result.is_successful: self.print(f"✅ 買い注文約定: {result.position.entry_price}") else: self.print(f"❌ 買い注文失敗: {result.error}")
def open_sell(self): """売りポジションを開く""" if self.has_sell_position(): return
result = self.execute_market_order( trade_type=TradeType.SELL, symbol_name=self.symbol.name, volume=self.symbol.quantity_to_volume_in_units(self.volume), label="MACross", stop_loss_pips=self.stop_loss_pips, take_profit_pips=self.take_profit_pips )
if result.is_successful: self.print(f"✅ 売り注文約定: {result.position.entry_price}") else: self.print(f"❌ 売り注文失敗: {result.error}")
def has_buy_position(self): """買いポジションがあるか""" for position in self.positions: if position.label == "MACross" and position.trade_type == TradeType.BUY: return True return False
def has_sell_position(self): """売りポジションがあるか""" for position in self.positions: if position.label == "MACross" and position.trade_type == TradeType.SELL: return True return False
def close_all_buys(self): """買いポジションを全決済""" for position in self.positions: if position.label == "MACross" and position.trade_type == TradeType.BUY: result = position.close() self.print(f"🔻 買いポジション決済: {result.position.net_profit}")
def close_all_sells(self): """売りポジションを全決済""" for position in self.positions: if position.label == "MACross" and position.trade_type == TradeType.SELL: result = position.close() self.print(f"🔻 売りポジション決済: {result.position.net_profit}")
def on_stop(self): """停止時""" self.print("👋 MA Cross Bot を停止しました")Pythonインジケーターを作る
cBotだけでなく、インジケーターもPythonで作れます!
RSI with Zones インジケーター
from ctrader_algo import *
class RSIWithZones(Indicator): """ RSIインジケーター(買われすぎ/売られすぎゾーン付き) """
# パラメータ period = Parameter(14, min_value=1) overbought = Parameter(70.0) oversold = Parameter(30.0)
# 出力 rsi_line = Output("RSI", color=Colors.Blue, line_style=LineStyle.Solid) overbought_line = Output("Overbought", color=Colors.Red, line_style=LineStyle.Dots) oversold_line = Output("Oversold", color=Colors.Green, line_style=LineStyle.Dots)
def on_start(self): """初期化""" self.rsi = self.indicators.relative_strength_index( self.bars.close_prices, self.period )
def on_calculate(self, index): """各バーの計算""" self.rsi_line[index] = self.rsi.result[index] self.overbought_line[index] = self.overbought self.oversold_line[index] = self.oversoldバックテストをしよう
ネイティブPython cBotの最大の利点の一つが、cTrader内蔵のバックテスト機能が使えること!
バックテスト手順
- Automateパネルで作成したcBotを選択
- 「Backtesting」タブをクリック
- 設定:
- Symbol: テストする通貨ペア
- Time Frame: 時間足
- Period: テスト期間
- Balance: 初期残高
- 「Start」をクリック!
バックテスト結果の見方
- Net Profit: 純利益
- Win Rate: 勝率
- Profit Factor: プロフィットファクター
- Max Drawdown: 最大ドローダウン
- Sharpe Ratio: シャープレシオ
MQLのストラテジーテスターと同じ感覚で使えます!
外部ライブラリを使う
「pandas使いたい!」「scikit-learn使いたい!」という方へ。
方法1: cTrader内蔵Pythonに追加
cTraderのPython環境にpipでインストールできます。
# cTraderのPython環境を確認# 通常: C:\Users\{ユーザー名}\AppData\Local\cTrader\Python\方法2: システムPythonを使う(上級者向け)
cTraderの設定で、システムにインストールされたPythonを使うこともできます。
⚠️ 注意: 外部ライブラリはバックテスト時に問題が起きる場合があります。まずは標準機能で試してみましょう。
Open APIとの連携も可能
「ネイティブcBotで完結しないケース」もあります:
- Webダッシュボードからボットを制御したい
- 外部サービス(TradingViewなど)と連携したい
- クラウドでスケールしたい
そんな時は、ネイティブcBot + Open APIのハイブリッドも選択肢です。
[TradingViewアラート] ↓ [Open API サーバー] ↓ [cTrader口座に発注]トラブルシューティング
Q: 「Python not found」エラー
A: cTraderを最新版にアップデートしてください。5.4以降が必要です。
Q: コードが動かない
A: よくある原因:
from ctrader_algo import *を忘れている- クラス名がファイル名と一致していない
- インデントがおかしい(Pythonはインデント命!)
Q: バックテストが遅い
A: 対処法:
- テスト期間を短くする
on_tick()からon_bar()に変更- 不要なprint文を削除
MQL → Python cBot 移行チェックリスト
✅ cTrader 5.4以降をインストール ✅ 対応ブローカーでログイン ✅ Automateパネルで「Python」を選択 ✅ 基本構造を理解(on_start, on_tick, on_bar) ✅ 価格取得方法を覚える(self.symbol.bid など) ✅ 注文方法を覚える(execute_market_order など) ✅ バックテストで検証 ✅ デモ口座でフォワードテスト
まとめ:どっちを使う?
ネイティブPython cBot を選ぶべき人
- 🎯 MQLから楽に移行したい
- 🎯 バックテスト機能を使いたい
- 🎯 シンプルにcTrader内で完結したい
- 🎯 サーバー管理は避けたい
Open API を選ぶべき人
- 🎯 24時間サーバーで運用したい
- 🎯 Webアプリと連携したい
- 🎯 cTraderを起動せず取引したい
- 🎯 複数口座を一元管理したい
両方使いこなせると最強です! 💪
参考リンク
- Python for algorithmic trading - 公式ドキュメント
- Create a cBot in Python
- How to create technical indicators
- cTrader Algo Samples (GitHub)
シリーズまとめ
このシリーズでは、cTraderとPythonで自動売買を始める方法を解説してきました:
- 入門編: Open APIの概要と環境構築
- 価格取得編: リアルタイム価格の取得
- 注文編: 注文の出し方完全ガイド
- ネイティブPython編: cTrader 5.4の新機能(この記事)
MQLを書けるあなたなら、きっとPythonでの自動売買もすぐにマスターできます!
新しいトレーディングの世界を楽しんでください! 🚀
🎁おすすめツール・サービス
※上記リンクにはプロモーション(広告)が含まれています
量子相場謀略|ホソノP
ブログでは書けない本音のトレード戦略とEA開発の裏側を公開。 データに基づいた検証で、再現性のある手法だけをお届けします。