Bläddra i källkod

kappa值综合应用(beta)

skyffire 1 år sedan
förälder
incheckning
9baa276647
6 ändrade filer med 124 tillägg och 75 borttagningar
  1. 1 1
      Cargo.toml
  2. 20 19
      strategy/config.toml
  3. 2 2
      strategy/src/core.rs
  4. 35 35
      strategy/src/predictor.rs
  5. 58 10
      strategy/src/strategy.rs
  6. 8 8
      strategy/src/utils.rs

+ 1 - 1
Cargo.toml

@@ -1,6 +1,6 @@
 [package]
 name = "as-rust"
-version = "3.2.4"
+version = "3.4.0"
 edition = "2021"
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

+ 20 - 19
strategy/config.toml

@@ -1,24 +1,25 @@
-broker_id = ""
-account_name = "test_account_001"
-access_key = ""
-secret_key = ""
-pass_key = ""
-exchange = "coinex_usdt_swap"
-pair = "rose_usdt"
-open = 0.01
-close = 0.0002
-lever_rate = 1.0
-interval = 0.1
+broker_id = "bitget"
+account_name = "bitget_localhost"
+access_key = "bg_8b0529224c5bc6f58952d5560fb57600"
+secret_key = "50b59eaf53967a198f10cab1dbf32f18c4822b47cbbc3076c0c7a43dc5452b1d"
+pass_key = "Walkman550"
+exchange = "bitget_usdt_swap"
+pair = "om_usdt"
+open = 0.0007
+close = 0.0003
+lever_rate = 0.1
+hold_coin = 0
+interval = 100
 ref_exchange = ["binance_usdt_swap"]
-ref_pair = ["ftm_usdt"]
-used_pct = 0.9
-index = 0
-save = 0
-hold_coin = 0.0
-log = 1
+ref_pair = ["om_usdt"]
+used_pct = 1
 stop_loss = 0.02
 gamma = 0.999
 grid = 1
-place_order_limit = 0
 colo = 0
-log_level = "debug"
+log_level = "info"
+port = 6001
+
+# 账密
+# walkman9460@163.com
+# Walkman550@

+ 2 - 2
strategy/src/core.rs

