paint-brush
Tento přístup k hloubkovému učení může pomoci zdvojnásobit vaše zisky z investic do kryptoměnpodle@pmatheus
Nová historie

Tento přístup k hloubkovému učení může pomoci zdvojnásobit vaše zisky z investic do kryptoměn

podle pmatheus8m2024/12/18
Read on Terminal Reader

Příliš dlouho; Číst

Tato zpráva představuje nový přístup k obchodování s kryptoměnami pomocí agenta Deep Reinforcement Learning (DRL) založeného na Transformeru.
featured image - Tento přístup k hloubkovému učení může pomoci zdvojnásobit vaše zisky z investic do kryptoměn
pmatheus HackerNoon profile picture

Tato zpráva představuje nový přístup k obchodování s kryptoměnami pomocí agenta Deep Reinforcement Learning (DRL) založeného na Transformeru. Systém využívá moderní architektury inspirované NLP (Transformers), Double DQN (DDQN), Noisy Networks a Low-Rank Adaptation (LoRA) pro trénink v testovacím čase (TTT). Kombinací těchto komponent agent prokazuje zlepšenou adaptabilitu, stabilní tvorbu politiky a výrazně zvýšenou ziskovost na historických datech BTC/USDT. I když jsou tyto výsledky předběžné, tyto výsledky naznačují, že metodu lze rozšířit na složitější datové sady (např. na úrovni knihy objednávek) a více tříd aktiv, což poskytuje škálovatelný základ pro obchodní strategie na institucionální úrovni.


Poznámka redakce: Tento článek má pouze informativní charakter a nepředstavuje investiční poradenství. Kryptoměny jsou spekulativní, složité a zahrnují vysoká rizika. To může znamenat vysokou volatilitu cen a potenciální ztrátu vaší počáteční investice. Před jakýmkoli investičním rozhodnutím byste měli zvážit svou finanční situaci, investiční účely a poradit se s finančním poradcem. Redakční tým HackerNoon pouze ověřil gramatickou správnost příběhu a neschvaluje ani nezaručuje přesnost, spolehlivost nebo úplnost informací uvedených v tomto článku. #DYOR


Proč Transformers, proč DRL a proč by vás to mělo zajímat

  • Transformers: Narodili se ve světě NLP a vynikají v dešifrování sekvencí. Trhy jsou jednoduše hádanky časové řady. Transformers je čtou jako příběhy, předvídají zvraty v zápletce (pohyby cen) mnohem dříve, než vaše průměrné množství mrkne.

  • Double DQN (DDQN): Už žádné jednostranné odhady Q-hodnoty. DDQN omezuje tato notoricky známá nadhodnocování a dodává vaší obchodní politice důvěryhodnost, kterou potřebuje ke zvládnutí záludných pastí na býky a nájezdů medvědů.

  • Noisy Nets podporují průzkum přidáváním parametrizovaného šumu přímo k vahám sítě.

  • LoRA umožňuje trénink na zkoušku (TTT) s minimální režií, což modelu umožňuje rychle se přizpůsobit novým podmínkám na trhu bez úplného cyklu přeškolování.

  • Test-Time Training (TTT): Trhy se posouvají, vyvíjejí, překvapují. TTT umožňuje, aby se tento model rychle přizpůsoboval a přizpůsoboval strategie uprostřed letu, jako by dnes četl zítřejší titulky.


Kód je zapnutý https://github.com/pmatheus/themoneyhack Naklonujte to, spusťte to, pitvejte to. Mohlo by se ti to líbit.


V tomto rámci vytváří systém, kde učící se agent interaguje se simulovaným obchodním prostředím, řízeným moderní architekturou založenou na Transformeru. Ve svém jádru se systém snaží v průběhu času zlepšovat obchodní rozhodnutí, zdokonalovat svou strategii prostřednictvím posilování učení a rychlého přizpůsobování se novým tržním podmínkám.


Nejprve zvažte model Transformer . Transformers tradičně způsobili revoluci v oblastech, jako je zpracování přirozeného jazyka, interpretací sekvencí slov nebo tokenů. Zde jsou stejné principy aplikovány na cenová data časových řad. Namísto slov model přijímá historické rysy trhu – ceny, objemy, technické ukazatele – a pokouší se extrahovat smysluplné časové závislosti. Třída TransformerNetwork , definovaná v kódu, je příkladem tohoto přístupu. Všimněte si, jak konstruktér promítá nezpracované vstupní prvky do reprezentace vyšší dimenze a poté je předává několika vrstvami kodéru Transformer:


 class TransformerNetwork(nn.Module): def __init__(self, state_dim, output_dim, lookback, nhead=8, num_layers=4, model_dim=512, lora_r=8, lora_alpha=1.0, lora_active=False, sigma_init=hyperparameters['SIGMA_INIT']): super(TransformerNetwork, self).__init__() self.model_dim = model_dim self.lookback = lookback self.lora_active = lora_active self.input_fc = NoisyLoRALinear(state_dim, self.model_dim, r=lora_r, alpha=lora_alpha, lora_active=lora_active, sigma_init=sigma_init) encoder_layer = TransformerEncoderLayerRelative(d_model=model_dim, nhead=nhead, lora_r=lora_r, alpha=lora_alpha, lora_active=lora_active, sigma_init=sigma_init) self.transformer = TransformerEncoderRelative(encoder_layer, num_layers=num_layers) self.output_fc = NoisyLoRALinear(self.model_dim, output_dim, r=lora_r, alpha=lora_alpha, lora_active=lora_active, sigma_init=sigma_init) self._initialize_weights() def forward(self, x): x = self.input_fc(x) x = x.permute(1, 0, 2) x = self.transformer(x) x = x.mean(dim=0) output = self.output_fc(x) return output


