Lumaktaw papunta sa nilalaman
Lahat ng estratehiya

Mga Estratehiya

Tapat na port ng Myquant KDJ_STOCK: arawang slow-stochastic (5,3,3), bumili kapag oversold at magbenta kapag overbought, may 22-araw na cooldown bago muling pumasok, stop na 6.8%, at trailing profit stop na ina-activate sa 20% 6.8%; long-only sa malalaking A-share ng 10 CNEQ

Resulta: Inabandona

MyquantKdjStockCneq

Buod ng Resulta

Pagkaraan ng dalawang ulit, sinubukan ng MyquantKdjStockCneq ang nakapirming pag-aangkop sa 10 stock gamit ang fill sa bukas ng susunod na session, na naiiba sa execution sa parehong pagsasara ng hypothesis. Nagbalik ito ng 8.29% sa 658 nagsarang trade, na may Sharpe na 0.186 at karaniwang netong kita bawat trade na 0.1127%. Naipagtugma ang mga komisyon, pero itinigil ng pagsusuri sa backtest ang strategy dahil mas mababa sa minimum na 0.15% sa pagsusuri ang netong kita bawat trade. Hindi naabot ang optimization at mga susunod na yugto.

Hypothesis

Tapat na port ng open-source strategy ng Myquant na Apache-2.0 na "KDJ_STOCK" (https://github.com/myquant/strategy/blob/17595e6bf4a118e1fa87c90bfb0fd78afa69a60b/KDJ-STOCK/python/kdj_stock.py). Pinasasalamatan ang may-akda na si Myquant. Galing sa katambal na config ng repository na KDJ-STOCK/python/kdj_stock.ini sa parehong commit ang mga default na parameter: 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,……Magpakita ng higit paMagpakita ng mas kaunti

Tapat na port ng open-source strategy ng Myquant na Apache-2.0 na "KDJ_STOCK" (https://github.com/myquant/strategy/blob/17595e6bf4a118e1fa87c90bfb0fd78afa69a60b/KDJ-STOCK/python/kdj_stock.py). Pinasasalamatan ang may-akda na si Myquant. Galing sa katambal na config ng repository na KDJ-STOCK/python/kdj_stock.ini sa parehong commit ang mga default na parameter: 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 share, komisyon 0.03%, benchmark SHSE.000903 (CSI 800). Long-only at gumagamit ng daily bar ang orihinal na strategy para sa stock pool ng China A-shares, kaya inilipat ito sa sariling merkado nito: venue CNEQ (China A-shares, CASH account, long-only, 1x, bayad ng platform na 0.05% bawat panig, humigit-kumulang 0.10% round trip), 1-DAY bar, na may daily history mula sa 2018. Wala sa repository ang stock pool ng pinagmulan (stock_pool.csv). Kaya pumili ang Research Lead ng nakapirming pool na 10 likidong malalaking CSI-300 na kasya ang lot na tig-100 share sa alokasyon bawat stock: 601318 (Ping An), 600036 (CMB), 601398 (ICBC), 600887 (Yili), 601166 (Industrial Bank), 600030 (CITIC Securities), 000333 (Midea), 000651 (Gree), 600276 (Hengrui), 600900 (Yangtze Power). Hiwalay na tine-trade ang bawat stock gamit ang magkakaparehong tuntunin. Mga pag-aangkop sa platform: (1) Pagtatakda ng laki: bumibili ang orihinal ng takdang 2,000 share, o ng pinakamaraming lot na tig-100 share na kaya ng magagamit na cash. Dito, nagiging position_fraction=0.10 ng kasalukuyang equity ng account bawat stock, nililimitahan ng magagamit na cash at ibinababa sa buong board lot na tig-100 share (pinanatili ang pag-round ng lot mula sa orihinal). Kung magiging sero ang lot matapos ibaba, nilalaktawan ang pagpasok gaya sa orihinal, pero magsisimula pa rin ang cooldown counter. (2) Mga fill: naglalagay ng order ang orihinal sa bar.close (o presyong 0, isang market order) sa daily bar. Walang minomodelong latency ng order ang CNEQ, kaya napupunan sa pagsasara ng bar ang market order na isinumite sa daily bar, gaya sa orihinal. (3) Mga bayad: pumapalit ang mga bayad sa platform na CNEQ sa komisyon ng 0.03% ng orihinal. (4) Hindi kailangan ang setup ng orihinal para sa live mode (muling buuin ang entry high mula sa mga bukas na posisyon sa pag-restart) at ang muling pag-scale nito na adj_factor: naka-adjust na ang mga bar natin at walang hawak na posisyon sa simula ng backtest. Walang intrabar stop: sinusuri ng orihinal ang bawat exit sa pagsasara ng nakumpletong daily bar at ganoon din ang port. Nasusunod ang T+1 dahil isang beses lang bawat daily bar nagpapasya at hindi pumapasok at lumalabas sa iisang bar. Itinuturing na hindi beripikado ang anumang performance na inaangkin ng orihinal.

Inilipat sa CNEQ dahil strategy ito para sa A-share stock (CSI 800 benchmark, lot na tig-100 share, lohika ng T+1 volume_today). Hindi rin gaanong nagagamit ang CNEQ (0.3% ng corpus), at naiiba ang pagbaligtad ng oversold oscillator na may cooldown sa mga kamakailang pagkabigo ng trend-following na BCH/LTC/XLM. Walang ginagamit na BTC o instrumentong Binance.

Tanggihan ang pag-aangkop ng Myquant KDJ_STOCK na ito sa nakapirming pool gamit ang fill sa susunod na bukas na CNEQ, hindi ang stock pool ng may-akda na hindi ibinigay o ang mga resultang inaangkin niya. Sa 658 trade, 0.1127% ang karaniwang netong kita bawat trade kumpara sa minimum na 0.15% sa pagsusuri. Positibo ang inaasahang kita pero kulang sa hinihinging puwang sa ekonomiya matapos ang mga gastos. Kumpirmado ang alalahanin ni QA tungkol sa ekonomiya; hindi ang alalahanin nito sa nawawalang komisyon. Walang natukoy na depekto sa implementasyon na sapat na batayan para umulit. Hindi sapat ang baseline na mas mababa sa minimum para mag-optimize; hindi inaangking pinatutunayan ng hindi pa naisagawang sweep ng parameter na malulugi ang bawat pagsasaayos.

Implementasyon

Port ng KDJ_STOCK sa malalaking China A-share na 10 (CNEQ venue) gamit ang daily bar. Hiwalay na tine-trade ang bawat stock. Kinukuwenta nito ang slow stochastic, STOCH(5, 3 SMA, 3 SMA), sa loob ng 30 bar. Bumibili ito ng 10% ng equity sa lot na tig-100 share kapag mas mababa sa 25 ang slowK o mas mababa sa 25 ang slowD, kung walang hawak na posisyon sa stock at wala ito sa 22-araw na lockout bago muling pumasok. Nagbebenta kapag mas mataas sa 75 ang slowK o mas mataas sa 75 ang slowD. Dalawang stop na batay sa pagsasara ang inilalapat din: stop sa pagkalugi na 6.8%, at trailing stop na 6.8% mula sa pinakamataas na pagsasara na magiging aktibo lamang kapag umabot sa 20% ang kita ng posisyon. Hanggang isang aksyon lang bawat stock bawat araw. Nagpapasya sa pagsasara ng nakumpletong daily bar at nagsasagawa ng market order sa bukas ng susunod na session.

Itinatama ng pag-ulit na ito ang QA hypothesis_mismatch. Sinabi sa adaptation ng brief (2) na mapupunan ang mga order sa pagsasara ng decision bar. Sa CNEQ, hindi ito posible: hindi suportado ang fill sa parehong pagsasara at sa bukas ng susunod na session pinupunan ng platform ang order. Hindi binago ang lohika ng trading dahil ginagamit na nito ang suportadong market-order path. Sinasabi na ngayon sa code header, docstring at port_deviations na nagpapasya sa nakumpletong daily close at pinupunan sa bukas ng……Magpakita ng higit paMagpakita ng mas kaunti

Itinatama ng pag-ulit na ito ang QA hypothesis_mismatch. Sinabi sa adaptation ng brief (2) na mapupunan ang mga order sa pagsasara ng decision bar. Sa CNEQ, hindi ito posible: hindi suportado ang fill sa parehong pagsasara at sa bukas ng susunod na session pinupunan ng platform ang order. Hindi binago ang lohika ng trading dahil ginagamit na nito ang suportadong market-order path. Sinasabi na ngayon sa code header, docstring at port_deviations na nagpapasya sa nakumpletong daily close at pinupunan sa bukas ng susunod na session, kaya dapat ganito ang nakasaad sa kontrata ng pananaliksik: 'magpasya sa pagsasara, magsagawa sa susunod na bukas'. Sinuri ayon sa oras na iyon: (1) itinatakda ang trailing-stop entry high mula sa unang daily close na hawak ang posisyon (araw ng fill), gaya ng orihinal; (2) ginagamit ng mga pagsubok sa kita at stop ang aktuwal na fill price (sa susunod na bukas) bilang cost; (3) nasusunod ang T+1, dahil ang entry na napunan sa bukas ng araw D ay maaari lang ilabas sa pasyang ginawa sa pagsasara ng D, na mapupunan sa bukas ng D+1. Nagpakita ang smoke test ng serong komisyon. Isyu ito sa pagsingil ng bayad ng platform sa CNEQ CASH account (nauna nang iniulat ng analyst ang kaparehong isyu para sa ShanghaiMaCompressionKdjBasket) at hindi kontrolado ng code ng strategy; hindi binabago ng strategy ang bayad.

Mga Resulta ng Beripikasyon

Operator: itugma ang pagsingil ng bayad na CNEQ sa BacktestRunner._apply_fees bago pagkatiwalaan ang ekonomiya ng buong backtest.

Iniulat ng sandbox na total_commission = 0.0 sa CNEQ kahit may nakatakdang bayad na 0.05% bawat panig. Isyu ito sa pagsingil ng bayad ng platform sa CNEQ CASH account, hindi sa code ng strategy, pero pinalalaki nito nang humigit-kumulang 0.10% bawat round trip ang netong kita.

Kumpirmahin ang panimulang halaga ng orihinal na counter at itugma ito nang eksakto.

Nagsisimula sa 0 ang bilang ng re-entry lockout sa pagpasok at binubura ito kapag umabot na sa open_max_days sa pagpalit ng araw, kaya humigit-kumulang open_max_days+1 araw ng trading ang tagal. Kung itinatakda ng orihinal ang dict_open_cum_days sa 1, magkukulang ng isang araw ang panahong ito. Hindi ito mahalaga sa mekanismo, at maaaring i-tune ang open_max_days.

Research Lead: baguhin ang kontrata para sabihing 'magpasya sa nakumpletong pagsasara, magsagawa sa bukas ng susunod na session'.

Sinasabi pa rin sa teksto ng hypothesis, adaptation (2), na nangyayari ang fill sa pagsasara ng decision bar. Tama ang code na nagpapasya sa pagsasara at nagpupuno sa bukas ng susunod na session, alinsunod sa tuntunin ng platform para sa CNEQ, at dokumentado ang paglihis. Walang hindi pagtutugma, luma lang ang pananalita ng hypothesis.

Smoke run: 495 nagsarang trade, avg_trade_return_pct 0.099%, PF 1.04, Sharpe 0.12. Mas mababa ito sa minimum na 0.15% sa pagsusuri. Pabor pa nga ito sa strategy: total_commission ay 0 kahit nakatakda ang CNEQ sa 0.05% bawat panig, kaya kulang nang humigit-kumulang 0.10% sa round trip at mga 0% ang tunay na neto. Umaabot na sa 35% ng gross ang impact. Dapat itugma ng analyst ang pagsingil ng bayad na CNEQ (nauna nang na-flag ang parehong isyu sa platform para sa ShanghaiMaCompressionKdjBasket) bago basahin ang buong backtest, at asahang ang minimum na bayad ang magiging mapagpasiyang pagsubok.

Pagsusuri ng Backtest

Sharpe
0.19
Kabuuang Return
8.29%
Max Drawdown
9.82%
Kabuuang Trade
658
Win Rate
60.9%
Profit Factor
1.07

658 nagsarang trade sa lahat ng 10 stock; long lahat, nasa lot na tig-100 share, at walang round trip sa iisang araw.

Naresolba na ang usapin ni QA tungkol sa nawawalang bayad: tugma ang komisyon sa trade sa iniulat na CNY 5,900.65.

0.1127% ang karaniwang netong kita bawat trade, mas mababa sa minimum na 0.15% CNEQ sa pagsusuri sa mapagkakatiwalaang sample. PF ang 1.074 at 0.186 ang Sharpe.

8.29% ang kita ng strategy kumpara sa 27.55% ng basket, na may mas mababang drawdown: 9.82% kumpara sa humigit-kumulang 42.84% sa sinampol na benchmark curve.

Nangangako ang hypothesis ng execution sa parehong pagsasara, pero tama ang paggamit ng pagsusuring ito ng fill sa bukas ng susunod na session.

Kasaysayan ng Iterasyon

Bumagsak ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=hypothesis_mismatch]: - [edge_concern] Iniulat ng smoke test ang karaniwang netong kita sa nagsarang trade na 0.09949% at walang komisyon, kahit tinutukoy sa kontrata ang humigit-kumulang 0.10% komisyon sa round trip na CNEQ. Itugma muna ang pagsingil ng bayad bago hatulan ang ekonomiya sa buong kasaysayan; hindi pinatutunayan ng mga bilang na ito ang depekto sa strategy o sapat na batayan para tanggihan ito batay sa performance. - [critical] Tahasang……Magpakita ng higit paMagpakita ng mas kaunti

Bumagsak ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=hypothesis_mismatch]: - [edge_concern] Iniulat ng smoke test ang karaniwang netong kita sa nagsarang trade na 0.09949% at walang komisyon, kahit tinutukoy sa kontrata ang humigit-kumulang 0.10% komisyon sa round trip na CNEQ. Itugma muna ang pagsingil ng bayad bago hatulan ang ekonomiya sa buong kasaysayan; hindi pinatutunayan ng mga bilang na ito ang depekto sa strategy o sapat na batayan para tanggihan ito batay sa performance. - [critical] Tahasang hinihingi ng pag-aangkop ng hypothesis sa platform (2) na mapunan sa pagsasara ng decision bar ang mga daily CNEQ order. Ordinaryong market order ang ipinapadala ng port dito (pati sa routing ng pagpasok at paglabas ng dagdag na leg sa mga linya 248-252), na naisasagawa sa pagbubukas ng NEXT session sa ilalim ng src/backtesting/next_open.py. Minamarkahan mismo ng brief na hindi suportado ang same_close_fill at suportado ang next_open_fill para sa CNEQ. Dahil dito, hindi matutularan ng mga naisagawang entry at fill sa pagsasara para sa exit ang nakasaad na kontrata sa execution. Hindi ito tugma ng kontrata at engine, at hindi ito kahilingan para sa intrabar stop. (linya 256) — ayusin: Itama ang kontrata ng pananaliksik at ang nakadokumentong paglihis ng port para tahasang pahintulutan ang mga desisyon sa nakumpletong daily bar at execution sa bukas ng susunod na session. Panatilihin ang suportadong market-order path; huwag angkinin o subukang magsagawa ng hindi suportadong fill sa parehong pagsasara. Suriin ang pagsisimula ng entry-high at ang pananalita tungkol sa T+1 ayon sa pinahintulutang oras bago muling isumite.

