2016-12-21 10 views
0

В книге «Clojure финансов» Я нашел такую ​​функцию, что:Объясните, как эта функция stochastik работает

(defn stochastic-k [last-price low-price high-price] 
    (let [hlrange (- high-price low-price) 
     hlmidpoint (/ hlrange 2) 
     numerator (if (> last-price hlmidpoint) 
        (- last-price hlmidpoint) 
        (- hlmidpoint low-price))] 
    (/ numerator hlrange))) 

Автор описывает его как:

стохастической-K: Это дает нам наш процент движения цены по высокой/низкой цене.

(Quote и код от "Clojure for Finance", Тимоти Вашингтон)

Я попробовал функцию в REPL, но вывод не имеет смысла для меня:

user=> (println (stochastic-k 18 13 23)) 
13/10 

Итак, результат 1.3, но я бы действительно ожидал 1.0, потому что 18 - это средняя точка диапазона от 13 до 23, насколько я могу судить.

Может ли кто-нибудь объяснить мне, как должна функционировать функция?

+0

Я думаю, что это либо опечатка, либо ошибка. Расчет не соответствует определению 'стохастик-k' –

+0

@AlanThompson. Я так думаю, говоря о' стохастик-к', я думаю, что автор хотел реализовать это? https://en.wikipedia.org/wiki/Stochastic_oscillator – Max

ответ

1

По моему мнению, ошибка в реализации. Я думаю, что числитель должен быть как:

numerator (if (> last-price hlmidpoint) 
        (- last-price hlmidpoint) 
        (- hlmidpoint last-price)) 

И тогда функция будет производить фракцию, представляющую сколько делает last-price отличается от средней цены в диапазоне.

+0

Есть ли какая-либо документация о функциях, которые автор пытался реализовать? Я до сих пор не понимаю, как интерпретировать выход. – Max

+1

@Max Я считаю, что это одно: http://www.tradingsolutions.com/functions/StochasticOscillator.html Однако я не эксперт, и хотя это кажется очень простым интуитивно, я нахожу терминологию несколько запутанной. –

+0

Спасибо, я уже думал о том, что реализация неверна, поскольку результат не имеет смысла. К сожалению, это не единственная ошибка в примерах кода книг, есть некоторые очень очевидные синтаксические ошибки. – Max