Tento úryvek zdůrazňuje tok: nezpracované stavy vstupují přes input_fc (lineární vrstva vylepšená o šum a potenciální adaptace nízké úrovně), procházejí naskládanými moduly TransformerEncoderLayerRelative , které zachycují časové a relativní polohové informace, a nakonec jsou shrnuty do akcí pomocí output_fc . Tento návrh umožňuje modelu vážit události v různých okamžicích a identifikovat opakující se vzorce nebo anomálie, které mohou naznačovat ziskové příležitosti.


Pokud model Transformer poskytuje agentovi „oči“ a „uši“, třída TradingEnv simuluje svět, se kterým interaguje. Tato třída prostředí s názvem TradingEnv definuje, co to znamená provést akci – jako je otevření nebo uzavření pozic – a jak jsou přidělovány odměny. Uvnitř prostředí agent sleduje změny cen, technické ukazatele a své aktuální držby. Následující úryvek ukazuje, jak prostředí vytváří stavy z tržních dat a pozic agentů:


 def get_state(self): states = [] current_timestamp = self.tech_array.iloc[self.time]['timestamp'] weight_long = float(self.stocks_long * self.current_price / self.total_asset) if self.total_asset > 0 else 0.0 weight_short = float(self.stocks_short * self.current_price / self.total_asset) if self.total_asset > 0 else 0.0 for _ in range(self.lookback): row = self.precomputed_tech.get(current_timestamp) if row is not None: features = row.drop(['timestamp', 'date']).astype(np.float32).values state_row = np.concatenate(([weight_long, weight_short], features)).astype(np.float32) else: state_row = np.zeros(self.state_dim, dtype=np.float32) states.append(state_row) current_timestamp -= self.get_timeframe_in_seconds() states = states[::-1] # ensure chronological order state = torch.tensor(np.array(states, dtype=np.float32), dtype=torch.float32).unsqueeze(0).to(self.device) return state


Prostředí zde tvoří bohaté vložení stavu, které zahrnuje informace o poloze a historické okno funkcí. Poskytnutím této okénkové perspektivy může Transformer modelovat časové vzory. Každý krok v prostředí aktualizuje pozice, počítá zisk nebo ztrátu a vrací agentovi nový stav a odměnu. Tato cyklická výměna podporuje zpětnou vazbu a umožňuje agentovi zjistit, co funguje a co ne.


Rozhodovací jádro se nachází ve třídě DiscreteDDQNAgent , která implementuje přístup Double DQN. Double DQN pomáhá řešit dobře známou zaujatost nadhodnocení v Q-learningu pomocí samostatných sítí pro výběr akcí a odhad hodnoty. Agent spravuje instance online_net a target_net modelu založeného na Transformeru a používá vyrovnávací paměť pro přehrávání k vzorkování minulých zkušeností. Během tréninku aktualizuje své parametry minimalizací rozdílu mezi předpokládanými Q-hodnotami a cílovými Q-hodnotami odvozenými z cílové sítě:


 def update(self): self.online_net.train() if len(self.memory) < self.batch_size: return None states, actions, rewards, next_states, dones = self.memory.sample(self.batch_size) q_values = self.online_net(states).gather(1, actions.unsqueeze(1)).squeeze(1) with torch.no_grad(): next_q_values = self.target_net(next_states).gather(1, self.online_net(next_states).argmax(dim=1).unsqueeze(1)).squeeze(1) target_q_values = rewards + self.gamma * next_q_values * (1 - dones) ddqn_loss = self.loss_fn(q_values, target_q_values.detach()) self.optimizer.zero_grad() ddqn_loss.backward() torch.nn.utils.clip_grad_norm_(self.online_net.parameters(), max_norm=1.0) self.optimizer.step() self.soft_update() return ddqn_loss.item()


Tento kód odhaluje pečlivou trénovací rutinu: agent opakovaně vzorkuje mini-dávky minulých přechodů, počítá ztrátu DDQN a aktualizuje online_net . Pravidelně provádí měkkou aktualizaci target_net , aby pomalu sledovala zlepšení. Kombinací schopností rozpoznávání vzorů Transformeru se stabilní dynamikou učení Double DQN se agent postupně stává zběhlejším ve výběru ziskových obchodů.


