Я пришел через функцию графического кумулятивного возврата стратегии и пиков возврата в великолепном примере объединения блестящих и квантратов, благодаря Симону Отзигеру. Исходный код: here. Код отлично работает отлично, но для некоторых данных он не будет правильно отображать пики.volemont/insights: chart.EquityCurve.R: ошибка в графических пиках кумулятивного возврата?
Код упрощен, но логика ключа не изменяется. Я запустил код с тремя наборами данных (cumPNL1, cumPNL2, cumPNL3), скопированными из трех примеров стратегий, в которых первые данные приведут к тому, что код не сможет правильно отобразить пики графика.
Я выполнил следующие коды с помощью cumPNL1, cumPNL2, cumPNL3 отдельно. как с cumPNL2, так и cumPNL3, код может успешно выполнять кумулятивную линию возврата и пиковые точки. однако с помощью cumPNL1 код может производить только линию, но пики не находятся в правильных положениях.
Я заметил, что оба метода peakIndex на основе cumPNL2 и cumPNL3 имеют первое значение TRUE, поэтому, когда я меняю код, добавляя строку peakIndex[1] <- TRUE
, cumPNL1 отлично работает с измененным кодом.
Хотя теперь он работает с измененным кодом, я понятия не имею, почему он ведет себя так. Может ли кто-нибудь взглянуть? Благодаря
cumPNL1 <- c(-193,-345,-406,-472,-562,-543,-450,-460,-544,-659,-581,-342,-384,276,-858,-257.99)
cumPNL2 <- c(35.64,4.95,-2.97,-6.93,11.88,-19.8,-26.73,-39.6,-49.5,-50.49,-51.48,-48.51,-50.49,-55.44,143.55,770.22,745.47,691.02,847.44,1141.47,1007.82,1392.93,1855.26,1863.18,2536.38,2778.93,2811.6,2859.12,2417.58)
cumPNL3 <- c(35.64,4.95,-2.97,-6.93,11.88,-19.8,-26.73,-39.6,-49.5,-50.49,-51.48,-48.51,-50.49,-55.44,143.55,770.22,745.47,691.02,847.44,1141.47,1007.82,1392.93,1855.26,1863.18,2536.38,2778.93,2811.6,2859.12,2417.58)
peakIndex <- c(cumPNL3[1] > 0, diff(cummax(cumPNL3)) > 0)
# peakIndex[1] <- TRUE
dev.new()
plot(cumPNL3, type='n', xlab="index of trades", ylab="returns in cash", main="cumulative returns and peaks")
grid()
lines(cumPNL3)
points(cbind(1 : length(cumPNL3), cumPNL3)[peakIndex, ],
pch=19, col='green', cex=0.6)
legend(
x='bottomright', inset=0.1,
legend=c('Net Profit','Peaks'),
lty=c(1, NA), pch=c(NA, 19),
col=c('black','green')
)