프론트엔드 추가 및 자동매매 로직 개선:
Some checks failed
Build Push and Restart Compose / deploy (push) Failing after 1m42s
Some checks failed
Build Push and Restart Compose / deploy (push) Failing after 1m42s
- Svelte 기반 프론트엔드 프로젝트 초기 설정 추가 (`vite`, `tailwindcss` 등 포함). - "자동매매" 주요 상태 및 규칙 관리 페이지 구현. - 1차/2차 손절 및 익절 조건 평가 로직 추가(`calcStopTargets`, `evalExitReason` 등). - 포지션 상세 로그 및 WebSocket 기반 실시간 로그 스트림 추가. - API 서비스 및 Frontend 간 Proxy 설정(Vite 서버). - 세션 체크를 위한 `CheckSession` 핸들러 추가.
This commit is contained in:
@@ -129,7 +129,7 @@ function renderRules(rules) {
|
||||
</div>
|
||||
<div class="text-xs text-gray-500 space-y-0.5">
|
||||
<p>진입: RiseScore≥${r.minRiseScore} / 체결강도≥${r.minCntrStr}${r.requireBullish ? ' / AI호재' : ''}</p>
|
||||
<p>청산: 손절${r.stopLossPct}% / 익절+${r.takeProfitPct}%${r.maxHoldMinutes > 0 ? ' / ' + r.maxHoldMinutes + '분' : ''}${r.exitBeforeClose ? ' / 장마감전' : ''}</p>
|
||||
<p>청산: ${r.stopLoss1Count > 0 ? `1차손절${r.stopLoss1Pct}%[${r.stopLoss1Count}회] / 2차손절${r.stopLossPct}%` : `손절${r.stopLossPct}%`} / 익절+${r.takeProfitPct}%${r.maxHoldMinutes > 0 ? ' / ' + r.maxHoldMinutes + '분' : ''}${r.exitBeforeClose ? ' / 장마감전' : ''}</p>
|
||||
<p>주문금액: ${formatMoney(r.orderAmount)}원 / 최대${r.maxPositions}종목</p>
|
||||
</div>
|
||||
<div class="flex gap-2">
|
||||
@@ -173,7 +173,9 @@ function showAddRuleModal() {
|
||||
document.getElementById('fRequireBullish').checked = false;
|
||||
document.getElementById('fOrderAmount').value = 500000;
|
||||
document.getElementById('fMaxPositions').value = 3;
|
||||
document.getElementById('fStopLoss').value = -3;
|
||||
document.getElementById('fStopLoss1').value = -2;
|
||||
document.getElementById('fStopLoss1Count').value = 3;
|
||||
document.getElementById('fStopLoss').value = -4;
|
||||
document.getElementById('fTakeProfit').value = 5;
|
||||
document.getElementById('fMaxHold').value = 60;
|
||||
document.getElementById('fExitBeforeClose').checked = true;
|
||||
@@ -190,6 +192,8 @@ function showEditRuleModal(r) {
|
||||
document.getElementById('fRequireBullish').checked = r.requireBullish;
|
||||
document.getElementById('fOrderAmount').value = r.orderAmount;
|
||||
document.getElementById('fMaxPositions').value = r.maxPositions;
|
||||
document.getElementById('fStopLoss1').value = r.stopLoss1Pct ?? -2;
|
||||
document.getElementById('fStopLoss1Count').value = r.stopLoss1Count ?? 3;
|
||||
document.getElementById('fStopLoss').value = r.stopLossPct;
|
||||
document.getElementById('fTakeProfit').value = r.takeProfitPct;
|
||||
document.getElementById('fMaxHold').value = r.maxHoldMinutes;
|
||||
@@ -211,6 +215,8 @@ async function submitRule() {
|
||||
requireBullish: document.getElementById('fRequireBullish').checked,
|
||||
orderAmount: parseInt(document.getElementById('fOrderAmount').value),
|
||||
maxPositions: parseInt(document.getElementById('fMaxPositions').value),
|
||||
stopLoss1Pct: parseFloat(document.getElementById('fStopLoss1').value),
|
||||
stopLoss1Count: parseInt(document.getElementById('fStopLoss1Count').value) || 0,
|
||||
stopLossPct: parseFloat(document.getElementById('fStopLoss').value),
|
||||
takeProfitPct: parseFloat(document.getElementById('fTakeProfit').value),
|
||||
maxHoldMinutes: parseInt(document.getElementById('fMaxHold').value),
|
||||
@@ -268,7 +274,8 @@ function renderPositions(positions) {
|
||||
<th class="pb-2 font-medium">종목</th>
|
||||
<th class="pb-2 font-medium text-right">매수가</th>
|
||||
<th class="pb-2 font-medium text-right">수량</th>
|
||||
<th class="pb-2 font-medium text-right">손절가</th>
|
||||
<th class="pb-2 font-medium text-right">1차손절</th>
|
||||
<th class="pb-2 font-medium text-right">2차손절</th>
|
||||
<th class="pb-2 font-medium text-center">상태</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -284,7 +291,8 @@ function renderPositions(positions) {
|
||||
</td>
|
||||
<td class="py-2 text-right text-gray-700">${formatMoney(p.buyPrice)}</td>
|
||||
<td class="py-2 text-right text-gray-700">${p.qty}</td>
|
||||
<td class="py-2 text-right text-blue-500">${formatMoney(p.stopLoss)}</td>
|
||||
<td class="py-2 text-right text-orange-500">${p.stopLoss1 > 0 ? formatMoney(p.stopLoss1) + `<span class="text-xs text-gray-400 ml-0.5">[${p.stopLoss1Touches||0}회]</span>` : '-'}</td>
|
||||
<td class="py-2 text-right text-red-500">${formatMoney(p.stopLoss)}</td>
|
||||
<td class="py-2 text-center font-medium ${statusCls}">${statusTxt}</td>
|
||||
</tr>
|
||||
`;
|
||||
|
||||
Reference in New Issue
Block a user