Itama ang kontrata ng pananaliksik at ang nakadokumentong paglihis ng port para tahasang pahintulutan ang mga desisyon sa nakumpletong daily bar at execution sa bukas ng susunod na session. Panatilihin ang suportadong market-order path; huwag angkinin o subukang magsagawa ng hindi suportadong fill sa parehong pagsasara. Suriin ang pagsisimula ng entry-high at ang pananalita tungkol sa T+1 ayon sa pinahintulutang oras bago muling isumite.

Tahasan hinihingi ng pag-aangkop ng hypothesis sa platform (2) na mapunan sa pagsasara ng decision bar ang mga daily CNEQ order. Ordinaryong market order ang ipinapadala ng port dito (pati sa routing ng pagpasok at paglabas ng dagdag na leg sa mga linya 248-252), na naisasagawa sa pagbubukas ng NEXT session sa ilalim ng src/backtesting/next_open.py. Minamarkahan mismo ng brief na hindi suportado ang same_close_fill at suportado ang next_open_fill para sa CNEQ. Dahil dito, hindi matutularan ng mga naisagawang entry at fill sa pagsasara para sa exit ang nakasaad na kontrata sa execution. Hindi ito tugma ng kontrata at engine, at hindi ito kahilingan para sa intrabar stop.

Buod ng Resulta

