diff --git a/strategy/and_strategy.go b/strategy/and_strategy.go
index aa0b7df..133ee5f 100644
--- a/strategy/and_strategy.go
+++ b/strategy/and_strategy.go
@@ -64,7 +64,7 @@ func (a *AndStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan Action {
}
}()
- return NormalizeActions(result)
+ return result
}
// Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
diff --git a/strategy/compound/README.md b/strategy/compound/README.md
index b6d1c74..ea041d2 100644
--- a/strategy/compound/README.md
+++ b/strategy/compound/README.md
@@ -111,7 +111,7 @@ func (m *MacdRsiStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*MacdRsiStrategy\) [Report]()
+### func \(\*MacdRsiStrategy\) [Report]()
```go
func (m *MacdRsiStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
diff --git a/strategy/compound/macd_rsi_strategy.go b/strategy/compound/macd_rsi_strategy.go
index 4ea9de4..7f90e58 100644
--- a/strategy/compound/macd_rsi_strategy.go
+++ b/strategy/compound/macd_rsi_strategy.go
@@ -77,8 +77,6 @@ func (m *MacdRsiStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strat
return strategy.Hold
})
- actions = strategy.NormalizeActions(actions)
-
return actions
}
diff --git a/strategy/compound/testdata/macd_rsi_strategy.csv b/strategy/compound/testdata/macd_rsi_strategy.csv
index dcedd8e..2b47280 100644
--- a/strategy/compound/testdata/macd_rsi_strategy.csv
+++ b/strategy/compound/testdata/macd_rsi_strategy.csv
@@ -50,48 +50,48 @@ Action
0
0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
@@ -105,110 +105,110 @@ Action
0
0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
0
@@ -230,23 +230,23 @@ Action
0
0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/strategy/decorator/testdata/inverse_strategy.csv b/strategy/decorator/testdata/inverse_strategy.csv
index 7c37c57..341a548 100644
--- a/strategy/decorator/testdata/inverse_strategy.csv
+++ b/strategy/decorator/testdata/inverse_strategy.csv
@@ -32,20 +32,20 @@ Action
0
0
0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
0
0
0
@@ -62,6 +62,7 @@ Action
0
0
0
+-1
0
0
0
@@ -78,12 +79,11 @@ Action
0
0
0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
0
0
0
@@ -105,8 +105,27 @@ Action
0
0
1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
@@ -121,6 +140,11 @@ Action
0
0
0
+1
+1
+1
+1
+1
0
0
0
@@ -129,7 +153,12 @@ Action
0
0
0
+1
+1
0
+1
+1
+1
0
0
0
@@ -139,12 +168,25 @@ Action
0
0
0
+1
0
0
0
0
0
0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
@@ -159,54 +201,12 @@ Action
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
0
0
0
@@ -230,14 +230,14 @@ Action
0
0
-1
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
0
diff --git a/strategy/decorator/testdata/stop_loss_strategy.csv b/strategy/decorator/testdata/stop_loss_strategy.csv
index d9a8acd..a965b35 100644
--- a/strategy/decorator/testdata/stop_loss_strategy.csv
+++ b/strategy/decorator/testdata/stop_loss_strategy.csv
@@ -32,13 +32,13 @@ Action
0
0
-1
+1
0
0
0
0
0
-0
-0
+-1
0
0
0
@@ -67,10 +67,10 @@ Action
0
0
-1
+1
0
0
-0
-0
+-1
0
0
0
@@ -119,6 +119,7 @@ Action
1
0
-1
+1
0
0
0
@@ -144,8 +145,7 @@ Action
0
0
0
-0
-0
+-1
0
0
0
@@ -228,7 +228,7 @@ Action
0
0
-1
-0
+1
0
0
0
diff --git a/strategy/majority_strategy.go b/strategy/majority_strategy.go
index fdd9a3e..b583acf 100644
--- a/strategy/majority_strategy.go
+++ b/strategy/majority_strategy.go
@@ -63,7 +63,7 @@ func (a *MajorityStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan Acti
}
}()
- return NormalizeActions(result)
+ return result
}
// Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
diff --git a/strategy/momentum/README.md b/strategy/momentum/README.md
index 6383d26..abfe838 100644
--- a/strategy/momentum/README.md
+++ b/strategy/momentum/README.md
@@ -153,7 +153,7 @@ func (*AwesomeOscillatorStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*AwesomeOscillatorStrategy\) [Report]()
+### func \(\*AwesomeOscillatorStrategy\) [Report]()
```go
func (a *AwesomeOscillatorStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -281,7 +281,7 @@ func (s *StochasticRsiStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*StochasticRsiStrategy\) [Report]()
+### func \(\*StochasticRsiStrategy\) [Report]()
```go
func (s *StochasticRsiStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
diff --git a/strategy/momentum/awesome_oscillator_strategy.go b/strategy/momentum/awesome_oscillator_strategy.go
index 30614e9..14c2563 100644
--- a/strategy/momentum/awesome_oscillator_strategy.go
+++ b/strategy/momentum/awesome_oscillator_strategy.go
@@ -55,8 +55,6 @@ func (a *AwesomeOscillatorStrategy) Compute(snapshots <-chan *asset.Snapshot) <-
// Awesome Oscillator starts only after the idle period.
actions = helper.Shift(actions, a.AwesomeOscillator.IdlePeriod(), strategy.Hold)
- actions = strategy.NormalizeActions(actions)
-
return actions
}
diff --git a/strategy/momentum/stochastic_rsi_strategy.go b/strategy/momentum/stochastic_rsi_strategy.go
index 940df65..82119d8 100644
--- a/strategy/momentum/stochastic_rsi_strategy.go
+++ b/strategy/momentum/stochastic_rsi_strategy.go
@@ -75,7 +75,6 @@ func (s *StochasticRsiStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan
// Stochastic RSI starts only after the idle period.
actions = helper.Shift(actions, s.StochasticRsi.IdlePeriod(), strategy.Hold)
- actions = strategy.NormalizeActions(actions)
return actions
}
diff --git a/strategy/momentum/testdata/awesome_oscillator_strategy.csv b/strategy/momentum/testdata/awesome_oscillator_strategy.csv
index b1b0da0..96e1a18 100644
--- a/strategy/momentum/testdata/awesome_oscillator_strategy.csv
+++ b/strategy/momentum/testdata/awesome_oscillator_strategy.csv
@@ -33,220 +33,220 @@ Action
0
0
1
-0
-0
+1
+1
+-1
-1
-0
1
-0
-0
-0
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/strategy/momentum/testdata/stochastic_rsi_strategy.csv b/strategy/momentum/testdata/stochastic_rsi_strategy.csv
index 0334df9..cbe9351 100644
--- a/strategy/momentum/testdata/stochastic_rsi_strategy.csv
+++ b/strategy/momentum/testdata/stochastic_rsi_strategy.csv
@@ -26,227 +26,227 @@ Action
0
0
0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
1
-0
-0
+1
+1
-1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
-1
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
-1
1
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
-1
1
-1
-0
-0
-0
+-1
+-1
+-1
1
-1
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-1
1
-0
-0
-0
+1
+1
+1
+-1
-1
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
-1
1
-1
1
-1
-0
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
+-1
+-1
+-1
1
-1
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
1
-1
-0
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+1
+1
1
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
1
-0
diff --git a/strategy/or_strategy.go b/strategy/or_strategy.go
index 52ccd64..e1ff8c5 100644
--- a/strategy/or_strategy.go
+++ b/strategy/or_strategy.go
@@ -59,7 +59,7 @@ func (a *OrStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan Action {
}
}()
- return NormalizeActions(result)
+ return result
}
// Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
diff --git a/strategy/split_strategy.go b/strategy/split_strategy.go
index 8ba0091..d7e5c20 100644
--- a/strategy/split_strategy.go
+++ b/strategy/split_strategy.go
@@ -68,7 +68,7 @@ func (s *SplitStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan Action
}
}()
- return NormalizeActions(result)
+ return result
}
// Report processes the provided asset snapshots and generates a report annotated with the recommended actions.
diff --git a/strategy/testdata/and.csv b/strategy/testdata/and.csv
index 229092d..4787fc5 100644
--- a/strategy/testdata/and.csv
+++ b/strategy/testdata/and.csv
@@ -1,252 +1,252 @@
-Action,Outcome
-1,-0
-0,-0.01
-0,-0.01
-0,-0.03
-0,-0.03
-0,-0.04
-0,-0.04
-0,-0.04
-0,-0.02
-0,-0.02
-0,-0.03
-0,-0.05
-0,-0.06
-0,-0.06
-0,-0.05
-0,-0.03
-0,-0.05
-0,-0.04
-0,-0.04
-0,-0.05
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.01
-0,-0.02
-0,0
-0,-0.01
-0,-0.01
-0,0.01
-0,0
-0,-0
-0,-0.01
-0,-0.03
-0,-0.04
-0,-0.03
-0,-0.03
-0,-0.02
-0,-0.02
-0,-0.02
-0,-0.03
-0,-0.04
-0,-0.02
-0,-0.03
-0,-0.02
-0,-0.03
-0,-0.03
-0,-0.02
-0,-0.03
-0,-0.04
-0,-0.03
-0,-0.02
-0,-0.02
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.05
-0,-0.05
-0,-0.05
-0,-0.05
-0,-0.04
-0,-0.04
-0,-0.04
-0,-0.03
-0,-0.02
-0,-0.01
-0,-0.02
-0,-0.02
-0,-0.04
-0,-0.05
-0,-0.05
-0,-0.04
-0,-0.07
-0,-0.05
-0,-0.08
-0,-0.06
-0,-0.05
-0,-0.06
-0,-0.06
-0,-0.06
-0,-0.05
-0,-0.05
-0,-0.04
-0,-0.04
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.02
-0,-0.02
-0,-0.02
-0,-0.01
-0,-0
-0,0
-0,0.02
-0,0.02
-0,0.01
-0,0.02
-0,0.02
-0,0.02
-0,0.02
-0,0.01
-0,0.02
-0,0.03
-0,0.04
-0,0.02
-0,0.01
-0,0
-0,0.02
-0,0.02
-0,0.02
-0,0.01
-0,0.01
-0,0.01
-0,0.02
-0,0.02
-0,0.03
-0,0.04
-0,0.04
-0,0.03
-0,0.01
-0,0.01
-0,0
-0,0.01
-0,0.01
-0,0.01
-0,0.01
-0,0.03
-0,0.03
-0,0.05
-0,0.05
-0,0.05
-0,0.05
-0,0.05
-0,0.06
-0,0.05
-0,0.07
-0,0.06
-0,0.06
-0,0.06
-0,0.06
-0,0.05
-0,0.05
-0,0.05
-0,0.05
-0,0.06
-0,0.07
-0,0.07
-0,0.07
-0,0.07
-0,0.07
-0,0.07
-0,0.08
-0,0.08
-0,0.08
-0,0.07
-0,0.08
-0,0.08
-0,0.07
-0,0.09
-0,0.09
-0,0.1
-0,0.09
-0,0.1
-0,0.1
-0,0.1
-0,0.1
-0,0.11
-0,0.1
-0,0.11
-0,0.1
-0,0.14
-0,0.14
-0,0.12
-0,0.12
-0,0.12
-0,0.13
-0,0.11
-0,0.11
-0,0.11
-0,0.11
-0,0.11
-0,0.1
-0,0.11
-0,0.11
-0,0.12
-0,0.12
-0,0.12
-0,0.13
-0,0.13
-0,0.14
-0,0.13
-0,0.14
-0,0.14
-0,0.14
-0,0.15
-0,0.15
-0,0.15
-0,0.16
-0,0.15
-0,0.16
-0,0.16
-0,0.15
-0,0.14
-0,0.13
-0,0.14
-0,0.13
-0,0.12
-0,0.12
-0,0.1
-0,0.09
-0,0.08
-0,0.08
-0,0.08
-0,0.09
-0,0.08
-0,0.09
-0,0.09
-0,0.08
-0,0.08
-0,0.09
-0,0.08
-0,0.07
-0,0.06
-0,0.05
-0,0.06
-0,0.06
-0,0.06
-0,0.06
-0,0.04
-0,0.06
-0,0.07
-0,0.08
-0,0.1
-0,0.1
-0,0.09
-0,0.09
-0,0.09
-0,0.09
-0,0.1
-0,0.1
-0,0.11
-0,0.12
-0,0.13
-0,0.13
-0,0.13
-0,0.13
-0,0.14
-0,0.14
-0,0.13
-0,0.13
-0,0.13
+Action
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/strategy/testdata/majority.csv b/strategy/testdata/majority.csv
index 9f93318..f3ad806 100644
--- a/strategy/testdata/majority.csv
+++ b/strategy/testdata/majority.csv
@@ -1,252 +1,252 @@
-Action,Outcome
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-0,0
-1,0
-0,-0.01
-0,-0.01
-0,-0.02
-0,-0.02
-0,-0.04
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.02
-0,-0
-0,0.01
-0,-0.01
-0,-0.01
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.05
-0,-0.04
-0,-0.06
-0,-0.04
-0,-0.03
-0,-0.04
-0,-0.05
-0,-0.05
-0,-0.04
-0,-0.04
-0,-0.03
-0,-0.03
-0,-0.02
-0,-0.01
-0,-0.01
-0,-0.01
-0,-0
-0,-0
-0,-0
-0,0
-0,0.01
-0,0.02
-0,0.03
-0,0.03
-0,0.03
-0,0.03
-0,0.03
-0,0.04
-0,0.03
-0,0.02
-0,0.04
-0,0.05
-0,0.05
-0,0.04
-0,0.03
-0,0.02
-0,0.03
-0,0.04
-0,0.04
-0,0.03
-0,0.03
-0,0.03
-0,0.03
-0,0.03
-0,0.04
-0,0.05
-0,0.05
-0,0.05
-0,0.03
-0,0.02
-0,0.02
-0,0.02
-0,0.03
-0,0.02
-0,0.03
-0,0.05
-0,0.05
-0,0.06
-0,0.07
-0,0.07
-0,0.07
-0,0.06
-0,0.07
-0,0.07
-0,0.08
-0,0.08
-0,0.08
-0,0.08
-0,0.07
-0,0.07
-0,0.06
-0,0.07
-0,0.07
-0,0.07
-0,0.09
-0,0.09
-0,0.09
-0,0.09
-0,0.09
-0,0.09
-0,0.09
-0,0.1
-0,0.09
-0,0.09
-0,0.1
-0,0.1
-0,0.09
-0,0.1
-0,0.1
-0,0.11
-0,0.11
-0,0.11
-0,0.11
-0,0.11
-0,0.12
-0,0.12
-0,0.12
-0,0.13
-0,0.12
-0,0.16
-0,0.16
-0,0.14
-0,0.14
-0,0.14
-0,0.14
-0,0.13
-0,0.13
-0,0.13
-0,0.12
-0,0.12
-0,0.12
-0,0.13
-0,0.13
-0,0.13
-0,0.13
-0,0.14
-0,0.15
-0,0.15
-0,0.16
-0,0.15
-0,0.15
-0,0.15
-0,0.16
-0,0.17
-0,0.17
-0,0.17
-0,0.18
-0,0.17
-0,0.18
-0,0.18
-0,0.17
-0,0.16
-0,0.15
-0,0.15
-0,0.15
-0,0.14
-0,0.14
-0,0.12
-0,0.11
-0,0.09
-0,0.1
-0,0.1
-0,0.1
-0,0.1
-0,0.11
-0,0.11
-0,0.1
-0,0.1
-0,0.1
-0,0.1
-0,0.09
-0,0.08
-0,0.07
-0,0.07
-0,0.08
-0,0.07
-0,0.07
-0,0.06
-0,0.08
-0,0.09
-0,0.1
-0,0.11
-0,0.12
-0,0.1
-0,0.1
-0,0.1
-0,0.11
-0,0.12
-0,0.12
-0,0.13
-0,0.14
-0,0.15
-0,0.14
-0,0.15
-0,0.15
-0,0.15
-0,0.16
-0,0.15
-0,0.15
-0,0.14
+Action
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/strategy/testdata/or.csv b/strategy/testdata/or.csv
index 229092d..1a674b4 100644
--- a/strategy/testdata/or.csv
+++ b/strategy/testdata/or.csv
@@ -1,252 +1,252 @@
-Action,Outcome
-1,-0
-0,-0.01
-0,-0.01
-0,-0.03
-0,-0.03
-0,-0.04
-0,-0.04
-0,-0.04
-0,-0.02
-0,-0.02
-0,-0.03
-0,-0.05
-0,-0.06
-0,-0.06
-0,-0.05
-0,-0.03
-0,-0.05
-0,-0.04
-0,-0.04
-0,-0.05
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.01
-0,-0.02
-0,0
-0,-0.01
-0,-0.01
-0,0.01
-0,0
-0,-0
-0,-0.01
-0,-0.03
-0,-0.04
-0,-0.03
-0,-0.03
-0,-0.02
-0,-0.02
-0,-0.02
-0,-0.03
-0,-0.04
-0,-0.02
-0,-0.03
-0,-0.02
-0,-0.03
-0,-0.03
-0,-0.02
-0,-0.03
-0,-0.04
-0,-0.03
-0,-0.02
-0,-0.02
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.05
-0,-0.05
-0,-0.05
-0,-0.05
-0,-0.04
-0,-0.04
-0,-0.04
-0,-0.03
-0,-0.02
-0,-0.01
-0,-0.02
-0,-0.02
-0,-0.04
-0,-0.05
-0,-0.05
-0,-0.04
-0,-0.07
-0,-0.05
-0,-0.08
-0,-0.06
-0,-0.05
-0,-0.06
-0,-0.06
-0,-0.06
-0,-0.05
-0,-0.05
-0,-0.04
-0,-0.04
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.03
-0,-0.02
-0,-0.02
-0,-0.02
-0,-0.01
-0,-0
-0,0
-0,0.02
-0,0.02
-0,0.01
-0,0.02
-0,0.02
-0,0.02
-0,0.02
-0,0.01
-0,0.02
-0,0.03
-0,0.04
-0,0.02
-0,0.01
-0,0
-0,0.02
-0,0.02
-0,0.02
-0,0.01
-0,0.01
-0,0.01
-0,0.02
-0,0.02
-0,0.03
-0,0.04
-0,0.04
-0,0.03
-0,0.01
-0,0.01
-0,0
-0,0.01
-0,0.01
-0,0.01
-0,0.01
-0,0.03
-0,0.03
-0,0.05
-0,0.05
-0,0.05
-0,0.05
-0,0.05
-0,0.06
-0,0.05
-0,0.07
-0,0.06
-0,0.06
-0,0.06
-0,0.06
-0,0.05
-0,0.05
-0,0.05
-0,0.05
-0,0.06
-0,0.07
-0,0.07
-0,0.07
-0,0.07
-0,0.07
-0,0.07
-0,0.08
-0,0.08
-0,0.08
-0,0.07
-0,0.08
-0,0.08
-0,0.07
-0,0.09
-0,0.09
-0,0.1
-0,0.09
-0,0.1
-0,0.1
-0,0.1
-0,0.1
-0,0.11
-0,0.1
-0,0.11
-0,0.1
-0,0.14
-0,0.14
-0,0.12
-0,0.12
-0,0.12
-0,0.13
-0,0.11
-0,0.11
-0,0.11
-0,0.11
-0,0.11
-0,0.1
-0,0.11
-0,0.11
-0,0.12
-0,0.12
-0,0.12
-0,0.13
-0,0.13
-0,0.14
-0,0.13
-0,0.14
-0,0.14
-0,0.14
-0,0.15
-0,0.15
-0,0.15
-0,0.16
-0,0.15
-0,0.16
-0,0.16
-0,0.15
-0,0.14
-0,0.13
-0,0.14
-0,0.13
-0,0.12
-0,0.12
-0,0.1
-0,0.09
-0,0.08
-0,0.08
-0,0.08
-0,0.09
-0,0.08
-0,0.09
-0,0.09
-0,0.08
-0,0.08
-0,0.09
-0,0.08
-0,0.07
-0,0.06
-0,0.05
-0,0.06
-0,0.06
-0,0.06
-0,0.06
-0,0.04
-0,0.06
-0,0.07
-0,0.08
-0,0.1
-0,0.1
-0,0.09
-0,0.09
-0,0.09
-0,0.09
-0,0.1
-0,0.1
-0,0.11
-0,0.12
-0,0.13
-0,0.13
-0,0.13
-0,0.13
-0,0.14
-0,0.14
-0,0.13
-0,0.13
-0,0.13
+Action
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/strategy/testdata/split.csv b/strategy/testdata/split.csv
index ef93f3d..2b66c42 100644
--- a/strategy/testdata/split.csv
+++ b/strategy/testdata/split.csv
@@ -62,6 +62,7 @@ Action
0
0
0
+1
0
0
0
@@ -78,12 +79,11 @@ Action
0
0
0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
0
0
-1
@@ -127,6 +127,7 @@ Action
0
0
0
+-1
0
0
0
@@ -187,11 +188,10 @@ Action
0
0
0
+-1
0
0
-0
-0
-0
+-1
0
0
0
@@ -230,14 +230,14 @@ Action
0
0
1
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
-1
0
0
diff --git a/strategy/trend/README.md b/strategy/trend/README.md
index fceb6d8..cfdcea5 100644
--- a/strategy/trend/README.md
+++ b/strategy/trend/README.md
@@ -282,7 +282,7 @@ func (*AroonStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*AroonStrategy\) [Report]()
+### func \(\*AroonStrategy\) [Report]()
```go
func (a *AroonStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -383,7 +383,7 @@ func (*CciStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*CciStrategy\) [Report]()
+### func \(\*CciStrategy\) [Report]()
```go
func (t *CciStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -438,7 +438,7 @@ func (*DemaStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*DemaStrategy\) [Report]()
+### func \(\*DemaStrategy\) [Report]()
```go
func (d *DemaStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -498,7 +498,7 @@ func (*GoldenCrossStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*GoldenCrossStrategy\) [Report]()
+### func \(\*GoldenCrossStrategy\) [Report]()
```go
func (t *GoldenCrossStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -555,7 +555,7 @@ func (k *KamaStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*KamaStrategy\) [Report]()
+### func \(\*KamaStrategy\) [Report]()
```go
func (k *KamaStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -605,7 +605,7 @@ func (*KdjStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*KdjStrategy\) [Report]()
+### func \(\*KdjStrategy\) [Report]()
```go
func (kdj *KdjStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -665,7 +665,7 @@ func (m *MacdStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*MacdStrategy\) [Report]()
+### func \(\*MacdStrategy\) [Report]()
```go
func (m *MacdStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -770,7 +770,7 @@ func (*TrimaStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*TrimaStrategy\) [Report]()
+### func \(\*TrimaStrategy\) [Report]()
```go
func (t *TrimaStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -833,7 +833,7 @@ func (*TripleMovingAverageCrossoverStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*TripleMovingAverageCrossoverStrategy\) [Report]()
+### func \(\*TripleMovingAverageCrossoverStrategy\) [Report]()
```go
func (t *TripleMovingAverageCrossoverStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -940,7 +940,7 @@ func (t *TsiStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.
Compute processes the provided asset snapshots and generates a stream of actionable recommendations.
-### func \(\*TsiStrategy\) [IdlePeriod]()
+### func \(\*TsiStrategy\) [IdlePeriod]()
```go
func (t *TsiStrategy) IdlePeriod() int
@@ -958,7 +958,7 @@ func (t *TsiStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*TsiStrategy\) [Report]()
+### func \(\*TsiStrategy\) [Report]()
```go
func (t *TsiStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -1011,7 +1011,7 @@ func (*VwmaStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*VwmaStrategy\) [Report]()
+### func \(\*VwmaStrategy\) [Report]()
```go
func (v *VwmaStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
diff --git a/strategy/trend/aroon_strategy.go b/strategy/trend/aroon_strategy.go
index f8b6692..e8ffeda 100644
--- a/strategy/trend/aroon_strategy.go
+++ b/strategy/trend/aroon_strategy.go
@@ -59,8 +59,6 @@ func (a *AroonStrategy) Compute(c <-chan *asset.Snapshot) <-chan strategy.Action
return strategy.Hold
})
- actions = strategy.NormalizeActions(actions)
-
// Aroon starts only after the a full period.
actions = helper.Shift(actions, a.Aroon.Period-1, strategy.Hold)
diff --git a/strategy/trend/bop_strategy.go b/strategy/trend/bop_strategy.go
index 27bf080..7dbfc5d 100644
--- a/strategy/trend/bop_strategy.go
+++ b/strategy/trend/bop_strategy.go
@@ -47,7 +47,7 @@ func (b *BopStrategy) Compute(c <-chan *asset.Snapshot) <-chan strategy.Action {
bops := b.Bop.Compute(openings, highs, lows, closings)
- return strategy.NormalizeActions(helper.Map(bops, func(bop float64) strategy.Action {
+ return helper.Map(bops, func(bop float64) strategy.Action {
if bop > 0 {
return strategy.Buy
}
@@ -57,7 +57,7 @@ func (b *BopStrategy) Compute(c <-chan *asset.Snapshot) <-chan strategy.Action {
}
return strategy.Hold
- }))
+ })
}
// Report processes the provided asset snapshots and generates a
diff --git a/strategy/trend/cci_strategy.go b/strategy/trend/cci_strategy.go
index 1f50993..93344d4 100644
--- a/strategy/trend/cci_strategy.go
+++ b/strategy/trend/cci_strategy.go
@@ -54,8 +54,6 @@ func (t *CciStrategy) Compute(c <-chan *asset.Snapshot) <-chan strategy.Action {
return strategy.Hold
})
- actions = strategy.NormalizeActions(actions)
-
// CCI starts only after a full period.
actions = helper.Shift(actions, t.Cci.IdlePeriod(), strategy.Hold)
diff --git a/strategy/trend/dema_strategy.go b/strategy/trend/dema_strategy.go
index b1bf984..32e1a87 100644
--- a/strategy/trend/dema_strategy.go
+++ b/strategy/trend/dema_strategy.go
@@ -81,8 +81,6 @@ func (d *DemaStrategy) Compute(c <-chan *asset.Snapshot) <-chan strategy.Action
return strategy.Hold
})
- actions = strategy.NormalizeActions(actions)
-
// DEMA starts only after the a full periods for each EMA used.
actions = helper.Skip(actions, d.Dema2.IdlePeriod())
actions = helper.Shift(actions, d.Dema2.IdlePeriod(), strategy.Hold)
diff --git a/strategy/trend/golden_cross_strategy.go b/strategy/trend/golden_cross_strategy.go
index 5d56d4e..11cb5db 100644
--- a/strategy/trend/golden_cross_strategy.go
+++ b/strategy/trend/golden_cross_strategy.go
@@ -72,9 +72,6 @@ func (t *GoldenCrossStrategy) Compute(c <-chan *asset.Snapshot) <-chan strategy.
return strategy.Hold
})
- // Normalize actions
- actions = strategy.NormalizeActions(actions)
-
// Generate a Hold signal during the idle period.
actions = helper.Shift(actions, t.SlowEma.IdlePeriod(), strategy.Hold)
diff --git a/strategy/trend/kama_strategy.go b/strategy/trend/kama_strategy.go
index f7ad66c..86349d3 100644
--- a/strategy/trend/kama_strategy.go
+++ b/strategy/trend/kama_strategy.go
@@ -67,8 +67,6 @@ func (k *KamaStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy
// KAMA starts only after a full period.
actions = helper.Shift(actions, k.Kama.IdlePeriod(), strategy.Hold)
- actions = strategy.NormalizeActions(actions)
-
return actions
}
diff --git a/strategy/trend/kdj_strategy.go b/strategy/trend/kdj_strategy.go
index 4deb209..c94e922 100644
--- a/strategy/trend/kdj_strategy.go
+++ b/strategy/trend/kdj_strategy.go
@@ -61,8 +61,6 @@ func (kdj *KdjStrategy) Compute(c <-chan *asset.Snapshot) <-chan strategy.Action
return strategy.Hold
})
- actions = strategy.NormalizeActions(actions)
-
// KDJ starts only after a full period.
actions = helper.Shift(actions, kdj.Kdj.IdlePeriod(), strategy.Hold)
diff --git a/strategy/trend/macd_strategy.go b/strategy/trend/macd_strategy.go
index 34daabd..b2fa85e 100644
--- a/strategy/trend/macd_strategy.go
+++ b/strategy/trend/macd_strategy.go
@@ -78,8 +78,6 @@ func (m *MacdStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy
// MACD starts only after a full period.
actions = helper.Shift(actions, m.Macd.IdlePeriod(), strategy.Hold)
- actions = strategy.NormalizeActions(actions)
-
return actions
}
diff --git a/strategy/trend/testdata/aroon_strategy.csv b/strategy/trend/testdata/aroon_strategy.csv
index 8ba71eb..de8348d 100644
--- a/strategy/trend/testdata/aroon_strategy.csv
+++ b/strategy/trend/testdata/aroon_strategy.csv
@@ -25,228 +25,228 @@ Action
0
0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-1
1
0
-1
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
1
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
-1
0
+-1
+-1
0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
0
0
0
0
0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
1
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
1
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/strategy/trend/testdata/bop_strategy.csv b/strategy/trend/testdata/bop_strategy.csv
index ca70a45..0dfdd93 100644
--- a/strategy/trend/testdata/bop_strategy.csv
+++ b/strategy/trend/testdata/bop_strategy.csv
@@ -3,159 +3,159 @@ Action
-1
1
-1
-0
-0
-0
+-1
+-1
+-1
+1
1
-0
-1
-0
-0
+-1
+-1
1
-1
1
-0
+1
-1
1
-1
-0
+-1
+1
1
-0
-1
1
-1
1
-1
1
-0
+1
-1
1
-1
-0
-0
+-1
+-1
+1
+1
+1
1
-0
-0
-0
-1
-0
-0
+-1
+-1
+1
1
-0
-1
-0
+-1
+1
1
-0
-1
-0
+-1
+1
1
-0
-1
-0
+-1
+1
1
-0
-1
-0
-0
+-1
+-1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-1
1
-1
1
-0
+1
+-1
-1
-0
1
-1
1
-1
-0
-0
+-1
+-1
+1
+1
+1
1
-0
-0
-0
-1
1
-0
+1
-1
1
-0
-0
-0
+1
+1
+1
-1
1
-0
-0
+1
+1
+-1
-1
-0
1
-0
-0
+1
+1
+-1
-1
-0
1
-0
-0
+1
+1
+-1
+-1
-1
-0
-0
1
-1
0
-0
+-1
1
-1
1
-0
-0
-0
+1
+1
+1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
1
-0
+1
-1
1
-0
+1
-1
1
-0
-0
+1
+1
+-1
-1
-0
1
-1
1
-1
1
-0
+1
-1
1
-1
1
-1
1
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+-1
-1
-0
1
-0
+1
-1
1
-1
@@ -163,90 +163,90 @@ Action
-1
1
-1
-0
+-1
+1
1
-0
-1
1
-1
1
-0
+1
+-1
-1
-0
1
-0
+1
+-1
+-1
-1
-0
-0
1
-1
-0
+-1
1
-1
1
-1
1
-0
+1
-1
1
-1
1
-0
-0
-0
-0
+1
+1
+1
+1
+-1
+-1
-1
-0
-0
1
-1
-0
-0
-0
+-1
+-1
+-1
1
-1
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
1
-0
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
1
-0
-1
-0
-0
+-1
+-1
+1
+1
+1
+1
1
-0
-0
-0
-0
-1
-0
-0
+-1
+-1
+1
1
-0
-1
1
-0
-0
+1
+1
-1
1
-0
-0
-0
+1
+1
+1
+-1
+-1
-1
-0
-0
diff --git a/strategy/trend/testdata/cci_strategy.csv b/strategy/trend/testdata/cci_strategy.csv
index 5d758c4..1bbb28a 100644
--- a/strategy/trend/testdata/cci_strategy.csv
+++ b/strategy/trend/testdata/cci_strategy.csv
@@ -53,18 +53,18 @@ Action
0
0
0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
0
0
0
0
0
1
-0
+1
0
0
0
@@ -72,12 +72,12 @@ Action
0
-1
0
+-1
0
0
0
0
-0
-0
+-1
0
0
0
@@ -87,15 +87,15 @@ Action
0
0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
@@ -128,8 +128,14 @@ Action
0
0
1
+1
+1
+1
0
0
+1
+1
+1
0
0
0
@@ -153,6 +159,7 @@ Action
0
0
0
+1
0
0
0
@@ -162,6 +169,9 @@ Action
0
0
0
+1
+1
+1
0
0
0
@@ -179,27 +189,17 @@ Action
0
0
0
+1
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
@@ -209,11 +209,11 @@ Action
0
0
-1
+-1
+-1
+-1
0
-0
-0
-0
-0
+-1
0
0
0
@@ -240,11 +240,11 @@ Action
0
0
1
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
0
0
0
diff --git a/strategy/trend/testdata/dema_strategy.csv b/strategy/trend/testdata/dema_strategy.csv
index cb0dfa4..fd9f340 100644
--- a/strategy/trend/testdata/dema_strategy.csv
+++ b/strategy/trend/testdata/dema_strategy.csv
@@ -67,186 +67,186 @@ Action
0
0
0
-0
-0
-0
-0
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
-1
1
-0
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
diff --git a/strategy/trend/testdata/golden_cross_strategy.csv b/strategy/trend/testdata/golden_cross_strategy.csv
index eae74db..7e54601 100644
--- a/strategy/trend/testdata/golden_cross_strategy.csv
+++ b/strategy/trend/testdata/golden_cross_strategy.csv
@@ -18,235 +18,235 @@ Action
0
0
0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
1
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
1
-0
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/strategy/trend/testdata/kama_strategy.csv b/strategy/trend/testdata/kama_strategy.csv
index 2055589..732e0e6 100644
--- a/strategy/trend/testdata/kama_strategy.csv
+++ b/strategy/trend/testdata/kama_strategy.csv
@@ -9,244 +9,244 @@ Action
0
0
0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
1
-1
-0
-0
-0
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
1
-1
-0
+-1
1
-1
-0
-0
+-1
+-1
1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
1
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
1
-0
-0
-0
+1
+1
+1
+-1
+-1
-1
-0
-0
1
-0
+1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
1
-0
-0
-0
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
-1
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
-1
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
-1
diff --git a/strategy/trend/testdata/kdj_strategy.csv b/strategy/trend/testdata/kdj_strategy.csv
index 8ed8c00..9e04d49 100644
--- a/strategy/trend/testdata/kdj_strategy.csv
+++ b/strategy/trend/testdata/kdj_strategy.csv
@@ -11,242 +11,242 @@ Action
0
0
0
-0
-0
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
1
-1
-0
+-1
+1
+1
1
-0
-0
-1
-0
-0
-0
+-1
+-1
+-1
+1
+1
+1
1
-0
-0
-0
-1
-0
+-1
+1
+1
1
-0
-0
-1
-0
-0
+-1
+-1
1
-1
-0
+-1
+1
+1
1
-0
-0
-1
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+1
1
-0
-1
1
-0
-0
-0
+1
+1
+1
-1
1
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+-1
-1
-0
1
-1
-0
-0
+-1
+-1
+1
+1
1
-0
-0
-1
-0
-0
+-1
+-1
1
-1
-0
-0
+-1
+-1
+1
1
-0
-1
-0
-0
-0
+-1
+-1
+-1
+1
+1
1
-0
-0
-1
-0
+-1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-1
-0
-0
-0
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
+-1
+-1
+-1
1
-1
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
1
-0
-0
-0
-0
-1
-0
-0
+-1
+-1
1
-1
-0
-0
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
+-1
+-1
+-1
+1
1
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
+-1
+-1
+-1
+1
+1
1
-0
-0
-1
-0
+-1
1
-1
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+1
1
-0
-1
-0
-0
-0
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+1
+1
1
-0
-0
-1
1
-0
-0
-0
-0
+1
+1
+1
+1
+-1
+-1
+-1
-1
-0
-0
-0
1
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+-1
+-1
-1
-0
-0
1
-1
-0
-0
+-1
+-1
diff --git a/strategy/trend/testdata/macd_strategy.csv b/strategy/trend/testdata/macd_strategy.csv
index dcedd8e..b14c8ad 100644
--- a/strategy/trend/testdata/macd_strategy.csv
+++ b/strategy/trend/testdata/macd_strategy.csv
@@ -32,20 +32,20 @@ Action
0
0
0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
0
0
0
@@ -62,6 +62,7 @@ Action
0
0
0
+1
0
0
0
@@ -78,12 +79,11 @@ Action
0
0
0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
0
0
0
@@ -105,8 +105,27 @@ Action
0
0
-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
0
@@ -121,6 +140,11 @@ Action
0
0
0
+-1
+-1
+-1
+-1
+-1
0
0
0
@@ -129,7 +153,12 @@ Action
0
0
0
+-1
+-1
0
+-1
+-1
+-1
0
0
0
@@ -139,12 +168,25 @@ Action
0
0
0
+-1
0
0
0
0
0
0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
0
@@ -159,54 +201,12 @@ Action
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
0
0
0
@@ -230,14 +230,14 @@ Action
0
0
1
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
diff --git a/strategy/trend/testdata/trima_strategy.csv b/strategy/trend/testdata/trima_strategy.csv
index 66a2f79..719d289 100644
--- a/strategy/trend/testdata/trima_strategy.csv
+++ b/strategy/trend/testdata/trima_strategy.csv
@@ -48,205 +48,205 @@ Action
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
diff --git a/strategy/trend/testdata/triple_moving_average_crossover_strategy.csv b/strategy/trend/testdata/triple_moving_average_crossover_strategy.csv
index a021a3d..1ee6603 100644
--- a/strategy/trend/testdata/triple_moving_average_crossover_strategy.csv
+++ b/strategy/trend/testdata/triple_moving_average_crossover_strategy.csv
@@ -18,235 +18,235 @@ Action
0
0
0
-0
+-1
0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
-1
+-1
+-1
+-1
0
0
0
-0
-0
-0
-0
-0
+-1
+-1
0
0
1
-1
-0
+-1
1
-1
-0
-0
+-1
+-1
+1
1
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
0
1
-0
-0
-0
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
0
0
1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
+1
+1
+1
+1
0
0
0
+1
+1
0
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
0
-1
-0
-0
-0
-0
+-1
+-1
+-1
+-1
0
1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
0
0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
+1
+1
0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
0
0
0
-1
-0
-0
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
0
0
-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
diff --git a/strategy/trend/testdata/trix_strategy.csv b/strategy/trend/testdata/trix_strategy.csv
index c24adc3..9bc77cb 100644
--- a/strategy/trend/testdata/trix_strategy.csv
+++ b/strategy/trend/testdata/trix_strategy.csv
@@ -43,210 +43,210 @@ Action
0
0
1
-0
-0
-0
-0
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
diff --git a/strategy/trend/testdata/tsi_strategy.csv b/strategy/trend/testdata/tsi_strategy.csv
index 28e7727..74a844d 100644
--- a/strategy/trend/testdata/tsi_strategy.csv
+++ b/strategy/trend/testdata/tsi_strategy.csv
@@ -47,44 +47,64 @@ Action
0
0
0
+-1
+-1
+-1
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
1
-0
+1
0
0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
0
0
0
1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
@@ -97,6 +117,7 @@ Action
0
0
0
+1
0
0
0
@@ -106,13 +127,52 @@ Action
0
0
0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
@@ -127,108 +187,48 @@ Action
0
0
0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
0
0
0
0
0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
0
0
0
@@ -239,14 +239,14 @@ Action
0
0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
diff --git a/strategy/trend/testdata/vwma_strategy.csv b/strategy/trend/testdata/vwma_strategy.csv
index 2f68167..3bfb98d 100644
--- a/strategy/trend/testdata/vwma_strategy.csv
+++ b/strategy/trend/testdata/vwma_strategy.csv
@@ -20,233 +20,233 @@ Action
0
1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-1
1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
1
-0
-0
-1
-0
-0
-0
+-1
+-1
+-1
+1
+1
+1
1
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
1
-0
-1
1
-1
-0
-0
-0
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
+-1
1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-1
1
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
+1
+1
+1
-1
1
-1
-0
-0
-0
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
+-1
+-1
+1
1
-0
-1
1
-0
-0
-0
+1
+1
+1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
diff --git a/strategy/trend/trima_strategy.go b/strategy/trend/trima_strategy.go
index 1fa87e7..59b1ee7 100644
--- a/strategy/trend/trima_strategy.go
+++ b/strategy/trend/trima_strategy.go
@@ -73,8 +73,6 @@ func (t *TrimaStrategy) Compute(c <-chan *asset.Snapshot) <-chan strategy.Action
return strategy.Hold
})
- actions = strategy.NormalizeActions(actions)
-
// TRIMA starts only after the a full periods for each EMA used.
actions = helper.Shift(actions, t.Long.IdlePeriod(), strategy.Hold)
diff --git a/strategy/trend/triple_moving_average_crossover_strategy.go b/strategy/trend/triple_moving_average_crossover_strategy.go
index c05c9bd..da0aaed 100644
--- a/strategy/trend/triple_moving_average_crossover_strategy.go
+++ b/strategy/trend/triple_moving_average_crossover_strategy.go
@@ -81,9 +81,6 @@ func (t *TripleMovingAverageCrossoverStrategy) Compute(c <-chan *asset.Snapshot)
return strategy.Hold
})
- // Normalize actions
- actions = strategy.NormalizeActions(actions)
-
// Generate a Hold signal during the idle period.
actions = helper.Shift(actions, t.SlowEma.IdlePeriod(), strategy.Hold)
diff --git a/strategy/trend/trix_strategy.go b/strategy/trend/trix_strategy.go
index 5df1ea2..bcc6566 100644
--- a/strategy/trend/trix_strategy.go
+++ b/strategy/trend/trix_strategy.go
@@ -39,7 +39,7 @@ func (t *TrixStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy
trixs := t.Trix.Compute(closings)
- actions := strategy.NormalizeActions(helper.Map(trixs, func(trix float64) strategy.Action {
+ actions := helper.Map(trixs, func(trix float64) strategy.Action {
if trix > 0 {
return strategy.Buy
}
@@ -49,7 +49,7 @@ func (t *TrixStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy
}
return strategy.Hold
- }))
+ })
// TRIX starts only after a full period.
actions = helper.Shift(actions, t.Trix.IdlePeriod(), strategy.Hold)
diff --git a/strategy/trend/tsi_strategy.go b/strategy/trend/tsi_strategy.go
index 202d08d..8e6b773 100644
--- a/strategy/trend/tsi_strategy.go
+++ b/strategy/trend/tsi_strategy.go
@@ -87,7 +87,6 @@ func (t *TsiStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan strategy.
// TSI and signal line start only after a full period.
actions = helper.Shift(actions, t.IdlePeriod(), strategy.Hold)
- actions = strategy.NormalizeActions(actions)
return actions
}
diff --git a/strategy/trend/vwma_strategy.go b/strategy/trend/vwma_strategy.go
index 9ae556d..d2b5377 100644
--- a/strategy/trend/vwma_strategy.go
+++ b/strategy/trend/vwma_strategy.go
@@ -63,8 +63,6 @@ func (v *VwmaStrategy) Compute(c <-chan *asset.Snapshot) <-chan strategy.Action
return strategy.Hold
})
- actions = strategy.NormalizeActions(actions)
-
// VWMA starts only after the a full period.
actions = helper.Shift(actions, v.Vwma.Period-1, strategy.Hold)
diff --git a/strategy/volatility/README.md b/strategy/volatility/README.md
index 3623cb2..1483e38 100644
--- a/strategy/volatility/README.md
+++ b/strategy/volatility/README.md
@@ -89,7 +89,7 @@ func (*BollingerBandsStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*BollingerBandsStrategy\) [Report]()
+### func \(\*BollingerBandsStrategy\) [Report]()
```go
func (b *BollingerBandsStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
@@ -146,7 +146,7 @@ func (s *SuperTrendStrategy) Name() string
Name returns the name of the strategy.
-### func \(\*SuperTrendStrategy\) [Report]()
+### func \(\*SuperTrendStrategy\) [Report]()
```go
func (s *SuperTrendStrategy) Report(c <-chan *asset.Snapshot) *helper.Report
diff --git a/strategy/volatility/bollinger_bands_strategy.go b/strategy/volatility/bollinger_bands_strategy.go
index a471757..4ffaa0a 100644
--- a/strategy/volatility/bollinger_bands_strategy.go
+++ b/strategy/volatility/bollinger_bands_strategy.go
@@ -57,8 +57,6 @@ func (b *BollingerBandsStrategy) Compute(snapshots <-chan *asset.Snapshot) <-cha
return strategy.Hold
})
- actions = strategy.NormalizeActions(actions)
-
// Bollinger Bands starts only after a full period.
actions = helper.Shift(actions, b.BollingerBands.IdlePeriod(), strategy.Hold)
diff --git a/strategy/volatility/super_trend_strategy.go b/strategy/volatility/super_trend_strategy.go
index 37cee48..198fcf9 100644
--- a/strategy/volatility/super_trend_strategy.go
+++ b/strategy/volatility/super_trend_strategy.go
@@ -65,8 +65,6 @@ func (s *SuperTrendStrategy) Compute(snapshots <-chan *asset.Snapshot) <-chan st
return strategy.Hold
})
- actions = strategy.NormalizeActions(actions)
-
// Super Trend starts only after a full period.
actions = helper.Shift(actions, s.SuperTrend.IdlePeriod(), strategy.Hold)
diff --git a/strategy/volatility/testdata/bollinger_bands_strategy.csv b/strategy/volatility/testdata/bollinger_bands_strategy.csv
index a170192..2769b0d 100644
--- a/strategy/volatility/testdata/bollinger_bands_strategy.csv
+++ b/strategy/volatility/testdata/bollinger_bands_strategy.csv
@@ -24,7 +24,7 @@ Action
0
1
0
-0
+1
0
0
0
@@ -55,7 +55,7 @@ Action
0
0
-1
-0
+-1
0
0
0
@@ -72,7 +72,7 @@ Action
0
-1
0
-0
+-1
0
0
0
@@ -127,6 +127,8 @@ Action
0
0
0
+1
+1
0
0
0
@@ -149,6 +151,7 @@ Action
0
0
0
+1
0
0
0
@@ -166,6 +169,8 @@ Action
0
0
0
+1
+1
0
0
0
@@ -189,12 +194,7 @@ Action
0
0
0
-0
-0
-0
-0
-0
-0
+1
0
0
0
@@ -208,6 +208,9 @@ Action
0
0
-1
+-1
+-1
+-1
0
0
0
@@ -224,10 +227,7 @@ Action
0
0
0
-0
-0
-0
-0
+-1
0
0
0
diff --git a/strategy/volatility/testdata/super_trend_strategy.csv b/strategy/volatility/testdata/super_trend_strategy.csv
index 3b5f6a9..3e4ed9a 100644
--- a/strategy/volatility/testdata/super_trend_strategy.csv
+++ b/strategy/volatility/testdata/super_trend_strategy.csv
@@ -17,69 +17,69 @@ Action
0
0
1
-0
-0
-0
-0
+1
+1
+1
+1
-1
1
-1
1
-1
-0
+-1
+1
+1
+1
1
-0
-0
-0
-1
-0
+-1
+1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
+-1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-1
1
-1
-0
+-1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+1
1
-0
-1
1
-1
@@ -90,94 +90,94 @@ Action
1
-1
1
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
-1
1
-1
1
-0
-0
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
1
-0
+1
-1
1
-1
1
-1
-0
-0
-0
-0
-0
+-1
+-1
+-1
+-1
+-1
+1
+1
+1
+1
+1
+1
+1
+1
1
-0
-0
-0
-0
-0
-0
-0
-0
-1
1
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+-1
+-1
-1
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+-1
-1
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
-1
1
-1
1
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
-1
1
-1
@@ -186,59 +186,59 @@ Action
1
-1
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
-1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
1
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
-1
1
-1