Faithful port of Myquant's Apache-2.0 open-source strategy "KDJ_STOCK" (https://github.com/myquant/strategy/blob/17595e6bf4a118e1fa87c90bfb0fd78afa69a60b/KDJ-STOCK/python/kdj_stock.py). Credit goes to the author, Myquant. Default parameters come from the repository's companion config KDJ-STOCK/python/kdj_stock.ini at the same commit: bar_type=86400 (daily), fastk_period=5, slowk_period=3, slowk_matype=0 (SMA), slowd_period=3, slowd_matype=0 (SMA), slowk_bid=25, slowd_bid=25, slowk_sell=75, slowd_sell=75, is_fixation_stop=0, is_movement_stop=1, stop_fixation_profit=0.20, stop_fixation_loss=0.068, stop_movement_profit=0.068, open_max_days=22, hist_size=30, open_vol=2000 shares, commission 0.03%, benchmark SHSE.000903 (CSI 800). The source is a long-only, daily-bar strategy over a pool of China A-shares, so it is ported to its home market: venue CNEQ (China A-shares, CASH account, long-only, 1x, platform fee 0.05% per side, about 0.10% round trip), 1-DAY bars, with daily history from 2018. The source's stock pool (stock_pool.csv) is not in the repository. The Research Lead therefore chose a fixed pool of 10 liquid CSI-300 large caps whose 100-share lot fits the per-name allocation: 601318 (Ping An), 600036 (CMB), 601398 (ICBC), 600887 (Yili), 601166 (Industrial Bank), 600030 (CITIC Securities), 000333 (Midea), 000651 (Gree), 600276 (Hengrui), 600900 (Yangtze Power). Each name is traded independently with identical rules. Platform adaptations: (1) Sizing: the source buys a fixed 2,000 shares, or as many 100-share lots as available cash allows. Here that becomes position_fraction=0.10 of current account equity per name, capped by available cash and floored to whole 100-share board lots (the lot rounding is kept from the source). If that floors to zero lots the entry is skipped, as in the source, but the cooldown counter still starts. (2) Fills: the source orders at bar.close (or price 0, a market order) on the daily bar. CNEQ has no modeled order latency, so a market order submitted on the daily bar fills at that bar's close, which matches the source. (3) Fees: platform CNEQ fees replace the source's 0.03% commission. (4) The source's live-mode setup (rebuilding the entry high from open positions at restart) and its adj_factor re-scaling are not needed: our bars are already adjusted and the backtest starts flat. No intrabar stops are used: the source evaluates every exit on the completed daily bar's close, and the port keeps that. T+1 is respected by construction, because every decision is made once per daily bar and entry and exit never fall on the same bar. Any performance the source claims is treated as unverified.