more profit
This commit is contained in:
@@ -14,7 +14,11 @@ use tower_http::cors::CorsLayer;
|
||||
|
||||
use crate::{
|
||||
alpaca::AlpacaClient,
|
||||
config::{ATR_TRAIL_ACTIVATION_MULTIPLIER, ATR_TRAIL_MULTIPLIER},
|
||||
config::{
|
||||
ATR_STOP_MULTIPLIER, ATR_TRAIL_ACTIVATION_MULTIPLIER, ATR_TRAIL_MULTIPLIER,
|
||||
BREAKEVEN_ACTIVATION_PCT, BREAKEVEN_MAX_LOSS_PCT,
|
||||
EARLY_TRAIL_ACTIVATION_MULTIPLIER, EARLY_TRAIL_MULTIPLIER,
|
||||
},
|
||||
paths::{LIVE_ENTRY_ATRS_FILE, LIVE_EQUITY_FILE, LIVE_HIGH_WATER_MARKS_FILE},
|
||||
types::EquitySnapshot,
|
||||
};
|
||||
@@ -580,12 +584,26 @@ async fn api_positions(State(state): State<Arc<DashboardState>>) -> impl IntoRes
|
||||
0.0
|
||||
};
|
||||
|
||||
let (trail_status, stop_loss_price) = if pnl_pct >= activation_gain && entry_atr > 0.0 {
|
||||
let best_pnl = (high_water_mark - entry_price) / entry_price;
|
||||
let big_activation = if entry_atr > 0.0 {
|
||||
(ATR_TRAIL_ACTIVATION_MULTIPLIER * entry_atr) / entry_price
|
||||
} else { 0.0 };
|
||||
let small_activation = if entry_atr > 0.0 {
|
||||
(EARLY_TRAIL_ACTIVATION_MULTIPLIER * entry_atr) / entry_price
|
||||
} else { 0.0 };
|
||||
|
||||
let (trail_status, stop_loss_price) = if best_pnl >= BREAKEVEN_ACTIVATION_PCT && pnl_pct <= -BREAKEVEN_MAX_LOSS_PCT {
|
||||
("Breakeven!".to_string(), entry_price * (1.0 - BREAKEVEN_MAX_LOSS_PCT))
|
||||
} else if entry_atr > 0.0 && best_pnl >= big_activation {
|
||||
let trail_distance = ATR_TRAIL_MULTIPLIER * entry_atr;
|
||||
let stop_price = high_water_mark - trail_distance;
|
||||
("Active".to_string(), stop_price)
|
||||
("Wide Trail".to_string(), stop_price)
|
||||
} else if entry_atr > 0.0 && pnl_pct >= small_activation {
|
||||
let trail_distance = EARLY_TRAIL_MULTIPLIER * entry_atr;
|
||||
let stop_price = high_water_mark - trail_distance;
|
||||
("Tight Trail".to_string(), stop_price)
|
||||
} else {
|
||||
("Inactive".to_string(), entry_price - ATR_TRAIL_MULTIPLIER * entry_atr)
|
||||
("Inactive".to_string(), entry_price - ATR_STOP_MULTIPLIER * entry_atr)
|
||||
};
|
||||
|
||||
PositionResponse {
|
||||
|
||||
Reference in New Issue
Block a user