瀏覽代碼

参数加进来了,下单做完了,开始做core层的逻辑处理。

skyffire 1 年之前
父節點
當前提交
7d97b9144e
共有 4 個文件被更改,包括 20 次插入5 次删除
  1. 2 0
      config.toml.sample
  2. 3 1
      global/src/params.rs
  3. 2 2
      standard/src/gate_swap.rs
  4. 13 2
      strategy/src/strategy.rs

+ 2 - 0
config.toml.sample

@@ -40,3 +40,5 @@ colo = 0
 log_level = "info"
 # 中控端口
 port = 6000
+# 暂用的止损比例
+max_spread = 0.02

+ 3 - 1
global/src/params.rs

@@ -48,7 +48,9 @@ pub struct Params {
     // 日志级别,从低到高依次是:[trace, debug, info, warn, error]
     pub log_level: String,
     // 中控端口
-    pub port: u32
+    pub port: u32,
+    // 止损比例
+    pub max_spread: Decimal,
 }
 
 impl Params {

+ 2 - 2
standard/src/gate_swap.rs

@@ -11,7 +11,7 @@ use rust_decimal_macros::dec;
 use serde_json::{json};
 use tokio::spawn;
 use tokio::time::Instant;
-use tracing::{error, trace};
+use tracing::{error, info, trace};
 use crate::{Platform, ExchangeEnum, Account, Position, Ticker, Market, Order, OrderCommand, PositionModeEnum, PriceOrder};
 use exchanges::gate_swap_rest::GateSwapRest;
 use global::trace_stack::TraceStack;
@@ -628,7 +628,7 @@ impl Platform for GateSwap {
                     Ok(mut order) => {
                         order.trace_stack = ts;
 
-                        self_clone.order_sender.send(order).await.unwrap();
+                        self_clone.order_sender.send(order.clone()).await.unwrap();
 
                         // 成功之后下止损单
                         let price_order_result = self_clone.take_stop_loss_order(

+ 13 - 2
strategy/src/strategy.rs

@@ -95,8 +95,9 @@ pub struct Strategy {
     pub open_dist: Vec<Decimal>,                                    // 开仓相关价格
     pub close_dist: Vec<Decimal>,                                   // 平仓相关价格
 
-    pub trade_close_dist: Decimal,                                  //
-    pub trade_open_dist: Decimal,                                   //
+    pub trade_close_dist: Decimal,                                  // 平仓间距,来自于params
+    pub trade_open_dist: Decimal,                                   // 开仓间距,来自于params
+    pub stop_loss_dist: Decimal,                                    // 止损间距,来自于params
 
     pub ref_index: usize,                                           //
     pub predict: Decimal,                                           //
@@ -192,6 +193,7 @@ impl Strategy {
             close_dist: vec![],
             trade_close_dist: params.close,
             trade_open_dist: params.open,
+            stop_loss_dist: params.max_spread,
             ref_index: 0,
             predict: Default::default(),
             predict_alpha: Default::default(),
@@ -404,6 +406,7 @@ impl Strategy {
         self.short_pos_bias.rescale(2);
         self.trade_open_dist.rescale(6);
         self.trade_close_dist.rescale(6);
+        self.stop_loss_dist.rescale(6);
         self.predict.rescale(5);
         // 挂单列表长度
         let o_num = self.local_orders.len();
@@ -474,6 +477,8 @@ impl Strategy {
     pub fn generate_dist(&mut self) {
         let open = self.trade_open_dist;
         let close = self.trade_close_dist;
+        let stop_loss = self.stop_loss_dist;
+
         let pos_rate = vec![self.long_hold_rate, self.short_hold_rate];
         let ref_bp = self.ref_bp;
         let ref_ap = self.ref_ap;
@@ -519,6 +524,8 @@ impl Strategy {
             buy_start * (Decimal::ONE + predict - open * buy_shift  - avoid),             // buy lower
             sell_start * (Decimal::ONE + predict + open * sell_shift - avoid),            // sell lower
             sell_start * (Decimal::ONE + predict + open * sell_shift + avoid),            // sell upper
+            buy_start * (Decimal::ONE - stop_loss),                                       // buy stop loss
+            sell_start * (Decimal::ONE + stop_loss),                                      // sell stop loss
         ];
         // debug!(?avoid, ?buy_shift, ?sell_shift, ?avoid, ?open_dist);
 
@@ -1117,8 +1124,10 @@ impl Strategy {
         // 挂单范围获取
         let long_upper = self.open_dist[0];
         let long_lower = self.open_dist[1];
+        let long_stop_loss = self.open_dist[4];
         let short_lower = self.open_dist[2];
         let short_upper = self.open_dist[3];
+        let short_stop_loss = self.open_dist[5];
 
         // 获取当前挂单价值
         let mut buy_price_list: Vec<Decimal> = vec![];
@@ -1177,6 +1186,7 @@ impl Strategy {
                         "kd".to_string(),
                         target_buy_price.to_string(),
                         client_id.clone(),
+                        long_stop_loss.to_string(),
                     ];
 
                     // debug!(?order);
@@ -1205,6 +1215,7 @@ impl Strategy {
                         "kk".to_string(),
                         target_sell_price.to_string(),
                         client_id.clone(),
+                        short_stop_loss.to_string(),
                     ];
 
                     // debug!(?order);