Lumaktaw papunta sa nilalaman
Lahat ng estratehiya

Mga Estratehiya

Hummingbot 'BollinGridController' (ni hummingbot, Apache-2.0), tapat na port: BB(100,2.0) %B-breach fade na naglulunsad ng one-sided maker grid na ang laki ay batay sa lapad na BB, na may triple-barrier (3% SL / 2% bawat-level na TP / 45-minutong limitasyon sa oras / trailing na 1.5%-0.3%) sa WLDUSDT.BINANCE 3m, long-short

Resulta: Inabandona

HummingbotBollinGridWld

Buod ng Resulta

Matapos ang dalawang iteration, sinubukan ng HummingbotBollinGridWld ang Bollinger Band fade na may maker grid sa mga WLDUSDT 3-minutong bar. Nagtala ang backtest nito ng 886 saradong posisyon, -100% return, at Sharpe ratio na -11.91. Iniwan ito ng pagsusuri sa backtest bago mag-optimize dahil negatibo ang expectancy, at hiwalay na tinukoy ang mga alalahanin sa pagiging tapat ng execution. Para sa salin sa platform at sizing na ito ang pagtanggi, hindi para sa orihinal na controller sa notional scale nitong $100.

Hypothesis

Tapat na salin ng open-source controller ng Hummingbot na controllers/directional_trading/bollingrid.py (may-akda: hummingbot, commit 9af100d6, Apache-2.0; pagkilala sa mga may-akda). Kinukuwenta ng controller ang mga Bollinger Band ng pandas_ta (haba 100, std 2.0) sa mga 3-minutong candle ng ipinagpapalit na pair. BBP = %B = (close - lower)/(upper - lower); BBB = bandwidth = (upper - lower)/middle * 100. Signal = +1 kapag BBP < bb_long_threshold (0.0, ibig sabihin, mas mababa sa lower band ang close), -1 kapag……Magpakita ng higit paMagpakita ng mas kaunti

