119 lines
3.4 KiB
Python
119 lines
3.4 KiB
Python
import ccxt
|
||
|
||
# 使用您的配置
|
||
CONFIG = {
|
||
'apiKey': 'rFdbMs40biKImtwGnQ',
|
||
'secret': 'JOuEiGT1uCX9l2qbn9uZuZrVFraAZAA59mqY',
|
||
'verbose': False,
|
||
'enableRateLimit': True,
|
||
}
|
||
|
||
def place_contract_market_order(symbol, side, amount, position_side=None, leverage=10):
|
||
"""
|
||
在Bybit合约市场下市价单
|
||
|
||
Args:
|
||
symbol: 交易对,例如 'BTC/USDT:USDT'
|
||
side: 方向 'buy' 或 'sell'
|
||
amount: 合约数量
|
||
position_side: 持仓方向 'long' 或 'short',None为自动判断
|
||
leverage: 杠杆倍数
|
||
"""
|
||
try:
|
||
# 创建交易所实例
|
||
exchange = ccxt.bybit({
|
||
'apiKey': CONFIG['apiKey'],
|
||
'secret': CONFIG['secret'],
|
||
'sandbox': False, # 使用实盘,测试网改为 True
|
||
'verbose': CONFIG['verbose'],
|
||
'enableRateLimit': CONFIG['enableRateLimit'],
|
||
'options': {
|
||
'defaultType': 'swap', # 使用合约交易
|
||
}
|
||
})
|
||
exchange.enable_demo_trading(True) # 模拟交易
|
||
|
||
# 设置杠杆
|
||
exchange.set_leverage(leverage, symbol)
|
||
|
||
# 下市价单
|
||
params = {}
|
||
if position_side:
|
||
params['positionSide'] = position_side
|
||
|
||
order = exchange.create_order(
|
||
symbol=symbol,
|
||
type='market',
|
||
side=side,
|
||
amount=amount,
|
||
params=params
|
||
)
|
||
|
||
print("合约市价单创建成功!")
|
||
print(f"订单ID: {order['id']}")
|
||
print(f"交易对: {order['symbol']}")
|
||
print(f"方向: {order['side']}")
|
||
print(f"数量: {order['amount']}")
|
||
print(f"状态: {order['status']}")
|
||
|
||
return order
|
||
|
||
except Exception as e:
|
||
print(f"合约下单失败: {e}")
|
||
return None
|
||
|
||
def place_contract_market_order_with_cost(symbol, side, cost, leverage=10):
|
||
"""
|
||
按金额下合约市价单
|
||
|
||
Args:
|
||
symbol: 交易对
|
||
side: 方向
|
||
cost: 投入金额(USDT)
|
||
leverage: 杠杆倍数
|
||
"""
|
||
try:
|
||
exchange = ccxt.bybit({
|
||
'apiKey': CONFIG['apiKey'],
|
||
'secret': CONFIG['secret'],
|
||
'sandbox': False,
|
||
'options': {'defaultType': 'swap'}
|
||
})
|
||
|
||
# 获取当前价格
|
||
ticker = exchange.fetch_ticker(symbol)
|
||
current_price = ticker['last']
|
||
|
||
# 计算合约数量
|
||
amount = cost * leverage / current_price
|
||
|
||
return place_contract_market_order(symbol, side, amount, leverage=leverage)
|
||
|
||
except Exception as e:
|
||
print(f"按金额下单失败: {e}")
|
||
return None
|
||
|
||
# 使用示例
|
||
if __name__ == "__main__":
|
||
# 示例1:直接按数量下单
|
||
print("=== 按数量下单 ===")
|
||
symbol = 'BTC/USDT:USDT' # 永续合约
|
||
side = 'buy' # 开多单
|
||
amount = 0.01 # 合约数量
|
||
|
||
order_result = place_contract_market_order(symbol, side, amount, leverage=20)
|
||
|
||
# 示例2:按金额下单
|
||
print("\n=== 按金额下单 ===")
|
||
cost = 100 # 投入100 USDT
|
||
order_result2 = place_contract_market_order_with_cost(symbol, 'sell', cost, leverage=10)
|
||
|
||
# 示例3:指定持仓方向
|
||
print("\n=== 指定持仓方向下单 ===")
|
||
order_result3 = place_contract_market_order(
|
||
symbol='ETH/USDT:USDT',
|
||
side='buy',
|
||
amount=0.1,
|
||
position_side='long', # 明确开多仓
|
||
leverage=15
|
||
) |