use crate::TastyTrade;
use crate::api::base::TastyResult;
use crate::api::url::encode_path_segment;
use crate::types::backtest::{
AvailableDates, BACKTESTER_BASE_URL, Backtest, NewBacktest, SimulateTrade, SimulatedTradePoint,
};
impl TastyTrade {
pub async fn backtests(&self) -> TastyResult<Vec<String>> {
self.get_raw_at(BACKTESTER_BASE_URL, "/backtests").await
}
pub async fn create_backtest(&self, backtest: &NewBacktest) -> TastyResult<Backtest> {
backtest.validate()?;
self.post_raw_at(BACKTESTER_BASE_URL, "/backtests", backtest)
.await
}
pub async fn backtest(&self, id: &str) -> TastyResult<Backtest> {
self.get_raw_at(
BACKTESTER_BASE_URL,
format!("/backtests/{}", encode_path_segment(id)),
)
.await
}
pub async fn backtest_logs(&self, id: &str) -> TastyResult<serde_json::Value> {
self.get_raw_at(
BACKTESTER_BASE_URL,
format!("/backtests/{}/logs", encode_path_segment(id)),
)
.await
}
pub async fn cancel_backtest(&self, id: &str) -> TastyResult<()> {
self.post_raw_at(
BACKTESTER_BASE_URL,
format!("/backtests/{}/cancel", encode_path_segment(id)),
serde_json::Value::Object(serde_json::Map::new()),
)
.await
}
pub async fn available_dates(&self) -> TastyResult<Vec<AvailableDates>> {
self.get_raw_at(BACKTESTER_BASE_URL, "/available-dates")
.await
}
pub async fn simulate_trade(
&self,
request: &SimulateTrade,
) -> TastyResult<Vec<SimulatedTradePoint>> {
request.validate()?;
self.post_raw_at(BACKTESTER_BASE_URL, "/simulate-trade", request)
.await
}
}