Implement leveraged trading on Flash.Trade protocol, supporting position opening and closing with multiple tokens and configurable leverage.
Core Features
-
Position Management
- Open positions
- Close positions
- Position sizing
- Leverage control
-
Market Support
- Multiple tokens (SOL, BTC, ETH)
- Long/Short positions
- Oracle price integration
- Slippage protection
Quick Start
Opening Position
const position = await agent.flashOpenTrade({
token: "SOL", // Token to trade
side: "long", // Position side
collateralUsd: 1000, // Collateral in USD
leverage: 5 // Leverage multiplier
});
Closing Position
const closure = await agent.flashCloseTrade({
token: "SOL", // Token to close
side: "long" // Position side
});
Market Configuration
const MARKET_TOKENS = {
SOL: {
long: { marketID: "..." },
short: { marketID: "..." }
},
BTC: {
long: { marketID: "..." },
short: { marketID: "..." }
},
ETH: {
long: { marketID: "..." },
short: { marketID: "..." }
}
};
Example Prompts
Natural Language Prompts
"Open a 5x leveraged long SOL position with 1000 USD"
"Close my ETH short position"
"Create a 10x BTC long with 500 USD collateral"
"Exit my SOL long position"
Open Position
{
"token": "SOL",
"type": "long",
"collateral": 1000,
"leverage": 5
}
Close Position
{
"token": "SOL",
"side": "long"
}
Implementation Details
Position Opening
interface FlashTradeParams {
token: string; // Token symbol
side: "long" | "short"; // Position side
collateralUsd: number; // Collateral amount
leverage: number; // Leverage multiplier
}
// Calculate position size
const positionSize = perpClient.getSizeAmountFromLeverageAndCollateral(
collateralAmount,
leverage,
targetToken,
collateralToken,
side,
targetPrice,
collateralPrice,
targetCustody,
collateralCustody
);
Position Closing
interface FlashCloseTradeParams {
token: string; // Token symbol
side: "long" | "short"; // Position side
}
// Calculate exit price with slippage
const priceWithSlippage = perpClient.getPriceAfterSlippage(
false, // isEntry
new BN(100), // 1% slippage
targetPrice.price,
side
);
Transaction Structure
Compute Budget
// Opening positions
const OPEN_POSITION_CU = 400000;
// Closing positions
const CLOSE_POSITION_CU = 300000;
const computeBudgetIx = ComputeBudgetProgram.setComputeUnitLimit({
units: OPEN_POSITION_CU // or CLOSE_POSITION_CU
});
Error Handling
try {
const tx = await agent.flashOpenTrade(params);
} catch (error) {
if (error.message.includes("Token not supported")) {
// Handle unsupported token
} else if (error.message.includes("slippage")) {
// Handle excessive slippage
}
}
Best Practices
-
Position Management
- Validate tokens
- Check market status
- Monitor slippage
- Verify collateral
-
Risk Management
- Set reasonable leverage
- Monitor liquidation
- Use stop losses
- Track positions
-
Market Interaction
- Check oracle prices
- Verify calculations
- Monitor fees
- Handle timeouts
Common Issues
-
Position Opening
- Insufficient collateral
- Invalid leverage
- Market closed
- Price impact
-
Position Closing
- Position not found
- High slippage
- Network congestion
- Oracle delays
-
Technical Issues
- NFT account missing
- Invalid custody
- Computation limits
- Transaction failure
Helper Functions
Price Conversion
function convertPriceToNumber(oraclePrice: OraclePrice): number {
const price = parseInt(oraclePrice.price.toString("hex"), 16);
const exponent = parseInt(oraclePrice.exponent.toString("hex"), 16);
return price * Math.pow(10, exponent);
}
Collateral Calculation
function calculateCollateralAmount(
usdAmount: number,
tokenPrice: number,
decimals: number
): BN {
return new BN((usdAmount / tokenPrice) * Math.pow(10, decimals));
}
Market Support
Supported Tokens
Configuration
const marketSdkInfo = {
[marketId]: {
tokenPair: string; // e.g., "SOL/USD"
pool: string; // Pool identifier
// Additional market data
}
};
Resources