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