Наивное прогнозирование рынка Forex

В предыдущем эксперименте я провел прогнозирование ВРСБ на основе НМП. Результаты получились ожидаемыми – точность прогноза 50 на 50. То есть в 50 % случаев прогноз верен. Как-бы «абсолютно» случаен. А теперь посмотрим, как НМП будет вести себя на реальных данных валютного рынка и насколько похожи эти данные на ВРСБ.

«Похожесть» будем определять по среднему значению показателя PL для различных валютных пар. Если его значение будет близким к 50% — значит валютный рынок сродни ВРСБ. «Сродни» — ещё не значит, что валютный рынок – это случайное блуждание. Эксперимент этого не докажет, но некоторый критерий уже появится.

И так, вот полученные данные по 20 часовым котировкам, где НМП протестирована на 100 последних ретроспективных значениях каждого ВР:

ВР AUD/CAD AUD/CHF AUD/JPY AUD/NZD AUD/USD CAD/CHF EUR/AUD EUR/CAD EUR/CHF EUR/GBP
PL 57 61 69 51 60 55 55 58 56 59
PM 43 39 31 49 40 45 45 42 44 41

 

ВР
EUR/JPY
EUR/NZD
EUR/USD
GBP/JPY
GBP/USD
NZD/JPY
NZD/USD
USD/CAD
USD/CHF
USD/JPY
PL
50
55
55
52
49
53
60
52
57
57
PM
50
45
45
48
51
47
40
48
43
43

 

Оценки среднего значения показателя PL и PM следующие: PL=56.05%, а PM=43.95%.

Что интересно, так это то, что даже НМП дает точность прогноза в среднем равную 56.05%. Это уже отлично от ВРСБ. И уже можно задуматься о том, что какая-то более сложная МП будет демонстрировать лучшую точность. А может быть не стоит городить огород с какой-то другой моделью? Ведь в 56.05% случаев мы уже имеем профит. Но тут возникает вопрос в торговой стратегии. Какие и где выставлять стоп-лоссы, чтобы, не смотря на тот факт, что точность больше 50%, получать профит, а не суммарный общий убыток… вопросы торговой стратегии, я отложу до лучших времен. А сейчас основная задача – найти лучшую МП (в смысле наиболее точную и стабильную) для порогового прогнозирования.

В заключение небольшой скрипт для оценки показателей PL.

#Данные НДП
R<-read.csv("eu.csv",header=FALSE,sep=",", 
col.names=c("Date","Time","Open","Hi","Low","Close","Vol"),
dec=".",colClasses=c(NA,NA,"double","double","double","double","double"))
DH<-as.vector(unlist((R['Hi'])))
DL<-as.vector(unlist((R['Low'])))
D<-(DH+DL)/2
lenD<-length(D)
#Нормировка выборки
nrmV2<-function(V,a)
{
lenV<-length(V)
if(lenV<=0) {return(V)}
return ( a*V/max(abs(V)) )
}
#Конвертация методом разностей
conV<-function(V)
{
lenV<-length(V)
if (lenV<2) {return (V)}
return((V[-1]-V[-lenV]))
}
#НМП
getFVM1<-function(V)
{
if(is.null(V)) {return(V)} #проверка, что выборка содержит хоть одно значение
return(V[length(V)])
}
#Функция тестирования
tstPM<-function(V,ti)
{
res<-NULL
lenV<-length(V)
#Проверка на ошибку. Объём остаточной выборки должен в 1,5 раза превышать тестовый интервал
if (lenV<(1.5*ti)) {cat("Недостаточный объём выборки для тестирования!"); return(res)}
pl<-0
d<-0
for(i in ti:1)
{
   pr<-getFVM1(V[1:(lenV-i)])
   rv<-V[(lenV-i+1)]
  if (((rv>d) && (pr>d)) ||
       ((rv<=d) && (pr<=d)))
   {pl<-pl+1}
   res<-rbind.data.frame(res,cbind(rv,pr,100*pl/ti))
}
return(res)
}
#Основная часть программы
D<-nrmV2(conV(D),0.9)
res<-tstPM(D,100)
pl<-res[nrow(res),3]
print(pl)
print(100-pl)

Похожие статьи:

3 комментария к статье “Наивное прогнозирование рынка Forex

  1. Почитал немного ваши записи, очень хороший подход к анализу, сам только начинаю свое дело в этом направлении, скажите а вот по вашей формале образования катировок( со случайным числом) , можно ли сделать обратную формулу что бы из реального графика ( данных катировок) , получать это самое случайное число, сделать график из случайного числа в каждую единицу времени и анализировать уже эти данные, как вы считаете будет от этого толк?

    1. Добрый день, Евгений.
      Благодарю Вас за положительную оценку моих изысканий в сфере анализа и прогнозирования Forex. Подход основывается на строго математических расчетах и последних достижениях в сфере моделирования и прогнозирования. Впереди ещё большая работа и нужно до конца показать какая модель лучше, какие результаты и за тем уже двигаться дальше… А результаты есть. Не хватает времени их описать. Ваш вопрос я не до конца понял. Но постараюсь ответить так, как понял. Вы имеете ввиду под «формулой образования котировок со случайным числом» генерацию временного ряда случайных блужданий на основе псевдослучайного генератора чисел? Он генерируется просто. К предыдущему числу прибавляем вновь сгенерированное. В реальных котировках взяв конечные разности первого порядка мы получим это самое случайное число, но уже по реальным данным. Именно разности котировок, прежде всего и подлежат анализу. Вы на правильном пути. Смысл есть прямой. Результаты анализа помогают построить модели. У меня это все есть в обязательном порядке. Но, возможно, я понял Вас не совсем корректно…спрашивайте, если интересно.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *