#03 DukascopyのデータをMT4に移植する
FX
2025年10月9日:記
DukascopyのデータをPythonで変換する
さて、Dukascopy のヒストリカルデータを MT4 からダウンロードしたヒストリカルデータのフォーマットに合わせて、Python で変換しますよぅ!
以下が、Python のソースです。
import pandas as pd
def convert_dukascopy_to_mt4(input_file, output_file):
"""
DukascopyのデータフォーマットをMT4に変換する関数
"""
try:
# ヘッダーなし、区切り文字がカンマのCSVファイルを読み込む
df = pd.read_csv(
input_file,
header=None,
names=['datetime', 'open', 'high', 'low', 'close', 'volume'],
dtype={'datetime': str, 'open': str, 'high': str, 'low': str, 'close': str, 'volume': str},
on_bad_lines='skip'
)
# datetime列から日付と時刻を分離
dt_split = df['datetime'].str.split(' ', expand=True)
df['date'] = dt_split.iloc[:, 0]
df['time'] = dt_split.iloc[:, 1].str.slice(stop=5)
# 日付のフォーマットを dd.mm.yyyy から yyyy.mm.dd に変換
df['date'] = pd.to_datetime(df['date'], format='%d.%m.%Y').dt.strftime('%Y.%m.%d')
# 出来高の小数点以下を切り捨てる (より頑強な方法)
df['volume'] = pd.to_numeric(df['volume'], errors='coerce').fillna(0).astype(int)
# MT4のフォーマットに合わせて列を並び替える
df = df[['date', 'time', 'open', 'high', 'low', 'close', 'volume']]
# 新しいCSVファイルとして保存する
df.to_csv(output_file, index=False, header=False, encoding='utf-8')
print(f"変換完了: 新しいファイル {output_file} を作成しました。")
except FileNotFoundError:
print(f"エラー: ファイルが見つかりません。パスを確認してください: {input_file}")
except Exception as e:
print(f"エラーが発生しました: {e}")
# ファイル名を設定
input_file_name = "入力ファイル名前.csv"
output_file_name = "出力ファイル名前.csv"
# 関数を実行
convert_dukascopy_to_mt4(input_file_name, output_file_name)
うまくいきましたぁ! \(°∀°)/
・・・って、3回くらい失敗して、ソースを書き直したんですがね。(^_^;)
MT4 にインポートします
■ MT4 を起動し、アカウントとの接続を
切ります。
Mt4 にヒストリカルデータを更新されない
為です。
■ メニューバーから「ツール」→
「ヒストリーセンター」を開きます。
■ 左側のツリーから USDJPY を選択し、
1時間足(H1)を選択します。
■ 「インポート」ボタンをクリックし、
変換した1時間足の CSV ファイルを選択して
「OK」をクリックします。
■ 同様に、日足(D1)も選択し、変換した日足の
CSV ファイルをインポートします。
■ MT4 を再起動します。
(アカウントにログインしない!)
MT4 でオフラインチャートを開く
■ MT4 が完全にオフラインの状態であること
を確認します。
■ MT4 のメニューバーから「ファイル」を
クリックします。
■ ドロップダウンメニューから
「オフラインチャート」を選択します。
表示されたリストの中に、先ほどインポートした USDJPY の H1 と Daily が入っていました♪ (ˊᗜˋ)
その理由は、MT4 が私のインポートした CSV ファイルを自動的に読み込み、.hst ファイルに変換したからです。
やれやれ・・・やっとここまで来たよ……
次回:
「なんちゃって EA」を走らせて、バックテストに挑戦します!
・・・・・・・・・たぶん…(^▽^;)
×![]()
よろしいですか?