// strategy.js import logger from './logger.js'; import {OpenAI} from "openai"; const prompts = { "1h": `BTC/USDT 1시간 스윙 트레이딩 엔진입니다. - 시간대: 1시간 캔들만. - 일일 거래 빈도 목표: ≥ 3개의 유효 설정. - 거래당 위험: 계좌 잔액의 1% 이하. - 동시에 2개 이상의 포지션을 보유하지 마십시오. - 최종 JSON 외부에 해설을 추가하지 마십시오. [입력] 최근 1시간 캔들 50개(최근 캔들 순, 형식: [{"t":,"o":,"h":,"l":,"c":,"v":}, …] LONG: - 9-EMA > 21-EMA (둘 다 상승). - RSI14가 40 보다 작으며 이전 캔들 대비 상승하는 경우. - Close ≥ VWAP. - Close ≤ 스윙 고점 - ATR14×0.5 (작은 하락 구간). SHORT: - 9-EMA < 21-EMA (둘 다 하락). - RSI14가 60 보다 크며 이전 캔들 대비 하락하는 경우. - Close ≤ VWAP. - Close ≥ 스윙 저점 + ATR14×0.5 (작은 하락 구간). HOLD: - 매수 또는 매도 조건이 모두 충족되지 않는 경우. JSON만 반환하며, 콜론 뒤에 공백은 포함하지 않습니다. {"side":"LONG|SHORT|HOLD","price":,"sl":,"tp":,"reason":"<최대 200단어>"} 진입 가격(한도) = 현재 캔들 종가 *손절(SL) *익절(TP) 는 제공된 캔들의 추세선으로 설정해주세요.(중요) 모든 가격을 가장 가까운 0.1 USDT로 반올림하세요. reason 은 한국어로 대답해줘.`, '15m': `당신은 2025년 기준 코인 선물 **15분봉 전문 트레이더**입니다. 15분 단위로 신속한 진입/청산이 필수적이며, **2~3배 레버리지**로 고빈도 수익을 추구합니다. 다음 규칙을 철저히 적용하세요. ### 📌 핵심 분석 지표 (15분봉 최적화) - **롱 진입 조건** (2가지 충족 시): 1. EMA9 > EMA21 정배열 + 가격이 **15분 VWAP 상향 돌파** (2회 재테스트 성공) 2. RSI(9) 30 이하에서 **역다이버전스** + 양봉 체인 2연속 3. Funding Rate < -0.03% + Liquidation Cluster(0.2% 구간) 형성 - **숏 진입 조건** (2가지 충족 시): 1. 볼린저 밴드(14,1.5σ) 상단 **3회 테스트 실패** + MACD(6,13,9) 히스토그램 급감 2. OVM에서 **롱 리퀴 헌팅 구간** (Coinalyze 기준 5분 내 집중) 3. Funding Rate 15분 이동평균 > 0.07% ### ⚙️ 15분봉 특화 리스크 관리 (!!!!꼭 지겨야 하는 조건) - **스탑로스**: 최근 3봉 저점(롱)/고점(숏) ± 0.3% or ATR(7)*1.2 - **테이크프로핏**: 1:2 비율 (예: SL 0.5% → TP 1.0%) - **홀드 조건**: • 롱 숏 포지션에 해당 하지 않고 손실이 발생 할거 같으면 홀드 ### 📊 15분봉 데이터 해석 핵심 - **VWAP**: 15분 단위 재계산, **상승 시 0.15% 이내 재테스트** 필수 - **다이버전스**: RSI/MACD 신호 지속시간 **3봉 이내**만 유효 - **OVM**: Liquidation Cluster **0.2% 미만 밀집 구간**에만 반응 ### 📝 출력 형식 (순수 JSON, 추가 설명 금지, !!반드시 JSON 으로만 대답) { side: LONG/SHORT/HOLD, price: 진입가(소수점 2자리), sl: 손절가(소수점 2자리), tp: 익절가(소수점 2자리), reason: 핵심 2가지 지표 조합 (예: EMA9/21 정배열+리퀴 헌팅 구간 형성) } ⚠️ **2025년 15분봉 특이사항**: - 기관 알고리즘 트레이딩으로 **0.5% 미만의 짧은 파동**이 주류 - Funding Rate 변동 **15분 이동평균**만 고려 (순간값 무시) - VWAP 재테스트 시 **캔들 종가 기준** 필수 확인" 아래 15분봉 데이터 입니다. [데이터 타입] [{"t":,"o":,"h":,"l":,"c":,"v":}, …] 캔들스틱 데이터 15분봉 : ` } const openai = new OpenAI({ baseURL: 'https://openrouter.ai/api/v1', apiKey: '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', }); export async function aiSignal(bars) { if (bars.length < 20) return null; console.log(Date.now()) const content = ` ${prompts["1h"]} ${JSON.stringify(bars)} `; const completion = await openai.chat.completions.create({ model: 'qwen/qwen3-coder', messages: [ { role: 'user', content: content, }, ], }); try { console.log(Date.now()) const msg = completion.choices[0].message.content logger.debug(msg); const sig = JSON.parse(msg) return sig; } catch(e) { return {side : 'HOLD'} } }