Browse Source

Backtest++

stable
Denis Tereshkin 6 years ago
parent
commit
6880925a27
  1. 15
      src/ATrade/Driver/Backtest.hs
  2. 2
      src/ATrade/RoboCom/Indicators.hs

15
src/ATrade/Driver/Backtest.hs

@ -1,6 +1,8 @@
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-} {-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE RankNTypes #-} {-# LANGUAGE RankNTypes #-}
@ -16,7 +18,7 @@ import ATrade.Driver.Types (InitializationCallback,
import ATrade.Exceptions import ATrade.Exceptions
import ATrade.Quotes.Finam as QF import ATrade.Quotes.Finam as QF
import ATrade.RoboCom.Monad (Event (..), EventCallback, import ATrade.RoboCom.Monad (Event (..), EventCallback,
StrategyAction (..), MonadRobot (..), StrategyAction (..),
StrategyEnvironment (..), StrategyEnvironment (..),
appendToLog, runStrategyElement, st) appendToLog, runStrategyElement, st)
import ATrade.RoboCom.Positions import ATrade.RoboCom.Positions
@ -314,3 +316,14 @@ defaultBacktestState s c tickerList = BacktestState 0 s c (StrategyEnvironment "
newtype BacktestingMonad s c a = BacktestingMonad { unBacktestingMonad :: State (BacktestState s c) a } newtype BacktestingMonad s c a = BacktestingMonad { unBacktestingMonad :: State (BacktestState s c) a }
deriving (Functor, Applicative, Monad, MonadState (BacktestState s c)) deriving (Functor, Applicative, Monad, MonadState (BacktestState s c))
instance MonadRobot (BacktestingMonad s c) s c where
submitOrder order = undefined
cancelOrder oid = undefined
appendToLog txt = undefined
setupTimer time = undefined
enqueueIOAction actionId action = undefined
getConfig = undefined
getState = undefined
setState s = undefined
getEnvironment = undefined

2
src/ATrade/RoboCom/Indicators.hs

@ -40,7 +40,7 @@ cci period bars = (head tp - tpMean) / (0.015 * meanDev)
typicalPrice a b c = (a + b + c) / 3 typicalPrice a b c = (a + b + c) / 3
atr :: Int -> [Bar] -> Double atr :: Int -> [Bar] -> Double
atr period bars = case reverse (take (5 * period) trueranges) of atr period bars = case reverse (take (10 * period) trueranges) of
(firstValue:rest) -> foldl (\x y -> (x * (period' - 1) + y) / period') firstValue rest (firstValue:rest) -> foldl (\x y -> (x * (period' - 1) + y) / period') firstValue rest
_ -> 0 _ -> 0
where where

Loading…
Cancel
Save