done
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
"""
|
||||
End-to-end test: open $11 BTC long, then immediately close it.
|
||||
Pulls the stored API key from the DB for the given wallet.
|
||||
|
||||
Usage: cd backend && python test_hl_trade.py 0xYOURWALLET
|
||||
"""
|
||||
import asyncio
|
||||
import sys
|
||||
from sqlalchemy import select
|
||||
from app.database import AsyncSessionLocal
|
||||
from app.models import Subscription
|
||||
from app.services.hyperliquid import HyperliquidTrader
|
||||
from app.config import settings
|
||||
|
||||
|
||||
async def main(wallet: str):
|
||||
wallet = wallet.lower()
|
||||
async with AsyncSessionLocal() as db:
|
||||
result = await db.execute(select(Subscription).where(Subscription.wallet_address == wallet))
|
||||
sub = result.scalar_one_or_none()
|
||||
if sub is None or not sub.hl_api_key:
|
||||
print(f"❌ No API key stored for {wallet}")
|
||||
return
|
||||
api_key = sub.hl_api_key
|
||||
print(f"✓ Loaded API key for {wallet} (ends …{api_key[-6:]})")
|
||||
|
||||
trader = HyperliquidTrader(
|
||||
api_private_key=api_key,
|
||||
account_address=wallet,
|
||||
leverage=settings.hl_leverage,
|
||||
mainnet=settings.hl_mainnet,
|
||||
)
|
||||
|
||||
bal = await trader.get_balance()
|
||||
print(f"✓ Withdrawable (perps): ${bal:.2f} (unified account may show 0 here, ignoring)")
|
||||
|
||||
print("\n─── OPENING $11 BTC LONG ───")
|
||||
try:
|
||||
open_result = await trader.open_position("BTC", "long", 11.0)
|
||||
print(f"✓ Open fill: {open_result}")
|
||||
except Exception as e:
|
||||
print(f"❌ Open failed: {e}")
|
||||
return
|
||||
|
||||
await asyncio.sleep(2)
|
||||
positions = await trader.get_open_positions()
|
||||
print(f"✓ Open positions now: {positions}")
|
||||
|
||||
print("\n─── CLOSING BTC POSITION ───")
|
||||
try:
|
||||
close_result = await trader.close_position("BTC")
|
||||
print(f"✓ Close fill: {close_result}")
|
||||
except Exception as e:
|
||||
print(f"❌ Close failed: {e}")
|
||||
return
|
||||
|
||||
await asyncio.sleep(2)
|
||||
positions = await trader.get_open_positions()
|
||||
print(f"✓ Open positions after close: {positions}")
|
||||
|
||||
bal2 = await trader.get_balance()
|
||||
print(f"\n✓ Balance before: ${bal:.2f} → after: ${bal2:.2f} (diff: ${bal2-bal:+.4f})")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: python test_hl_trade.py 0xYOURWALLET")
|
||||
sys.exit(1)
|
||||
asyncio.run(main(sys.argv[1]))
|
||||
Reference in New Issue
Block a user