一键导入
chart-setup
Binance Futures TradingView 차트 설정 자동화. 수평선 그리기, 지표 추가, 차트 초기화. 키워드: 차트 설정, 차트 분석, 수평선, 지지선, 저항선, TradingView, 차트 최적화, horizontal line, chart setup
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Binance Futures TradingView 차트 설정 자동화. 수평선 그리기, 지표 추가, 차트 초기화. 키워드: 차트 설정, 차트 분석, 수평선, 지지선, 저항선, TradingView, 차트 최적화, horizontal line, chart setup
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | chart-setup |
| description | Binance Futures TradingView 차트 설정 자동화. 수평선 그리기, 지표 추가, 차트 초기화. 키워드: 차트 설정, 차트 분석, 수평선, 지지선, 저항선, TradingView, 차트 최적화, horizontal line, chart setup |
| allowed-tools | mcp__playwright__browser_evaluate, mcp__playwright__browser_take_screenshot, mcp__playwright__browser_snapshot |
Playwright MCP를 사용하여 Binance Futures TradingView 차트에 수평선(지지/저항 레벨)을 정확히 그리고 차트를 분석 최적 상태로 설정한다.
사용자가 "차트 설정", "차트 분석 최적화", "수평선 그려줘", "레벨 표시" 등을 요청할 때 호출.
const iframe = document.querySelector('iframe[name="tradingview_85d71"]') || document.querySelector('iframe');
const win = iframe.contentWindow;
const cwc = win.chartWidgetCollection;
const chartWidget = cwc.activeChartWidget.value();
const model = chartWidget.model(); // 핵심 모델
const panes = model.panes();
const pane = panes[0]; // 메인 가격 차트 pane
const priceScale = pane.defaultPriceScale();
| API | 상태 | 설명 |
|---|---|---|
model.removeAllDrawingTools() | ✅ 정상 | 모든 수평선/드로잉 삭제 |
priceScale.priceToCoordinate(price) | ✅ 정상 | 가격 → pane 내 y좌표 변환 |
priceScale.coordinateToPrice(y) | ✅ 정상 | pane y좌표 → 가격 변환 |
model.crosshairSource().index | ✅ 정상 | 현재 bar index 조회 |
model.drawRightThere('LineToolHorzLine', pane, {index, price}) | ❌ null 반환 | tool name이 isLineToolName 체크 미통과 |
| 사이드바 버튼 클릭 후 canvas 이벤트 디스패치 | ⚠️ 부정확 | 좌표가 미세하게 틀림 |
// 가격의 페이지 절대 y 좌표 계산
const iframeRect = document.querySelector('iframe').getBoundingClientRect();
const paneY = priceScale.priceToCoordinate(targetPrice);
const pageY = iframeRect.top + paneY;
// iframe 확인 + 현재 가격 범위
const pane = model.panes()[0];
const priceScale = pane.defaultPriceScale();
const range = priceScale.priceRange();
// range._minValue, range._maxValue
model.removeAllDrawingTools();
// 잠시 대기 후 확인
const targets = [
{ price: 1.4700, label: 'BoxHigh' },
{ price: 1.4200, label: 'TP' },
{ price: 1.3580, label: 'Entry' },
{ price: 1.3413, label: 'SL' },
{ price: 1.3300, label: 'BoxLow' },
];
for (const t of targets) {
const paneY = priceScale.priceToCoordinate(t.price);
const pageY = iframeRect.top + paneY;
// pageY를 Playwright page.mouse.click(x, pageY)로 클릭
}
CRITICAL: canvas 이벤트 디스패치보다 Playwright의 page.mouse.click()이 더 정확함.
// evaluate로 좌표 계산
const coords = await page.evaluate(() => {
const iframe = document.querySelector('iframe');
const win = iframe.contentWindow;
const model = win.chartWidgetCollection.activeChartWidget.value().model();
const priceScale = model.panes()[0].defaultPriceScale();
const iframeRect = iframe.getBoundingClientRect();
return targets.map(t => ({
price: t.price,
pageY: iframeRect.top + priceScale.priceToCoordinate(t.price),
pageX: iframeRect.left + 500 // 차트 중앙 x
}));
});
// 각 가격에 수평선 그리기
for (const coord of coords) {
// 수평선 도구 활성화
await page.evaluate(() => {
const doc = document.querySelector('iframe').contentDocument;
for (const btn of doc.querySelectorAll('[data-tooltip]')) {
if (btn.getAttribute('data-tooltip') === 'Horizontal Line') {
btn.click(); break;
}
}
});
await page.waitForTimeout(200);
// 정확한 y 위치에 클릭
await page.mouse.click(coord.pageX, coord.pageY);
await page.waitForTimeout(300);
}
// Escape로 도구 해제
await page.keyboard.press('Escape');
스크린샷 찍어서 우측 price label 확인.
// XRP 포지션 기준 레벨 (2026-03-07)
const XRP_LEVELS = [
{ price: 1.4700, label: '🟠 Box High', color: '#FF9800' },
{ price: 1.4200, label: '🎯 TP', color: '#4CAF50' },
{ price: 1.3580, label: '📍 Entry', color: '#2196F3' },
{ price: 1.3413, label: '🛡️ SL', color: '#F44336' },
{ price: 1.3300, label: '📦 Box Low', color: '#FF9800' },
];
model.drawRightThere('LineToolHorzLine', pane, {index, price}) → null 반환isLineToolName() 체크 실패 (minified 코드의 Qt.isLineToolName)canvas.dispatchEvent(new MouseEvent('click', {clientX, clientY})) → 큰 좌표 오차browser_run_code의 page.mouse.click(pageX, pageY) 사용 (OS 레벨 이벤트)priceToCoordinate = pane-local CSS y좌표 (DPR 무관)iframe.getBoundingClientRect().top + paneYbrowser_evaluate만으로는 page.mouse 접근 불가browser_run_code 사용: async (page) => { await page.mouse.click(x, y); }// browser_run_code로 실행 — 완전한 5선 그리기 스크립트
async (page) => {
// 1. 기존 모든 드로잉 삭제
await page.evaluate(() => {
const iframe = document.querySelector('iframe[name="tradingview_85d71"]') || document.querySelector('iframe');
iframe.contentWindow.chartWidgetCollection.activeChartWidget.value().model().removeAllDrawingTools();
});
await page.waitForTimeout(600);
// 2. 좌표 한번에 계산
const coords = await page.evaluate(() => {
const iframe = document.querySelector('iframe[name="tradingview_85d71"]') || document.querySelector('iframe');
const priceScale = iframe.contentWindow.chartWidgetCollection.activeChartWidget.value().model().panes()[0].defaultPriceScale();
const rect = iframe.getBoundingClientRect();
return [
{ price: 1.4700 }, { price: 1.4200 },
{ price: 1.3580 }, { price: 1.3413 }, { price: 1.3300 },
].map(t => ({ ...t, pageX: rect.left + 500, pageY: rect.top + priceScale.priceToCoordinate(t.price) }));
});
// 3. 각 선 그리기
for (const c of coords) {
await page.evaluate(() => {
const doc = (document.querySelector('iframe[name="tradingview_85d71"]') || document.querySelector('iframe')).contentDocument;
for (const btn of doc.querySelectorAll('[data-tooltip]'))
if (btn.getAttribute('data-tooltip') === 'Horizontal Line') { btn.click(); return; }
});
await page.waitForTimeout(200);
await page.mouse.click(c.pageX, c.pageY);
await page.waitForTimeout(300);
}
await page.keyboard.press('Escape');
}
실측 정확도 (page.mouse.click 사용):
| 목표 | 실제 | 오차 |
|---|---|---|
| $1.4700 | 1.4722 | +0.002 |
| $1.4200 | 1.4227 | +0.003 |
| $1.3580 | 1.3587 | +0.001 |
| $1.3413 | 1.3441 | +0.003 |
| $1.3300 | 1.3347 | +0.002 |
선 그린 후 우측 price label 확인:
| 지표 | 파라미터 | 기본값 | 최적값 | 이유 |
|---|---|---|---|---|
| RSI | length | 14 | 14 | 표준, 유지 |
| RSI | smoothingLength | 14 | 3 | 신호 지연 제거, 반응성 20x↑ |
| Volume | showMA | false | true | 거래량 급증 vs 평균 식별 |
| Volume | length | 20 | 20 | 유지 |
// ✅ 작동: _properties.childs().inputs.childs()[id].setValue()
await page.evaluate(() => {
const iframe = document.querySelector('iframe[name="tradingview_85d71"]') || document.querySelector('iframe');
const model = iframe.contentWindow.chartWidgetCollection.activeChartWidget.value().model();
for (const pane of model.panes()) {
for (const src of pane.studySources()) {
const name = src.metaInfo().shortDescription;
const inputChilds = src._properties.childs().inputs.childs();
if (name === 'RSI') inputChilds['smoothingLength'].setValue(3);
if (name === 'Volume') inputChilds['showMA'].setValue(true);
}
}
});
// ❌ 미작동: src._tryChangeInputs(), src._changeInputsImpl(), inputs 직접 할당
mcp__playwright__browser_evaluate, mcp__playwright__browser_take_screenshot, mcp__playwright__browser_run_code)Binance Futures에서 Playwright 브라우저를 통해 Trailing Stop 주문을 UI로 직접 등록하는 자동화 스킬. 활성화 가격(activationPrice), 콜백 비율(callbackRate%), 수량(size)을 파라미터로 받아 Close 탭 → Trailing Stop 선택 → 값 입력 → Close long 순서로 주문을 제출한다. 키워드: 트레일링 스탑, trailing stop, 바이낸스 선물, binance futures, 추적 매도, 자동 청산
XRPUSDT 박스권 자동 스켈핑 전략 스킬. Binance Futures Hedge mode에서 평균회귀형 범위장 스캘프를 설계, 검토, 백테스트, 운용할 때 사용한다. 키워드: XRP, box range, 박스권, scalping, mean reversion, hedge mode, futures bot, funding, open interest, breakout filter
Obsidian Vault 지식 저장소 관리 스킬. 키워드: obsidian, vault, 노트, 지식, knowledge, playbook, journal, 저널, 리뷰
주식 트레이딩 대가(드러켄밀러, 리버모어, CANSLIM, 튜더 존스, 피터 린치)의 전략을 암호화폐 시장에 적용하는 가이드. 트레이딩 전략, 진입/청산 조건, 리스크 관리, 모멘텀, 추세추종, 평균회귀, 돌파매수, BTC 사이클, 알트코인 로테이션, 텐배거 발굴에 대한 질문이나 코인 투자 전략이 필요할 때 사용.
Binance 거래소 API 기본 정보. 마이클이 필요시 도구를 직접 생성하여 사용. 키워드: 바이낸스, binance, 포트폴리오, 잔고, 선물, 거래, spot, futures, balance
NLM 세컨드 브레인 — 노트북 조회, 학습 기록, 경험 축적. 키워드: NLM, 세컨드 브레인, second brain, 노트북, notebook, 학습, 교훈, lesson, 경험, knowledge