Skip to main content

greed/
platform.rs

1pub mod account;
2mod alpaca;
3pub mod args;
4pub mod asset_class;
5pub mod bar;
6pub mod bars;
7pub mod id;
8pub mod noop;
9pub mod order;
10pub mod position;
11pub mod quote;
12pub mod request;
13pub mod side;
14
15use crate::asset::AssetSymbol;
16use crate::config::platform::PlatformType;
17use crate::error::GreedError;
18use crate::platform::account::Account;
19use crate::platform::alpaca::AlpacaPlatform;
20use crate::platform::args::PlatformArgs;
21use crate::platform::bar::bar_request::BarRequest;
22use crate::platform::bars::Bars;
23use crate::platform::order::Order;
24use crate::platform::position::Position;
25use crate::platform::quote::Quote;
26use crate::platform::request::OrderRequest;
27use async_trait::async_trait;
28use log::info;
29use std::sync::Arc;
30
31#[async_trait]
32pub trait FinancialPlatform: Send + Sync {
33    async fn account(&self) -> Result<Account, GreedError>;
34    async fn bars(&self, bars_request: BarRequest) -> Result<Bars, GreedError>;
35    async fn latest_quotes(&self, symbols: &Vec<AssetSymbol>) -> Result<Vec<Quote>, GreedError>;
36    async fn place_order(&self, order_request: OrderRequest) -> Result<Order, GreedError>;
37    async fn positions(&self) -> Result<Vec<Position>, GreedError>;
38    async fn open_orders(&self) -> Result<Vec<Order>, GreedError>;
39    async fn recent_orders(&self) -> Result<Vec<Order>, GreedError>;
40}
41
42pub fn for_type(
43    platform_type: &PlatformType,
44    args: PlatformArgs,
45) -> Result<Arc<dyn FinancialPlatform>, GreedError> {
46    info!("🏦 Using financial platform - {:?}", platform_type);
47    let platform = match platform_type {
48        PlatformType::Alpaca => Arc::new(AlpacaPlatform::new(&args)?),
49    };
50    Ok(platform)
51}