😤「MQLは書けるのにcTraderで自動売買できない!」そんなあなたへ贈る cTrader Open API × Python 入門ガイド
😤「MQLは書けるのにcTraderで自動売買できない!」そんなあなたへ贈る cTrader Open API × Python 入門ガイド
こんな悩み、ありませんか?
「MT4/MT5のEAならバリバリ書けるのに、cTraderに移行したら全然わからん...」
「cAlgoってC#なの?Pythonじゃダメなの?」
「Open APIって何?cBotと何が違うの?」
私も最初は同じでした。MQLで何本もEAを書いてきたのに、cTraderの世界に足を踏み入れた瞬間、まるで異世界転生したかのような絶望感を味わいました 😭
でも大丈夫!この記事を読めば、あなたもcTrader Open APIとPythonで自動売買の第一歩を踏み出せます。
そもそもcTrader Open APIって何?
MQLerにわかりやすく説明すると...
MT4/MT5の世界で例えると:
| MT4/MT5 | cTrader |
|---|---|
| EA(Expert Advisor) | cBot |
| MQL4/MQL5 | C#(cAlgo) or Python |
| MetaTrader内で動く | cTrader内で動く or 外部で動く |
ここで重要なのが「外部で動く」という選択肢!
cTraderには2つのAPIがあります:
1️⃣ cTrader Automate API(cAlgo)
- cTrader内部で動く
- C#またはPython(5.4以降)で記述
- cBotやインジケーターを作成
- MQLのEAに近いイメージ
2️⃣ cTrader Open API 👈 今回の主役!
- cTrader外部で動く
- Python、C#、Java、Go など何でもOK
- 自分のサーバーやPCから直接ブローカーに注文
- VPSで独自アプリを動かすイメージ
なぜOpen APIを選ぶのか?MQL経験者のメリット
🎯 Pythonが使える!
MQLを書いてきたあなたなら、きっとPythonも触ったことがあるはず。
# Pythonなら機械学習も簡単!import pandas as pdfrom sklearn.ensemble import RandomForestClassifier
# 過去データでモデル学習model = RandomForestClassifier()model.fit(X_train, y_train)
# 予測に基づいて売買if model.predict(current_data) == 1: # Open APIで買い注文! passMQLで機械学習を組み込もうとした時の苦労、覚えていますか?DLL地獄、文字コード問題...あれが全部解消されます!
🎯 cTraderを起動しなくていい!
Open APIなら、あなたのPythonスクリプトが直接ブローカーのサーバーと通信します。
つまり:
- cTraderアプリ不要
- VPSにPythonだけ入れればOK
- 24時間365日稼働も楽々
🎯 複数口座の一括管理
# 複数口座に同時発注for account in my_accounts: send_order(account, "EURUSD", "BUY", 0.01)1つのスクリプトで複数口座を管理。EAのマジックナンバー管理から解放されます!
環境構築:5分でセットアップ完了
Step 1: Pythonのインストール
Python 3.8以上が必要です。(3.12まで対応)
# Pythonバージョン確認python --versionStep 2: 公式SDKのインストール
pip install ctrader-open-apiこれだけ!Spotware公式のPython SDKがインストールされます。
📌 ポイント: このSDKはTwistedという非同期ライブラリを使っています。「非同期?難しそう...」と思うかもしれませんが、サンプルコードをコピペすれば動くので安心してください!
アプリケーション登録:これが最初の関門
なぜ登録が必要?
Open APIを使うには、Spotwareに「私はこういうアプリを作ります」と申請が必要です。
これはMQLにはなかった概念ですよね。でも考えてみてください:
- MQL → MetaTraderが仲介役
- Open API → あなたのアプリが直接ブローカーと通信
だから「このアプリは信頼できます」という証明が必要なんです。
登録手順
-
cTrader IDを作成
- https://id.ctrader.com/ にアクセス
- まだ持っていない人はアカウント作成
-
Open API Applicationsページへ
- ログイン後、設定 → Open API Applications
-
Add New Application をクリック
- アプリ名:好きな名前でOK(例:MyPythonBot)
- Redirect URI:とりあえず
https://example.com/callback - Scope:
trading(取引に必要)
-
申請後、24〜48時間待つ
- Spotwareが審査してアクティベート
- ステータスが「Active」になればOK!
Client IDとSecretを確認
アプリがActiveになったら:
- Applications一覧で「View」をクリック
- Client IDとClient Secretをメモ
# この情報を使って認証しますCLIENT_ID = "12345"CLIENT_SECRET = "abcdefghijklmnop"⚠️ 絶対に公開しないで! これが漏れると、あなたのアカウントで勝手に取引されてしまいます。
認証の仕組み:OAuth2を理解しよう
MQLにはなかった概念「認証」
MQLのEAは、MetaTraderにログインしていれば動きましたよね。
Open APIでは、あなたのアプリが「このユーザーの代わりに取引していいですよ」という許可を得る必要があります。
これがOAuth2認証です。
認証フローを簡単に説明
┌─────────────┐ ①認証URL表示 ┌─────────────┐│ あなたの │ ──────────────────> │ cTrader ││ アプリ │ │ 認証ページ │└─────────────┘ └─────────────┘ │ │ ②ユーザーが許可 ▼┌─────────────┐ ③コード取得 ┌─────────────┐│ あなたの │ <────────────────── │ リダイレクト ││ アプリ │ │ ページ │└─────────────┘ └─────────────┘ │ │ ④コードをトークンに交換 ▼┌─────────────┐│ アクセストークン ││ 取得完了! │└─────────────┘Playgroundで簡単テスト
開発中はPlaygroundを使えば、すぐにトークンが取得できます:
- Applications → Playgroundボタン
- スコープを選択
- 「Get token」をクリック
- アクセストークンとリフレッシュトークンが表示
これで即座にAPIテストができます!
⚠️ 注意: Playgroundで取得したトークンは開発・テスト専用です。本番運用では正式な認証フローを実装してください。
最初のコード:接続してみよう
ついにコードを書く時が来ました!
from ctrader_open_api import Client, Protobuf, TcpProtocol, Auth, EndPointsfrom ctrader_open_api.messages.OpenApiCommonMessages_pb2 import *from ctrader_open_api.messages.OpenApiMessages_pb2 import *from twisted.internet import reactor
# 認証情報CLIENT_ID = "あなたのClient ID"CLIENT_SECRET = "あなたのClient Secret"ACCESS_TOKEN = "Playgroundで取得したトークン"ACCOUNT_ID = "あなたのアカウントID" # cTraderで確認
# クライアント作成client = Client(EndPoints.PROTOBUF_LIVE_HOST, EndPoints.PROTOBUF_PORT, TcpProtocol)
def onConnected(client): print("🎉 接続成功!")
# アプリ認証 request = ProtoOAApplicationAuthReq() request.clientId = CLIENT_ID request.clientSecret = CLIENT_SECRET deferred = client.send(request) deferred.addCallback(onAppAuth)
def onAppAuth(result): print("✅ アプリ認証完了!")
# アカウント認証 request = ProtoOAAccountAuthReq() request.ctidTraderAccountId = int(ACCOUNT_ID) request.accessToken = ACCESS_TOKEN deferred = client.send(request) deferred.addCallback(onAccountAuth)
def onAccountAuth(result): print("✅ アカウント認証完了!") print("🚀 これでAPIが使えるようになりました!") reactor.stop()
def onError(failure): print(f"❌ エラー: {failure}") reactor.stop()
# 接続開始client.setConnectedCallback(onConnected)client.setDisconnectedCallback(lambda client, reason: print(f"切断: {reason}"))client.setMessageReceivedCallback(lambda client, msg: print(f"受信: {msg}"))client.startService()reactor.run()動かしてみると...
🎉 接続成功!✅ アプリ認証完了!✅ アカウント認証完了!🚀 これでAPIが使えるようになりました!おめでとうございます!これであなたもOpen APIユーザーです 🎊
MQLerのための用語対応表
| MQL用語 | Open API用語 | 説明 |
|---|---|---|
| OrderSend() | ProtoOANewOrderReq | 新規注文 |
| OrderClose() | ProtoOAClosePositionReq | 決済 |
| OrderModify() | ProtoOAAmendPositionSLTPReq | SL/TP変更 |
| AccountBalance() | ProtoOATrader.balance | 口座残高 |
| Symbol() | symbolId | 通貨ペアのID |
| Bid / Ask | ProtoOASpotEvent | リアルタイムレート |
デモ口座でテストしよう
本番で試す前に、必ずデモ口座でテストしてください!
デモ口座の準備
-
対応ブローカーでデモ口座を開設
- IC Markets
- Pepperstone
- FxPro
- など、cTrader対応ブローカー
-
cTrader IDにデモ口座を紐付け
-
Open APIでそのアカウントIDを使用
# デモ口座のIDを使うACCOUNT_ID = "12345678" # デモ口座のID次のステップ
この記事で学んだこと:
- ✅ Open APIとcAlgo(Automate API)の違い
- ✅ なぜPython × Open APIが最強なのか
- ✅ アプリケーション登録の方法
- ✅ OAuth2認証の仕組み
- ✅ 最初の接続コード
次の記事では、実際に価格データを取得してみましょう!リアルタイムでティックデータを受信する方法を解説します。
まとめ:MQLerからOpen APIerへ
MQLを書けるあなたなら、Open APIは必ず使いこなせます。
最初は「認証って何?Protobufって何?」と戸惑うかもしれません。でも、一度理解すれば、MQLでは到底できなかったことが可能になります。
- 機械学習と連携した売買ロジック
- Webアプリとの統合
- 複数口座の一元管理
- クラウドでの24時間稼働
さあ、新しい世界への扉を開きましょう!
あなたのトレーディングライフが、もっと自由になりますように 🚀
参考リンク
🎁おすすめツール・サービス
※上記リンクにはプロモーション(広告)が含まれています
量子相場謀略|ホソノP
ブログでは書けない本音のトレード戦略とEA開発の裏側を公開。 データに基づいた検証で、再現性のある手法だけをお届けします。