Ver Fonte

优化日志提示

skyfffire há 2 anos atrás
pai
commit
08043bcfa1
1 ficheiros alterados com 14 adições e 10 exclusões
  1. 14 10
      src/main.rs

+ 14 - 10
src/main.rs

@@ -104,7 +104,6 @@ impl Bot {
         }
         // 5.计算gamma值
         let gamma = calc_gamma(max_spread, q, last_std);
-
         // 6.生成等差数列
         let rl = Array::linspace(self.rl_start, self.rl_end, 50).into_owned();
         let mut rl_list: Vec<RiskLevel> = Vec::new();
@@ -113,26 +112,24 @@ impl Bot {
             let dd = calc_deviation_range(self.rl_end, &self.spread_list, *i);
             // 8.获取Reservation price 预定价格
             let rp = calc_rp(self.mid_price, q, *i, gamma, last_std);
-
             if (rp + 0.5 * dd) < self.ask || (rp - 0.5 * dd) > self.bid {
                 continue;
             }
             // 9.获取dk,用于计算e的dk次方
             let dk = calc_dk(dd, gamma, last_std, *i);
-
             // 10.获取kappa
             let kappa = calc_kappa(gamma, dk, dd, *i);
-
             // 11.获取theta
             let cal_theta = calc_theta(gamma, last_std, kappa, *i);
             // 交易数量
             let order_amount = calc_order_amount(self.rl_end, *i, q, self.quantity_max, self.bid, self.amount_decimal_places);
+            let order_info_map_len_f64 = self.order_info_map.len().to_f64().unwrap_or(0.0);
             let rl_info = RiskLevel{
                 gamma: gamma*i,
                 mid_price: self.mid_price,
                 rp,
                 theta_a_b_half: 0.5*dd,
-                bid: rp - cal_theta,
+                bid: rp - cal_theta*(order_info_map_len_f64 + 1.0f64), // TODO 库存越大,买单越远,使其成交概率降低,有利于去库存
                 bid_best: self.bid,
                 ask: rp + cal_theta,
                 ask_best: self.ask,
@@ -155,9 +152,9 @@ impl Bot {
             // 防止有手续费的账户导致的余额小于实际下单数额
             let order_amount = f64::min(balance_info.stocks, order_info.amount);
             let id = self.exchange.place_okx_order(&self.symbol, &"sell".to_string(), &"limit".to_string(), &order.sell_price.to_string(), &order_amount.to_string()).await.unwrap();
+            eprintln!("委托限价卖单id: {}, 交易对:{}, 数量:{}, 价格:{}", id, self.symbol, order_amount, order.sell_price);
             // 清除已处理订单数据
             self.order_info_map.remove(&*order_info.id);
-            eprintln!("委托限价卖单id: {}, 交易对:{}, 数量:{}, 价格:{}", id, self.symbol, order_amount, &order.sell_price);
         }
         eprintln!("----------------------------------------------------------------------------------------------------------------\n\n");
     }
@@ -175,6 +172,8 @@ impl Bot {
             // eprintln!("order_info: {:?}", order_info);
             // 未成交 && 超时
             if !order_info.status.eq("filled") && order.time_num + self.cancel_time_limit < now_time {
+                eprintln!("----------------------------------------------------------------------------------------------------------------");
+                eprintln!("订单{}秒内未成交,执行取消逻辑,订单下单时间:{}, 现在时间: {}", self.cancel_time_limit, order.time_num, now_time);
                 let is_success = match self.exchange.cancel_okx_order(&self.symbol, &order.id).await {
                     Ok(m) => m,
                     Err(error) => {
@@ -183,7 +182,8 @@ impl Bot {
                 };
                 next_list.push((*key.clone()).parse().unwrap());
                 // 取消订单,可以在这里执行取消订单的操作
-                eprintln!("是否成功:{}, 取消订单: {}, 订单下单时间:{}, 现在时间: {}", is_success, order.id, order.time_num, now_time);
+                eprintln!("是否取消成功:{}, 订单id: {}", is_success, order.id);
+                eprintln!("----------------------------------------------------------------------------------------------------------------\n\n");
             }
         }
         // 清除已处理订单数据
@@ -221,7 +221,7 @@ impl Bot {
         self.order_list_deal().await.expect("订单信息处理异常!");
 
         // 2.获取最新k线
-        let k_line_data = match  exchange.get_binance_klines(&self.symbol.to_string(), &self.short_interval, &200).await {
+        let k_line_data = match exchange.get_binance_klines(&self.symbol.to_string(), &self.short_interval, &200).await {
             Ok(m) => m,
             Err(error) => {
                 return Err(error);
@@ -254,8 +254,12 @@ impl Bot {
             sell_price: order_dict.sell_price,
             time_num: now_time
         };
-        eprintln!("buy_order: {:?}", order);
-        eprintln!("rl_obj: {:?}", rl_list.get(index));
+        eprintln!("----------------------------------------------------------------------------------------------------------------");
+        eprintln!("新的限价买单,id:{}, bid:{}, ask:{}, amount:{}", order.id, order_dict.buy_price, order_dict.sell_price, order_dict.order_amount);
+        eprintln!("order: {:?}", order_dict);
+        eprintln!("rl: {:?}", rl_list.get(index));
+        eprintln!("----------------------------------------------------------------------------------------------------------------\n\n");
+        // 为什么要用map:数组访问是O(n)的时间复杂度,而map是O(1)的时间复杂度
         self.order_info_map.insert(buy_order_id, order);
         self.last_buy_time = now_time;