Skip to content

Commit 079bbd4

Browse files
committed
fb
1 parent 9cca7ad commit 079bbd4

File tree

10 files changed

+352
-59
lines changed

10 files changed

+352
-59
lines changed

qapro-rs/examples/factorAnawithlocalcache.rs

+8-5
Original file line numberDiff line numberDiff line change
@@ -120,18 +120,21 @@ async fn main() {
120120
//.drop_duplicates(false, Some(vec!["date".to_string(), "order_book_id".to_string()]))
121121
.sort("date", false)
122122
.groupby([col("order_book_id")])
123-
.agg([(col("close") / col("close").shift(1)).list().alias("pctchange"), col("date").list()])
123+
.agg([
124+
(col("close") / col("close").shift(1))
125+
.list()
126+
.alias("pctchange"),
127+
col("date").list(),
128+
])
124129
.collect()
125130
.unwrap();
131+
126132
println!("calc lazy time {:#?}", sw.elapsed());
127133
println!(
128134
"rank {}",
129135
rank2.select(&["date", "order_book_id", "close"]).unwrap()
130136
);
131137

132-
println!(
133-
"rank lazy {}",
134-
rank3
135-
);
138+
println!("rank lazy {}", rank3);
136139
//write_result(rank, "./cache/rankres.parquet");
137140
}

qapro-rs/examples/getdataadv.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,27 @@ use std::fmt::format;
1515
async fn main() {
1616
let c = ckclient::QACKClient::init();
1717

18-
let start = CONFIG.DataPath.cachestart.as_str();
19-
let end =CONFIG.DataPath.cacheend.as_str();
18+
let start = CONFIG.DataPath.cachestart.as_str();
19+
let end = CONFIG.DataPath.cacheend.as_str();
2020
let stocklist = c.get_stocklist().await.unwrap();
2121

22-
let stocklistvec:Vec<&str> = stocklist.iter().map(|x| x.as_str()).collect();
22+
let stocklistvec: Vec<&str> = stocklist.iter().map(|x| x.as_str()).collect();
2323

2424
let mut hisdata = c
2525
.get_stock_adv(stocklistvec.clone(), start, end, "day")
2626
.await
2727
.unwrap();
2828

29-
3029
println!("qadatastruct {}", hisdata.data);
3130
hisdata.save_cache();
3231

33-
let mut adj = c.get_stock_adj(stocklistvec.clone(), "2019-01-01", "2021-12-22").await.unwrap();
32+
let mut adj = c
33+
.get_stock_adj(stocklistvec.clone(), "2019-01-01", "2021-12-22")
34+
.await
35+
.unwrap();
3436
println!("adj {:#?}", adj.data);
3537
adj.save_cache();
3638

37-
38-
39-
4039
let cache_file = format!("{}stockday.parquet", &CONFIG.DataPath.cache);
4140

4241
let mut data = QADataStruct_StockDay::new_from_parquet(cache_file.as_str());

qapro-rs/examples/makeqfq.rs

+10-3
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,19 @@ async fn main() {
6262
col("high") * col("adj"),
6363
col("low") * col("adj"),
6464
col("close") * col("adj"),
65+
col("limit_up") * col("adj"),
66+
col("limit_down") * col("adj"),
6567
])
68+
.drop_duplicates(
69+
false,
70+
Some(vec!["date".to_string(), "order_book_id".to_string()]),
71+
)
6672
.collect()
6773
.unwrap();
6874
println!("run qfq calc {:#?}", sw.elapsed());
6975
println!("qfq data {:#?}", qfq);
7076

71-
let mut qfqstruct = QADataStruct_StockDay{data:qfq};
72-
qfqstruct.save_selfdefined_cache(format!("{}stockdayqfq.parquet",CONFIG.DataPath.cache).as_str());
73-
}
77+
let mut qfqstruct = QADataStruct_StockDay { data: qfq };
78+
qfqstruct
79+
.save_selfdefined_cache(format!("{}stockdayqfq.parquet", CONFIG.DataPath.cache).as_str());
80+
}

qapro-rs/src/qaconnector/clickhouse/ckclient.rs

