diff --git a/src/ATrade/Driver/Backtest.hs b/src/ATrade/Driver/Backtest.hs index b88d08c..9565c24 100644 --- a/src/ATrade/Driver/Backtest.hs +++ b/src/ATrade/Driver/Backtest.hs @@ -1,6 +1,8 @@ {-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} +{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RankNTypes #-} @@ -16,7 +18,7 @@ import ATrade.Driver.Types (InitializationCallback, import ATrade.Exceptions import ATrade.Quotes.Finam as QF import ATrade.RoboCom.Monad (Event (..), EventCallback, - StrategyAction (..), + MonadRobot (..), StrategyAction (..), StrategyEnvironment (..), appendToLog, runStrategyElement, st) 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 } 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 + diff --git a/src/ATrade/RoboCom/Indicators.hs b/src/ATrade/RoboCom/Indicators.hs index 31109a1..9907bae 100644 --- a/src/ATrade/RoboCom/Indicators.hs +++ b/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 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 _ -> 0 where