Podmínky na trhu se však nikdy nezastaví. Posuny ve volatilitě, regulační změny nebo náhlé události likvidity mohou proměnit včerejší vítěze v dnešní poražené. Aby bylo možné takové směny zvládnout, je zaveden koncept tréninku v testovacím čase (TTT) . Namísto spoléhání se pouze na aktualizace prováděné po nasbírání velkého množství zkušeností umožňuje TTT určitým částem sítě dynamicky se přizpůsobovat, když přicházejí nové stavy, a to i během vyvozování. Tato rychlá adaptace umožňuje agentovi překalibrovat své strategie za běhu a přizpůsobit se nepředvídaným okolnostem, aniž by čekal na celý cyklus přeškolení.


V tomto kódu je TTT usnadněno selektivním tréninkem parametrů během inference a zaměřením na malou podmnožinu parametrů. Agent může například upravit část své sítě tak, aby rychle absorbovala nové vzory. Metody activate_lora() a deactivate_lora() (nyní nejsou zobrazeny, protože se zaměřujeme na logiku Transformer, Env, DDQN a TTT) tyto adaptivní parametry zapínají a vypínají. I když tento úryvek kódu konkrétně odkazuje na LoRA (adaptace nízké úrovně), platí stejná filozofie: TTT znamená umožnit určitým částem modelu učit se v době testu. Když je aktivní režim TTT, specializovaný optimalizátor na místě aktualizuje tyto parametry:


 def update_auxiliary(self, state): self.autoencoder.train() self.online_net.train() # Ensure noise and adaptive params are active masked_state, target_state = self.mask_input(state) masked_state_flat = masked_state.view(state.size(0), -1) target_state_flat = target_state.view(state.size(0), -1) reconstructed = self.autoencoder(masked_state_flat) aux_loss = F.mse_loss(reconstructed, target_state_flat) self.autoencoder_optimizer.zero_grad() self.ttt_optimizer.zero_grad() aux_loss.backward() torch.nn.utils.clip_grad_norm_(self.autoencoder.parameters(), max_norm=1.0) torch.nn.utils.clip_grad_norm_(filter(lambda p: p.requires_grad, self.online_net.parameters()), max_norm=1.0) self.autoencoder_optimizer.step() self.ttt_optimizer.step() self.autoencoder.eval() return aux_loss.item()


Tato pomocná aktualizační rutina, spouštěná v době testu, demonstruje přizpůsobivost systému. Agent záměrně maskuje některé vstupní vlastnosti a snaží se je rekonstruovat, čímž zlepšuje svou vnitřní reprezentaci aktuálního tržního režimu. Díky tomu může rychle reagovat na změny dat a udržovat ziskové strategie v neustále se měnícím prostředí.


Stručně řečeno, souhra těchto komponent vytváří robustní a flexibilní obchodní stroj. Model založený na transformátoru poskytuje bohaté, kontextově citlivé pochopení tržních signálů. TradingEnv simuluje realistické podmínky a zpětnovazební smyčky. Rámec Double DQN zajišťuje stabilní učení akčních hodnot a postupně zpřesňuje obchodní rozhodnutí. Konečně TTT umožňuje agentovi zůstat agilní a upravovat své vnitřní parametry, když je konfrontován s novými vzory. Tyto prvky společně vytvářejí půdu pro systém, který je sofistikovaný v rozpoznávání vzorů a zároveň odolný vůči nejistotě trhu a nabízí přesvědčivou vizi pro obchodní strategie nové generace.


Jaký je výsledek?

  • Vícenásobné zdvojnásobení kapitálu: Na historických denních datech BTC/USDT tento agent nezískal jen malé zisky – několikrát zdvojnásobil svůj počáteční kapitál. Jestli to není budíček, tak nevím co.
  • Stabilní, nízké ztráty a jasné zásady: Záznamy TensorBoard ukazují ztráty vyhlazené na působivě nízké úrovně a distribuce Q-hodnot pro různé obchodní akce tvořily odlišné, smysluplné vzorce. Překlad: Model nejen hádá, ale učí se trvale ziskovému přístupu.


Potenciál další úrovně

  • Data na úrovni objednávky: Právě teď tančíme s OHLCV. Dej mi hloubku knihy objednávek a já ti dám alfu, která je prakticky nukleární. Váš interní fond likvidity si zaslouží model, který dokáže předvídat a využívat cenové pohyby na úrovni mikrosekund.
  • Integrace více časových rámců: intradenní skalpování nebo dlouhodobější poziční obchody? S transformátory můžeme sloučit více granularit – 1minutové grafy s denními trendy – a odhalit signály, které nemůže nabídnout žádný jediný časový rámec.
  • Odolnost vůči posunům režimů: Trhy neustále lámou vzorce. S LoRA a TTT se tento agent dokáže přizpůsobit rychleji než kofeinovaný stážista, který táhne celou noc. Nárůst volatility přes noc? Oznámení Fedu? Modelka říká: "Přines to."


Komentujte, zapojte se, nabídněte nabídku 🤯

Nedovolte, aby to byla jen letmá kuriozita. Komentujte, kritizujte, ptejte se. Pokud vás zajímá, jak upravit svou strategii nebo jak integrovat flexibilní řešení DRL do vašeho stávajícího zásobníku, zanechte komentář.