+14-29
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ use serde_json::Value;
1414

1515
use self::chrono::Utc;
1616
use crate::qadatastruct::factorstruct::QADataStruct_Factor;
17-
use crate::qadatastruct::stockday::QADataStruct_StockDay;
1817
use crate::qadatastruct::stockadj::QADataStruct_StockAdj;
18+
use crate::qadatastruct::stockday::QADataStruct_StockDay;
1919

20+
use crate::qadatastruct::stocklist::QADataStruct_StockList;
2021
use crate::qaenv::localenv::CONFIG;
2122
use crate::qaprotocol::mifi::market::{StockDay, StockMin};
2223
use crate::qaprotocol::mifi::qafastkline::{QAColumnBar, QAKlineBase};
2324
use actix::fut::ok;
2425
use clickhouse_rs::types::Column;
2526
use std::ops::Deref;
26-
use crate::qadatastruct::stocklist::QADataStruct_StockList;
2727

2828
type ServerDate = chrono::Date<Tz>;
2929
type ServerDateTime = chrono::DateTime<Tz>;
@@ -69,12 +69,8 @@ impl QACKClient {
6969

7070
#[async_trait]
7171
pub trait DataConnector {
72-
async fn get_stocklist(
73-
&self,
74-
) -> Result<Vec<String>, io::Error>;
75-
async fn get_stocklist_adv(
76-
&self,
77-
) -> Result<QADataStruct_StockList, io::Error>;
72+
async fn get_stocklist(&self) -> Result<Vec<String>, io::Error>;
73+
async fn get_stocklist_adv(&self) -> Result<QADataStruct_StockList, io::Error>;
7874
async fn get_stock(
7975
&self,
8076
codelist: Vec<&str>,
@@ -131,7 +127,6 @@ impl DataConnector for QACKClient {
131127
Ok(codev)
132128
}
133129

134-
135130
async fn get_stocklist_adv(&self) -> Result<QADataStruct_StockList, Error> {
136131
let mut cursor = self.pool.get_handle().await?;
137132
let sqlx = format!("SELECT * FROM quantaxis.stock_cn_codelist where status=='Active'");
@@ -145,34 +140,29 @@ impl DataConnector for QACKClient {
145140
.iter()
146141
.map(|x| String::from_utf8(x.to_vec()).unwrap())
147142
.collect();
148-
let symbol: Vec<_> = result
149-
.get_column("symbol")?
150-
.iter::<&[u8]>()?
151-
.collect();
143+
let symbol: Vec<_> = result.get_column("symbol")?.iter::<&[u8]>()?.collect();
152144
let symbolvec: Vec<String> = symbol
153145
.iter()
154146
.map(|x| String::from_utf8(x.to_vec()).unwrap())
155147
.collect();
156148

157-
let listed_date: Vec<_> = result
158-
.get_column("listed_date")?
159-
.iter::<&[u8]>()?
160-
.collect();
149+
let listed_date: Vec<_> = result.get_column("listed_date")?.iter::<&[u8]>()?.collect();
161150
let listed_datevec: Vec<String> = listed_date
162151
.iter()
163152
.map(|x| String::from_utf8(x.to_vec()).unwrap())
164153
.collect();
165154

166-
let delist_date: Vec<_> = result
167-
.get_column("delist_date")?
168-
.iter::<&[u8]>()?
169-
.collect();
155+
let delist_date: Vec<_> = result.get_column("delist_date")?.iter::<&[u8]>()?.collect();
170156
let delist_datevec: Vec<String> = delist_date
171157
.iter()
172158
.map(|x| String::from_utf8(x.to_vec()).unwrap())
173159
.collect();
174-
Ok(QADataStruct_StockList::new_from_vec(codev,listed_datevec,delist_datevec, symbolvec))
175-
160+
Ok(QADataStruct_StockList::new_from_vec(
161+
codev,
162+
listed_datevec,
163+
delist_datevec,
164+
symbolvec,
165+
))
176166
}
177167

178168
async fn get_stock(
@@ -385,14 +375,9 @@ impl DataConnector for QACKClient {
385375
.iter()
386376
.map(|x| String::from_utf8(x.to_vec()).unwrap())
387377
.collect();
388-
let adj: Vec<_> = result
389-
.get_column("adj")?
390-
.iter::<f32>()?
391-
.copied()
392-
.collect();
378+
let adj: Vec<_> = result.get_column("adj")?.iter::<f32>()?.copied().collect();
393379
let res = QADataStruct_StockAdj::new_from_vec(ttimevec, codev, adj);
394380
Ok(res)
395-
396381
}
397382

398383
async fn get_factor(

qapro-rs/src/qadata/arrowbase.rs

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

qapro-rs/src/qadatastruct/stockadj.rs

+12-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
use std::fs::File;
2-
use polars::frame::select::Selection;
3-
use polars::prelude::{CsvReader, DataFrame, DataType, Field, NamedFrom, ParquetReader, Result as PolarResult, RollingOptions, Schema, SerReader, Series, ParquetWriter};
41
use crate::qaenv::localenv::CONFIG;
2+
use polars::frame::select::Selection;
3+
use polars::prelude::{
4+
CsvReader, DataFrame, DataType, Field, NamedFrom, ParquetReader, ParquetWriter,
5+
Result as PolarResult, RollingOptions, Schema, SerReader, Series,
6+
};
7+
use std::fs::File;
58

69
fn QADataStruct_StockAdj_schema() -> Schema {
710
Schema::new(vec![
@@ -12,7 +15,7 @@ fn QADataStruct_StockAdj_schema() -> Schema {
1215
}
1316
pub struct QADataStruct_StockAdj {
1417
pub data: DataFrame,
15-
name: String
18+
name: String,
1619
}
1720

1821
impl QADataStruct_StockAdj {
@@ -26,17 +29,19 @@ impl QADataStruct_StockAdj {
2629
data: df
2730
.sort(&["date", "order_book_id"], vec![false, false])
2831
.unwrap(),
29-
name: "stockadj".to_string()
32+
name: "stockadj".to_string(),
3033
}
3134
}
3235
pub fn new_from_parquet(path: &str) -> Self {
3336
let file = File::open(path).expect("Cannot open file.");
3437
let df = ParquetReader::new(file).finish().unwrap();
35-
Self { data: df , name: "stockadj".to_string() }
38+
Self {
39+
data: df,
40+
name: "stockadj".to_string(),
41+
}
3642
}
3743

3844
pub fn save_cache(&mut self) {
39-
4045
let cachepath = format!("{}stockadj.parquet", &CONFIG.DataPath.cache);
4146
let file = File::create(cachepath).expect("could not create file");
4247

qapro-rs/src/qadatastruct/stockday.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,9 @@ impl QADataStruct_StockDay {
134134
ParquetWriter::new(file).finish(&self.data);
135135
}
136136

137-
138-
pub fn save_selfdefined_cache(&mut self, path:&str) {
137+
pub fn save_selfdefined_cache(&mut self, path: &str) {
139138
//let cache = &CONFIG.DataPath.cache;
140-
// let cachepath = format!("{}stockday.parquet", &CONFIG.DataPath.cache);
139+
// let cachepath = format!("{}stockday.parquet", &CONFIG.DataPath.cache);
141140
let file = File::create(path).expect("could not create file");
142141
ParquetWriter::new(file).finish(&self.data);
143142
}

qapro-rs/src/qaenv/localenv.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ impl Default for Cli {
205205
#[serde(default)]
206206
pub struct Backtest {
207207
pub start: String,
208-
pub end: String
208+
pub end: String,
209209
}
210210

211211
impl Default for Backtest {
@@ -221,15 +221,15 @@ impl Default for Backtest {
221221
pub struct DataPath {
222222
pub cache: String,
223223
pub cachestart: String,
224-
pub cacheend: String
224+
pub cacheend: String,
225225
}
226226

227227
impl Default for DataPath {
228228
fn default() -> Self {
229229
Self {
230230
cache: "/data/".to_owned(),
231231
cachestart: "".to_string(),
232-
cacheend: "".to_string()
232+
cacheend: "".to_string(),
233233
}
234234
}
235235
}

0 commit comments

Comments
 (0)