@@ -510,7 +510,7 @@ impl Core {
                                                               &self.local_coin,
                                                               &self.ref_price,
                                                               &self.predict,
-                                                              &trace_stack.ins);
+                                                              &trace_stack.ins).await;
                         // trace_stack.on_after_strategy();
                         // 记录指令触发信息
                         if order.is_not_empty() {
@@ -665,7 +665,7 @@ impl Core {
                                                        &self.local_coin,
                                                        &self.ref_price,
                                                        &self.predict,
-                                                       &trace_stack.ins);
+                                                       &trace_stack.ins).await;
                 trace_stack.on_after_strategy();
 
                 if orders.is_not_empty() {

+ 35 - 35
strategy/src/predictor.rs

@@ -187,41 +187,41 @@ mod tests {
 
     #[test]
     fn get_ref_price_test() {
-        let mut predictor = Predictor::new(1)
-            .alpha(vec![dec!(0.99); 100])
-            .gamma(dec!(0.8));
-
+        // let mut predictor = Predictor::new(1)
+        //     .alpha(vec![dec!(0.99); 100])
+        //     .gamma(dec!(0.8));
+        //
+        // //
+        // let mut ref_ticker_map: BTreeMap<String, Ticker> = BTreeMap::new();
+        // ref_ticker_map.insert("binance".to_string(), Ticker{
+        //     time: 0,
+        //     high: Default::default(),
+        //     low: Default::default(),
+        //     sell: dec!(0.93),
+        //     buy: dec!(0.92),
+        //     last: Default::default(),
+        //     volume: Default::default(),
+        // });
+        // println!("before market info: {:?}", predictor.get_ref_price(&ref_ticker_map));
         //
-        let mut ref_ticker_map: BTreeMap<String, Ticker> = BTreeMap::new();
-        ref_ticker_map.insert("binance".to_string(), Ticker{
-            time: 0,
-            high: Default::default(),
-            low: Default::default(),
-            sell: dec!(0.93),
-            buy: dec!(0.92),
-            last: Default::default(),
-            volume: Default::default(),
-        });
-        println!("before market info: {:?}", predictor.get_ref_price(&ref_ticker_map));
-
-        let mut market_info = vec![];
-        market_info = vec![dec!(0.99), dec!(1.0), dec!(0.991), dec!(0.79), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89), dec!(0.79), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79)];
-        predictor.market_info_handler(&market_info);
-        println!("market info 0: {:?}", predictor.get_ref_price(&ref_ticker_map));
-        market_info = vec![dec!(0.98), dec!(0.99), dec!(0.981), dec!(0.49), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89)];
-        predictor.market_info_handler(&market_info);
-        println!("market info 1: {:?}", predictor.get_ref_price(&ref_ticker_map));
-        market_info = vec![dec!(0.93), dec!(1.0), dec!(0.931), dec!(0.79), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89)];
-        predictor.market_info_handler(&market_info);
-        println!("market info 2: {:?}", predictor.get_ref_price(&ref_ticker_map));
-        market_info = vec![dec!(0.98), dec!(0.49), dec!(0.981), dec!(0.49), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89)];
-        predictor.market_info_handler(&market_info);
-        println!("market info 3: {:?}", predictor.get_ref_price(&ref_ticker_map));
-        market_info = vec![dec!(0.99), dec!(1.0), dec!(0.991), dec!(0.69), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89)];
-        predictor.market_info_handler(&market_info);
-        println!("market info 4: {:?}", predictor.get_ref_price(&ref_ticker_map));
-        market_info = vec![dec!(0.98), dec!(0.969), dec!(0.981), dec!(0.49), dec!(0.99), dec!(1.0), dec!(1.0), dec!(1.0), dec!(0.89)];
-        predictor.market_info_handler(&market_info);
-        println!("market info 5: {:?}", predictor.get_ref_price(&ref_ticker_map));
+        // let mut market_info = vec![];
+        // market_info = vec![dec!(0.99), dec!(1.0), dec!(0.991), dec!(0.79), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89), dec!(0.79), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79)];
+        // predictor.market_info_handler(&market_info);
+        // println!("market info 0: {:?}", predictor.get_ref_price(&ref_ticker_map));
+        // market_info = vec![dec!(0.98), dec!(0.99), dec!(0.981), dec!(0.49), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89)];
+        // predictor.market_info_handler(&market_info);
+        // println!("market info 1: {:?}", predictor.get_ref_price(&ref_ticker_map));
+        // market_info = vec![dec!(0.93), dec!(1.0), dec!(0.931), dec!(0.79), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89)];
+        // predictor.market_info_handler(&market_info);
+        // println!("market info 2: {:?}", predictor.get_ref_price(&ref_ticker_map));
+        // market_info = vec![dec!(0.98), dec!(0.49), dec!(0.981), dec!(0.49), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89)];
+        // predictor.market_info_handler(&market_info);
+        // println!("market info 3: {:?}", predictor.get_ref_price(&ref_ticker_map));
+        // market_info = vec![dec!(0.99), dec!(1.0), dec!(0.991), dec!(0.69), dec!(0.99), dec!(1.0), dec!(0.89), dec!(0.79), dec!(0.89)];
+        // predictor.market_info_handler(&market_info);
+        // println!("market info 4: {:?}", predictor.get_ref_price(&ref_ticker_map));
+        // market_info = vec![dec!(0.98), dec!(0.969), dec!(0.981), dec!(0.49), dec!(0.99), dec!(1.0), dec!(1.0), dec!(1.0), dec!(0.89)];
+        // predictor.market_info_handler(&market_info);
+        // println!("market info 5: {:?}", predictor.get_ref_price(&ref_ticker_map));
     }
 }

+ 58 - 10
strategy/src/strategy.rs

@@ -1,16 +1,15 @@
 use std::cmp::{max, min};
 use std::collections::HashMap;
 use std::ops::{Div, Mul};
-// use std::str::FromStr;
 use chrono::Utc;
+use reqwest::Client;
 use rust_decimal::Decimal;
 use rust_decimal::prelude::{FromPrimitive, ToPrimitive};
 use rust_decimal_macros::dec;
+use serde_json::Value;
 use crate::model::{LocalPosition, OrderInfo};
 use crate::utils;
 use tracing::{info, error, warn};
-// use reqwest::{Client};
-// use tokio::spawn;
 use tokio::time::Instant;
 use global::params::Params;
 use standard::{OrderCommand};
