Skip to content

Commit

Permalink
upd
Browse files Browse the repository at this point in the history
  • Loading branch information
m5l14i11 committed Apr 15, 2024
1 parent d90ae8e commit ed3687e
Show file tree
Hide file tree
Showing 10 changed files with 112 additions and 99 deletions.
22 changes: 16 additions & 6 deletions strategy/generator/bootstrap/_trend_follow.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
from strategy.generator.confirm.dso import DsoConfirm
from strategy.generator.confirm.eom import EomConfirm
from strategy.generator.confirm.roc import RocConfirm
from strategy.generator.confirm.rsi import RsiConfirm
from strategy.generator.confirm.rsi_neutrality import RsiNeutralityConfirm
from strategy.generator.confirm.rsi_signalline import RsiSignalLineConfirm
from strategy.generator.confirm.stc import StcConfirm
from strategy.generator.exit.ast import AstExit
from strategy.generator.exit.cci import CciExit
Expand All @@ -44,9 +45,15 @@
from strategy.generator.signal.ma.ma3_cross import Ma3CrossSignal
from strategy.generator.signal.ma.ma_testing_ground import MaTestingGroundSignal
from strategy.generator.signal.ma.vwap_cross import VwapCrossSignal
from strategy.generator.signal.neutrality.dso_neutrality_cross import DsoNeutralityCrossSignal
from strategy.generator.signal.neutrality.rsi_neutrality_cross import RsiNautralityCrossSignal
from strategy.generator.signal.neutrality.rsi_neutrality_pullback import RsiNautralityPullbackSignal
from strategy.generator.signal.neutrality.dso_neutrality_cross import (
DsoNeutralityCrossSignal,
)
from strategy.generator.signal.neutrality.rsi_neutrality_cross import (
RsiNautralityCrossSignal,
)
from strategy.generator.signal.neutrality.rsi_neutrality_pullback import (
RsiNautralityPullbackSignal,
)
from strategy.generator.signal.neutrality.rsi_neutrality_rejection import (
RsiNautralityRejectionSignal,
)
Expand All @@ -63,7 +70,9 @@
from strategy.generator.signal.signalline.dso_signalline import DsoSignalLineSignal
from strategy.generator.signal.signalline.kst_signalline import KstSignalLineSignal
from strategy.generator.signal.signalline.macd_signalline import MacdSignalLineSignal
from strategy.generator.signal.signalline.qstick_signalline import QstickSignalLineSignal
from strategy.generator.signal.signalline.qstick_signalline import (
QstickSignalLineSignal,
)
from strategy.generator.signal.signalline.rsi_signalline import RsiSignalLineSignal
from strategy.generator.signal.signalline.stoch_signalline import StochSignalLineSignal
from strategy.generator.signal.signalline.trix_signalline import TrixSignalLineSignal
Expand Down Expand Up @@ -167,7 +176,8 @@ def _generate_strategy(self):
DpoConfirm(),
EomConfirm(),
RocConfirm(),
RsiConfirm(),
RsiSignalLineConfirm(),
RsiNeutralityConfirm(),
StcConfirm(),
DsoConfirm(),
CciConfirm(),
Expand Down
3 changes: 2 additions & 1 deletion strategy/generator/confirm/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ class ConfirmType(Enum):
Cci = "Cci"
Eom = "Eom"
Roc = "Roc"
Rsi = "Rsi"
RsiSignalLine = "RsiSignalLine"
RsiNeutrality = "RsiNeutrality"
Stc = "Stc"

def __str__(self):
Expand Down
14 changes: 14 additions & 0 deletions strategy/generator/confirm/rsi_neutrality.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from dataclasses import dataclass

from core.models.parameter import Parameter, RandomParameter, StaticParameter
from core.models.smooth import Smooth

from .base import Confirm, ConfirmType


@dataclass(frozen=True)
class RsiNeutralityConfirm(Confirm):
type: Confirm = ConfirmType.RsiNeutrality
smooth_type: Parameter = StaticParameter(Smooth.SMMA)
period: Parameter = StaticParameter(14.0)
threshold: Parameter = RandomParameter(0.0, 3.0, 1.0)
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@


@dataclass(frozen=True)
class RsiConfirm(Confirm):
type: Confirm = ConfirmType.Rsi
class RsiSignalLineConfirm(Confirm):
type: Confirm = ConfirmType.RsiSignalLine
smooth_type: Parameter = StaticParameter(Smooth.SMMA)
period: Parameter = StaticParameter(14.0)
smooth_signal: Parameter = StaticParameter(Smooth.WMA)
Expand Down
6 changes: 4 additions & 2 deletions ta_lib/strategies/confirm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ mod dso;
mod dumb;
mod eom;
mod roc;
mod rsi;
mod rsi_neutrality;
mod rsi_signalline;
mod stc;

