まえがき
こんにちは、さつま芋です。
とある投資歴10年以上の人が、【FXで資産100倍にしたやり方】という動画を出していました。
かなり過激なタイトルなので、FXジョークなのかも知れませんが…
今回もスキャルピングの難しさをバックテストの結果から考えてみます。
最初に断っておきますが、当記事はFXを勧めるものではありません。
バックテスト
ドル円の平均足(5分)の転換確定でエントリーし、利確幅と損切り幅を変数としたバックテストをしました。
検証期間は2023年4月分のデータを使い、取引量は1000通貨に固定しました。
機械的にトレードした場合の最終収支をヒートマップで図示します。
損切りも利確も5pipsから20pipsまで総当たりでバックテストしています。
調べた範囲で言えば、ドル円4月の最適解は損切りも利確も共に20pipsです。
このとき、86勝69敗で勝率56.3%でした。
まぁ、FXで20pipsという値幅はスキャルピングというよりデイトレードですけど…
ちなみに、2023年3月分のデータを使うと、次のように赤一色です。
残念ながら、ドル円の3月には最適解なし。
商材屋や研修屋は「勝ち」のイメージを歪曲しますが、実際は「辛勝」できるかどうかだと思います。
あとがき
今回のバックテストでは1pipのスプレッドを考慮しています。
スリッページも含めれば1pipは妥当なスプレッドだと思います。
【FX雑談】スプレッドの影響をRで視覚化 - さつま芋の勉強日記 (hatenablog.com)
trading_strategy <- function(SL,TP) {
# Initialize variables
SL <- SL/100
TP <- TP/100
entry_price <- NA
position <- 0
fx_xts_M5$Position <- NA
profit <- 0
for (i in 2:nrow(fx_xts_M5)) {
if (position == 0) {
if (as.numeric(fx_xts_M5$ha_close[i]) > as.numeric(fx_xts_M5$ha_open[i]) &
as.numeric(fx_xts_M5$ha_close[i-1]) < as.numeric(fx_xts_M5$ha_open[i-1]) ) {
entry_price <- as.numeric(fx_xts_M5$close[i])
position <- 1
fx_xts_M5$Position[i] <- 1
} else if (as.numeric(fx_xts_M5$ha_close[i]) < as.numeric(fx_xts_M5$ha_open[i]) &
as.numeric(fx_xts_M5$ha_close[i-1]) > as.numeric(fx_xts_M5$ha_open[i-1]) ) {
entry_price <- as.numeric(fx_xts_M5$close[i])
position <- -1
fx_xts_M5$Position[i] <- -1
}
} else if (position == 1) {
if (as.numeric(fx_xts_M5$ha_low[i]) - entry_price < -SL) {
position <- 0
profit[i] <- -SL*1000-10
entry_price <- NA
} else if (as.numeric(fx_xts_M5$ha_high[i]) - entry_price > TP) {
position <- 0
profit[i] <- TP*1000-10
entry_price <- NA
}
} else if (position == -1) {
if (as.numeric(fx_xts_M5$ha_high[i]) - entry_price > SL) {
position <- 0
profit[i] <- -SL*1000-10
entry_price <- NA
} else if (as.numeric(fx_xts_M5$ha_low[i]) - entry_price < -TP) {
position <- 0
profit[i] <- TP*1000-10
entry_price <- NA
}
}
cumsumprofit <- sum(na.omit(profit))
}
return(cumsumprofit)
}
library(ggplot2)
# Create a data frame with the values of SL and TP
df <- data.frame(SL = seq(5, 20, 5), TP = seq(5, 20, 5))
# Create a data frame with the heatmap values
heatmap.df <- data.frame(SL = rep(df$SL, each = length(df$TP)),
TP = rep(df$TP, length(df$SL)),
Profit = apply(expand.grid(df$SL, df$TP), 1, function(x) trading_strategy(x[1], x[2])))# Create the heatmap
ggplot(heatmap.df, aes(x = TP, y = SL)) +
geom_tile(aes(fill = Profit), colour = "white") +
scale_fill_gradient2(low = "pink",mid = "white", high = "dodgerblue") +
geom_text(aes(label = round(Profit, 2)),size=5) +
theme_minimal() +
labs(x = "TP", y = "SL")
次回の記事では、資産100倍にする試算を行ったので、興味がある人は次週も訪問してくださると幸いです。
以上、さつま芋でした。