ナンピンマーチンの通貨ペアはAUDCADとXAUUSDと、どちらが良いのか?
ナンピンマーチンはもうすでにご存知のように一定期間は無敵の手法です。
どの通貨ペアを選択すればいいかを考えてみます。
事前にTwitterで調査したところ、
- AUDCAD
- XAUUSD
- その他なんでもヨシ
とのことです。
日足チャートの値動き率でボラティリティを確認する
Trading Viewの日足チャートの値動き率ご覧ください。
紫 USDJPY
水 XAUUSD
黄 AUDCAD
オレンジ AUDNZD
見えてるレンジでオレンジの線が一番値動きがおとなしいです。
では オレンジ色の通貨ペア「AUDCAD」が最良なのでしょうか?
これはどうですか?
これを見ると水色の「XAUUSD」が良さそうに見えます。
でもちょっとズラすと
やっぱりオレンジ色の「AUDCAD」が良さそうに見えます。
さらに離れた視点でみると
やはりオレンジ色こそ最高!
でも2016-2021だと
紫が最高!?
1995-2023なら?
やはりオレンジ色の「AUDCAD」が最高!
スプレッドを調査
スプレッドの出現回数をヒストグラムで表示できる便利コードです。
1分足を10000個(約7日分)取得して出現率を見てみます。
import pandas as pd
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
# MT5への接続
mt5.initialize()
# シンボルと時間足の設定
symbol = "USDJPYm"
timeframe = mt5.TIMEFRAME_M1
# データの取得
rates = mt5.copy_rates_from_pos(symbol, timeframe, 0, 10000)
# データフレームへの変換
df = pd.DataFrame(rates)
df["time"] = pd.to_datetime(df["time"], unit="s") + pd.DateOffset(hours=3) # 時間をUNIXタイムスタンプから変換し、9時間を加算
# ヒストグラムの作成
plt.hist(df["spread"], bins=10)
# ヒストグラムの装飾
plt.title(f"Spread Distribution ({symbol})")
plt.xlabel("Spread")
plt.ylabel("Frequency")
# 最大spreadの位置を取得
max_spread = df["spread"].max()
max_spread_index = df["spread"].idxmax()
# 最小spreadの位置を取得
min_spread = df["spread"].min()
min_spread_index = df["spread"].idxmin()
# 最大spreadの位置にラベルを追加
plt.annotate(f"Max: {max_spread}", xy=(max_spread, 0), xytext=(max_spread, 50),
arrowprops=dict(facecolor='red', arrowstyle='->'))
# 最小spreadの位置にラベルを追加
plt.annotate(f"Min: {min_spread}", xy=(min_spread, 0), xytext=(min_spread, 50),
arrowprops=dict(facecolor='blue', arrowstyle='->'))
# ヒストグラムの表示
plt.show()
# 出現回数とその値のテーブルの作成
spread_counts = df["spread"].value_counts().reset_index()
spread_counts.columns = ["Spread", "Count"]
spread_counts = spread_counts.sort_values("Spread")
# 上位3つの行のみを表示する
top_spread_counts = spread_counts.head(3)
print(top_spread_counts)
スプレッドと価格の比率をみる
import pandas as pd
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
# MT5への接続
mt5.initialize()
# シンボルの設定
symbols = ["AUDCADm", "AUDNZDm", "USDJPYm", "XAUUSDm"]
# データの取得
data = []
for symbol in symbols:
# 現在のクローズ価格の取得
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_M1, 0, 500)
close_price = rates[400]['close']
# スプレッドの取得
spread = rates[400]['spread']
point = mt5.symbol_info(symbol).point
spread = spread * point
print(symbol," ",close_price," ",spread)
# スプレッドと現在のクローズ価格の比率を計算
ratio = spread / close_price
data.append({'Symbol': symbol, 'Spread/Close Ratio': ratio})
# データフレームへの変換
df = pd.DataFrame(data)
# 棒グラフの作成
plt.bar(df['Symbol'], df['Spread/Close Ratio'])
# 軸ラベルとタイトルの設定
plt.xlabel('Symbol')
plt.ylabel('Spread/Close Ratio')
plt.title('Spread/Close Ratio Comparison')
# グラフの表示
plt.show()
コストを見るとAUDCADは高いですね。ドル円の3倍ぐらいありますね。
ボラティリティが高ければスプレッド関係なくね?
1日のボラティリティを調べる
日足の高値と安値の幅が一日の最大ボラティリティでどのくらい動くかをみてみよう。
import pandas as pd
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
# MT5への接続
mt5.initialize()
# シンボルと時間足の設定
symbol = "XAUUSDm"
timeframe = mt5.TIMEFRAME_D1
# データの取得
rates = mt5.copy_rates_from(symbol, timeframe, pd.Timestamp.today(), 365)
# データフレームへの変換
df = pd.DataFrame(rates)
df["time"] = pd.to_datetime(df["time"], unit="s")
# 値幅率の計算
df["range_percentage"] = (df["high"] - df["low"]) / df["low"] * 100
# グラフの作成
plt.plot(df["time"], df["range_percentage"])
# 軸ラベルとタイトルの設定
plt.xlabel("Date")
plt.ylabel("Range Percentage (%)")
plt.title("XAUUSDm Daily Range Percentage")
# グラフの表示
plt.show()
見づらいのでヒストグラムで出現回数を表示してみます
import pandas as pd
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
# MT5への接続
mt5.initialize()
# シンボルと時間足の設定
symbol = "XAUUSDm"
timeframe = mt5.TIMEFRAME_D1
# データの取得
rates = mt5.copy_rates_from(symbol, timeframe, pd.Timestamp.today(), 365)
# データフレームへの変換
df = pd.DataFrame(rates)
df["time"] = pd.to_datetime(df["time"], unit="s")
# 値幅率の計算
df["range_percentage"] = (df["high"] - df["low"]) / df["low"] * 100
# ヒストグラムの作成
plt.hist(df["range_percentage"], bins=20)
# ヒストグラムの装飾
plt.title("XAUUSDm Daily Range Percentage")
plt.xlabel("Range Percentage (%)")
plt.ylabel("Frequency")
# グラフの表示
plt.show()
ループして比較する
import pandas as pd
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
# MT5への接続
mt5.initialize()
# シンボルの設定
symbols = ["AUDCADm", "AUDNZDm", "USDJPYm", "XAUUSDm", "GBPUSDm", "EURUSDm"]
# ヒストグラムの表示
for symbol in symbols:
# データの取得
rates = mt5.copy_rates_from(symbol, mt5.TIMEFRAME_D1, pd.Timestamp.today(), 365)
# データフレームへの変換
df = pd.DataFrame(rates)
df["time"] = pd.to_datetime(df["time"], unit="s")
# 値幅率の計算
df["range_percentage"] = (df["high"] - df["low"]) / df["low"] * 100
# ヒストグラムの作成
plt.hist(df["range_percentage"], bins=20)
# ヒストグラムの装飾
plt.title(f"{symbol} Daily Range Percentage")
plt.xlabel("Range Percentage (%)")
plt.ylabel("Frequency")
# グラフの表示
plt.show()
AUDCAD、AUDNZDは2%を超えない
他はまれに5%のボラティリティが発生する。
AUDNZDは分布が綺麗なので安定しやすいです。微動だにしない。
ここが本日一番大事なところです。
通貨ペアで値幅の出現確率がかなり違います。
重ねて比較してみる
import pandas as pd
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
# MT5への接続
mt5.initialize()
# シンボルの設定
symbols = ["AUDCADm", "AUDNZDm", "USDJPYm", "XAUUSDm", "GBPUSDm", "EURUSDm"]
# ヒストグラムの表示
plt.figure(figsize=(10, 6)) # グラフのサイズを設定
for symbol in symbols:
# データの取得
rates = mt5.copy_rates_from(symbol, mt5.TIMEFRAME_D1, pd.Timestamp.today(), 365)
# データフレームへの変換
df = pd.DataFrame(rates)
df["time"] = pd.to_datetime(df["time"], unit="s")
# 値幅率の計算
df["range_percentage"] = (df["high"] - df["low"]) / df["low"] * 100
# ヒストグラムの作成
plt.hist(df["range_percentage"], bins=20, range=(0, 6), alpha=0.5, label=symbol, stacked=True)
# ヒストグラムの装飾
plt.title("Daily Range Percentage Comparison")
plt.xlabel("Range Percentage (%)")
plt.ylabel("Frequency")
plt.legend()
# グラフの表示
plt.show()
これは何が見えますか?
ナンピンマーチンは逆張りなのでロングテールのある通貨ペアではたまにくる大きな値動きで破綻する可能性があります。
ロングテールの発生している
- GBPUSD
- USDJPY
この通貨ペアはナンピンマーチンは向かないと思われます。
値幅率の平均値を比較する
import pandas as pd
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
# MT5への接続
mt5.initialize()
# シンボルの設定
symbols = ["AUDCADm", "AUDNZDm", "USDJPYm", "XAUUSDm", "GBPUSDm", "EURUSDm"]
# 平均値の計算
mean_values = []
for symbol in symbols:
# データの取得
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_D1, 0, 365)
# データフレームへの変換
df = pd.DataFrame(rates)
# 値幅率の計算
df["range_percentage"] = (df["high"] - df["low"]) / df["low"] * 100
# 平均値の計算
mean = df["range_percentage"].mean()
mean_values.append(mean)
# 棒グラフの作成
plt.figure(figsize=(10, 6)) # グラフのサイズを設定
plt.bar(symbols, mean_values)
# 軸ラベルとタイトルの設定
plt.xlabel('Symbol')
plt.ylabel('Average Range Percentage (%)')
plt.title('Average Range Percentage Comparison')
# グラフの表示
plt.show()
こっちは中央値
import pandas as pd
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
# MT5への接続
mt5.initialize()
# シンボルの設定
symbols = ["AUDCADm", "AUDNZDm", "USDJPYm", "XAUUSDm", "GBPUSDm", "EURUSDm"]
# 中央値の計算
median_values = []
for symbol in symbols:
# データの取得
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_D1, 0, 365)
# データフレームへの変換
df = pd.DataFrame(rates)
# 値幅率の計算
df["range_percentage"] = (df["high"] - df["low"]) / df["low"] * 100
# 中央値の計算
median = df["range_percentage"].median()
median_values.append(median)
# 棒グラフの作成
plt.figure(figsize=(10, 6)) # グラフのサイズを設定
plt.bar(symbols, median_values, color='orange') # オレンジ色で設定
# 軸ラベルとタイトルの設定
plt.xlabel('Symbol')
plt.ylabel('Median Range Percentage (%)')
plt.title('Median Range Percentage Comparison')
# グラフの表示
plt.show()
デイトレならリスク・利益が高まるのはXAUUSDで
AUDNZDは値幅が小さいので大きく損はしない。
スプレッドのお得率
値動きとスプレッドの割合を出すとお得率を算出可能です。
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
# MT5への接続
mt5.initialize()
# シンボルの設定
symbol = "XAUUSDm"
# スプレッドの取得
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_M1, 0, 600)
spread = rates[500]['spread']
point = mt5.symbol_info(symbol).point
spread = spread * point
print(spread)
# 一日の変動値幅の平均の計算
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_D1, 0, 365)
df = pd.DataFrame(rates)
df["range"] = df["high"] - df["low"]
average_range = df["range"].mean()
print(average_range)
# スプレッドの比率固定値と一日の変動値幅の平均の割合の計算
spread_to_range_ratio = spread / average_range
# ラベル
labels = ['Spread Ratio', 'Average Range Ratio']
# 割合
ratios = [spread / average_range, 1]
# 円グラフの作成
plt.pie(ratios, labels=labels)
# グラフの表示
plt.title('XAUUSDm Spread Ratio')
plt.axis('equal') # アスペクト比を保持して円形に表示
plt.show()
import MetaTrader5 as mt5
import matplotlib.pyplot as plt
import numpy as np
# MT5への接続
mt5.initialize()
# シンボルの設定
symbols = ["AUDCADm", "AUDNZDm", "AUDMXNm","USDJPYm", "XAUUSDm", "GBPUSDm", "EURUSDm"]
# スプレッドの比率固定値の計算
spread_ratios = []
for symbol in symbols:
# スプレッドの取得
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_M1, 0, 600)
spread = rates[500]['spread']
point = mt5.symbol_info(symbol).point
spread = spread * point
# 一日の変動値幅の平均の計算
rates = mt5.copy_rates_from_pos(symbol, mt5.TIMEFRAME_D1, 0, 365)
df = pd.DataFrame(rates)
df["range"] = (df["high"] - df["low"])
average_range = df["range"].mean()
print(symbol,spread,"",average_range)
# スプレッドの比率固定値の計算
spread_ratio = spread / average_range
spread_ratios.append(spread_ratio)
# 棒グラフの作成
x = np.arange(len(symbols)) # x軸の位置を設定
width = 0.35 # 棒の幅を設定
fig, ax = plt.subplots(figsize=(10, 6))
rects = ax.bar(x, spread_ratios, width)
# 軸ラベルとタイトルの設定
ax.set_xlabel('Symbol')
ax.set_ylabel('Spread Ratio')
ax.set_title('Spread Ratio Comparison')
ax.set_xticks(x)
ax.set_xticklabels(symbols, rotation=45, ha='right')
# グラフの表示
plt.tight_layout()
plt.show()
比較対象のためAUDMXNいれてます。
お得率をみるとメジャーな通貨ペアは横並びでお得ですね。
現時点での考察
長期目線でみるとAUDCAD、スプレッドでみるとXAUUSDが良さそうにみえるんですが、皆さんはどう思いますか?
XAUUSDは程よいボラティリティでスプレッドのお得率もメジャー通貨ペア並です。
平均値動きはドル円とかと同じですがボラティリティで違ってくるのは分布ですね。
為替はたまにどーんと動くのですが、XAUUSDは1.5%ぐらいの動きが多いような気がします。
今言えることは、
- 通貨ペアで最大値幅の分布がかなり違う
- スプレッドはメジャー通貨ペアなら横並び
- コントロールしやすそうなのがAUDNZD
- 長期目線での生存しやすいのがAUDCAD
です。
現時点では長い目でみるとAUDCADの生存率が高いと思われるので、負けたくない人はAUDCAD
リスクをとるならXAUUSDが良さそうです。
USDJPYとGBPUSDは無しの方向でお願いします。
スプレッドと値動きの分布をみるとEURUSDも良さそうな気もします。
AUDNZDは分布がきれいなので自動売買にしやすいかも。
今回はここまでです。
お疲れ様でした。
記事が気に入ったらバッジください。
Discussion