trading/
trading_example.rs1use bybit_rust_api::rest::enums::category::Category;
2use bybit_rust_api::rest::enums::order_type::OrderType;
3use bybit_rust_api::rest::enums::side::Side;
4use bybit_rust_api::rest::enums::time_in_force::TimeInForce;
5use bybit_rust_api::rest::order::dto::{CancelOrderRequest, PlaceOrderRequest};
6use bybit_rust_api::rest::{ApiKeyPair, OrderClient, RestClient};
7use std::env;
8
9#[tokio::main]
10async fn main() -> anyhow::Result<()> {
11 let api_key = env::var("BYBIT_API_KEY").expect("BYBIT_API_KEY not set");
13 let api_secret = env::var("BYBIT_API_SECRET").expect("BYBIT_API_SECRET not set");
14
15 let api_key_pair = ApiKeyPair::new("trading".to_string(), api_key, api_secret);
17
18 let rest_client = RestClient::new(api_key_pair, "https://api-testnet.bybit.com".to_string());
20
21 let order_client = OrderClient::new(rest_client);
23
24 println!("Placing a limit order...");
26 let place_order_request = PlaceOrderRequest {
27 category: Category::Spot,
28 symbol: "BTCUSDT".to_string(),
29 side: Side::Buy,
30 order_type: OrderType::Limit,
31 qty: "0.001".to_string(),
32 price: Some("40000".to_string()),
33 time_in_force: Some(TimeInForce::GTC),
34 order_link_id: Some(format!("rust_sdk_test_{}", chrono::Utc::now().timestamp())),
35 is_leverage: None,
36 trigger_price: None,
37 trigger_direction: None,
38 trigger_by: None,
39 order_filter: None,
40 order_iv: None,
41 position_idx: None,
42 take_profit: None,
43 stop_loss: None,
44 tp_trigger_by: None,
45 sl_trigger_by: None,
46 reduce_only: None,
47 close_on_trigger: None,
48 smp_type: None,
49 mmp: None,
50 tpsl_mode: None,
51 tp_limit_price: None,
52 sl_limit_price: None,
53 tp_order_type: None,
54 sl_order_type: None,
55 };
56
57 match order_client.place_order(place_order_request).await {
58 Ok(response) => {
59 println!("Order placed successfully!");
60 println!("Order ID: {}", response.result.order_id);
61 println!("Order Link ID: {}", response.result.order_link_id);
62
63 println!("\nGetting open orders...");
65 let open_orders = order_client
66 .get_open_orders(
67 Category::Spot,
68 Some("BTCUSDT"),
69 None,
70 None,
71 None,
72 None,
73 None,
74 None,
75 Some(10),
76 None,
77 )
78 .await?;
79 println!("Open orders count: {}", open_orders.result.list.len());
80
81 println!("\nCancelling the order...");
83 let cancel_request = CancelOrderRequest {
84 category: Category::Spot,
85 symbol: "BTCUSDT".to_string(),
86 order_id: Some(response.result.order_id.clone()),
87 order_link_id: None,
88 order_filter: None,
89 };
90
91 let cancel_response = order_client.cancel_order(cancel_request).await?;
92 println!("Order cancelled successfully!");
93 println!("Cancelled Order ID: {}", cancel_response.result.order_id);
94 }
95 Err(e) => {
96 eprintln!("Failed to place order: {}", e);
97 }
98 }
99
100 println!("\nGetting order history...");
102 let order_history = order_client
103 .get_order_history(
104 Category::Spot,
105 Some("BTCUSDT"),
106 None,
107 None,
108 None,
109 None,
110 None,
111 None,
112 None,
113 None,
114 Some(10),
115 None,
116 )
117 .await?;
118 println!("Order history count: {}", order_history.result.list.len());
119
120 Ok(())
121}