まえがき
こんにちは、さつま芋です。
昨日のデモトレードは運よく1勝できました。
期待値でトレードしているので1回1回の勝負に大した意味はありませんが、取引の一部を紹介します。
単調なトレード
今回のトレードは過去検証した結果に則っているだけなので、作業としては単純です。
先週末に平均変化量を調べておき、当日はポジションサイズを計算してからエントリーしただけです。
ちなみに許容損失は資金の約1%としています。
検証の結果によると、月曜朝8時の始値から上昇する場合は約60銭、下落する場合は約40銭だったので、0.25ロット(2万5千通貨)としました。
library(dplyr)
library(tidyr)
# Read the data
df <- read.csv("USDJPY60.csv", header = FALSE)# Change the column names
colnames(df) <- c("Date", "Time", "Open", "High", "Low", "Close", "Volume")# Load the lubridate library
library(lubridate)# Combine the date and time columns and create a new "DateTime" column
df$DateTime <- as.POSIXct(paste(df$Date, df$Time), format="%Y.%m.%d %H:%M", tz="Etc/GMT")df <- df[between(df$DateTime, as.POSIXct(Sys.Date()-200), as.POSIXct(Sys.Date())), ]
# Remove unnecessary columns
df <- df[, c("DateTime", "Open", "High", "Low", "Close", "Volume")]# Adjust the data to Japan time
df$DateTime <- with_tz(df$DateTime, "Etc/GMT-6")
Sys.setlocale("LC_TIME", "C")
df$weekday <- format(df$DateTime, format="%a")
df$weekday <- factor(df$weekday, levels = c("Mon", "Tue", "Wed", "Thu", "Fri","Sat"))
# Create a column for the time of day
df$Time <- format(df$DateTime, format="%H")
# 引数に時間帯を指定する関数
my_func <- function(time) {
# 指定した時間帯のデータを抽出
df_ <- df[df$Time == time,]
# Change列を作成
df_$Change <- lead(df_$Open) - df_$Open
# グラフを作成
# plot(cumsum(df_$Change), type="l")
# plot(cumsum(ifelse(df_$weekday%in%c("Mon","Tue","Fri"),df_$Change,-1*df_$Change)), type="l")
# plot(cumsum(ifelse(df_$Change>0,1,-1)), type="l",col="blue")
# plot(cumsum(ifelse(df_$weekday%in%c("Mon","Tue","Fri"),ifelse(df_$Change>0,1,-1),ifelse(df_$Change<0,1,-1))), type="l",col="blue")
# Change列の符号別に集計
df_ %>%
drop_na(Change) %>%
filter(weekday==format(Sys.Date(),"%a")) %>%
# filter(weekday=="Wed") %>%
group_by(weekday) %>%
mutate(positive = sum(Change>0)) %>%
mutate(negative = sum(Change<0)) %>%
mutate(positive_mean = mean(Change[Change>0])) %>%
mutate(negative_mean = mean(Change[Change<0])) %>%
mutate(prod = positive * positive_mean + negative * negative_mean) %>%
summarise(
count_sum=sum(sign(Change), na.rm = TRUE),
# positive=sum(sign(Change)>0, na.rm = TRUE),
# negative=sum(sign(Change)<0, na.rm = TRUE),
expected_value = mean(prod, na.rm = TRUE),
positive_change=mean(Change[Change>0], na.rm = TRUE),
negative_change=mean(Change[Change<0], na.rm = TRUE),
) -> result # 戻り値としてresultを返す
return(result)
}
# timeの範囲をベクトルとして定義
time_range <- sprintf("%02d", 8:23)
# lapplyでtime_rangeの各要素に対してmy_funcを実行
result_list <- lapply(time_range, my_func)
names(result_list) <- time_range
# result_listの中身を表示
results <- bind_rows(result_list, .id = "JST")
print(results)
あとがき
集計結果に従ってトレードしているだけなので、後は運次第です。
デモの取引履歴を見たい人がいるならば継続的に投稿しても構いませんが、そういう需要はあるのでしょうか…
以上、さつま芋でした。