pub use cci::CciConfirm;
Expand All @@ -13,5 +14,6 @@ pub use dso::DsoConfirm;
pub use dumb::DumbConfirm;
pub use eom::EomConfirm;
pub use roc::RocConfirm;
pub use rsi::RsiConfirm;
pub use rsi_neutrality::RsiNeutralityConfirm;
pub use rsi_signalline::RsiSignalLineConfirm;
pub use stc::StcConfirm;
54 changes: 54 additions & 0 deletions ta_lib/strategies/confirm/src/rsi_neutrality.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
use base::prelude::*;
use core::prelude::*;
use momentum::rsi;

const RSI_UPPER_BARRIER: f32 = 75.0;
const RSI_LOWER_BARRIER: f32 = 25.0;

pub struct RsiNeutralityConfirm {
smooth_type: Smooth,
period: usize,
threshold: f32,
}

impl RsiNeutralityConfirm {
pub fn new(smooth_type: Smooth, period: f32, threshold: f32) -> Self {
Self {
smooth_type,
period: period as usize,
threshold,
}
}
}

impl Confirm for RsiNeutralityConfirm {
fn lookback(&self) -> usize {
self.period
}

fn validate(&self, data: &OHLCVSeries) -> (Series<bool>, Series<bool>) {
let rsi = rsi(&data.close, self.smooth_type, self.period);

let lower_barrier = RSI_LOWER_BARRIER + self.threshold;
let upper_barrier = RSI_UPPER_BARRIER - self.threshold;
let lower_neutrality = NEUTRALITY_LINE - self.threshold;
let upper_neutrality = NEUTRALITY_LINE + self.threshold;

let prev_rsi = rsi.shift(1);
let back_2_rsi = rsi.shift(2);
let back_3_rsi = rsi.shift(3);

(
rsi.sgt(&NEUTRALITY_LINE)
& rsi.slt(&upper_barrier)
& prev_rsi.sgt(&lower_neutrality)
& back_2_rsi.sgt(&lower_neutrality)
& back_3_rsi.sgt(&lower_neutrality),
rsi.slt(&NEUTRALITY_LINE)
& rsi.sgt(&lower_barrier)
& prev_rsi.slt(&upper_neutrality)
& back_2_rsi.slt(&upper_neutrality)
& back_3_rsi.slt(&upper_neutrality),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ use momentum::rsi;
const RSI_UPPER_BARRIER: f32 = 75.;
const RSI_LOWER_BARRIER: f32 = 35.;

pub struct RsiConfirm {
pub struct RsiSignalLineConfirm {
smooth_type: Smooth,
rsi_period: usize,
smooth_signal: Smooth,
smooth_period: usize,
threshold: f32,
}

impl RsiConfirm {
impl RsiSignalLineConfirm {
pub fn new(
smooth_type: Smooth,
rsi_period: f32,
Expand All @@ -31,7 +31,7 @@ impl RsiConfirm {
}
}

impl Confirm for RsiConfirm {
impl Confirm for RsiSignalLineConfirm {
fn lookback(&self) -> usize {
std::cmp::max(self.rsi_period, self.smooth_period)
}
Expand Down
82 changes: 0 additions & 82 deletions ta_lib/strategies/signal/src/rsi_supertrend.rs

This file was deleted.

7 changes: 6 additions & 1 deletion ta_lib/strategies/trend_follow/src/config/confirm_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@ pub enum ConfirmConfig {
Dumb {
period: f32,
},
Rsi {
RsiNeutrality {
smooth_type: f32,
period: f32,
threshold: f32,
},
RsiSignalLine {
smooth_type: f32,
period: f32,
smooth_signal: f32,
Expand Down
13 changes: 11 additions & 2 deletions ta_lib/strategies/trend_follow/src/mapper/confirm_mapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,19 +43,28 @@ pub fn map_to_confirm(config: ConfirmConfig) -> Box<dyn Confirm> {
divisor,
)),
ConfirmConfig::Dumb { period } => Box::new(DumbConfirm::new(period)),
ConfirmConfig::Rsi {
ConfirmConfig::RsiSignalLine {
smooth_type,
period,
smooth_signal,
smooth_period,
threshold,
} => Box::new(RsiConfirm::new(
} => Box::new(RsiSignalLineConfirm::new(
smooth_deserialize(smooth_type as usize),
period,
smooth_deserialize(smooth_signal as usize),
smooth_period,
threshold,
)),
ConfirmConfig::RsiNeutrality {
smooth_type,
period,
threshold,
} => Box::new(RsiNeutralityConfirm::new(
smooth_deserialize(smooth_type as usize),
period,
threshold,
)),
ConfirmConfig::Roc { period } => Box::new(RocConfirm::new(period)),
ConfirmConfig::Stc {
smooth_type,
Expand Down

0 comments on commit ed3687e

Please sign in to comment.