Phase 2: Market context capture at entry

- Added getFundingRate() method to DriftService
- Capture expectedEntryPrice from oracle before order execution
- Capture fundingRateAtEntry from Drift Protocol
- Save market context fields to database (expectedEntryPrice, fundingRateAtEntry)
- Calculate entry slippage percentage in createTrade()
- Fixed template literal syntax errors in execute endpoint

Database fields populated:
- expectedEntryPrice: Oracle price before order
- entrySlippagePct: Calculated from entrySlippage
- fundingRateAtEntry: Current funding rate from Drift

Next: Phase 3 (analytics API) or test market context on next trade
This commit is contained in:
mindesbunister
2025-10-29 20:51:46 +01:00
parent 65e6a8efed
commit e068c5f2e6
3 changed files with 85 additions and 18 deletions

View File

@@ -43,6 +43,12 @@ export interface CreateTradeParams {
signalStrength?: string
timeframe?: string
isTestTrade?: boolean
// Market context fields
expectedEntryPrice?: number
fundingRateAtEntry?: number
atrAtEntry?: number
adxAtEntry?: number
volumeAtEntry?: number
}
export interface UpdateTradeStateParams {
@@ -73,13 +79,16 @@ export interface UpdateTradeExitParams {
maxGain?: number
}
/**
* Create a new trade record
*/
export async function createTrade(params: CreateTradeParams) {
const prisma = getPrismaClient()
try {
// Calculate entry slippage if expected price provided
let entrySlippagePct: number | undefined
if (params.expectedEntryPrice && params.entrySlippage !== undefined) {
entrySlippagePct = params.entrySlippage
}
const trade = await prisma.trade.create({
data: {
positionId: params.positionId,
@@ -109,6 +118,13 @@ export async function createTrade(params: CreateTradeParams) {
timeframe: params.timeframe,
status: 'open',
isTestTrade: params.isTestTrade || false,
// Market context
expectedEntryPrice: params.expectedEntryPrice,
entrySlippagePct: entrySlippagePct,
fundingRateAtEntry: params.fundingRateAtEntry,
atrAtEntry: params.atrAtEntry,
adxAtEntry: params.adxAtEntry,
volumeAtEntry: params.volumeAtEntry,
},
})