Contract
GetContractType - 获取合约类型
获取当前设置的合约类型(合约代码)。
语法
python
contract_type = exchange.GetContractType()参数
无参数。
返回值
返回字符串,表示当前合约类型。失败返回空字符串 ""。
常见合约类型:
| 值 | 说明 |
|---|---|
"this_week" | 当周合约 |
"next_week" | 次周合约 |
"quarter" | 季度合约 |
"next_quarter" | 次季度合约 |
"swap" | 永续合约 |
"BTCUSDT" | 交割合约代码(某些交易所) |
注意:不同交易所的合约类型命名可能不同。
示例
1. 基础获取合约类型
python
# 设置合约
exchange.SetContractType("swap")
# 获取当前合约类型
contract = exchange.GetContractType()
Log(f"当前合约: {contract}") # 输出: 当前合约: swap2. 验证合约设置
python
def set_and_verify_contract(target_contract):
"""设置合约并验证是否成功"""
exchange.SetContractType(target_contract)
Sleep(500)
current = exchange.GetContractType()
if current == target_contract:
Log(f"合约设置成功: {target_contract}")
return True
else:
Log(f"合约设置失败: 期望 {target_contract}, 实际 {current}")
return False
# 使用
if set_and_verify_contract("swap"):
# 继续交易逻辑
pass3. 多合约切换交易
python
# 在多个合约间轮换交易
contracts = ["this_week", "next_week", "quarter", "swap"]
for contract in contracts:
exchange.SetContractType(contract)
Sleep(500)
current = exchange.GetContractType()
Log(f"切换到合约: {current}")
# 获取该合约的行情
ticker = exchange.GetTicker()
if ticker:
Log(f" 价格: {ticker['Last']}")
# 获取持仓
positions = exchange.GetPosition()
if positions:
Log(f" 持仓: {len(positions)} 个")4. 根据合约类型调整策略
python
contract = exchange.GetContractType()
if contract == "swap":
# 永续合约策略
Log("使用永续合约策略")
leverage = 5
position_size = 100
elif contract in ["this_week", "next_week"]:
# 短期合约策略
Log("使用短期合约策略")
leverage = 3
position_size = 50
elif contract in ["quarter", "next_quarter"]:
# 季度合约策略
Log("使用季度合约策略")
leverage = 2
position_size = 30
else:
Log(f"未知合约类型: {contract}")
leverage = 1
position_size = 10
exchange.SetMarginLevel(leverage)5. 显示合约信息面板
python
def show_contract_info():
"""显示当前合约的详细信息"""
contract = exchange.GetContractType()
ticker = exchange.GetTicker()
positions = exchange.GetPosition()
leverage = exchange.GetMarginLevel()
info = f"""
========== 合约信息 ==========
交易所: {exchange.GetName()}
合约类型: {contract}
当前价格: {ticker['Last'] if ticker else 'N/A'}
杠杆倍数: {leverage}x
持仓数量: {len(positions)}
==============================
"""
Log(info)
return contract
show_contract_info()6. 保存合约状态
python
# 保存当前合约状态,便于恢复
saved_state = {
"contract": exchange.GetContractType(),
"leverage": exchange.GetMarginLevel(),
"currency": exchange.GetCurrency()
}
Log(f"已保存状态: {saved_state}")
# ... 执行其他操作,可能切换合约 ...
# 恢复状态
exchange.SetContractType(saved_state["contract"])
exchange.SetMarginLevel(saved_state["leverage"])
exchange.SetCurrency(saved_state["currency"])
Log("状态已恢复")7. 合约轮询监控
python
def monitor_contracts():
"""监控所有合约的价格"""
contracts = ["this_week", "next_week", "quarter", "swap"]
while True:
Log("========== 合约价格监控 ==========")
for contract in contracts:
exchange.SetContractType(contract)
Sleep(500)
ticker = exchange.GetTicker()
if ticker:
Log(f"{contract}: {ticker['Last']}")
Sleep(30000) # 每30秒更新一次
monitor_contracts()8. 检测合约到期
python
def check_contract_expiration():
"""检查合约是否临近到期"""
contract = exchange.GetContractType()
# 定义到期风险的合约
expiring_soon = ["this_week"]
moderate_risk = ["next_week"]
if contract in expiring_soon:
Log("警告: 当前合约即将到期,请注意风险!")
return "high_risk"
elif contract in moderate_risk:
Log("提示: 当前合约下周到期")
return "moderate_risk"
elif contract == "swap":
Log("永续合约,无到期时间")
return "no_risk"
else:
Log(f"合约类型: {contract}")
return "unknown"
risk_level = check_contract_expiration()9. 多交易所合约比较
python
# 假设有多个交易所对象
exchanges = [exchange1, exchange2, exchange3]
contract_type = "swap"
for i, ex in enumerate(exchanges):
ex.SetContractType(contract_type)
Sleep(500)
current = ex.GetContractType()
ticker = ex.GetTicker()
Log(f"交易所 {i+1}:")
Log(f" 合约: {current}")
Log(f" 价格: {ticker['Last'] if ticker else 'N/A'}")10. 合约切换错误处理
python
def safe_set_contract(target_contract, max_retries=3):
"""安全地设置合约,带重试机制"""
for attempt in range(max_retries):
exchange.SetContractType(target_contract)
Sleep(1000)
current = exchange.GetContractType()
if current == target_contract:
Log(f"合约设置成功: {target_contract}")
return True
else:
Log(f"尝试 {attempt + 1}/{max_retries} 失败,重试...")
Log(f"合约设置失败,无法切换到: {target_contract}")
return False
# 使用
if safe_set_contract("swap"):
# 继续交易
pass
else:
# 降级处理或报警
Log("合约设置失败,策略暂停")注意事项
- 交易所差异:不同交易所的合约类型命名和数量不同,使用前请查阅交易所文档
- 验证设置:
SetContractType后建议使用GetContractType验证是否设置成功 - 合约代码:某些交易所使用合约代码(如
BTCUSDT)而非类型名称 - 到期风险:交割合约有到期时间,到期前需平仓或移仓
- 永续合约:永续合约(swap)没有到期时间,但有资金费率
- API 调用:切换合约后,所有交易和查询都针对当前合约