@@ -97,6 +96,7 @@ pub struct Strategy {
 
     pub trade_close_dist: Decimal,                                  //
     pub trade_open_dist: Decimal,                                   //
+    pub prev_shwo_open_dist: Decimal,
 
     pub ref_index: usize,                                           //
     pub predict: Decimal,                                           //
@@ -193,6 +193,7 @@ impl Strategy {
             close_dist: vec![],
             trade_close_dist: params.close,
             trade_open_dist: params.open,
+            prev_shwo_open_dist: params.open,
             ref_index: 0,
             predict: Default::default(),
             predict_alpha: Default::default(),
@@ -471,10 +472,47 @@ impl Strategy {
         // debug!(?command);
     }
 
+    // 获取外部开单距离
+    pub async fn get_open_dist(&mut self) -> Decimal {
+        let url = "http://assist.skyfffire.com:9999";
+
+        // 创建 HTTP 客户端
+        let client = Client::new();
+
+        // 发送 GET 请求
+        let response = client.get(url)
+            .send()
+            .await.unwrap();
+
+        if response.status().is_success() {
+            let response_text = response.text().await.unwrap();
+            let rst: Value = serde_json::from_str(response_text.as_str()).unwrap();
+            let is_success = rst.as_bool().unwrap();
+
+            return if is_success {
+                let delta_sum = Decimal::from_f64(rst["delta_sum"].as_f64().unwrap()).unwrap();
+
+                let mut open = delta_sum / Decimal::TWO;
+                open.rescale(6);
+
+                open
+            } else {
+                Decimal::ZERO
+            }
+        }
+
+        return Decimal::ZERO
+    }
+
     // 生成各类挂单价格,原文是gen_dist
     // #[instrument(skip(self), level="TRACE")]
-    pub fn generate_dist(&mut self) {
-        let open = self.trade_open_dist;
+    pub async fn generate_dist(&mut self) {
+        let network_open = self.get_open_dist().await;
+        let open = if network_open == Decimal::ZERO {
+            self.trade_open_dist
+        } else {
+            network_open
+        };
         let close = self.trade_close_dist;
         let pos_rate = vec![self.long_hold_rate, self.short_hold_rate];
         let ref_bp = self.ref_bp;
@@ -482,6 +520,13 @@ impl Strategy {
         let predict = self.predict;
         let grid = self.grid;
 
+        // 打印当前参数
+        let rise = self.prev_shwo_open_dist / open;
+        if rise < dec!(0.5) || rise > dec!(2) {
+            info!("开仓距离发生改变:{}->{}", self.prev_shwo_open_dist, open);
+            self.prev_shwo_open_dist = open;
+        }
+
         // 平仓相关
         let mut mp = (ref_bp + ref_ap) * dec!(0.5);
         let mut buy_start = mp;
@@ -1243,7 +1288,7 @@ impl Strategy {
     }
 
     // 在满足条件后,返回非空command,否则返回一个空的command。原文的onTime。
-    pub fn on_tick(&mut self,
+    pub async fn on_tick(&mut self,
                    local_orders: &HashMap<String, OrderInfo>,
                    local_position: &LocalPosition,
                    agg_market: &Vec<Decimal>,
@@ -1274,7 +1319,7 @@ impl Strategy {
         // 刷新多空双方持仓比例
         self._pos_rate();
         // 生成开仓、平仓等相关价格
-        self.generate_dist();
+        self.generate_dist().await;
 
         // 下单指令处理逻辑
         self._cancel_open(&mut command, local_orders);              // 撤单命令处理
@@ -1362,20 +1407,23 @@ impl Strategy {
 mod tests {
     use rust_decimal::Decimal;
     use rust_decimal_macros::dec;
+    use tracing::info;
     use global::params::Params;
     use crate::strategy::Strategy;
 
-    #[test]
-    fn on_time_test() {
+    #[tokio::test]
+    async fn on_time_test() {
         global::log_utils::init_log_with_debug();
 
-        let params = Params::new("config.toml.gate").unwrap();
+        let params = Params::new_json("config.json.gate", 223).unwrap();
         let mut strategy = Strategy::new(&params, true);
 
         strategy.is_ready = true;
         strategy.equity = dec!(1000);
         strategy.lever_rate = Decimal::ONE;
 
+        info!("{}", strategy.get_open_dist().await.to_string())
+
         // debug!("{:?}", strategy.on_time(&trader_msg));
     }
 }

+ 8 - 8
strategy/src/utils.rs

@@ -125,14 +125,14 @@ mod tests {
 
     #[test]
     fn clip_test() {
-        let num = dec!(11);
-        let num2 = dec!(2);
-
-        let lower_limit = dec!(3);
-        let upper_limit = dec!(6);
-
-        println!("mum: {}", clip(num, lower_limit, upper_limit));
-        println!("mum2: {}", clip(num, lower_limit, upper_limit));
+        // let num = dec!(11);
+        // let num2 = dec!(2);
+        //
+        // let lower_limit = dec!(3);
+        // let upper_limit = dec!(6);
+        //
+        // println!("mum: {}", clip(num, lower_limit, upper_limit));
+        // println!("mum2: {}", clip(num, lower_limit, upper_limit));
     }
 
     #[test]