|
|
@@ -310,7 +310,11 @@ impl Strategy {
|
|
|
} else {
|
|
|
self.ref_bp = ref_price[self.ref_index][0];
|
|
|
self.ref_ap = ref_price[self.ref_index][1];
|
|
|
- self.ref_price = (self.ref_bp + self.ref_ap) * dec!(0.5);
|
|
|
+ let bv = ref_price[self.ref_index][2];
|
|
|
+ let av = ref_price[self.ref_index][3];
|
|
|
+ // 微价格(加权中间价)作为基价 S = (ap*bv+bp*av)/(av+bv)
|
|
|
+ self.ref_price = (self.ref_ap * bv + self.ref_bp * av) / (av + bv);
|
|
|
+ // self.ref_price = (self.ref_bp + self.ref_ap) * dec!(0.5);
|
|
|
}
|
|
|
// debug!(?self.ref_bp, ?self.ref_ap, %self.ref_price);
|
|
|
|
|
|
@@ -475,23 +479,32 @@ impl Strategy {
|
|
|
// #[instrument(skip(self), level="TRACE")]
|
|
|
pub fn generate_dist(&mut self) {
|
|
|
let open = self.trade_open_dist;
|
|
|
- let close = self.trade_close_dist;
|
|
|
+ // let close = self.trade_close_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;
|
|
|
- let predict = self.predict;
|
|
|
+ // let predict = self.predict;
|
|
|
let grid = self.grid;
|
|
|
|
|
|
// 平仓相关
|
|
|
- let mut mp = (ref_bp + ref_ap) * dec!(0.5);
|
|
|
+ // let mut mp = (ref_bp + ref_ap) * dec!(0.5);
|
|
|
+ // 使用微价格 如果微价格偏向卖价,可能表示卖压增加,价格可能走低;偏向买价,可能表示买压增加,价格可能走高。
|
|
|
+ let mut mp = self.ref_price;
|
|
|
let mut buy_start = mp;
|
|
|
let mut sell_start = mp;
|
|
|
- let mut avoid = min(dec!(0.0005), close * dec!(0.5));
|
|
|
+ // let mut avoid = min(dec!(0.0005), close * dec!(0.5));
|
|
|
+ // 最终发送订单时,价格是 upper和lower的中间值,所以 + - avoid无用
|
|
|
+ // self.close_dist = vec![
|
|
|
+ // buy_start * (Decimal::ONE + predict - close + avoid), // buy upper
|
|
|
+ // buy_start * (Decimal::ONE + predict - close - avoid), // buy lower
|
|
|
+ // sell_start * (Decimal::ONE + predict + close - avoid), // sell lower
|
|
|
+ // sell_start * (Decimal::ONE + predict + close + avoid), // sell upper
|
|
|
+ // ];
|
|
|
self.close_dist = vec![
|
|
|
- buy_start * (Decimal::ONE + predict - close + avoid), // buy upper
|
|
|
- buy_start * (Decimal::ONE + predict - close - avoid), // buy lower
|
|
|
- sell_start * (Decimal::ONE + predict + close - avoid), // sell lower
|
|
|
- sell_start * (Decimal::ONE + predict + close + avoid), // sell upper
|
|
|
+ buy_start, // buy upper
|
|
|
+ buy_start, // buy lower
|
|
|
+ sell_start, // sell lower
|
|
|
+ sell_start, // sell upper
|
|
|
];
|
|
|
// debug!(?mp, ?buy_start, ?sell_start, ?avoid, ?close_dist);
|
|
|
|
|
|
@@ -512,15 +525,16 @@ impl Strategy {
|
|
|
// debug!(?mode, ?buy_start, ?sell_start, ?mp);
|
|
|
|
|
|
// 开仓相关
|
|
|
- avoid = min(dec!(0.002), open * dec!(0.1));
|
|
|
- // 持仓偏移
|
|
|
+ // avoid = min(dec!(0.002), open * dec!(0.1));
|
|
|
+ // 持仓偏移(有网格时生效)(有持多单时,开仓价格向上偏移;持空单时,开仓价格向下偏移) grid = 1(网格数量)
|
|
|
let buy_shift = Decimal::ONE + pos_rate[0] * grid;
|
|
|
let sell_shift = Decimal::ONE + pos_rate[1] * grid;
|
|
|
+ // 最终发送订单时,价格是 upper和lower的中间值,所以 + - avoid无用
|
|
|
self.open_dist = vec![
|
|
|
- buy_start * (Decimal::ONE + predict - open * buy_shift + avoid), // buy upper
|
|
|
- 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 - open * buy_shift), // buy upper
|
|
|
+ buy_start * (Decimal::ONE - open * buy_shift), // buy lower
|
|
|
+ sell_start * (Decimal::ONE + open * sell_shift), // sell lower
|
|
|
+ sell_start * (Decimal::ONE + open * sell_shift), // sell upper
|
|
|
];
|
|
|
// debug!(?avoid, ?buy_shift, ?sell_shift, ?avoid, ?open_dist);
|
|
|
|