Tapat na salin ng open-source controller ng Hummingbot na controllers/directional_trading/bollingrid.py (may-akda: hummingbot, commit 9af100d6, Apache-2.0; pagkilala sa mga may-akda). Kinukuwenta ng controller ang mga Bollinger Band ng pandas_ta (haba 100, std 2.0) sa mga 3-minutong candle ng ipinagpapalit na pair. BBP = %B = (close - lower)/(upper - lower); BBB = bandwidth = (upper - lower)/middle * 100. Signal = +1 kapag BBP < bb_long_threshold (0.0, ibig sabihin, mas mababa sa lower band ang close), -1 kapag BBP > bb_short_threshold (1.0, mas mataas sa upper band ang close), kung hindi ay 0. Kapag hindi zero ang signal, naglulunsad ito ng GridExecutor sa panig ng signal na ang saklaw ng presyo ay ini-scale ayon sa kasalukuyang lapad ng band na w = BBB/100: LONG (BUY grid): start_price = close*(1 - 0.25w), end_price = close*(1 + 0.75w), limit_price = close*(1 - 0.35w). SHORT (SELL grid): start_price = close*(1 - 0.75w), end_price = close*(1 + 0.25w), limit_price = close*(1 + 0.35w). Hindi binabago ang mga ipinapasang grid param: min_spread_between_orders 0.005, order_frequency 2s, max_orders_per_batch 1, min_order_amount_quote 6, max_open_orders 5. Galing sa mga default ng DirectionalTradingControllerConfigBase ang lahat ng iba pa (walang itinatakda ang source para sa mga ito): connector binance_perpetual, trading_pair WLD-USDT, total_amount_quote 100, max_executors_per_side 2, cooldown_time 300s, leverage 20, position_mode HEDGE, stop_loss 0.03, take_profit 0.02, time_limit 2700s (45 min), take_profit_order_type LIMIT, trailing_stop activation 0.015 / trailing_delta 0.003. Halaga ng executor = total_amount_quote / max_executors_per_side = 50 USDT notional bawat isa. Walang signal-based na stop action ang controller; nagtatapos lang ang mga executor dahil sa sarili nilang barrier. PLATFORM MAPPING: venue BINANCE USD-M (ang default connector ng source ay binance_perpetual at ang default pair nito ay WLD-USDT, kaya tapat na instrument ang WLDUSDT.BINANCE; hindi rin ito BTC, at halos walang kasaysayan sa corpus ang WLD). May WLDUSDT.BINANCE-3-MINUTE-LAST-EXTERNAL ang catalog mula 2023-07-24 hanggang 2026-10-01 (~3.2 taon, ~560k bar), kaya eksaktong pinanatili ang 3m interval ng source. Ini-scale ang sizing mula 100 USDT tungo sa $100k na account sa pamamagitan ng pagpapanatili sa parehong proporsyon: total_amount_quote = 100% ng equity, 50% ng equity sa notional ang napupunta sa bawat executor, at hanggang 2 executor bawat panig. Pinananatili ng min_order_amount_quote ang ratio nito sa budget ng executor (6/50 = 12% ng notional ng executor), kaya hanggang 8 level lang ang grid, gaya ng orihinal na 100-USDT. Nakatakda ang leverage sa 2.0. Gumagamit ang source ng 20x pero margin lang iyon; itinatakda ng total_amount_quote ang notional exposure, at sapat ang 2x na margin headroom para sa 2 same-side na executor (100% equity notional) at isang pares sa kabilang panig. Gumagamit ang Hummingbot ng HEDGE mode, pero netted ang mga posisyon ng account natin; dapat subaybayan ng developer ang mga level at inventory ng bawat executor sa bookkeeping sa panig ng strategy at magsumite ng mga net order. Mga bayarin: USD-M maker na 0.02%, taker na 0.05%. LIMIT ang mga grid open at take-profit bawat level (maker); MARKET ang stop-loss, limit-price, time-limit at trailing exit (taker). Ito ang uri ng BB-fade sa mabilis na timeframe na halos patay na rito. Iminumungkahi ito bilang tapat na port na ang mga grid leg na maker-only at 2% na TP bawat level ang tanging feature na maaaring makalusot sa mga gastos. Ang sarili nating backtest ang magpapasya; walang ipinapalagay na performance.

Humiling ang user ng tapat na port. Eksaktong pinanatili ang default connector/pair ng source (binance_perpetual, WLD-USDT) at interval (3m), at may WLDUSDT.BINANCE-3-MINUTE data mula 2023-07-24. Sobra ang representasyon ng BINANCE bilang venue (61.5%), pero hindi ginagalaw ang instrument sa corpus, long-short ang saklaw (17% bucket), maikli ang horizon (1m-15m), at ibang-iba sa istruktura ang mekanismo (one-sided maker grid na may triple barrier) sa taker z-score fade sa pipeline. Masisira ang pagiging tapat sa source kapag inilipat sa ibang venue. Proporsyonal ang pag-scale ng laki mula 100 USDT tungo sa $100k. Nakatakda ang leverage sa 2.0 bilang margin headroom lamang, at dapat magtugma rito ang hypothesis at config.

Hindi sapat na dahilan para mag-optimize ang nasukat na negatibong expectancy sa 886 saradong posisyon. Tinatanggihan nito ang tinukoy na WLD 3-minutong salin sa platform na may proporsyonal na equity sizing at modelong execution costs, hindi ang controller ng Hummingbot sa orihinal nitong notional scale na $100. Hiwalay na suriin ang natitirang inventory sa dulo, fills sa pagsasara ng executor, at sizing matapos maubos ang kapasidad bago ituring ang implementasyong ito bilang tapat na reproduksiyon ng execution.

Implementasyon

