Contract
GetMarginLevel - 获取杠杆倍数
获取当前设置的杠杆倍数。
语法
python
leverage = exchange.GetMarginLevel()参数
无参数。
返回值
返回整数,表示当前杠杆倍数。失败返回 0。
常见杠杆倍数: 1, 2, 3, 5, 10, 20, 50, 100, 125(具体取决于交易所)
示例
1. 基础获取杠杆
python
# 设置杠杆
exchange.SetMarginLevel(10)
# 获取当前杠杆
leverage = exchange.GetMarginLevel()
Log(f"当前杠杆: {leverage}x") # 输出: 当前杠杆: 10x2. 验证杠杆设置
python
def set_and_verify_leverage(target_leverage):
"""设置杠杆并验证"""
exchange.SetMarginLevel(target_leverage)
Sleep(500)
current = exchange.GetMarginLevel()
if current == target_leverage:
Log(f"杠杆设置成功: {target_leverage}x")
return True
else:
Log(f"杠杆设置失败: 期望 {target_leverage}x, 实际 {current}x")
return False
# 使用
if set_and_verify_leverage(5):
# 继续交易
pass3. 动态杠杆策略
python
def adjust_leverage_by_volatility():
"""根据市场波动率动态调整杠杆"""
# 获取K线计算波动率
records = exchange.GetRecords()
if len(records) < 20:
return
# 计算最近20根K线的价格标准差
prices = [r["Close"] for r in records[-20:]]
avg_price = sum(prices) / len(prices)
variance = sum((p - avg_price) ** 2 for p in prices) / len(prices)
volatility = (variance ** 0.5) / avg_price # 波动率
# 根据波动率调整杠杆
if volatility < 0.01: # 低波动
target_leverage = 10
elif volatility < 0.03: # 中等波动
target_leverage = 5
else: # 高波动
target_leverage = 2
current_leverage = exchange.GetMarginLevel()
if current_leverage != target_leverage:
exchange.SetMarginLevel(target_leverage)
Log(f"波动率: {volatility:.4f}, 调整杠杆: {current_leverage}x -> {target_leverage}x")
# 定期调整杠杆
while True:
adjust_leverage_by_volatility()
Sleep(300000) # 每5分钟调整一次4. 计算实际可开仓量
python
def calculate_max_position():
"""根据杠杆计算最大可开仓量"""
account = exchange.GetAccount()
leverage = exchange.GetMarginLevel()
ticker = exchange.GetTicker()
if not ticker:
return 0
# 可用保证金
available = account["Balance"]
# 当前价格
price = ticker["Last"]
# 最大可开仓量 = (可用余额 × 杠杆) / 价格
max_position = (available * leverage) / price
Log(f"当前杠杆: {leverage}x")
Log(f"可用余额: {available}")
Log(f"最大可开: {max_position:.4f} 张")
return max_position
max_pos = calculate_max_position()5. 杠杆与风险提示
python
leverage = exchange.GetMarginLevel()
# 风险等级评估
if leverage <= 3:
risk_level = "低风险"
color = "green"
elif leverage <= 10:
risk_level = "中等风险"
color = "yellow"
elif leverage <= 20:
risk_level = "高风险"
color = "orange"
else:
risk_level = "极高风险"
color = "red"
Log(f"当前杠杆: {leverage}x")
Log(f"风险等级: {risk_level}")
# 计算爆仓距离
if leverage > 1:
liquidation_distance = 100 / leverage
Log(f"价格下跌 {liquidation_distance:.2f}% 将面临爆仓风险")6. 多合约杠杆管理
python
# 不同合约使用不同杠杆
contract_leverages = {
"swap": 5,
"this_week": 3,
"quarter": 2
}
contract = exchange.GetContractType()
current_leverage = exchange.GetMarginLevel()
# 检查并调整杠杆
if contract in contract_leverages:
target_leverage = contract_leverages[contract]
if current_leverage != target_leverage:
exchange.SetMarginLevel(target_leverage)
Log(f"{contract} 合约杠杆已设为 {target_leverage}x")7. 计算强平价格
python
def calculate_liquidation_price(entry_price, position_type):
"""
计算强平价格
position_type: "long" 或 "short"
"""
leverage = exchange.GetMarginLevel()
if position_type == "long":
# 多头强平价 = 开仓价 × (1 - 1/杠杆)
liquidation_price = entry_price * (1 - 1/leverage)
else: # short
# 空头强平价 = 开仓价 × (1 + 1/杠杆)
liquidation_price = entry_price * (1 + 1/leverage)
return liquidation_price
# 使用
exchange.SetMarginLevel(10)
entry = 50000
long_liq = calculate_liquidation_price(entry, "long")
short_liq = calculate_liquidation_price(entry, "short")
Log(f"10倍杠杆,开仓价 {entry}")
Log(f"做多强平价: {long_liq:.2f}")
Log(f"做空强平价: {short_liq:.2f}")8. 保守开仓策略
python
def safe_open_position(direction, size_ratio=0.3):
"""
保守开仓:只使用部分可用资金
size_ratio: 使用比例(0-1)
"""
leverage = exchange.GetMarginLevel()
# 杠杆过高时降低仓位比例
if leverage > 10:
size_ratio *= 0.5
Log(f"杠杆 {leverage}x 过高,仓位比例降至 {size_ratio*100:.0f}%")
account = exchange.GetAccount()
ticker = exchange.GetTicker()
# 计算开仓量
available = account["Balance"] * size_ratio
price = ticker["Last"]
position_size = (available * leverage) / price
Log(f"使用 {size_ratio*100:.0f}% 资金开仓")
Log(f"开仓量: {position_size:.2f} 张")
# 执行开仓
exchange.SetDirection(direction)
if direction == "buy":
exchange.Buy(-1, position_size)
else:
exchange.Sell(-1, position_size)
# 以30%资金做多
safe_open_position("buy", 0.3)9. 杠杆切换记录
python
# 记录杠杆变化历史
leverage_history = []
def record_leverage_change():
"""记录杠杆变化"""
leverage = exchange.GetMarginLevel()
if not leverage_history or leverage_history[-1] != leverage:
leverage_history.append(leverage)
Log(f"杠杆变更: {leverage}x (历史: {leverage_history})")
# 定期记录
while True:
record_leverage_change()
Sleep(60000)10. 根据账户规模调整杠杆
python
def adjust_leverage_by_capital():
"""根据账户资金规模调整杠杆"""
account = exchange.GetAccount()
balance = account["Balance"]
# 资金越大,杠杆越低(风险管理)
if balance < 1000:
target_leverage = 10
elif balance < 10000:
target_leverage = 5
elif balance < 100000:
target_leverage = 3
else:
target_leverage = 2
current = exchange.GetMarginLevel()
if current != target_leverage:
exchange.SetMarginLevel(target_leverage)
Log(f"账户 {balance} USDT,调整杠杆至 {target_leverage}x")
adjust_leverage_by_capital()注意事项
- 交易所限制:不同交易所支持的杠杆倍数不同,某些交易所最高125倍,某些只支持20倍
- 验证设置:
SetMarginLevel后建议用GetMarginLevel验证 - 风险控制:高杠杆意味着高风险,新手建议从1-3倍开始
- 强平风险:杠杆越高,强平价格越接近开仓价
- 资金费率:永续合约有资金费率,高杠杆会放大费率影响
- 合约依赖:杠杆设置通常与合约类型绑定