From 9c367b380751c3b1d2aace660ab9659996307ed2 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sat, 25 Jul 2026 17:09:35 +0200 Subject: [PATCH] Refactor, and added strategy with risk --- Cargo.lock | 1 + pulse-wire/Cargo.toml | 1 + pulse-wire/src/general.rs | 18 ++++++------------ pulse-wire/src/lib.rs | 4 ++++ pulse-wire/src/strategy.rs | 18 ++++++++++++++++++ pulse-wire/src/terminal.rs | 7 +++++++ pulse-wire/src/units.rs | 30 ++++++++++++++++++++++++++++++ src/engine/engine.rs | 11 +++-------- src/engine/fetch.rs | 8 ++------ src/engine/terminal.rs | 6 ++---- src/terminal/formatting.rs | 7 +------ src/terminal/main.rs | 5 +---- src/terminal/terminal.rs | 3 ++- 13 files changed, 78 insertions(+), 41 deletions(-) create mode 100644 pulse-wire/src/strategy.rs diff --git a/Cargo.lock b/Cargo.lock index fc34e9b..8495645 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3907,6 +3907,7 @@ name = "pulse-wire" version = "0.1.0-alpha.0" dependencies = [ "pulse-macros", + "serde", ] [[package]] diff --git a/pulse-wire/Cargo.toml b/pulse-wire/Cargo.toml index 449b94f..10ed64f 100644 --- a/pulse-wire/Cargo.toml +++ b/pulse-wire/Cargo.toml @@ -5,3 +5,4 @@ edition = "2024" [dependencies] pulse-macros = { workspace = true } +serde = { version = "1.0.229", features = ["serde_derive"] } diff --git a/pulse-wire/src/general.rs b/pulse-wire/src/general.rs index 7f286a4..78ca796 100644 --- a/pulse-wire/src/general.rs +++ b/pulse-wire/src/general.rs @@ -2,7 +2,7 @@ use pulse_macros::pwp; use crate::{ PulseWire, - units::{Symbol, USD}, + units::{Direction, Symbol, USD}, }; #[pwp] @@ -20,9 +20,11 @@ pub enum Volatility { } #[pwp] -pub enum Direction { - Buy, - Sell, +pub enum LogKind { + Info, + Warn, + Err, + Debug, } #[pwp] @@ -36,14 +38,6 @@ pub struct Signal { pub stop_loss: USD, } -#[pwp] -pub enum LogKind { - Info, - Warn, - Err, - Debug, -} - #[pwp] pub struct EventLog { pub kind: LogKind, diff --git a/pulse-wire/src/lib.rs b/pulse-wire/src/lib.rs index fba6f5d..689db77 100644 --- a/pulse-wire/src/lib.rs +++ b/pulse-wire/src/lib.rs @@ -2,11 +2,15 @@ use std::path::PathBuf; pub mod general; +pub mod strategy; pub mod terminal; pub mod units; pub mod prelude { + pub use crate::PulseWire; pub use crate::general::*; + pub use crate::server_path; + pub use crate::strategy::*; pub use crate::terminal::*; pub use crate::units::*; } diff --git a/pulse-wire/src/strategy.rs b/pulse-wire/src/strategy.rs new file mode 100644 index 0000000..bab45e5 --- /dev/null +++ b/pulse-wire/src/strategy.rs @@ -0,0 +1,18 @@ +use crate::{PulseWire, units::TimeFrame}; +use pulse_macros::pwp; + +#[pwp] +#[derive(serde::Deserialize, serde::Serialize)] +pub struct Strategy { + name: String, + timeframes: Vec, + description: String, + author: String, +} + +#[pwp] +#[derive(serde::Deserialize, serde::Serialize)] +pub struct Risk { + name: String, + max_loss: u8, +} diff --git a/pulse-wire/src/terminal.rs b/pulse-wire/src/terminal.rs index 79d901b..6851c2d 100644 --- a/pulse-wire/src/terminal.rs +++ b/pulse-wire/src/terminal.rs @@ -1,6 +1,7 @@ use crate::{ PulseWire, general::{EventLog, MarketTrend, Position, Signal, Volatility}, + strategy::{Risk, Strategy}, units::{Symbol, USD}, }; use pulse_macros::pwp; @@ -100,6 +101,12 @@ pub enum Feed { Failed, } +#[pwp] +pub struct StrategyView { + strategy: Strategy, + risk: Risk, +} + impl std::fmt::Display for AlertLevel { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { diff --git a/pulse-wire/src/units.rs b/pulse-wire/src/units.rs index b43000a..a59c668 100644 --- a/pulse-wire/src/units.rs +++ b/pulse-wire/src/units.rs @@ -1,3 +1,5 @@ +use pulse_macros::pwp; + use crate::PulseWire; #[derive(Debug, Clone)] @@ -6,6 +8,34 @@ pub struct Symbol(pub String); #[derive(Debug, Clone, Copy)] pub struct USD(pub f64); +#[pwp] +#[derive(Copy, serde::Deserialize, serde::Serialize)] +pub enum TimeFrame { + M1, + M3, + M5, + M15, + M30, + + H1, + H2, + H4, + H8, + H12, + + D1, + D3, + + W1, + Month1, +} + +#[pwp] +pub enum Direction { + Buy, + Sell, +} + impl std::fmt::Display for Symbol { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "\x1b[35m{}\x1b[0m", self.0) diff --git a/src/engine/engine.rs b/src/engine/engine.rs index 9b3dfe7..438b06c 100644 --- a/src/engine/engine.rs +++ b/src/engine/engine.rs @@ -1,15 +1,10 @@ -use std::sync::Arc; - -use pulse_wire::{ - general::Position, - units::{Symbol, USD}, -}; -use tokio::{sync::Mutex, task::JoinHandle}; - use crate::{ store::{accounts::AccountList, config::Config}, terminal::TerminalServer, }; +use pulse_wire::prelude::*; +use std::sync::Arc; +use tokio::{sync::Mutex, task::JoinHandle}; #[derive(Debug, Clone)] pub struct Engine { diff --git a/src/engine/fetch.rs b/src/engine/fetch.rs index d09be91..28a3733 100644 --- a/src/engine/fetch.rs +++ b/src/engine/fetch.rs @@ -1,10 +1,6 @@ -use std::collections::HashMap; - -use pulse_wire::{ - terminal::MarketItem, - units::{Symbol, USD}, -}; +use pulse_wire::prelude::*; use serde_json::Value; +use std::collections::HashMap; fn number(value: &Value, field: &str) -> Result { let raw = value[field] diff --git a/src/engine/terminal.rs b/src/engine/terminal.rs index 72666c2..7de2c44 100644 --- a/src/engine/terminal.rs +++ b/src/engine/terminal.rs @@ -1,9 +1,9 @@ +use crate::engine::Engine; +use pulse_wire::prelude::*; use std::{ collections::HashMap, sync::{Arc, Weak}, }; - -use pulse_wire::{PulseWire, general::{EventLog, LogKind}, terminal::TerminalClientMessage}; use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, net::{ @@ -13,8 +13,6 @@ use tokio::{ sync::Mutex, }; -use crate::engine::Engine; - #[derive(Debug)] pub struct TerminalServer { clients: Mutex>, diff --git a/src/terminal/formatting.rs b/src/terminal/formatting.rs index 6a21e0a..a408d88 100644 --- a/src/terminal/formatting.rs +++ b/src/terminal/formatting.rs @@ -1,9 +1,4 @@ -use pulse_wire::terminal::{ - Alert, AlertLevel, InspectItem, InspectTarget, MarketItem, MarketOverview, Status, -}; - -use pulse_wire::general::{Direction, EventLog, LogKind, Position, Signal}; -use pulse_wire::units::format_f64; +use pulse_wire::prelude::*; pub trait Formatted { fn get_formatted(&self) -> Vec; diff --git a/src/terminal/main.rs b/src/terminal/main.rs index fa224d0..6e7e9d5 100644 --- a/src/terminal/main.rs +++ b/src/terminal/main.rs @@ -21,10 +21,7 @@ use pulse_ui::{ use crate::formatting::{Formatted, apply_padding}; -use pulse_wire::{ - general::{EventLog, Position, Signal}, - terminal::{InspectTarget, MarketItem, MarketOverview, Status}, -}; +use pulse_wire::prelude::*; pub struct PulseTradeApp { sock: Option, diff --git a/src/terminal/terminal.rs b/src/terminal/terminal.rs index 763cae7..98fac0c 100644 --- a/src/terminal/terminal.rs +++ b/src/terminal/terminal.rs @@ -1,4 +1,5 @@ -use pulse_wire::{PulseWire, server_path, terminal::TerminalServerMessage}; +use pulse_wire::prelude::*; + use tokio::{ io::{AsyncReadExt, AsyncWriteExt}, net::{