Salin ng Stratmill sa Hummingbot BollinGridController: mga fade trade na sumasalungat sa mga paglagpas sa Bollinger sa bawat 3 minuto, gamit ang mga one-sided maker grid, mga take profit sa orihinal na antas na LIMIT, at mga hadlang ng executor. Itinatama nito ang pag-quantize ng kapasidad ng grid, mga maker entry, mga hangganan ng grid na kumikita, at pagtutuos ng gastos para sa mga natitirang antas.

Pinananatili ang signal ng Bollinger na dati nang pumasa, pati ang merkado at mga parameter ng pananaliksik na WLD. Tinutugunan ang lahat ng limang natuklasan sa QA gamit ang naka-pin na source ng GridExecutor: bilang ng mga antas batay sa floor nang walang idinadagdag na antas, minimum na kapasidad na may buffer at nakaikot, mga target na TP sa orihinal na antas na may pasibong pagsasaayos, paghinto ng executor sa hangganang kumikita, pagtanggal at pagtutugma ng gastos na partikular sa antas, at mga post-only entry na niro-round palayo sa merkado. Nananatiling susuriin ng pipeline ang naitamang ekonomiks; hindi pinatutunayan ng naunang liquidation na walang bentahe ang naitamang implementasyon.

Mga Resulta ng Beripikasyon

Opsyonal: sabihin sa paglalarawan ang pagpapalit sa barrier check sa pagsasara ng bar. Mahirap ilarawan ang mga intrabar stop ng bawat executor sa netted na posisyon, kaya katanggap-tanggap ang kasalukuyang paraan.

Sinusuri lang ang mga barrier ng executor (stop_loss 3%, trailing na 1.5%/0.3%, limit_price, time_limit, hangganan ng dulo/simula) sa pagsasara ng bawat 3m bar. Sinusuri ang mga ito ng GridExecutor ng Hummingbot sa bawat control tick (~1s). Maaaring maisauli nang higit pa ang trailing delta na 0.3% na sinusukat sa pagsasara ng 3m kaysa sa 0.3% na intrabar, at maaaring lumampas ang stop-loss exit sa 3% (ang pinakamalaking iisang lugi ay $6.2k). Sapilitang paglihis ito ng platform: netted ang account kaya walang deadline o nakabukas na stop para sa bawat executor. Hindi ito salungat sa nakasulat na hypothesis.

Panatilihing nakamapa ang tag hanggang dumating ang cancel o fill event, para umabot ang late fill sa kasalukuyang market-flatten path na 'ex is None'.

Inaalis ng _close_executor ang tag ng bawat nakabinbing order sa _omap bago makumpirma ang cancel. Kung mapunan ang level entry sa pagitan ng kahilingan sa cancel at pagkumpirma nito, walang mahahanap na tag ang on_order_filled at babalik ito, kaya maiiwang hindi nasusubaybayang net inventory na hindi kailanman isasara ng executor. Hindi mangyayari ang race na ito sa backtest na walang latency o sa simulated paper venue (agarang pinoproseso ang mga cancel), kaya impormasyon lamang ito.

Walang kailangan.

Sinasabi ng teksto ng hypothesis na nililimitahan ng min_order_amount_quote ang grid sa 8 antas. Inilalapat ng code ang 5% buffer ng source: 6% x 1.05 = 6.3% ng notional ng executor, kaya max_possible = 7. Sa aktuwal, karaniwang unang naglilimita ang terminong int(grid_range/0.005) (2-5 antas sa karaniwang lapad ng banda). Sinusunod ng code ang aritmetika ng naka-pin na GridExecutor, kaya pagkakaiba lang ito sa pagkakasulat ng hypothesis.

Nalugi at na-liquidate ang sandbox sa 100%, pero tugma sa mekanismo ng source ang mga trade at gastos. Walang runaway na posisyon: 1.06 ang pinakamataas na entry leverage at 0.53 ang pinakamataas na margin. Ang mga pagkalugi ay dahil sa gastos. Umabot sa $24.2k ang komisyon sa $51.7M na traded notional, na may average na 0.047%, malapit sa taker rate, dahil karamihan sa exits ay pagsasara ng barrier na MARKET. Bukod dito, isinama ang $113.8k na modelong impact, mga 0.22% ng notional. Binayaran ang dalawa sa……Magpakita ng higit paMagpakita ng mas kaunti

