让我用一个清晰的思维过程来解析做多(Long)和做空(Short)的本质区别:
当我看到这两个合约时,我的第一反应是:它们在赌ETH价格的相反方向。
做多(Long) = 看涨ETH
├─ 买入ETH → 价格上涨获利
├─ 用WETH做抵押品
└─ 希望执行价格"越低越好"(买得便宜)
做空(Short) = 看跌ETH
├─ 卖出ETH → 价格下跌获利
├─ 用USDC做抵押品
└─ 希望执行价格"越高越好"(卖得贵)
让我像注释代码一样解说关键点:
// 做多 - Long.sol
initialCollateralToken: WETH // ✅ 用ETH本身做抵押
// 思考:我看涨ETH,所以持有ETH作为抵押品本身就是我的策略
// 做空 - Short.sol
initialCollateralToken: USDC // ✅ 用稳定币做抵押
// 思考:我看跌ETH,所以不想持有ETH,用稳定币更安全为什么这样设计?
- 做多:如果ETH涨了,你的抵押品WETH也涨了 → 双重收益
- 做空:如果ETH跌了,用USDC做抵押可以避免抵押品也贬值
这是最关键的区别!
// ========== 开仓时 ==========
// 做多 - 我想"买入"ETH
acceptablePrice = (ethPrice * 1e4 * 101) / 100; // 价格上限 +1%
/* 思维过程:
当前ETH = $2000
我能接受的最高买入价 = $2020
→ 只要执行价 ≤ $2020 就成交
→ 防止价格突然暴涨时买贵了
*/
// 做空 - 我想"卖出"ETH
acceptablePrice = (ethPrice * 1e4 * 99) / 100; // 价格下限 -1%
/* 思维过程:
当前ETH = $2000
我能接受的最低卖出价 = $1980
→ 只要执行价 ≥ $1980 就成交
→ 防止价格突然暴跌时卖便宜了
*/// ========== 平仓时 ==========
// 做多 - 我要"卖出"平仓
acceptablePrice = (ethPrice * 1e4 * 99) / 100; // 价格下限 -1%
/* 现在角色反转了!
我持有多头,平仓 = 卖出
希望执行价 ≥ 我的底价
*/
// 做空 - 我要"买入"平仓
acceptablePrice = (ethPrice * 1e4 * 101) / 100; // 价格上限 +1%
/* 现在角色反转了!
我持有空头,平仓 = 买回
希望执行价 ≤ 我的上限
*/// 做多
isLong: true // 告诉协议:我在做多
// 做空
isLong: false // 告诉协议:我在做空这个简单的布尔值决定了GMX如何计算你的盈亏:
true→ 价格涨 = 赚钱false→ 价格跌 = 赚钱
// 做多
Position.getPositionKey({
account: address(this),
market: GM_TOKEN_ETH_WETH_USDC,
collateralToken: WETH, // ← 不同
isLong: true // ← 不同
});
// 做空
Position.getPositionKey({
account: address(this),
market: GM_TOKEN_ETH_WETH_USDC,
collateralToken: USDC, // ← 不同
isLong: false // ← 不同
});为什么Position Key不同?
- 同一个账户可以同时持有同一市场的多头和空头
- 通过
collateralToken+isLong来区分
- "我要买ETH" → 用WETH做抵押
- "开仓时别让我买贵了" → acceptable价格设上限
- "平仓时别让我卖便宜了" → acceptable价格设下限
- "ETH涨我就赚" → isLong = true
- "我要卖ETH(虽然我没有)" → 用USDC做抵押
- "开仓时别让我卖便宜了" → acceptable价格设下限
- "平仓时别让我买贵了" → acceptable价格设上限
- "ETH跌我就赚" → isLong = false
开仓做多:买入 → 怕买贵 → 价格上限
平仓做多:卖出 → 怕卖贱 → 价格下限
开仓做空:卖出 → 怕卖贱 → 价格下限
平仓做空:买入 → 怕买贵 → 价格上限
规律总结:
- 买 = 怕贵 = 设上限
- 卖 = 怕贱 = 设下限
想象你在菜市场:
做多 = 囤货商人
- 现在花$10买西瓜(用西瓜本身抵押)
- 希望明天能$15卖出
- 买的时候:最多接受$11(别买太贵)
- 卖的时候:最低接受$14(别卖太便宜)
做空 = 期货卖家
- 现在$10卖出"未来的西瓜"(用现金抵押)
- 希望明天$5买回来平仓
- 卖的时候:最低接受$9(别卖太便宜)
- 买回时:最多接受$6(别买太贵)
这就是做多做空在代码层面的本质区别!🎯