MetaTrader 5をPythonで操作して、ゴールデンクロスとデッドクロスを活用したトレード戦略を実現する方法の続きです。ここでは、移動平均線を使用してトレンドを判断し、そのトレンドに従った売買を行う基本的な考え方を説明します。
具体的には、ゴールデンクロスで買い、デッドクロスで利益確定する。デッドクロスで売り、ゴールデンクロスで利益確定する。という至極単純なものです。MAはFX分析の王道ですから、このロジックだけで勝てるかも?いやいや、なかなか難しいとは思いますが。
最初に、MetaTrader 5(以下MT5)を操作するのに必要なモジュールをインストールします。
import pandas as pd
Pandasをインストールしました。
続いて MT5の初期化
if not mt5.initialize():
print("MT5の初期化に失敗しました")
quit()
symbol = "USDJPY" # トレード対象のシンボル
timeframe = mt5.TIMEFRAME_H1 # 1時間足を使用
ここでは、initializeメソッドを使ってMT5と接続を確立します。トレード対象のシンボルとして「USDJPY」を選び、時間足を1時間足に設定しています。この設定はお好みで変更可能です。
次に、移動平均線を計算するために、ヒストリカルデータを取得する部分を説明します。これにより、移動平均線を用いたクロスを検出する準備ができます。
# ヒストリカルデータの取得
def get_data(symbol, timeframe, num_bars):
rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, num_bars)
data = pd.DataFrame(rates)
data['time'] = pd.to_datetime(data['time'], unit='s') # 時間を人間が読める形式に変換
return data
この関数は、指定された期間のヒストリカルデータを取得してPandasデータフレームに変換します。num_barsには必要なバー数を指定してください。
移動平均線の計算とクロスの判定部分は次のようになります。
# 移動平均線の計算
def calculate_ma(data, period):
return data['close'].rolling(window=period).mean()
# クロスの判定
def check_cross(short_ma, long_ma):
if short_ma[-2] < long_ma[-2] and short_ma[-1] > long_ma[-1]:
return "golden_cross"
elif short_ma[-2] > long_ma[-2] and short_ma[-1] < long_ma[-1]:
return "dead_cross"
return None
ここでは、短期移動平均線と長期移動平均線を計算し、直近のデータを比較してクロスを判定します。ゴールデンクロス(買いシグナル)またはデッドクロス(売りシグナル)が発生したかどうかを判定するロジックを簡潔に記述しています。
次に、ポジションを開いたり閉じたりするためのコードを以下のように書きます。
# 注文の送信(部分記載)
def place_order(order_type, symbol, lot_size):
price = mt5.symbol_info_tick(symbol).ask if order_type == mt5.ORDER_TYPE_BUY else mt5.symbol_info_tick(symbol).bid
# 注文送信のコード
pass
# ポジションのクローズ(部分記載)
def close_positions(symbol, position_type):
# 既存ポジションをクローズするコード
pass
最後に、プログラム全体を動かすループ処理を以下のように記述します。
# メインループ(部分記載)
while True:
data = get_data(symbol, timeframe, 300)
short_ma = calculate_ma(data, 50)
long_ma = calculate_ma(data, 200)
cross = check_cross(short_ma, long_ma)
if cross == "golden_cross":
# 買いポジションを開き、売りポジションをクローズ
pass
elif cross == "dead_cross":
# 売りポジションを開き、買いポジションをクローズ
pass
time.sleep(60)
以上です。環境に依存する部分については誤解防止のため記載していません。トレード手法としては単純すぎるロジックですが、なんとなくMT5で試してみたくなりませんか?自分でトレードするのは大変ですが、Pythonにやってもらうのなら物は試しとばかりに、このロジックの性能をテストしてみたくなりますね。