Skip to content

Latest commit

 

History

History
179 lines (135 loc) · 4.58 KB

File metadata and controls

179 lines (135 loc) · 4.58 KB

让我用一个清晰的思维过程来解析做多(Long)和做空(Short)的本质区别:

🎯 核心思维框架:方向性的对立

当我看到这两个合约时,我的第一反应是:它们在赌ETH价格的相反方向

📊 本质区别的思维导图

做多(Long) = 看涨ETH
├─ 买入ETH → 价格上涨获利
├─ 用WETH做抵押品
└─ 希望执行价格"越低越好"(买得便宜)

做空(Short) = 看跌ETH  
├─ 卖出ETH → 价格下跌获利
├─ 用USDC做抵押品
└─ 希望执行价格"越高越好"(卖得贵)

💡 代码层面的关键差异

让我像注释代码一样解说关键点:

差异1:抵押品的选择逻辑

// 做多 - Long.sol
initialCollateralToken: WETH  // ✅ 用ETH本身做抵押
// 思考:我看涨ETH,所以持有ETH作为抵押品本身就是我的策略

// 做空 - Short.sol  
initialCollateralToken: USDC  // ✅ 用稳定币做抵押
// 思考:我看跌ETH,所以不想持有ETH,用稳定币更安全

为什么这样设计?

  • 做多:如果ETH涨了,你的抵押品WETH也涨了 → 双重收益
  • 做空:如果ETH跌了,用USDC做抵押可以避免抵押品也贬值

差异2:可接受价格的计算方向

这是最关键的区别

// ========== 开仓时 ==========
// 做多 - 我想"买入"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%  
/* 现在角色反转了!
   我持有空头,平仓 = 买回
   希望执行价 ≤ 我的上限
*/

差异3:isLong 标志

// 做多
isLong: true   // 告诉协议:我在做多

// 做空  
isLong: false  // 告诉协议:我在做空

这个简单的布尔值决定了GMX如何计算你的盈亏:

  • true → 价格涨 = 赚钱
  • false → 价格跌 = 赚钱

差异4:Position Key的构成

// 做多
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 来区分

🧠 写代码时的思维过程对比

做多时我在想:

  1. "我要买ETH" → 用WETH做抵押
  2. "开仓时别让我买贵了" → acceptable价格设上限
  3. "平仓时别让我卖便宜了" → acceptable价格设下限
  4. "ETH涨我就赚" → isLong = true

做空时我在想:

  1. "我要卖ETH(虽然我没有)" → 用USDC做抵押
  2. "开仓时别让我卖便宜了" → acceptable价格设下限
  3. "平仓时别让我买贵了" → acceptable价格设上限
  4. "ETH跌我就赚" → isLong = false

📝 记忆口诀

开仓做多:买入 → 怕买贵 → 价格上限
平仓做多:卖出 → 怕卖贱 → 价格下限

开仓做空:卖出 → 怕卖贱 → 价格下限
平仓做空:买入 → 怕买贵 → 价格上限

规律总结:

  • 买 = 怕贵 = 设上限
  • 卖 = 怕贱 = 设下限

🎪 类比理解

想象你在菜市场:

做多 = 囤货商人

  • 现在花$10买西瓜(用西瓜本身抵押)
  • 希望明天能$15卖出
  • 买的时候:最多接受$11(别买太贵)
  • 卖的时候:最低接受$14(别卖太便宜)

做空 = 期货卖家

  • 现在$10卖出"未来的西瓜"(用现金抵押)
  • 希望明天$5买回来平仓
  • 卖的时候:最低接受$9(别卖太便宜)
  • 买回时:最多接受$6(别买太贵)

这就是做多做空在代码层面的本质区别!🎯