enhanced_hedging_example.ts 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. import { EnhancedHedgingExecutor } from '../src/core/hedging/enhancedHedgingExecutor.js'
  2. import { logger } from '../src/utils/logger.js'
  3. /**
  4. * 增强对冲系统使用示例
  5. *
  6. * 功能包括:
  7. * 1. 两个账户价格收敛管理
  8. * 2. 基差风险监控和预警
  9. * 3. 自动止盈止损管理
  10. * 4. 智能收敛算法
  11. * 5. 风险控制和紧急停止
  12. */
  13. async function runEnhancedHedgingExample() {
  14. console.log('\n=== 增强对冲系统示例 ===\n')
  15. try {
  16. // 1. 创建增强对冲执行器
  17. const hedgingExecutor = new EnhancedHedgingExecutor({
  18. executionIntervalMs: 3000, // 3秒执行间隔
  19. enableBasisManagement: true,
  20. enableConvergenceManagement: true,
  21. enableStopLossManagement: true,
  22. enablePerformanceTracking: true,
  23. maxDailyTrades: 50,
  24. emergencyStopThreshold: -0.03, // -3% 紧急停止
  25. riskLimits: {
  26. maxPositionSize: 0.1, // 最大0.1 BTC仓位
  27. maxTotalExposure: 0.5, // 最大0.5 BTC总敞口
  28. maxDailyLoss: 500, // 最大日亏损 $500
  29. maxBasisDeviation: 100, // 最大基差偏差 $100
  30. },
  31. notifications: {
  32. enableSlack: false,
  33. enableEmail: false,
  34. enableWebhook: true,
  35. },
  36. })
  37. // 2. 设置事件监听器
  38. setupEventListeners(hedgingExecutor)
  39. // 3. 添加交易对(两个不同账户)
  40. console.log('添加交易对...')
  41. await hedgingExecutor.addTradingPair(
  42. 'btc_hedge_pair_1',
  43. {
  44. account: process.env.PACIFICA_ACCOUNT_1 || 'demo_account_1',
  45. privateKey: process.env.PACIFICA_PRIVATE_KEY_1 || 'demo_key_1',
  46. },
  47. {
  48. account: process.env.PACIFICA_ACCOUNT_2 || 'demo_account_2',
  49. privateKey: process.env.PACIFICA_PRIVATE_KEY_2 || 'demo_key_2',
  50. },
  51. 'BTC-USD',
  52. {
  53. maxPositionSize: 0.05,
  54. stopLossPercent: 0.015, // 1.5% 止损
  55. takeProfitPercent: 0.025, // 2.5% 止盈
  56. enableTrailingStop: true,
  57. },
  58. )
  59. console.log('✅ 交易对添加成功')
  60. // 4. 启动增强对冲系统
  61. console.log('\n启动增强对冲系统...')
  62. await hedgingExecutor.startEnhancedHedging()
  63. console.log('✅ 增强对冲系统已启动')
  64. // 5. 运行一段时间并展示功能
  65. await demonstrateFeatures(hedgingExecutor)
  66. // 6. 优雅停止
  67. console.log('\n停止增强对冲系统...')
  68. await hedgingExecutor.stopEnhancedHedging()
  69. console.log('✅ 增强对冲系统已停止')
  70. // 7. 显示最终性能指标
  71. displayFinalMetrics(hedgingExecutor)
  72. } catch (error: any) {
  73. console.error('❌ 增强对冲示例失败:', error.message)
  74. logger.error('增强对冲示例失败', { error: error.message, stack: error.stack })
  75. }
  76. }
  77. /**
  78. * 设置事件监听器
  79. */
  80. function setupEventListeners(executor: EnhancedHedgingExecutor) {
  81. console.log('设置事件监听器...')
  82. // 基差风险检测
  83. executor.on('basisRiskDetected', alert => {
  84. console.log(`🚨 基差风险预警: ${alert.symbol} - ${alert.riskLevel} - ${alert.message}`)
  85. })
  86. // 收敛策略执行
  87. executor.on('convergenceStrategyExecuted', event => {
  88. console.log(
  89. `📈 收敛策略执行: ${event.pairId} - ${event.strategy.strategy} - 置信度: ${event.strategy.confidence.toFixed(2)}`,
  90. )
  91. })
  92. // 止损触发
  93. executor.on('stopLossTriggered', event => {
  94. console.log(
  95. `🛑 止损触发: ${event.order.symbol} - ${event.execution.triggerType} - 执行价格: $${event.execution.executedPrice}`,
  96. )
  97. })
  98. // 紧急停止
  99. executor.on('emergencyStopTriggered', event => {
  100. console.log(`🚨 紧急停止触发: ${event.reason}`)
  101. })
  102. // 再平衡完成
  103. executor.on('rebalanceCompleted', event => {
  104. console.log(`⚖️ 再平衡完成: ${event.pairId}`)
  105. })
  106. // 通知
  107. executor.on('notification', notification => {
  108. console.log(`📢 通知: ${notification.type} - ${JSON.stringify(notification.data)}`)
  109. })
  110. console.log('✅ 事件监听器设置完成')
  111. }
  112. /**
  113. * 演示各种功能
  114. */
  115. async function demonstrateFeatures(executor: EnhancedHedgingExecutor) {
  116. console.log('\n=== 功能演示 ===\n')
  117. // 运行30秒,观察系统行为
  118. const demoTime = 30000 // 30秒
  119. const interval = 5000 // 每5秒显示一次状态
  120. console.log(`运行${demoTime / 1000}秒,每${interval / 1000}秒显示状态...`)
  121. const startTime = Date.now()
  122. const statusInterval = setInterval(() => {
  123. displayCurrentStatus(executor)
  124. }, interval)
  125. // 模拟一些市场变化和交易
  126. await simulateMarketConditions(executor)
  127. // 等待演示时间结束
  128. await new Promise(resolve => setTimeout(resolve, demoTime))
  129. clearInterval(statusInterval)
  130. console.log('\n✅ 功能演示完成')
  131. }
  132. /**
  133. * 显示当前状态
  134. */
  135. function displayCurrentStatus(executor: EnhancedHedgingExecutor) {
  136. const status = executor.getStatus()
  137. const metrics = status.performanceMetrics
  138. console.log('\n--- 当前状态 ---')
  139. console.log(`活跃对冲对: ${status.activePairs}`)
  140. console.log(`活跃止损单: ${status.activeStopOrders}`)
  141. console.log(`总交易次数: ${metrics.totalTrades}`)
  142. console.log(`成功交易: ${metrics.successfulTrades}`)
  143. console.log(`失败交易: ${metrics.failedTrades}`)
  144. console.log(`基差风险事件: ${metrics.basisRiskEvents}`)
  145. console.log(`止损触发: ${metrics.stopLossTriggered}`)
  146. console.log(`止盈触发: ${metrics.takeProfitTriggered}`)
  147. console.log(`总盈亏: $${metrics.totalPnl.toFixed(2)}`)
  148. console.log(`最大回撤: ${(metrics.maxDrawdown * 100).toFixed(2)}%`)
  149. if (metrics.totalTrades > 0) {
  150. const successRate = ((metrics.successfulTrades / metrics.totalTrades) * 100).toFixed(1)
  151. console.log(`成功率: ${successRate}%`)
  152. }
  153. }
  154. /**
  155. * 模拟市场条件
  156. */
  157. async function simulateMarketConditions(executor: EnhancedHedgingExecutor) {
  158. console.log('\n模拟市场条件变化...')
  159. // 模拟一些事件来触发系统功能
  160. setTimeout(() => {
  161. console.log('📊 模拟基差扩大事件...')
  162. // 这里可以通过直接调用基差管理器来模拟
  163. }, 5000)
  164. setTimeout(() => {
  165. console.log('📈 模拟价格收敛需求...')
  166. // 这里可以模拟价格偏差情况
  167. }, 10000)
  168. setTimeout(() => {
  169. console.log('🎯 模拟止盈触发场景...')
  170. // 这里可以模拟价格变动触发止盈
  171. }, 15000)
  172. setTimeout(() => {
  173. console.log('⚠️ 模拟风险预警场景...')
  174. // 这里可以模拟风险条件
  175. }, 20000)
  176. }
  177. /**
  178. * 显示最终性能指标
  179. */
  180. function displayFinalMetrics(executor: EnhancedHedgingExecutor) {
  181. console.log('\n=== 最终性能指标 ===')
  182. const metrics = executor.getPerformanceMetrics()
  183. const runTime = (Date.now() - metrics.startTime) / 1000
  184. console.log(`运行时间: ${runTime.toFixed(1)}秒`)
  185. console.log(`总交易次数: ${metrics.totalTrades}`)
  186. console.log(`成功交易: ${metrics.successfulTrades}`)
  187. console.log(`失败交易: ${metrics.failedTrades}`)
  188. if (metrics.totalTrades > 0) {
  189. const successRate = ((metrics.successfulTrades / metrics.totalTrades) * 100).toFixed(1)
  190. console.log(`交易成功率: ${successRate}%`)
  191. console.log(`平均每分钟交易: ${(metrics.totalTrades / (runTime / 60)).toFixed(1)}`)
  192. }
  193. console.log(`基差风险事件: ${metrics.basisRiskEvents}`)
  194. console.log(`止损触发次数: ${metrics.stopLossTriggered}`)
  195. console.log(`止盈触发次数: ${metrics.takeProfitTriggered}`)
  196. console.log(`总盈亏: $${metrics.totalPnl.toFixed(2)}`)
  197. console.log(`总手续费: $${metrics.totalFees.toFixed(2)}`)
  198. console.log(`最大回撤: ${(metrics.maxDrawdown * 100).toFixed(2)}%`)
  199. // 计算一些额外的指标
  200. if (runTime > 0) {
  201. const hourlyReturn = metrics.totalPnl / (runTime / 3600)
  202. console.log(`每小时收益: $${hourlyReturn.toFixed(2)}`)
  203. }
  204. console.log('\n=== 系统特性总结 ===')
  205. console.log('✅ 双账户价格收敛管理 - 自动让两个账户的开仓价格逐步接近')
  206. console.log('✅ 基差监控和风险预警 - 实时监控现货期货基差变化')
  207. console.log('✅ 智能止盈止损管理 - 支持固定、追踪、分批等多种策略')
  208. console.log('✅ 自适应收敛算法 - 根据市场条件调整收敛策略')
  209. console.log('✅ 风险控制和紧急停止 - 多重风险检查和自动保护')
  210. console.log('✅ 实时性能监控 - 详细的交易和风险指标跟踪')
  211. }
  212. /**
  213. * 配置检查
  214. */
  215. function checkConfiguration() {
  216. console.log('检查配置...')
  217. const requiredEnvVars = [
  218. 'PACIFICA_ACCOUNT_1',
  219. 'PACIFICA_PRIVATE_KEY_1',
  220. 'PACIFICA_ACCOUNT_2',
  221. 'PACIFICA_PRIVATE_KEY_2',
  222. ]
  223. const missingVars = requiredEnvVars.filter(varName => !process.env[varName])
  224. if (missingVars.length > 0) {
  225. console.log('⚠️ 以下环境变量未配置,将使用演示模式:')
  226. missingVars.forEach(varName => console.log(` - ${varName}`))
  227. console.log('\n要使用真实交易,请配置这些环境变量')
  228. } else {
  229. console.log('✅ 配置检查通过')
  230. }
  231. }
  232. /**
  233. * 使用说明
  234. */
  235. function printUsageInstructions() {
  236. console.log('\n=== 使用说明 ===')
  237. console.log('1. 配置环境变量:')
  238. console.log(' export PACIFICA_ACCOUNT_1=your_account_1')
  239. console.log(' export PACIFICA_PRIVATE_KEY_1=your_private_key_1')
  240. console.log(' export PACIFICA_ACCOUNT_2=your_account_2')
  241. console.log(' export PACIFICA_PRIVATE_KEY_2=your_private_key_2')
  242. console.log('')
  243. console.log('2. 可选配置代理:')
  244. console.log(' export PROXY_ENABLED=true')
  245. console.log(' export PROXY_HOST=your-proxy-server.com')
  246. console.log(' export PROXY_PORT=8080')
  247. console.log('')
  248. console.log('3. 运行示例:')
  249. console.log(' yarn ts-node examples/enhanced_hedging_example.ts')
  250. console.log('')
  251. console.log('4. 安全提醒:')
  252. console.log(' - 首次使用请在测试环境运行')
  253. console.log(' - 确保账户有足够资金覆盖保证金')
  254. console.log(' - 监控系统运行状态和风险指标')
  255. console.log(' - 了解紧急停止和手动干预方法')
  256. }
  257. // 主函数
  258. async function main() {
  259. console.log('🚀 增强对冲系统示例启动\n')
  260. printUsageInstructions()
  261. checkConfiguration()
  262. await runEnhancedHedgingExample()
  263. console.log('\n🎉 示例运行完成')
  264. }
  265. // 运行示例
  266. if (import.meta.url === `file://${process.argv[1]}`) {
  267. main().catch(error => {
  268. console.error('示例运行失败:', error)
  269. process.exit(1)
  270. })
  271. }
  272. export { runEnhancedHedgingExample }