|
|
@@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize};
|
|
|
use tokio::time::Instant;
|
|
|
use tracing::{error, info, trace};
|
|
|
use exchanges::bybit_swap_rest::BybitSwapRest;
|
|
|
-use crate::{Platform, ExchangeEnum, Account, Position, Ticker, Market, Order, OrderCommand, PositionModeEnum};
|
|
|
+use crate::{Platform, ExchangeEnum, Account, Position, Ticker, Market, Order, OrderCommand, PositionModeEnum, Record};
|
|
|
use global::trace_stack::TraceStack;
|
|
|
|
|
|
#[derive(Debug, Clone, Deserialize, Serialize)]
|
|
|
@@ -207,6 +207,35 @@ impl Platform for BybitSwap {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ async fn get_record(&mut self, interval: String) -> Result<Vec<Record>, Error> {
|
|
|
+ let symbol = self.symbol_uppercase.clone();
|
|
|
+
|
|
|
+ let res_data = self.request.get_record(symbol, interval, "3".to_string()).await;
|
|
|
+
|
|
|
+ if res_data.code == 200 {
|
|
|
+ let mut records: Vec<Record> = vec![];
|
|
|
+
|
|
|
+ for record_value in res_data.data["list"].as_array().unwrap() {
|
|
|
+ let value_array = record_value.as_array().unwrap();
|
|
|
+
|
|
|
+ records.push(Record {
|
|
|
+ time: Decimal::from_str(value_array[0].as_str().unwrap()).unwrap(),
|
|
|
+ open: Decimal::from_str(value_array[1].as_str().unwrap()).unwrap(),
|
|
|
+ high: Decimal::from_str(value_array[2].as_str().unwrap()).unwrap(),
|
|
|
+ low: Decimal::from_str(value_array[3].as_str().unwrap()).unwrap(),
|
|
|
+ close: Decimal::from_str(value_array[4].as_str().unwrap()).unwrap(),
|
|
|
+ volume: Decimal::from_str(value_array[5].as_str().unwrap()).unwrap(),
|
|
|
+ symbol: "".to_string(),
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ records.reverse();
|
|
|
+ Ok(records)
|
|
|
+ } else {
|
|
|
+ Err(Error::new(ErrorKind::Other, res_data.to_string()))
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
async fn get_ticker_symbol(&mut self, symbol: String) -> Result<Ticker, Error> {
|
|
|
let symbol_upper = symbol.replace("_", "").to_uppercase();
|
|
|
let res_data = self.request.get_tickers(symbol_upper.clone()).await;
|