億稼ぎFXラボ

このサイトは自動売買システムを開発しながらFXで確実に収入を得るためのブログです

PythonでMAトレードをする(続編)

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にやってもらうのなら物は試しとばかりに、このロジックの性能をテストしてみたくなりますね。