Open amv-dev opened 3 years ago
I agree with this. Personally, I don't care about Keltner Channel's signals, but want to use its values.
I'm also not a fan of the (arbitrary) 4 signals limit nor the enum Action
, which feels it can be completely replaced by a f32
and would be improved. Custom structs for indicators are a definite improvement!
For now every indicator must implements both
value
s andsignal
s calculation logic. That might be a problem if you want to use values to implement your ownsignal
s logic because of performance degradation.So the current proposal is to make an
IndicatorResult
as atrait
which will only be responsible for representing values. The idea behind is that every indicator should have it's ownIndicatorResult
type. This will help keep indicators values more verbose. A singlestruct
, that implementsIndicatorResult
, must contain all the values, that indicator returns. As a bonus there might be different types of values: not onlyf64
like now.Then for signals create another
trait Signal
and make two internal signal types:BinarySignal
for signals like {-1; 0; +1} andFloatSignal
for signals in range[-1.0; 1.0]
. Every single signal must have it's ownstruct
representation.This approach has next pros:
f64
s like now;IndicatorResult
may have more verbose documentation and explanation;Cons: More code must be written to get a signal from indicator: you need to create
IndicatorConfig
, then initializeIndicatorInstance
(like now), then calculateIndicatorResult
, then initialize appropriateSignal
, then throwIndicatorResult
intoSignal
and finally get your signal.