Nalugi at na-liquidate ang sandbox sa 100%, pero tugma sa mekanismo ng source ang mga trade at gastos. Walang runaway na posisyon: 1.06 ang pinakamataas na entry leverage at 0.53 ang pinakamataas na margin. Ang mga pagkalugi ay dahil sa gastos. Umabot sa $24.2k ang komisyon sa $51.7M na traded notional, na may average na 0.047%, malapit sa taker rate, dahil karamihan sa exits ay pagsasara ng barrier na MARKET. Bukod dito, isinama ang $113.8k na modelong impact, mga 0.22% ng notional. Binayaran ang dalawa sa humigit-kumulang 517 round trip ng executor sa loob ng 31 araw. -0.41% ang average na return ng trade kumpara sa 0.15% na floor, na may PF 0.30. Nasa close*(1-0.0001) ang mga entry kaya sumasagad sa touch ang mga grid level, at ang mga barrier exit ang nagtatakda ng gastos. Suriin muna ang singil ng impact model sa bawat fill sa notional ng executor na 50%-ng-equity sa WLD 3m, at kung pinalalala ng trailing/SL exit na sinusuri sa pagsasara ng 3m ang mga presyo ng exit (halos bawat segundo nagsusuri ang source). Karamihan ay patay na uri rito ang BB-fade sa mabilis na timeframe, kaya asahang kumpirmahin ng buong backtest ang fee_edge maliban kung higit na mas malaki ang bahagi ng maker-TP kaysa sa ipinakita ng sandbox.

Pagsusuri ng Backtest

Sharpe
-11.91
Kabuuang Return
-100.00%
Max Drawdown
100.00%
Kabuuang Trade
886
Win Rate
36.2%
Profit Factor
0.23

Kasama sa mga isinara na posisyon ng 886 ang parehong direksyon: 454 long at 432 short.

Napatunayan ang pang-ekonomiyang alalahanin ng QA: ang karaniwang netong kita bawat trade ay -0.341% kumpara sa pinakamababang pamantayan ng pagsusuri sa Binance futures na +0.15%, ang PF ay 0.230, at nalulugi ang account ng 100%.

-$246,648 ang kabuuang PnL ng mga saradong trade; kahit idagdag muli ang $39,449 na komisyon, malaki pa rin ang lugi. Nagdagdag ang iniulat na modelong impact ng $148,198 na gastos.

Kailangan ding suriin ang pagiging tapat ng execution: nanatiling bukas ang huling net short nang halos 49 araw kahit may 45-minutong limitasyon ang executor. Hindi nito mag-isang tinutukoy ang sanhi.

Saklaw ng katalogo ang 3.2 taon, ngunit 31 araw lamang ang saklaw ng ebidensiya para sa epektibong pang-araw-araw na return bago maubos ang equity. Ang mga return ng na-sample na buy-and-hold sa buong panahon ay -73.69%, na may humigit-kumulang 97.62% na drawdown; hindi tumutugma ang mga ito sa panahon kung kailan may natitirang kapital ang estratehiya.

Kasaysayan ng Iterasyon

Bumagsak ang verification (Layer 4 — review ng QA) [class=hypothesis_mismatch]: - [edge_concern] Niliquidate ang smoke test, na may malaking impact at gastos sa komisyon. Muling suriin ang economics matapos itama ang implementasyon; hindi dahilan ng pagbagsak ang mga resultang ito sa performance. - [critical] Gumagamit ang Source grid_executor.py lines 148-150 ng floor(range/min_step), nang walang +1. Nagdagdag ng level ang Port line 243, kaya nagbago ang pagitan at alokasyon. Naglalapat din ang source ng……Magpakita ng higit paMagpakita ng mas kaunti

