Lumaktaw papunta sa nilalaman
Lahat ng estratehiya

Mga Estratehiya

2MACDSTO ni geraked (tapat na port): Trend ng MACD(34,144) + Kontra-galaw ng MACD(13,21) + Pagtawid ng Stochastic(7,3,3) palabas ng sonang 20/80, Pagsukat ng panganib batay sa layo ng swing, Walang nakapirming SL/TP, Trailing stop na 50% ng panganib, Grid ng pag-a-average na magkakapantay ang laki at may 50 level, na may pagsasara ng basket na TP, Long-Short (ETHUSDT.OKX 4H)

Resulta: Inabandona

TwoMacdStoGridEthOkx

Buod ng Resulta

Ini-port ng TwoMacdStoGridEthOkx ang expert advisor na 2MACDSTO ni geraked sa mga perpetual ng OKX ETH sa mga bar na 4H, na pinagsasama ang two-MACD, entry sa stochastic pullback, mga trailing exit na walang stop, at averaging grid na may 50 level at pantay-pantay ang laki. Sa 3 pag-ulit, hindi ito kailanman nakapasa sa beripikasyon. Na-liquidate ang backtest sa sandbox noong 2020-06-02 sa -100%, at nalugi sa isang trade ang humigit-kumulang 29x ng panimulang kapital. Iniugnay ito ng QA sa grid sizing na hindi isinasaalang-alang ang hindi pa natatantiyang pagkalugi at sa kawalan ng anumang basket stop; iniwan ang estratehiya bago ang mga yugto ng pagsusuri ng backtest, optimization, analyst at panganib.

Hypothesis

