408a3e0d4a
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
143 lines
3.3 KiB
JSON
143 lines
3.3 KiB
JSON
{
|
|
"_meta": {
|
|
"schema_version": 1,
|
|
"last_updated": "2026-05-06",
|
|
"note": "변경 시 별도 커밋. guards 단위테스트가 이 파일을 검증. 손으로 풀지 말고 항상 이 파일을 통해 조정."
|
|
},
|
|
"enabled": false,
|
|
"kill_switch_file": "state/orders_disabled",
|
|
"accounts_whitelist": [
|
|
"일반",
|
|
"ISA",
|
|
"가희_일반",
|
|
"가희_ISA"
|
|
],
|
|
"owner_accounts": [
|
|
"일반",
|
|
"ISA"
|
|
],
|
|
"spouse_accounts": [
|
|
"가희_일반",
|
|
"가희_ISA"
|
|
],
|
|
"limits": {
|
|
"single_order_max_won": null,
|
|
"daily_total_max_won": null,
|
|
"balance_ratio_max": null,
|
|
"price_band_pct_soft": null,
|
|
"price_band_pct_hard": 30
|
|
},
|
|
"delays": {
|
|
"between_orders_seconds": 5
|
|
},
|
|
"pin": {
|
|
"owner_length": 4,
|
|
"owner_charset": "digits",
|
|
"spouse_length": 8,
|
|
"spouse_charset": "alnum_no_confusing",
|
|
"alnum_no_confusing_chars": "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789",
|
|
"expiry_seconds": 120,
|
|
"max_attempts": 1
|
|
},
|
|
"trading_hours": {
|
|
"tz": "Asia/Seoul",
|
|
"krx_regular_start": "09:00:30",
|
|
"krx_regular_end": "15:20:00",
|
|
"krx_closing_auction_start": "15:20:00",
|
|
"krx_closing_auction_end": "15:30:00",
|
|
"nxt_pre_start": "08:00:00",
|
|
"nxt_pre_end": "09:00:00",
|
|
"nxt_after_start": "15:30:00",
|
|
"nxt_after_end": "20:00:00",
|
|
"krx_after_start": "16:00:00",
|
|
"block_outside": true,
|
|
"holiday_state_file": "state/market_holidays.json"
|
|
},
|
|
"routing": {
|
|
"default": "AL",
|
|
"force_options": [
|
|
"AL",
|
|
"NX",
|
|
"KRX"
|
|
],
|
|
"suffix_AL": "_AL",
|
|
"suffix_NX": "_NX",
|
|
"suffix_KRX": ""
|
|
},
|
|
"market_order": {
|
|
"allowed": true,
|
|
"natural_language_market": [
|
|
"시장가"
|
|
],
|
|
"natural_language_aggressive_limit": [
|
|
"지금 바로",
|
|
"즉시",
|
|
"빨리",
|
|
"당장"
|
|
],
|
|
"aggressive_limit_ticks": 1,
|
|
"show_orderbook_depth": 3,
|
|
"estimate_slippage": true
|
|
},
|
|
"guards": {
|
|
"block_market_holidays": true,
|
|
"block_trading_halt": true,
|
|
"block_vi": true,
|
|
"block_outside_trading_hours": true,
|
|
"require_balance_check_for_buy": true,
|
|
"require_position_check_for_sell": true,
|
|
"block_market_order_when_orderbook_thin": false
|
|
},
|
|
"card": {
|
|
"highlight_fields": [
|
|
"side",
|
|
"account",
|
|
"symbol_name",
|
|
"price"
|
|
],
|
|
"highlight_marker": "▶",
|
|
"highlight_bold_markdown": true,
|
|
"buy_emoji": "🛒",
|
|
"sell_emoji": "💰",
|
|
"warning_emoji": "⚠️",
|
|
"show_orderbook_for_market": true,
|
|
"orderbook_depth": 3,
|
|
"show_balance_ratio": true
|
|
},
|
|
"ledger": {
|
|
"log_file": "state/order_log.jsonl",
|
|
"events": [
|
|
"card_issued",
|
|
"pin_issued",
|
|
"amended",
|
|
"approved",
|
|
"rejected",
|
|
"expired",
|
|
"canceled",
|
|
"submitted",
|
|
"filled",
|
|
"partial",
|
|
"failed",
|
|
"dryrun",
|
|
"cancel_submitted",
|
|
"cancel_rejected",
|
|
"cancel_confirmed",
|
|
"cancel_unconfirmed_timeout",
|
|
"modify_submitted",
|
|
"modify_rejected",
|
|
"trailing_register_failed",
|
|
"arm_registered",
|
|
"arm_fired",
|
|
"arm_fire_failed",
|
|
"arm_canceled"
|
|
],
|
|
"mask_token_in_logs": true
|
|
},
|
|
"telegram": {
|
|
"dm_only": true,
|
|
"chat_id_whitelist_env": "OPENCLAW_OWNER_CHAT_ID",
|
|
"block_groups": true,
|
|
"block_when_agent_env_set": "OPENCLAW_AGENT"
|
|
}
|
|
}
|