Bumagsak ang verification (Layer 4 — review ng QA) [class=hypothesis_mismatch]: - [edge_concern] Niliquidate ang smoke test, na may malaking impact at gastos sa komisyon. Muling suriin ang economics matapos itama ang implementasyon; hindi dahilan ng pagbagsak ang mga resultang ito sa performance. - [critical] Gumagamit ang Source grid_executor.py lines 148-150 ng floor(range/min_step), nang walang +1. Nagdagdag ng level ang Port line 243, kaya nagbago ang pagitan at alokasyon. Naglalapat din ang source ng minimum-notional buffer na 5% at quantity quantization bago tukuyin ang kapasidad. [Naka-pin na source](https://raw.githubusercontent.com/hummingbot/hummingbot/9af100d6822da7d2d0291a906c730ef172284ee2/hummingbot/strategy_v2/executors/grid_executor/grid_executor.py). (line 243) — ayusin: Panatilihin ang mga tuntunin ng source sa bilang ng level at quantization, at tahasang pangasiwaan ang mga kasong zero ang level. - [critical] Itinatakda ng Source grid_executor.py lines 397-429 ang TP batay sa orihinal na presyo ng level at inaayos ang mga target na marketable. Sa halip, itinatakda ng Port line 360 ang TP batay sa aktuwal na fill price. Kaya iba ang exits ng mga capped entry. [Naka-pin na source](https://raw.githubusercontent.com/hummingbot/hummingbot/9af100d6822da7d2d0291a906c730ef172284ee2/hummingbot/strategy_v2/executors/grid_executor/grid_executor.py). (line 360) — ayusin: Kalkulahin ang mga target mula sa lv['p'] at panatilihin ang passive-price adjustment ng source. - [critical] Tinatapos ng Source grid_executor.py lines 554-563 ang grid na BUY kapag lampas sa end_price o ang grid na SELL kapag mas mababa sa start_price. Hindi isinama ng Port _check_barriers ang exit na ito at hindi nito pinananatili ang mga hangganang iyon. [Naka-pin na source](https://raw.githubusercontent.com/hummingbot/hummingbot/9af100d6822da7d2d0291a906c730ef172284ee2/hummingbot/strategy_v2/executors/grid_executor/grid_executor.py). (line 287) — ayusin: Itabi ang mga hangganan ng simula at dulo, at ipatupad ang executor exit sa kumikitang hangganan. - [critical] Tinatanggal ng level TP ang average cost ng executor sa halip na cost ng isinasarang level. Kapag magkapantay ang dami ng napunan sa 1 at 2, ang pagsasara sa unang level ay nag-iiwan ng cost basis na 1.5 para sa inventory na talagang binuksan sa 2. Gumagamit ang mga susunod na desisyon sa stop-loss at trailing ng maling break-even price. (line 365) — ayusin: Ibawas ang saradong quantity na minultiply sa lv['fp']; itugma ang cost at inventory ng executor sa natitirang holdings ng mga level pagkatapos ng bawat fill. - [critical] Gumagamit ang mga entry order ng post_only=False kahit open_order_type ang naka-freeze na LIMIT_MAKER. Maaaring i-round ng price normalization ang nilalayong passive offset papunta sa market, kaya posibleng mapunan ang order bilang taker. (line 122) — ayusin: Gamitin ang post_only=True para sa mga grid entry at i-normalize ang mga presyo palayo sa market. Panatilihin ang hiwalay na pangangasiwa para sa mga take-profit na LIMIT.

Panatilihin ang mga tuntunin ng source sa bilang ng level at quantization, at tahasang pangasiwaan ang mga kasong zero ang level.

Gumagamit ang mga linya 148-150 ng Source grid_executor.py ng floor(range/min_step), nang walang +1. Nagdaragdag ng isang antas ang linya 243 ng port, kaya nagbabago ang pagitan at alokasyon. Naglalapat din ang source ng buffer na 5% sa minimum na notional at pag-ikot ng dami bago tukuyin ang kapasidad. [Naka-pin na source](https://raw.githubusercontent.com/hummingbot/hummingbot/9af100d6822da7d2d0291a906c730ef172284ee2/hummingbot/strategy_v2/executors/grid_executor/grid_executor.py).

Kalkulahin ang mga target mula sa lv['p'] at panatilihin ang passive-price adjustment ng source.

Itinatakda ng Source grid_executor.py lines 397-429 ang TP batay sa orihinal na presyo ng level at inaayos ang mga target na marketable. Sa halip, itinatakda ng Port line 360 ang TP batay sa aktuwal na fill price. Kaya iba ang exits ng mga capped entry. [Naka-pin na source](https://raw.githubusercontent.com/hummingbot/hummingbot/9af100d6822da7d2d0291a906c730ef172284ee2/hummingbot/strategy_v2/executors/grid_executor/grid_executor.py).

Itala ang mga hangganan ng simula at wakas at ipatupad ang paglabas ng executor sa kumikitang hangganan.

Tinatapos ng mga linya 554-563 ng Source grid_executor.py ang BUY grid kapag nasa ibabaw ito ng end_price o ang SELL grid kapag nasa ilalim ito ng start_price. Hindi kasama sa _check_barriers ng port ang paglabas na ito at hindi nito pinananatili ang mga hangganang iyon. [Naka-pin na source](https://raw.githubusercontent.com/hummingbot/hummingbot/9af100d6822da7d2d0291a906c730ef172284ee2/hummingbot/strategy_v2/executors/grid_executor/grid_executor.py).

Ibawas ang saradong quantity na minultiply sa lv['fp']; itugma ang cost at inventory ng executor sa natitirang holdings ng mga level pagkatapos ng bawat fill.

Inaalis ng antas na TP ang gastos na karaniwan sa executor, sa halip na ang gastos ng antas na isinasara. Kapag pantay ang dami ng napunan sa 1 at 2, iniiwan ng pagsasara sa unang antas ang batayang gastos na 1.5 para sa imbentaryong aktuwal na binuksan sa 2. Gumagamit ang mga susunod na pasya sa stop-loss at trailing ng maling presyong break-even.

Gamitin ang post_only=True para sa mga grid entry at i-normalize ang mga presyo palayo sa market. Panatilihin ang hiwalay na pangangasiwa para sa mga take-profit na LIMIT.

Gumagamit ang mga entry order ng post_only=False kahit open_order_type ang naka-freeze na LIMIT_MAKER. Maaaring i-round ng price normalization ang nilalayong passive offset papunta sa market, kaya posibleng mapunan ang order bilang taker.

Buod ng Resulta

Suriin ang fills sa pagsasara ng executor, ang natitirang inventory sa dulo, at ang sizing matapos maubos ang kapasidad bago ituring na tapat na reproduksiyon ng orihinal na controller ang saling ito na naka-scale sa equity.

Naglabas ang pagsusuri sa backtest ng hatol na itigil dahil hindi sapat na dahilan ang nasukat na negatibong inaasahang kita para sa pag-optimize; hindi na isinagawa ang pag-optimize at mga susunod na pagsusuri. Kinailangan ding suriin ang katapatan ng pagpapatupad dahil nanatili ang panghuling imbentaryo nang lampas na lampas sa 45-minutong limitasyon ng executor.

I-port ang BollinGridController ng Hummingbot sa mga WLDUSDT Binance 3-minutong bar; i-fade ang mga breach sa Bollinger Band gamit ang maker grid at barrier exit, na may proporsyonal na equity sizing.

Iniulat ng backtest ang return na -100%, Sharpe ratio na -11.91, at pinakamataas na drawdown na 100% sa 886 posisyong naisara. Ang karaniwang netong return bawat trade ay -0.341%, na may profit factor na 0.230.

Pagsusuri

BollinGridController

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.