Order size
This commit is contained in:
@@ -4,7 +4,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
use hypersdk::Decimal;
|
use hypersdk::Decimal;
|
||||||
|
|
||||||
pub type SignalStatus = Result<Signal, Signal>;
|
pub type SignalStatus = Result<(Signal, Option<Decimal>), (Signal, Option<Decimal>)>;
|
||||||
|
|
||||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
pub enum TerminalServerMessage {
|
pub enum TerminalServerMessage {
|
||||||
|
|||||||
@@ -1,12 +1,19 @@
|
|||||||
use hypersdk::hypercore::{
|
use hypersdk::{
|
||||||
self, BatchOrder, OrderRequest, OrderResponseStatus, OrderTypePlacement, Side, TimeInForce,
|
Decimal,
|
||||||
|
hypercore::{
|
||||||
|
self, BatchOrder, OrderRequest, OrderResponseStatus, OrderTypePlacement, Side, TimeInForce,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
use pulse_sdk::prelude::*;
|
use pulse_sdk::prelude::*;
|
||||||
|
|
||||||
use crate::engine::Engine;
|
use crate::engine::Engine;
|
||||||
|
|
||||||
impl Engine {
|
impl Engine {
|
||||||
pub async fn execute_signal(&self, signal: &Signal) -> anyhow::Result<()> {
|
pub async fn execute_signal(
|
||||||
|
&self,
|
||||||
|
size: &mut Option<Decimal>,
|
||||||
|
signal: &Signal,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
let client = hypercore::mainnet();
|
let client = hypercore::mainnet();
|
||||||
let accounts = self.accounts.lock().await;
|
let accounts = self.accounts.lock().await;
|
||||||
|
|
||||||
@@ -30,6 +37,8 @@ impl Engine {
|
|||||||
|
|
||||||
let engine_order = self.risk_engine.create_order(signal).await?;
|
let engine_order = self.risk_engine.create_order(signal).await?;
|
||||||
|
|
||||||
|
*size = Some(engine_order.size);
|
||||||
|
|
||||||
let order = BatchOrder {
|
let order = BatchOrder {
|
||||||
orders: vec![
|
orders: vec![
|
||||||
OrderRequest {
|
OrderRequest {
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ impl StrategyEngine {
|
|||||||
|
|
||||||
Some(StrategyMessage::Signal(mut signal)) => {
|
Some(StrategyMessage::Signal(mut signal)) => {
|
||||||
if !engine.risk_engine.validate_signal(&mut signal).await? {
|
if !engine.risk_engine.validate_signal(&mut signal).await? {
|
||||||
engine.signals.lock().await.push(Err(signal));
|
engine.signals.lock().await.push(Err((signal, None)));
|
||||||
|
|
||||||
engine
|
engine
|
||||||
.terminal_server
|
.terminal_server
|
||||||
@@ -163,15 +163,17 @@ impl StrategyEngine {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = match engine.execute_signal(&signal).await {
|
let mut size = None;
|
||||||
Ok(_) => Ok(signal),
|
|
||||||
|
let result = match engine.execute_signal(&mut size, &signal).await {
|
||||||
|
Ok(_) => Ok((signal, size)),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
engine
|
engine
|
||||||
.terminal_server
|
.terminal_server
|
||||||
.error("engine::order", &format!("Failed to execute signal: {e}"))
|
.error("engine::order", &format!("Failed to execute signal: {e}"))
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
Err(signal)
|
Err((signal, size))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ impl Formatted for EventLog {
|
|||||||
impl Formatted for SignalStatus {
|
impl Formatted for SignalStatus {
|
||||||
fn get_formatted(&self) -> Vec<String> {
|
fn get_formatted(&self) -> Vec<String> {
|
||||||
match self {
|
match self {
|
||||||
Ok(signal) | Err(signal) => {
|
Ok((signal, size)) | Err((signal, size)) => {
|
||||||
vec![
|
vec![
|
||||||
if matches!(self, Ok(_)) {
|
if matches!(self, Ok(_)) {
|
||||||
format!("\x1b[34mOK\x1b[0m")
|
format!("\x1b[34mOK\x1b[0m")
|
||||||
@@ -67,6 +67,7 @@ impl Formatted for SignalStatus {
|
|||||||
} else {
|
} else {
|
||||||
format!("\x1b[31mSELL\x1b[0m")
|
format!("\x1b[31mSELL\x1b[0m")
|
||||||
},
|
},
|
||||||
|
size.map(|v| format_f64(v.as_f64())).unwrap_or_default(),
|
||||||
format_symbol(&signal.symbol),
|
format_symbol(&signal.symbol),
|
||||||
format_usd(signal.entry_price.as_f64()),
|
format_usd(signal.entry_price.as_f64()),
|
||||||
format_usd(signal.take_profit.as_f64()),
|
format_usd(signal.take_profit.as_f64()),
|
||||||
|
|||||||
Reference in New Issue
Block a user