Pharos
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")  # 输出: 当前杠杆: 10x

2. 验证杠杆设置

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):
    # 继续交易
    pass

3. 动态杠杆策略

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()

注意事项

  1. 交易所限制:不同交易所支持的杠杆倍数不同,某些交易所最高125倍,某些只支持20倍
  2. 验证设置SetMarginLevel 后建议用 GetMarginLevel 验证
  3. 风险控制:高杠杆意味着高风险,新手建议从1-3倍开始
  4. 强平风险:杠杆越高,强平价格越接近开仓价
  5. 资金费率:永续合约有资金费率,高杠杆会放大费率影响
  6. 合约依赖:杠杆设置通常与合约类型绑定

相关方法