|
|
@@ -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);
|