Dapat munang magtakda ang mga susunod na pag-aangkop ng sapat na netong puwang sa ekonomiya gamit ang execution sa susunod na bukas bago mag-optimize, nang hindi itinuturing ang resultang ito bilang hatol sa orihinal na stock pool ng may-akda o sa bawat pagsasaayos ng parameter.

Iminungkahi ng pagsusuri sa backtest na itigil dahil hindi umabot sa 0.15% CNEQ na itinakdang minimum ang karaniwang netong kita bawat trade, kaya kulang ang puwang sa ekonomiya matapos ang mga gastos. Walang natukoy na depekto sa implementasyon na sapat na batayan para umulit; hindi naabot ang optimization at mga susunod na yugto.

Iangkop ang daily stochastic na strategy ng Myquant na bumibili kapag oversold at nagbebenta kapag overbought sa 10 nakapirming malalaking China A-share, long-only, na may cooldown, stop at fill sa bukas ng susunod na session.

Nagbalik ang backtest ng 8.29% na may Sharpe na 0.186, 658 nagsarang trade at 9.82% pinakamataas na drawdown. 0.1127% ang karaniwang netong kita bawat trade, 1.074 ang profit factor, at 27.55% ang kita ng basket na pantay ang timbang.

Pagsusuri

KDJ_STOCK

Pagsusuri

kdj_stock.py

Ang Stratmill ay isang tool para sa pananaliksik at paper trading, hindi payo sa pananalapi o isang broker. Ang mga resulta ng backtest at paper trading ay hypothetical. May panganib ng pagkalugi ang pangangalakal.