use crate::models::common::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PositionList {
pub category: String,
pub list: Vec<Position>,
#[serde(default)]
pub next_page_cursor: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Position {
pub position_idx: i32,
#[serde(default)]
pub risk_id: i32,
#[serde(default)]
pub risk_limit_value: String,
pub symbol: String,
pub side: String,
pub size: String,
#[serde(default)]
pub avg_price: String,
#[serde(default)]
pub position_value: String,
#[serde(default)]
pub trade_mode: i32,
#[serde(default)]
pub position_status: String,
#[serde(default)]
pub leverage: String,
#[serde(default)]
pub mark_price: String,
#[serde(default)]
pub liq_price: String,
#[serde(default)]
pub bust_price: String,
#[serde(default)]
pub position_mm: String,
#[serde(default)]
pub position_im: String,
#[serde(default)]
pub take_profit: String,
#[serde(default)]
pub stop_loss: String,
#[serde(default)]
pub trailing_stop: String,
#[serde(default)]
pub unrealised_pnl: String,
#[serde(default)]
pub cum_realised_pnl: String,
#[serde(default)]
pub created_time: String,
#[serde(default)]
pub updated_time: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SetLeverageParams {
pub category: Category,
pub symbol: String,
pub buy_leverage: String,
pub sell_leverage: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TradingStopParams {
pub category: Category,
pub symbol: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub take_profit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stop_loss: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub trailing_stop: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tp_trigger_by: Option<TriggerBy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sl_trigger_by: Option<TriggerBy>,
#[serde(skip_serializing_if = "Option::is_none")]
pub position_idx: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SwitchPositionModeParams {
pub category: Category,
#[serde(skip_serializing_if = "Option::is_none")]
pub symbol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub coin: Option<String>,
pub mode: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SetRiskLimitParams {
pub category: Category,
pub symbol: String,
pub risk_id: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub position_idx: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AddMarginParams {
pub category: Category,
pub symbol: String,
pub margin: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub position_idx: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClosedPnlList {
pub category: String,
pub list: Vec<ClosedPnl>,
#[serde(default)]
pub next_page_cursor: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClosedPnl {
pub symbol: String,
pub order_id: String,
pub side: String,
pub qty: String,
pub order_price: String,
pub order_type: String,
pub exec_type: String,
pub closed_size: String,
pub cum_entry_value: String,
pub avg_entry_price: String,
pub cum_exit_value: String,
pub avg_exit_price: String,
pub closed_pnl: String,
pub fill_count: String,
pub leverage: String,
pub created_time: String,
pub updated_time: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExecutionList {
pub category: String,
pub list: Vec<Execution>,
#[serde(default)]
pub next_page_cursor: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Execution {
pub symbol: String,
pub order_id: String,
#[serde(default)]
pub order_link_id: String,
pub side: String,
pub order_price: String,
pub order_qty: String,
pub order_type: String,
pub exec_id: String,
pub exec_price: String,
pub exec_qty: String,
pub exec_fee: String,
pub exec_type: String,
pub exec_value: String,
#[serde(default)]
pub fee_rate: String,
pub exec_time: String,
}
pub type AddReduceMarginResponse = AddReduceMarginResult;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AddReduceMarginResult {
#[serde(default)]
pub category: String,
#[serde(default)]
pub symbol: String,
#[serde(default)]
pub position_idx: i32,
#[serde(default)]
pub risk_id: i32,
#[serde(default)]
pub risk_limit_value: String,
#[serde(default)]
pub size: String,
#[serde(default)]
pub avg_price: String,
#[serde(default)]
pub liq_price: String,
#[serde(default)]
pub bust_price: String,
#[serde(default)]
pub mark_price: String,
#[serde(default)]
pub position_value: String,
#[serde(default)]
pub leverage: String,
#[serde(default)]
pub auto_add_margin: i32,
#[serde(default)]
pub position_status: String,
#[serde(rename = "positionIM", default)]
pub position_im: String,
#[serde(rename = "positionMM", default)]
pub position_mm: String,
#[serde(default)]
pub take_profit: String,
#[serde(default)]
pub stop_loss: String,
#[serde(default)]
pub trailing_stop: String,
#[serde(default)]
pub unrealised_pnl: String,
#[serde(default)]
pub cum_realised_pnl: String,
#[serde(default)]
pub created_time: String,
#[serde(default)]
pub updated_time: String,
}
pub type ConfirmNewRiskLimitResponse = serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConfirmNewRiskLimitParams {
pub category: String,
pub symbol: String,
}
pub type GetClosePositionResponse = GetClosePositionResult;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetClosePositionResult {
#[serde(default)]
pub category: String,
#[serde(default)]
pub list: Vec<GetClosePositionItem>,
#[serde(default)]
pub next_page_cursor: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetClosePositionItem {
#[serde(default)]
pub symbol: String,
#[serde(default)]
pub side: String,
#[serde(default)]
pub qty: String,
#[serde(default)]
pub avg_entry_price: String,
#[serde(default)]
pub avg_exit_price: String,
#[serde(default)]
pub delivery_price: String,
#[serde(default)]
pub total_open_fee: String,
#[serde(default)]
pub total_close_fee: String,
#[serde(default)]
pub delivery_fee: String,
#[serde(default)]
pub total_pnl: String,
#[serde(default)]
pub open_time: i64,
#[serde(default)]
pub close_time: i64,
}
pub type GetClosedPnlResponse = GetClosedPnlResult;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetClosedPnlResult {
#[serde(default)]
pub category: String,
#[serde(default)]
pub list: Vec<ClosedPnlItem>,
#[serde(default)]
pub next_page_cursor: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ClosedPnlItem {
#[serde(default)]
pub symbol: String,
#[serde(default)]
pub order_id: String,
#[serde(default)]
pub side: String,
#[serde(default)]
pub qty: String,
#[serde(default)]
pub order_price: String,
#[serde(default)]
pub order_type: String,
#[serde(default)]
pub exec_type: String,
#[serde(default)]
pub closed_size: String,
#[serde(default)]
pub cum_entry_value: String,
#[serde(default)]
pub avg_entry_price: String,
#[serde(default)]
pub cum_exit_value: String,
#[serde(default)]
pub avg_exit_price: String,
#[serde(default)]
pub closed_pnl: String,
#[serde(default)]
pub fill_count: String,
#[serde(default)]
pub leverage: String,
#[serde(default)]
pub open_fee: String,
#[serde(default)]
pub close_fee: String,
#[serde(default)]
pub created_time: String,
#[serde(default)]
pub updated_time: String,
}
pub type GetMovePositionHistoryResponse = GetMovePositionHistoryResult;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetMovePositionHistoryResult {
#[serde(default)]
pub list: Vec<GetMovePositionHistoryItem>,
#[serde(default)]
pub next_page_cursor: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetMovePositionHistoryItem {
#[serde(default)]
pub block_trade_id: String,
#[serde(default)]
pub category: String,
#[serde(default)]
pub order_id: String,
#[serde(default)]
pub user_id: i64,
#[serde(default)]
pub symbol: String,
#[serde(default)]
pub side: String,
#[serde(default)]
pub price: String,
#[serde(default)]
pub qty: String,
#[serde(default)]
pub exec_fee: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub exec_id: String,
#[serde(default)]
pub result_code: i32,
#[serde(default)]
pub result_message: String,
#[serde(default)]
pub created_at: i64,
#[serde(default)]
pub updated_at: i64,
#[serde(default)]
pub reject_party: String,
}
pub type GetPositionInfoResponse = GetPositionInfoResult;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct GetPositionInfoResult {
#[serde(default)]
pub category: String,
#[serde(default)]
pub list: Vec<PositionInfo>,
#[serde(default)]
pub next_page_cursor: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PositionInfo {
#[serde(default)]
pub position_idx: i32,
#[serde(default)]
pub risk_id: i32,
#[serde(default)]
pub risk_limit_value: String,
#[serde(default)]
pub symbol: String,
#[serde(default)]
pub side: String,
#[serde(default)]
pub size: String,
#[serde(default)]
pub avg_price: String,
#[serde(default)]
pub position_value: String,
#[serde(default)]
pub trade_mode: i32,
#[serde(default)]
pub auto_add_margin: i32,
#[serde(default)]
pub position_status: String,
#[serde(default)]
pub leverage: String,
#[serde(default)]
pub mark_price: String,
#[serde(default)]
pub liq_price: String,
#[serde(default)]
pub bust_price: String,
#[serde(rename = "positionIM", default)]
pub position_im: String,
#[serde(rename = "positionMM", default)]
pub position_mm: String,
#[serde(default)]
pub position_balance: String,
#[serde(default)]
pub tpsl_mode: String,
#[serde(default)]
pub take_profit: String,
#[serde(default)]
pub stop_loss: String,
#[serde(default)]
pub trailing_stop: String,
#[serde(default)]
pub unrealised_pnl: String,
#[serde(default)]
pub cur_realised_pnl: String,
#[serde(default)]
pub cum_realised_pnl: String,
#[serde(default)]
pub break_even_price: String,
#[serde(default)]
pub adl_rank_indicator: i32,
#[serde(default)]
pub is_reduce_only: bool,
#[serde(default)]
pub mmr_sys_updated_time: String,
#[serde(default)]
pub leverage_sys_updated_time: String,
#[serde(rename = "positionIMByMp", default)]
pub position_im_by_mp: String,
#[serde(rename = "positionMMByMp", default)]
pub position_mm_by_mp: String,
#[serde(default)]
pub session_avg_price: String,
#[serde(default)]
pub delta: String,
#[serde(default)]
pub gamma: String,
#[serde(default)]
pub vega: String,
#[serde(default)]
pub theta: String,
#[serde(default)]
pub seq: i64,
#[serde(default)]
pub created_time: String,
#[serde(default)]
pub updated_time: String,
}
pub type MovePositionResponse = MovePositionResult;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MovePositionResult {
#[serde(default)]
pub block_trade_id: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub reject_party: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MovePositionLeg {
pub category: String,
pub symbol: String,
pub price: String,
pub side: String,
pub qty: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MovePositionParams {
pub from_uid: String,
pub to_uid: String,
pub list: Vec<MovePositionLeg>,
}
pub type SetAutoAddMarginResponse = serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SetAutoAddMarginParams {
pub category: String,
pub symbol: String,
pub auto_add_margin: i32,
#[serde(skip_serializing_if = "Option::is_none")]
pub position_idx: Option<i32>,
}
pub type SetLeverageResponse = serde_json::Value;
pub type SwitchPositionModeResponse = serde_json::Value;