Tapat na paglalahad ng open-source na MQL5 expert advisor na '2MACDSTO' v1.4 ni geraked (Copyright 2023, lisensiyang MIT, https://github.com/geraked/metatrader5/blob/d3eb29c382acf715727d5cd6a0414151e821fc2d/Experts/2MACDSTO.mq5), kasama ang mga katulong nito sa pamamahala ng trade mula sa Include/EAUtils.mqh sa parehong commit. Pagkilala: kay geraked ang strategy. Sinubukan ito ng may-akda sa NZDUSD 3H (2020-01-01 hanggang 2023-10-08). Ituring na hindi beripikado ang anumang inaangking performance; ang backtest……Magpakita ng higit paMagpakita ng mas kaunti

Tapat na paglalahad ng open-source na MQL5 expert advisor na '2MACDSTO' v1.4 ni geraked (Copyright 2023, lisensiyang MIT, https://github.com/geraked/metatrader5/blob/d3eb29c382acf715727d5cd6a0414151e821fc2d/Experts/2MACDSTO.mq5), kasama ang mga katulong nito sa pamamahala ng trade mula sa Include/EAUtils.mqh sa parehong commit. Pagkilala: kay geraked ang strategy. Sinubukan ito ng may-akda sa NZDUSD 3H (2020-01-01 hanggang 2023-10-08). Ituring na hindi beripikado ang anumang inaangking performance; ang backtest natin na kasama ang mga bayarin ang magpapasya. Estratehiya itong maaaring i-trade, hindi utility. MECHANISM: pagpasok sa pullback sa loob ng mabagal na trend. Itinatakda ng mabagal na MACD (34/144 EMA difference) ang trend. Kailangang nakaturo laban dito ang mabilis na MACD (13/21), na siyang tanda ng pullback. Itinatakda ng pagtawid ng stochastic %K sa %D palabas ng oversold o overbought zone ang tiyempo ng muling pagpasok. Naglalagay ang EA ng NO stop-loss at NO take-profit sa order (IgnoreSL=true, IgnoreTP=true). Trailing stop lamang ang paraan ng paglabas sa iisang posisyon. Umaandar ang stop kapag umabot ang tubo sa kalahati ng swing distance. Kung laban naman sa posisyon ang galaw ng presyo, nag-a-average down ang EA gamit ang grid na EQUAL-SIZE (GridVolMult=1.0), na nagdaragdag ng isang posisyon kada swing distance, hanggang 50 antas. Isinasara ang buong basket sa iisang take-profit na bumabawi sa orihinal na halaga ng panganib kasama ang mga gastos. PLATFORM MAPPING: ang venue ay ang OKX USDT perpetual swap na ETHUSDT.OKX, sa account na MARGIN. 0.02% ang maker fee at 0.05% ang taker fee, humigit-kumulang 0.10% para sa taker round trip. Kailangang perp ito dahil nangangailangan ng short position ang source. OKX ang 0.8% ng corpus kumpara sa target na hindi bababa sa 5%, samantalang BINANCE USD-M ang 65.9% kumpara sa cap na 40%. Ang ETH ang may pinakamalaking liquidity sa mga OKX perp, maliban sa BTC. Presyo lamang ang ginagamit ng mekanismo, nang walang karagdagang feed, kaya hindi naaangkop ang paghihigpit sa venue na L160. Timeframe: walang 3H bar sa catalog natin, kaya ginagamit ng port ang pinakamalapit na karaniwang interval na sinusuportahan ng catalog, mga bar na 4-HOUR (ETHUSDT.OKX-4-HOUR-LAST-EXTERNAL). Gumagana ang code na EA sa anumang timeframe dahil chart timeframe ang ginagamit ng lahat ng indicator nito. Ito lamang ang paglihis sa source. Kino-convert ang mga constant na ibinigay sa points bilang mga fraction ng presyo. Sa NZDUSD (point na 0.00001, presyong humigit-kumulang 0.60), katumbas ng humigit-kumulang 0.10% ng presyo ang SLDev=60 points, at katumbas ng humigit-kumulang 0.005% ng presyo ang minPoints=30 ng helper. IMPLEMENTATION CAUTION: nabigo sa sandbox_timeout ang naunang tapat na port mula sa parehong may-akda (3MAF). Kailangang mag-update ang bawat indicator nang INCREMENTALLY, sa O(1) bawat bar: - mga tumatakbong EMA para sa apat na MACD leg; - mga deque na may nakapirming haba para sa high at low ng 7-bar at sa mga slowing sum na 3-bar; - buffer na may 3 value para sa %D; - estado ng basket na nakaimbak bilang mga scalar: presyo ng unang entry, pd, unang volume, bilang ng mga antas, kabuuang quantity, suma ng entry na tinimbang ayon sa quantity, naipong mga komisyon. Huwag muling suriin ang kasaysayan ng bar, listahan ng mga posisyon, o kasaysayan ng mga fill sa loob ng on_bar.

Inaayos ng iteration 3 ang lahat ng QA item: (1) inalis ang hard stop sa 30% drawdown at 50% margin level; ini-port ang EquityDrawdownLimit bilang input ng source na may default na 0 (naka-disable). (2) Itinuturing na mark-to-market ang get_account_equity(); balance = equity - unrealized, kaya minsan lang ibinibilang ang unrealized PnL sa drawdown check at gross cap ng grid. (3) Itinaas ang min_dist_frac sa 0.4% para ang trailing move na 50% ay >= 0.2%, mas mataas sa ~0.10% na round trip ng OKX taker kasama ang……Magpakita ng higit paMagpakita ng mas kaunti

Inaayos ng iteration 3 ang lahat ng QA item: (1) inalis ang hard stop sa 30% drawdown at 50% margin level; ini-port ang EquityDrawdownLimit bilang input ng source na may default na 0 (naka-disable). (2) Itinuturing na mark-to-market ang get_account_equity(); balance = equity - unrealized, kaya minsan lang ibinibilang ang unrealized PnL sa drawdown check at gross cap ng grid. (3) Itinaas ang min_dist_frac sa 0.4% para ang trailing move na 50% ay >= 0.2%, mas mataas sa ~0.10% na round trip ng OKX taker kasama ang slippage (paglihis sa minimum na ~0.005% ng helper, kailangan para sa crypto fees). (4) Kinukuha na ngayon ang Stochastic sa pag-average ng raw %K sa slowing window, at ina-average naman ng %D ang slowed %K (tandaan: gumagamit ng ratio of sums ang built-in iStochastic ng MT5; binago ayon sa QA). (5) Eksaktong ONE level ang idinadagdag ng grid sa bawat check, nakabatay sa presyo ng huling level gaya ng ginagawa ng EA, at kapag kasya lang ang buong level na kapareho ang laki sa gross cap na equity x leverage; kaya laging katumbas ng mga napunang level ang bilang ng mga level. Ang leverage na 3 at notional kada level na nililimitahan sa 0.25 x leverage x equity ay nag-iiwan ng margin para sa mga grid level; ginagamit ng sizing ang self.config.leverage. Hindi maiiwasang paglihis dahil sa platform: 4H bars sa halip na 3H, at mga check sa pagsasara ng bar sa halip na timer na 30 segundo.

verification_loop: Nabigo ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Kahit naayos na ang sizing, likas na short-volatility martingale ang equal-size averaging grid na may 50 level at walang basket stop. Sa ETH (na tumaas nang ~20x noong 2020-21 at bumaba nang ~80% noong 2022), walang hanggan ang lugi ng counter-trend basket na salungat sa nagpapatuloy na trend kapag pinigil na ng gross cap ang mga karagdagang dagdag. Hindi maaabot ang promotion drawdown floor maliban kung……Magpakita ng higit paMagpakita ng mas kaunti

verification_loop: Nabigo ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Kahit naayos na ang sizing, likas na short-volatility martingale ang equal-size averaging grid na may 50 level at walang basket stop. Sa ETH (na tumaas nang ~20x noong 2020-21 at bumaba nang ~80% noong 2022), walang hanggan ang lugi ng counter-trend basket na salungat sa nagpapatuloy na trend kapag pinigil na ng gross cap ang mga karagdagang dagdag. Hindi maaabot ang promotion drawdown floor maliban kung itakda sa halagang hindi zero ang equity stop sa antas ng basket (ang mismong input na EquityDrawdownLimit ng source). Suriin ang drawdown ng pinakamasamang basket bago gumastos sa optimization. - [critical] Nakabatay sa maling palagay ang gross cap ng grid at drawdown check. Sinasabi ng komento na 'kasama na sa get_account_equity() ang unrealized PnL (mark-to-market)'. Hindi ito totoo. Ibinabalik ng resolve_account_equity() ang account.balances()[USDT].total, at sa NT MarginAccount, realized cash lang ang halagang iyon; wala sa balances ang unrealized PnL. Tatlo ang resulta. (a) Sobra ang ipinapakitang balance ng `balance = equity - unreal` nang katumbas ng buong unrealized loss. (b) Nililimitahan ng `room = max(equity,0)*lev - qty*c` ang gross sa 3x REALIZED cash, hindi sa tunay na equity na 3x. Habang nalulugi ang basket, walang hanggan ang paglaki ng tunay na leverage batay sa aktuwal na equity, at patuloy na nadaragdag ang mga grid level laban sa equity na wala na. (c) Kung maitakda man ang equity_drawdown_limit_pct nang mas mataas sa 0, inihahambing ng check ang realized cash sa realized cash na ibinawas ang unrealized, kaya mali ang sign at laki nito. Ipinapakita ng sandbox ang resulta: liquidated=true noong 2020-06-02, total_return -100%, max_drawdown 100%, at may isang trade na nalugi ng $2,949,268, humigit-kumulang 29x ng panimulang kapital. Sinasabi sa punto ng pangangatwiran ng developer (2) na naayos ito, pero nakabatay sa maling palagay ang ayos. (line 270) — ayos: Kalkulahin ang tunay na equity sa strategy bilang mtm_equity = get_account_equity() + d*(c - avg)*qty (realized cash kasama ang unrealized PnL ng posisyong ito). Gamitin ang mtm_equity sa check ng natitirang puwang ng grid (room = mtm_equity*lev - qty*c, at tanggihan ang dagdag kapag mtm_equity <= 0) at sa _level_qty para sa sizing. Gamitin nang direkta ang balance = get_account_equity() (balance na ito mismo) sa check ng EquityDrawdownLimit. - [critical] Walang hanggan ang risk ng basket: walang stop, leverage na 3x, at luging maaaring lumampas sa equity (L148/L156). Kapag pinigil na ng gross cap ang mga karagdagang dagdag, walang pumipigil sa basket na salungat sa trend. Walang nababakanteng puwang ang short basket sa rally dahil tumataas ang qty*c, kaya nananatili lang ito hanggang ma-liquidate ang account. Pinatutunayan ng pinakamalaking lugi sa sandbox na humigit-kumulang 29x ng panimulang kapital na maaari itong mangyari. Hindi maitatakda sa configuration na ito ang alinman sa 'stop distance x size <= 1-2% ng equity' o worst-case gross kaugnay ng TRUE equity. Ibinibigay ng source ang EquityDrawdownLimit bilang input para mismo rito. Ang pag-iwan nito sa 0 sa crypto port na may 3x leverage ay depekto sa sizing at risk, hindi pagiging tapat sa source. (line 60) — ayos: Panatilihin ang mekanismo, pero itakda ang equity_drawdown_limit_pct sa halagang hindi zero (halimbawa, 20-30%) na sinusukat sa MTM equity ayon sa ayos sa itaas. Bilang alternatibo, babaan ang leverage at max_level_notional_mult para ang worst-case gross = grid_max_lvl_reachable x level_notional <= mtm_equity x maximum leverage ng venue, at ilahad ang limitasyong iyon sa pangangatwiran. Mga input ng source ang dalawa, kaya nananatiling tapat ang port. - [warning] Hindi tinatawag ng base template ang calculate_signal() habang len(self._bars) < min_bars_required() (200). Kaya sa bar 200 nagsisimula ang mga EMA, at hindi pa nagko-converge ang EMA(144) at MACD(34,144) sa humigit-kumulang susunod na 150-300 bars; dahil dito, nakiling sa seed close ang mga unang pagbasa ng trend. (line 112) — ayos: Magtakda sa calculate_signal ng signal warm-up na humigit-kumulang 3x m2_slow bars bago magtakda ng buy/sell setups, o tanggapin at idokumento ang pagkiling. - [warning] Kinukuwenta ang slowed %K bilang mean ng raw %K sa slowing window. Kinukuwenta ito ng iStochastic ng MT5 (na tinatawag ng EA) bilang 100*SUM(C-LL, slowing)/SUM(HH-LL, slowing), isang ratio of sums. Magkaiba ang dalawa kapag nag-iiba ang range sa loob ng 3 bars, kaya bahagyang nagbabago ang tiyempo ng 20/80 cross. (line 139) — ayos: Para sa tapat na port, panatilihin ang mga deque na 3-bar ng (c-ll) at (hh-ll), at kunin ang %K bilang ratio ng mga suma nito. - [warning] Hindi magagamit ang sandbox ledger para sa ekonomiks kada trade (L140). Ang avg_trade_return_pct ay -259% x 5 trades, na hindi maitutugma sa total_return -100%. Ang avg_holding_period ay 443 araw kumpara sa data_days 162. May 5 naiulat na trade pero 14 fill. Pinagsasama sa iisang posisyon ang mga grid level, kaya basket, hindi mga leg, ang binibilang ng ledger. — ayos: Walang kailangang baguhin sa code para sa ledger. Pagkatapos ng mga ayos, ihambing ang kita kada trade sa fee floor kada leg (mga fill), hindi kada basket.

Implementasyon

Port ng 2MACDSTO v1.4 ni geraked sa ETHUSDT.OKX 4H: trend na MACD(34,144), counter-move na MACD(13,21), at Stochastic(7,3,3) %K/%D cross palabas ng 20/80. Walang hard SL/TP; nagta-trail ang iisang posisyon sa 50% ng swing distance; ang adverse move na isang swing distance ay nagdaragdag ng isang grid level na kapareho ang laki (max 50), at nagsasara ang basket sa iisang TP na bumabawi sa orihinal na risk at mga gastos.

Mga Resulta ng Beripikasyon

Nabigo ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Kahit naayos na ang sizing, ang averaging grid na may magkakapantay na laki at 50 antas na walang basket stop ay likas na isang short-volatility martingale. Sa ETH (na tumaas nang ~20x noong 2020-21 at bumaba nang ~80% noong 2022), walang hangganan ang lugi ng isang counter-trend basket na nasasangkot sa nagpapatuloy na trend kapag pinipigilan na ng gross cap ang mga karagdagang dagdag. Hindi maaabot ang drawdown floor para……Magpakita ng higit paMagpakita ng mas kaunti

Nabigo ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Kahit naayos na ang sizing, ang averaging grid na may magkakapantay na laki at 50 antas na walang basket stop ay likas na isang short-volatility martingale. Sa ETH (na tumaas nang ~20x noong 2020-21 at bumaba nang ~80% noong 2022), walang hangganan ang lugi ng isang counter-trend basket na nasasangkot sa nagpapatuloy na trend kapag pinipigilan na ng gross cap ang mga karagdagang dagdag. Hindi maaabot ang drawdown floor para sa promotion maliban kung itakda sa hindi sero ang equity stop sa antas ng basket (ang input na EquityDrawdownLimit mismo ng source). Suriin ang pinakamalaking drawdown ng basket bago gumastos sa optimization. - [kritikal] Nakabatay sa maling palagay ang gross cap ng grid at ang drawdown check. Sinasabi ng komento na 'get_account_equity() already includes unrealized PnL (mark-to-market)'. Hindi ito totoo. Ibinabalik ng resolve_account_equity() ang account.balances()[USDT].total, at sa isang NT MarginAccount, aktuwal na cash na naisakatuparan lamang ang bilang na iyon; wala sa balances ang unrealized PnL. May tatlong resulta ito. (a) Sobra ang ipinapakitang balanse ng `balance = equity - unreal` nang katumbas ng buong unrealized loss. (b) Nililimitahan ng `room = max(equity,0)*lev - qty*c` ang gross sa 3x REALIZED cash, hindi sa totoong equity na 3x. Habang nalulugi ang basket, walang hanggan ang paglaki ng tunay na leverage sa aktuwal na equity, at patuloy na nadaragdag ang mga antas ng grid batay sa equity na wala na. (c) Kung itatakda man ang equity_drawdown_limit_pct nang mas mataas sa 0, inihahambing ng check ang aktuwal na cash sa aktuwal na cash na binawasan ng unrealized, kaya mali ang sign at laki nito. Ipinakikita ng sandbox ang resulta: liquidated=true sa 2020-06-02, total_return -100%, max_drawdown 100%, at may isang trade na nalugi ng $2,949,268, humigit-kumulang 29x ng panimulang kapital. Sinasabi ng punto ng developer na (2) na naayos na ito, ngunit nakabatay ang ayos sa maling palagay. (linya 270) — ayusin: Kalkulahin ang tunay na equity sa strategy bilang mtm_equity = get_account_equity() + d*(c - avg)*qty (aktuwal na cash kasama ang unrealized PnL ng posisyong ito). Gamitin ang mtm_equity sa pagsusuri ng puwang ng grid (room = mtm_equity*lev - qty*c, at tanggihan ang mga dagdag kapag mtm_equity <= 0) at sa _level_qty para sa sizing. Direktang gamitin ang balance = get_account_equity() (balanse na ito iyon) sa pagsusuri ng EquityDrawdownLimit. - [kritikal] Walang hangganan ang panganib ng basket: walang stop, 3x leverage, at luging maaaring lumampas sa equity (L148/L156). Kapag pinigilan ng gross cap ang mga karagdagang dagdag, walang naglilimita sa basket na tumatakbo laban sa isang trend. Hindi lumilikha ng puwang ang short basket sa isang rally, dahil tumataas ang qty*c, kaya nananatili lamang ito hanggang ma-liquidate ang account. Pinatutunayan ng pinakamalaking lugi sa sandbox, na humigit-kumulang 29x ng panimulang kapital, na maaaring mangyari ang ganitong sitwasyon. Hindi maaaring tukuyin para sa configuration na ito ang alinman sa 'stop distance x size <= 1-2% of equity' o worst-case gross na kaugnay ng TRUE equity. Ibinibigay ng source ang EquityDrawdownLimit bilang input para mismo sa layuning ito. Ang pagpapanatili nito sa 0 sa crypto port na may 3x leverage ay depekto sa sizing at panganib, hindi pagsunod sa orihinal. (linya 60) — ayusin: Panatilihin ang mekanismo, ngunit itakda ang equity_drawdown_limit_pct sa hindi serong halaga (halimbawa, 20-30%) na sinusuri batay sa equity na MTM ayon sa ayos sa itaas. Bilang alternatibo, babaan ang leverage at max_level_notional_mult upang ang worst-case gross = grid_max_lvl_reachable x level_notional <= mtm_equity x maximum leverage ng venue, at ilahad ang hangganang iyon sa rationale. Mga input ng source ang dalawa, kaya mananatiling tapat ang port. - [babala] Hindi tinatawag ng base template ang calculate_signal() habang len(self._bars) < min_bars_required() (200). Dahil dito, nagsisimula ang mga EMA sa bar 200, at hindi pa nagtatagpo ang EMA(144) at MACD(34,144) sa humigit-kumulang susunod na 150-300 bar, kaya may pagkiling ang mga unang pagbasa ng trend patungo sa seed close. (linya 112) — ayusin: Alinman sa mangailangan ng signal warm-up na humigit-kumulang 3x m2_slow bar sa loob ng calculate_signal bago itakda ang mga buy/sell setup, o tanggapin at idokumento ang pagkiling. - [babala] Kinakalkula ang pinabagal na %K bilang mean ng hilaw na %K sa slowing window. Kinakalkula ito ng iStochastic ng MT5 (na tinatawag ng EA) bilang 100*SUM(C-LL, slowing)/SUM(HH-LL, slowing), isang ratio ng mga suma. Magkaiba ang dalawa kapag nag-iiba ang range sa loob ng 3 bar, na bahagyang naglilipat sa tiyempo ng cross ng 20/80. (linya 139) — ayusin: Para sa tapat na port, panatilihin ang mga deque na may habang 3 bar ng (c-ll) at (hh-ll), at kalkulahin ang %K bilang ratio ng mga suma ng mga ito. - [babala] Hindi magagamit ang sandbox ledger para sa ekonomiks ng bawat trade (L140). Ang avg_trade_return_pct ay -259% x 5 trades, na hindi maitutugma sa total_return -100%. Ang avg_holding_period ay 443 araw kumpara sa data_days 162. May 5 na naiulat na trade ngunit 14 na fill. Pinagsasama sa iisang posisyon ang mga antas ng grid, kaya mga basket, hindi mga leg, ang binibilang ng ledger. — ayusin: Hindi kailangang baguhin ang code para sa ledger. Pagkatapos ng mga pag-aayos, ihambing ang return sa bawat trade sa fee floor batay sa bawat leg (mga fill), hindi sa bawat basket.

Kasaysayan ng Iterasyon

Nabigo ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Hindi magkatimbang ang mga paraan ng pagsasara. Isinasara lamang ang iisang posisyon kapag naabot ang trailing stop na itinakda sa entry + 0.5*pd, kaya humigit-kumulang 0.5*pd ang pinakamababang kabuuang panalo. Maaaring kasingliit ng ~0.1% ng presyo ang pd (ang SLDev floor), kaya halos 0.05% lamang ang pinakamababang kabuuang panalo, mas mababa sa ~0.10% OKX na kabuuang gastos sa taker sa pagbili at pagbebenta. Walang……Magpakita ng higit paMagpakita ng mas kaunti

Nabigo ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Hindi magkatimbang ang mga paraan ng pagsasara. Isinasara lamang ang iisang posisyon kapag naabot ang trailing stop na itinakda sa entry + 0.5*pd, kaya humigit-kumulang 0.5*pd ang pinakamababang kabuuang panalo. Maaaring kasingliit ng ~0.1% ng presyo ang pd (ang SLDev floor), kaya halos 0.05% lamang ang pinakamababang kabuuang panalo, mas mababa sa ~0.10% OKX na kabuuang gastos sa taker sa pagbili at pagbebenta. Walang takdang hangganan ang pagkalugi sa panig na nalulugi dahil basket na nag-a-average pababa ito. Tugma rito ang resulta ng sandbox: 3 sa 4 trade ang nagtala ng maliit na panalo (avg win $3.1k), at isang basket na may maikling posisyon ang nalugi ng $5.25M. Kahit naayos na ang pagsasara dahil sa stop-out, suriin ang distribusyon ng pd/price sa pagpasok, at tiyaking lumalampas sa 0.15% ng notional ang mga pagsasara ng trailing stop. - [critical] Walang takdang hangganan ang pagkalugi, at maaaring mas malaki nang malayo sa halaga ng account ang malugi sa libro. Gumagana lamang ang disenyong 'EA walang SL' sa MT5 dahil sapilitang isinasara ng margin stop-out ng broker ang basket. Walang katumbas nito sa port. Kapag umabot na sa gross cap ang mga dagdag sa grid (room <= 0), mananatili ang basket nang walang ibang pagsasara kundi ang basket na TP. Hindi pinagana ang trailing stop para sa iisang posisyon dahil _b_level > 1. Walang equity o margin stop-out at walang pagsasara batay sa oras. Ipinakikita ito ng sandbox. Pinanatili ang basket na may maikling posisyon nang 554 araw, na may notional na avg_trade_return_pct -290% at pinakamalaking pagkalugi na -$5.25M, kumpara sa kabuuang komisyong $3.2k. Maraming ulit na mas malaki ang pagkalugi kaysa sa halaga ng account, at nagpatuloy ito kahit lumampas na sa liquidation flag noong 2020-05-30. Walang kabuluhan ang bawat bilang pagkatapos ng petsang iyon. Walang kalagayang walang bukas na posisyon at walang takdang hangganan ang panganib sa disenyo; ito mismo ang kalagayang L148/L156: ang pinakamalaking posibleng kabuuang pagkalugi ay leverage (5) x equity nang walang stop. Sapat na ang galaw na +20% ETH laban sa basket na may pinakamalaking maikling posisyon upang maubos ang account; sa sandbox, umabot sa maraming ulit ng equity ang pagkalugi. (line 256) — ayusin: Magdagdag ng margin stop-out bilang kapalit ng mekanismo ng broker na MT5 (gawi ito ng broker, hindi SL ng estratehiya, kaya mananatiling tapat ang port). Sa bawat bar, kalkulahin ang hindi pa natantiyang PnL ng basket mula sa pos.avg_px_open at sa close. Isara ang buong basket at i-reset ang estado kapag ang equity, kasama ang hindi pa natantiyang PnL, ay bumaba sa o mas mababa sa antas ng stop-out; halimbawa, kapag margin level <= 50%, o kapag ang hindi pa natantiyang pagkalugi ay >= X% ng equity, kung saan itatakda ang X batay sa paunang rehistradong max_drawdown. Gawing parameter ang antas na iyon. Tukuyin din sa paliwanag ang pinakamasamang sitwasyon: pinakamalaking pagkalugi kada basket = antas ng stop-out, hindi 'nililimitahan ng leverage'. - [critical] Kinukuwenta ang puwang para sa mga dagdag sa grid mula sa get_account_equity(). Iyon ang realized na USD-stable na BALANCE, na hindi kasama ang hindi pa natantiyang pagkalugi ng bukas na basket. Habang lugi ang basket, ibinabatay pa rin ang dami ng bawat dagdag sa balanseng naitala bago ang pagkalugi: room = 5 x balance - qty*c. Patuloy na pinapataas ng libro ang leverage habang bumababa ang halaga ng portfolio, kahit malaking bahagi na ng tunay na equity ang naubos sa drawdown; kaya maaaring lumampas nang malaki sa 5x ang leverage kaugnay ng tunay na equity bago pa tumigil ang anumang dagdag. Ginagamit din ang parehong lipas na balanse sa _level_qty/_b_risk_amt para sa basket TP. (line 265) — ayusin: Gamitin ang mark-to-market equity para sa gross cap ng grid: balance + hindi pa natantiyang PnL ng bukas na posisyon sa close c. Itigil ang pagdaragdag kapag umabot sa cap ang leverage batay sa tunay na equity. - [warning] Binabasa ng mga kundisyon ng MACD trend at counter-move ang bar na [2] (_m2_prev/_m1_prev), samantalang binabasa ng stochastic cross ang [2]->[1]. Ayon sa paglalarawan, tugma ito sa EA ('MACD ng naunang bar'). Hindi ko nasuri sa pagsusuring ito ang eksaktong mga buffer index batay sa naka-pin na source commit. Kung binabasa ng EA ang MACD sa [1], nauusog nang isang bar ang mga pagpasok. (line 143) — ayusin: Suriing muli ang mga CopyBuffer index sa 2MACDSTO.mq5@d3eb29c at itugma ang shift ng MACD. - [warning] Sinusuri lamang sa pagsasara ng bar ang trailing stop at pagsasara ng basket na TP, at sa close isinasagawa ang mga fill. Isinasagawa ng EA ang mga pagsusuri gamit ang timer na 30-segundo. Sa mga bar na 4H ETH, maaaring mapunan ang mga pagsasara ng trailing stop nang lampas sa antas ng trail, at maaaring lumampas sa inaasahang presyo ang mga fill sa basket-TP. Idinokumento ng developer ang paglihis na ito. (line 243) — ayusin: Katanggap-tanggap ito dahil nakadokumento. Isaalang-alang ang reduce-only stop na nakapuwesto sa _b_trail at ina-update sa bawat bar. - [warning] Itinatala ng ledger ang bawat grid basket bilang isang trade sa iisang netting position (binanggit ito ng developer sa ilalim ng L175). Kaya, basket ang binibilang ng total_trades at avg_trade_return_pct, hindi mga level; dahil dito, minamaliit ng paghahambing sa minimum na bayarin kada trade ang gastos sa maraming fill. Iniuulat din ng sandbox ang trades_count 15 kumpara sa total_trades 4. — ayusin: Iulat ang bilang ng grid fill kasama ng bilang ng basket upang makuwenta ng analyst ang gastos kada fill.

Pagsusuri sa beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Nawawalan ng 36.0% ang smoke test na may drawdown na 88.7% at PF 0.94; gabay lamang ito, hindi ang hatol sa kawastuhan. - [kritikal] Nagdaragdag ang implementasyon ng mga hard stop para sa equity-drawdown na 30% at margin-level na 50%, na sumasalungat sa disenyong walang hard-SL/TP ng hypothesis. (linya 254) — ayusin: Alisin ang mga ito o tahasang baguhin at muling irehistro ang hypothesis. - [kritikal] Kasama na sa……Magpakita ng higit paMagpakita ng mas kaunti

Pagsusuri sa beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Nawawalan ng 36.0% ang smoke test na may drawdown na 88.7% at PF 0.94; gabay lamang ito, hindi ang hatol sa kawastuhan. - [kritikal] Nagdaragdag ang implementasyon ng mga hard stop para sa equity-drawdown na 30% at margin-level na 50%, na sumasalungat sa disenyong walang hard-SL/TP ng hypothesis. (linya 254) — ayusin: Alisin ang mga ito o tahasang baguhin at muling irehistro ang hypothesis. - [kritikal] Kasama na sa get_account_equity() ang hindi pa natutupad na PnL, ngunit idinaragdag muli ng code ang hindi pa natutupad na PnL upang mabuo ang true_eq. Dahil dito, mali ang mga kalkulasyon ng drawdown, margin-stop, at kapasidad ng grid. (linya 255) — ayusin: Kunin ang balance sa pamamagitan ng pagbabawas ng kasalukuyang hindi pa natutupad na PnL, saka ito idagdag nang iisang beses lamang. - [kritikal] Ang minimum na layo ng swing ay 0.1%, ngunit 50% na trailing stop ay nagbubunga lamang ng gross na galaw na 0.05%, na mas mababa sa minimum na kakayahang mabuhay na 0.15% at humigit-kumulang na gastos sa taker round-trip na 0.10% OKX. (linya 79) — ayusin: Ipatupad ang minimum na epektibong galaw ng trailing na mas mataas sa 0.15%, kasama ang allowance para sa slippage. - [kritikal] Gumagamit ang pagpapabagal ng Stochastic ng ratio ng mga suma sa mga hilaw na numerator at denominator, sa halip na kunin ang average ng mga hilaw na halaga ng %K gaya ng hinihingi ng karaniwang semantika ng Stochastic(7,3,3). (linya 140) — ayusin: Kunin ang average ng mga hilaw na halaga ng %K sa loob ng slowing window, saka kunin ang average ng mga pinabagal na halaga ng %K para sa %D. - [kritikal] Kapag lumaktaw ang presyo nang lampas sa maraming distansya ng grid, nagsusumite ito ng isang pinagsama-samang order ngunit dinaragdagan ang bilang ng mga level ng n_add. Kung pinuputol ng cap ang order, inaangkin ng estado ang mga level na hindi napunan, kaya nalalabag ang accounting ng grid na magkakapantay ang laki. (linya 306) — ayusin: Isumite at i-account nang hiwalay ang bawat level, o kunin ang aktuwal na bilang ng mga napunang level mula sa daming isinumite.

Buod ng Resulta

Kailangan ng averaging-grid o martingale port ng equity stop sa antas ng basket at grid sizing na nakabatay sa tunay na mark-to-market equity (realized cash kasama ang hindi pa natatantiyang PnL); hindi makatatagal sa mga trend ng crypto na gumagamit ng leverage ang tapat na port na naka-disable ang drawdown limit ng pinagmulan.

Matapos ang 3 pag-ulit, iniwan ito sa isang siklo ng beripikasyon nang bumagsak ito sa pagsusuri ng Layer 4 QA bilang code_defect. Mali ang pagtrato ng grid gross cap at drawdown check sa get_account_equity() na para bang mark-to-market ito, gayong realized cash lang ito; wala ring basket stop ang grid na may pantay-pantay na laki at naka-3x leverage (iniwang 0 ang EquityDrawdownLimit), kaya walang hangganan ang mga pagkalugi.

Isang tapat na port ng MQL5 EA 2MACDSTO ni geraked tungo sa ETHUSDT.OKX 4H: pumasok sa mga pullback sa isang trend na MACD(34,144) kapag nakaturo sa kabilang direksiyon ang MACD(13,21) at tumawid palabas ng 20/80 zone ang Stochastic(7,3,3), nang walang hard SL/TP, may trailing stop na 50%-of-risk, at may averaging grid na magkakapantay ang laki na hanggang 50 antas na nagsasara bilang basket sa iisang take-profit.

Walang isinagawang buong backtest o optimization. Ang tanging ebidensiya ng performance ay ang verification sandbox run, na na-liquidate noong 2020-06-02 na may kabuuang return na -100% at max drawdown na 100%; nalugi ang isang trade ng humigit-kumulang $2,949,268, o halos 29x ng panimulang kapital.

Dahilan ng Pag-abandona

verification_loop: Nabigo ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Kahit naayos na ang sizing, likas na short-volatility martingale ang equal-size averaging grid na may 50 level at walang basket stop. Sa ETH (na tumaas nang ~20x noong 2020-21 at bumaba nang ~80% noong 2022), walang hanggan ang lugi ng counter-trend basket na salungat sa nagpapatuloy na trend kapag pinigil na ng gross cap ang mga karagdagang dagdag. Hindi maaabot ang promotion drawdown floor maliban kung……Magpakita ng higit paMagpakita ng mas kaunti

verification_loop: Nabigo ang beripikasyon (Layer 4 — pagsusuri ng QA) [class=code_defect]: - [edge_concern] Kahit naayos na ang sizing, likas na short-volatility martingale ang equal-size averaging grid na may 50 level at walang basket stop. Sa ETH (na tumaas nang ~20x noong 2020-21 at bumaba nang ~80% noong 2022), walang hanggan ang lugi ng counter-trend basket na salungat sa nagpapatuloy na trend kapag pinigil na ng gross cap ang mga karagdagang dagdag. Hindi maaabot ang promotion drawdown floor maliban kung itakda sa halagang hindi zero ang equity stop sa antas ng basket (ang mismong input na EquityDrawdownLimit ng source). Suriin ang drawdown ng pinakamasamang basket bago gumastos sa optimization. - [critical] Nakabatay sa maling palagay ang gross cap ng grid at drawdown check. Sinasabi ng komento na 'kasama na sa get_account_equity() ang unrealized PnL (mark-to-market)'. Hindi ito totoo. Ibinabalik ng resolve_account_equity() ang account.balances()[USDT].total, at sa NT MarginAccount, realized cash lang ang halagang iyon; wala sa balances ang unrealized PnL. Tatlo ang resulta. (a) Sobra ang ipinapakitang balance ng `balance = equity - unreal` nang katumbas ng buong unrealized loss. (b) Nililimitahan ng `room = max(equity,0)*lev - qty*c` ang gross sa 3x REALIZED cash, hindi sa tunay na equity na 3x. Habang nalulugi ang basket, walang hanggan ang paglaki ng tunay na leverage batay sa aktuwal na equity, at patuloy na nadaragdag ang mga grid level laban sa equity na wala na. (c) Kung maitakda man ang equity_drawdown_limit_pct nang mas mataas sa 0, inihahambing ng check ang realized cash sa realized cash na ibinawas ang unrealized, kaya mali ang sign at laki nito. Ipinapakita ng sandbox ang resulta: liquidated=true noong 2020-06-02, total_return -100%, max_drawdown 100%, at may isang trade na nalugi ng $2,949,268, humigit-kumulang 29x ng panimulang kapital. Sinasabi sa punto ng pangangatwiran ng developer (2) na naayos ito, pero nakabatay sa maling palagay ang ayos. (line 270) — ayos: Kalkulahin ang tunay na equity sa strategy bilang mtm_equity = get_account_equity() + d*(c - avg)*qty (realized cash kasama ang unrealized PnL ng posisyong ito). Gamitin ang mtm_equity sa check ng natitirang puwang ng grid (room = mtm_equity*lev - qty*c, at tanggihan ang dagdag kapag mtm_equity <= 0) at sa _level_qty para sa sizing. Gamitin nang direkta ang balance = get_account_equity() (balance na ito mismo) sa check ng EquityDrawdownLimit. - [critical] Walang hanggan ang risk ng basket: walang stop, leverage na 3x, at luging maaaring lumampas sa equity (L148/L156). Kapag pinigil na ng gross cap ang mga karagdagang dagdag, walang pumipigil sa basket na salungat sa trend. Walang nababakanteng puwang ang short basket sa rally dahil tumataas ang qty*c, kaya nananatili lang ito hanggang ma-liquidate ang account. Pinatutunayan ng pinakamalaking lugi sa sandbox na humigit-kumulang 29x ng panimulang kapital na maaari itong mangyari. Hindi maitatakda sa configuration na ito ang alinman sa 'stop distance x size <= 1-2% ng equity' o worst-case gross kaugnay ng TRUE equity. Ibinibigay ng source ang EquityDrawdownLimit bilang input para mismo rito. Ang pag-iwan nito sa 0 sa crypto port na may 3x leverage ay depekto sa sizing at risk, hindi pagiging tapat sa source. (line 60) — ayos: Panatilihin ang mekanismo, pero itakda ang equity_drawdown_limit_pct sa halagang hindi zero (halimbawa, 20-30%) na sinusukat sa MTM equity ayon sa ayos sa itaas. Bilang alternatibo, babaan ang leverage at max_level_notional_mult para ang worst-case gross = grid_max_lvl_reachable x level_notional <= mtm_equity x maximum leverage ng venue, at ilahad ang limitasyong iyon sa pangangatwiran. Mga input ng source ang dalawa, kaya nananatiling tapat ang port. - [warning] Hindi tinatawag ng base template ang calculate_signal() habang len(self._bars) < min_bars_required() (200). Kaya sa bar 200 nagsisimula ang mga EMA, at hindi pa nagko-converge ang EMA(144) at MACD(34,144) sa humigit-kumulang susunod na 150-300 bars; dahil dito, nakiling sa seed close ang mga unang pagbasa ng trend. (line 112) — ayos: Magtakda sa calculate_signal ng signal warm-up na humigit-kumulang 3x m2_slow bars bago magtakda ng buy/sell setups, o tanggapin at idokumento ang pagkiling. - [warning] Kinukuwenta ang slowed %K bilang mean ng raw %K sa slowing window. Kinukuwenta ito ng iStochastic ng MT5 (na tinatawag ng EA) bilang 100*SUM(C-LL, slowing)/SUM(HH-LL, slowing), isang ratio of sums. Magkaiba ang dalawa kapag nag-iiba ang range sa loob ng 3 bars, kaya bahagyang nagbabago ang tiyempo ng 20/80 cross. (line 139) — ayos: Para sa tapat na port, panatilihin ang mga deque na 3-bar ng (c-ll) at (hh-ll), at kunin ang %K bilang ratio ng mga suma nito. - [warning] Hindi magagamit ang sandbox ledger para sa ekonomiks kada trade (L140). Ang avg_trade_return_pct ay -259% x 5 trades, na hindi maitutugma sa total_return -100%. Ang avg_holding_period ay 443 araw kumpara sa data_days 162. May 5 naiulat na trade pero 14 fill. Pinagsasama sa iisang posisyon ang mga grid level, kaya basket, hindi mga leg, ang binibilang ng ledger. — ayos: Walang kailangang baguhin sa code para sa ledger. Pagkatapos ng mga ayos, ihambing ang kita kada trade sa fee floor kada leg (mga fill), hindi kada basket.

Pagsusuri

2MACDSTO

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.