Ver Fonte

挂单距离、平仓单类型更改

1. 挂单距离限制取消
2. 开、停机清仓 以 市价清仓
3. kucoin 下单增加市、限价类型判断
JiahengHe há 1 ano atrás
pai
commit
6ccd2ff47f
3 ficheiros alterados com 106 adições e 60 exclusões
  1. 3 0
      standard/src/kucoin_swap.rs
  2. 93 56
      strategy/src/quant.rs
  3. 10 4
      strategy/src/strategy.rs

+ 3 - 0
standard/src/kucoin_swap.rs

@@ -393,6 +393,9 @@ impl Platform for KucoinSwap {
         });
         let size = (amount / ct_val).floor();
         params["size"] = json!(size);
+        if price.eq(&Decimal::ZERO){
+            params["type"] = json!("market");
+        }
         match origin_side {
             "kd" => {
                 params["side"] = json!("buy");

+ 93 - 56
strategy/src/quant.rs

@@ -1334,66 +1334,103 @@ impl Quant {
                     }
                     length = length + 1;
                     info!("    仓位:{:?}", position);
-                    match self.platform_rest.get_ticker_symbol(position.symbol.clone()).await {
-                        Ok(ticker) => {
-                            let ap = ticker.sell;
-                            let bp = ticker.buy;
-                            let mp = (ap + bp) / Decimal::TWO;
-                            let price;
-                            let side;
-                            let market_info;
-                            // 获取market
-                            match self.platform_rest.get_market_symbol(position.symbol.clone()).await {
-                                Ok(market) => {
-                                    market_info = market;
-                                }
-                                Err(err) => {
-                                    error!("    {} 获取当前market异常: {}", position.symbol.clone(), err);
-                                    continue;
-                                }
-                            }
-                            info!(?position);
-                            match position.position_mode {
-                                PositionModeEnum::Long => {
-                                    // pd
-                                    price = (mp * dec!(0.9985) / market_info.tick_size).floor() * market_info.tick_size;
-                                    side = "pd";
-                                }
-                                PositionModeEnum::Short => {
-                                    // pk
-                                    price = (mp * dec!(1.0015) / market_info.tick_size).floor() * market_info.tick_size;
-                                    side = "pk";
-                                }
-                                _ => {
-                                    error!("    仓位position_mode匹配失败,不做操作!");
-                                    // 执行完当前币对  结束循环
-                                    continue;
-                                }
-                            }
-                            // 发起清仓订单
-                            info!(?ticker);
-                            let mut ts = TraceStack::default();
-                            ts.on_before_send();
-                            match self.platform_rest.take_order_symbol(position.symbol.clone(), Decimal::ONE, utils::generate_client_id(None).as_str(), side, price, position.amount.abs()).await {
-                                Ok(order) => {
-                                    ts.on_after_send();
-                                    info!("    {}仓位清除下单成功 {:?}, {}", position.symbol.clone(), order, ts.to_string());
-                                    // 执行完当前币对  结束循环
-                                    continue;
-                                }
-                                Err(error) => {
-                                    ts.on_after_send();
-                                    error!("    {}仓位清除下单异常 {}, {}", position.symbol.clone(), error, ts.to_string());
-                                    // 执行完当前币对  结束循环
-                                    continue;
-                                }
-                            };
+                    let price = Decimal::ZERO;
+                    let side;
+                    info!(?position);
+                    match position.position_mode {
+                        PositionModeEnum::Long => {
+                            // pd
+                            side = "pd";
+                        }
+                        PositionModeEnum::Short => {
+                            // pk
+                            side = "pk";
                         }
-                        Err(err) => {
-                            error!("    {} 获取当前ticker异常: {}", position.symbol.clone(), err)
+                        _ => {
+                            error!("    仓位position_mode匹配失败,不做操作!");
+                            // 执行完当前币对  结束循环
+                            continue;
                         }
                     }
+                    // 发起清仓订单
+                    let mut ts = TraceStack::default();
+                    ts.on_before_send();
+                    // 市价单
+                    match self.platform_rest.take_order_symbol(position.symbol.clone(), Decimal::ONE, utils::generate_client_id(None).as_str(), side, price, position.amount.abs()).await {
+                        Ok(order) => {
+                            ts.on_after_send();
+                            info!("    {}仓位清除市价下单成功 {:?}, {}", position.symbol.clone(), order, ts.to_string());
+                            // 执行完当前币对  结束循环
+                            continue;
+                        }
+                        Err(error) => {
+                            ts.on_after_send();
+                            error!("    {}仓位清除市价下单异常 {}, {}", position.symbol.clone(), error, ts.to_string());
+                            // 执行完当前币对  结束循环
+                            continue;
+                        }
+                    };
                 }
+                    // match self.platform_rest.get_ticker_symbol(position.symbol.clone()).await {
+                    //     Ok(ticker) => {
+                    //         let ap = ticker.sell;
+                    //         let bp = ticker.buy;
+                    //         let mp = (ap + bp) / Decimal::TWO;
+                    //         let price;
+                    //         let side;
+                    //         let market_info;
+                    //         // 获取market
+                    //         match self.platform_rest.get_market_symbol(position.symbol.clone()).await {
+                    //             Ok(market) => {
+                    //                 market_info = market;
+                    //             }
+                    //             Err(err) => {
+                    //                 error!("    {} 获取当前market异常: {}", position.symbol.clone(), err);
+                    //                 continue;
+                    //             }
+                    //         }
+                    //         info!(?position);
+                    //         match position.position_mode {
+                    //             PositionModeEnum::Long => {
+                    //                 // pd
+                    //                 price = (mp * dec!(0.9985) / market_info.tick_size).floor() * market_info.tick_size;
+                    //                 side = "pd";
+                    //             }
+                    //             PositionModeEnum::Short => {
+                    //                 // pk
+                    //                 price = (mp * dec!(1.0015) / market_info.tick_size).floor() * market_info.tick_size;
+                    //                 side = "pk";
+                    //             }
+                    //             _ => {
+                    //                 error!("    仓位position_mode匹配失败,不做操作!");
+                    //                 // 执行完当前币对  结束循环
+                    //                 continue;
+                    //             }
+                    //         }
+                    //         // 发起清仓订单
+                    //         info!(?ticker);
+                    //         let mut ts = TraceStack::default();
+                    //         ts.on_before_send();
+                    //         match self.platform_rest.take_order_symbol(position.symbol.clone(), Decimal::ONE, utils::generate_client_id(None).as_str(), side, price, position.amount.abs()).await {
+                    //             Ok(order) => {
+                    //                 ts.on_after_send();
+                    //                 info!("    {}仓位清除下单成功 {:?}, {}", position.symbol.clone(), order, ts.to_string());
+                    //                 // 执行完当前币对  结束循环
+                    //                 continue;
+                    //             }
+                    //             Err(error) => {
+                    //                 ts.on_after_send();
+                    //                 error!("    {}仓位清除下单异常 {}, {}", position.symbol.clone(), error, ts.to_string());
+                    //                 // 执行完当前币对  结束循环
+                    //                 continue;
+                    //             }
+                    //         };
+                    //     }
+                    //     Err(err) => {
+                    //         error!("    {} 获取当前ticker异常: {}", position.symbol.clone(), err)
+                    //     }
+                    // }
+                // }
             }
             Err(error) => {
                 length = 0;

+ 10 - 4
strategy/src/strategy.rs

@@ -956,7 +956,8 @@ impl Strategy {
             if self.pos.long_pos > Decimal::ZERO {
                 if pd_order_num == 0 {
                     let mut price = (short_lower + short_upper) * dec!(0.5);
-                    price = utils::clip(price, self.bp * dec!(0.9995), self.ap * dec!(1.03));
+                    // 不限制大小
+                    // price = utils::clip(price, self.bp * dec!(0.9995), self.ap * dec!(1.03));
                     price = utils::fix_price(price, self.tick_size);
 
                     let order_client_id = utils::generate_client_id(Some(self.broker_id.clone()));
@@ -976,7 +977,8 @@ impl Strategy {
             if self.pos.short_pos > Decimal::ZERO {
                 if pk_order_num == 0 {
                     let mut price = (long_upper + long_lower) * dec!(0.5);
-                    price = utils::clip(price, self.bp * dec!(0.97), self.ap * dec!(1.0005));
+                    // 不限制大小
+                    // price = utils::clip(price, self.bp * dec!(0.97), self.ap * dec!(1.0005));
                     price = utils::fix_price(price, self.tick_size);
 
                     let order_client_id = utils::generate_client_id(Some(self.broker_id.clone()));
@@ -1137,7 +1139,9 @@ impl Strategy {
             // debug!(?buy_price_list);
             if buy_price_list.len() == 0 {
                 let mut target_buy_price = (long_upper + long_lower) * dec!(0.5);
-                target_buy_price = utils::clip(target_buy_price, self.bp * dec!(0.97), self.ap * dec!(1.0005));
+                // 取消大小限制
+                target_buy_price = target_buy_price;
+                // target_buy_price = utils::clip(target_buy_price, self.bp * dec!(0.97), self.ap * dec!(1.0005));
                 target_buy_price = utils::fix_price(target_buy_price, self.tick_size);
                 let value = min(one_hand_long_value, long_free_value);
                 let amount = utils::fix_amount(value / self.mp, self.step_size);
@@ -1164,7 +1168,9 @@ impl Strategy {
             // debug!(?sell_price_list);
             if sell_price_list.len() == 0 {
                 let mut target_sell_price = (short_lower + short_upper) * dec!(0.5);
-                target_sell_price = utils::clip(target_sell_price, self.bp * dec!(0.9995), self.ap * dec!(1.03));
+                // target_sell_price = utils::clip(target_sell_price, self.bp * dec!(0.9995), self.ap * dec!(1.03));
+                // 取消大小限制
+                target_sell_price = target_sell_price;
                 target_sell_price = utils::fix_price(target_sell_price, self.tick_size);
                 let value = min(one_hand_short_value, short_free_value);
                 let amount = utils::fix_amount(value / self.mp, self.step_size);