Txosten honek kriptografia-moneta merkataritzarako ikuspegi berri bat aurkezten du Transformer oinarritutako Deep Reinforcement Learning (DRL) agente bat erabiliz. Sistemak NLPn inspiratutako arkitektura modernoak (Transformers), DQN bikoitza (DDQN), Sare zaratatsuak eta maila baxuko egokitzapena (LoRA) erabiltzen ditu Test-Time Training (TTT) egiteko. Osagai hauek konbinatuz, agenteak moldagarritasun hobetua, politikaren eraketa egonkorra eta errentagarritasun nabarmen hobetua erakusten du BTC/USDT datu historikoetan. Aurrez aurrekoak izan arren, emaitza hauek iradokitzen dute metodoa datu multzo konplexuagoetara (adibidez, eskaera-mailako) eta aktibo-klase anitzetara heda daitekeela, erakunde-mailako merkataritza-estrategietarako oinarri eskalagarria eskainiz.
Editorearen oharra: artikulu hau informazio-helburuetarako soilik da eta ez du inbertsio-aholkularitzarik. Kriptomonetak espekulatiboak, konplexuak dira eta arrisku handiak dituzte. Horrek prezioen hegazkortasun handia eta hasierako inbertsioaren galera potentziala suposa dezake. Zure finantza-egoera, inbertsio-helburuak kontuan hartu behar dituzu eta finantza-aholkulari batekin kontsultatu inbertsio-erabakiak hartu aurretik. HackerNoon erredakzio-taldeak istorioaren zehaztasun gramatikala baino ez du egiaztatu eta ez du onartzen edo bermatzen artikulu honetan adierazitako informazioaren zehaztasuna, fidagarritasuna edo osotasuna. #DYOR
Zergatik Transformers, Zergatik DRL eta Zergatik zaindu beharko zenuke
Transformers: NLP munduan jaioak, sekuentziak deszifratzen bikainak dira. Merkatuak denbora serieko puzzleak besterik ez dira. Transformers-ek istorioak bezala irakurtzen ditu, argumentuaren bira (prezio-mugimenduak) aurreikusiz zure batez besteko kantitatea keinu egin baino lehen.
DQN bikoitza (DDQN): ez dago alde bakarreko Q-balioaren estimazio gehiago. DDQNk murrizten ditu gainestimazio ospetsu horiek, zure merkataritza-politikari zezen-tranpa zailak eta hartzaren erasoak kudeatzeko behar duen sinesgarritasuna emanez.
Noisy Nets-ek esplorazioa bultzatzen du sareko pisuei parametrotutako zarata gehituz zuzenean.
LoRA-k proba-denborako prestakuntza (TTT) ahalbidetzen du kostu minimoarekin, eta eredua merkatu-baldintza berrietara azkar egokitzea ahalbidetzen du, birziklapen ziklo osorik gabe.
Test-Time Training (TTT): Merkatuak aldatu, eboluzionatu, harritu. TTT-k eredu honi azkar egokitzen uzten dio, estrategiak hegaldi erdian egokituz, gaur biharko titularrak irakurtzen ari balira bezala.
Kodea aktibatuta dago
Esparru honetan sistema bat sortzen da, non ikaskuntza-agente batek merkataritza-ingurune simulatu batekin elkarreragiten duen, Transformer oinarritutako arkitektura moderno batek gidatuta. Funtsean, sistemak merkataritza-erabakiak denboran zehar hobetu nahi ditu, bere estrategia hobetuz ikaskuntza indargarriaren bidez eta merkatu-baldintza berrietara azkar egokituz.
Demagun lehenik Transformer eredua . Tradizionalki, Transformers-ek hizkuntza naturalaren prozesamendua bezalako eremuak irauli ditu hitzen edo token sekuentziak interpretatuz. Hemen, printzipio berdinak aplikatzen zaizkie denbora-serieen prezioen datuei. Hitzen ordez, ereduak merkatuaren ezaugarri historikoak irensten ditu —prezioak, bolumenak, adierazle teknikoak— eta denborazko mendekotasun esanguratsuak ateratzen saiatzen da. Kodean definitutako TransformerNetwork
klaseak planteamendu hau erakusten du. Kontuan izan konstruktoreak sarrerako ezaugarri gordinak dimentsio handiko irudikapen batean nola proiektatzen dituen eta, ondoren, Transformer kodetzaile geruza anitzetatik pasatzen dituen:
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
Zatiketa honek fluxua nabarmentzen du: egoera gordinak input_fc
bidez sartzen dira (zaratarekin eta maila baxuko egokitzapen potentzialekin hobetutako geruza lineal bat), denborazko eta posizio erlatiboa den informazioa jasotzen duten TransformerEncoderLayerRelative
moduluen bidez bidaiatzen dute, eta, azkenik, output_fc
ekintzetan laburbiltzen dira. Diseinu horri esker, ereduari gertaerak une desberdinetan haztatu ditzake, aukera errentagarriak iradoki ditzaketen eredu edo anomaliak errepikatzen diren identifikatuz.
Transformer ereduak agentearen "begiak" eta "belarriak" eskaintzen baditu, TradingEnv klaseak elkarrekintza egiten duen mundua simulatzen du. TradingEnv
izeneko ingurune-klase honek ekintza bat egiteak zer esan nahi duen definitzen du —adibidez, posizioak irekitzea edo ixtea— eta sariak nola esleitzen diren. Ingurunearen barnean, agenteak prezioen aldaketak, adierazle teknikoak eta bere egungo partaidetzak behatzen ditu. Hurrengo pasarte honek inguruneak merkatuko datuetatik eta agenteen posizioetatik egoerak nola eraikitzen dituen erakusten du:
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
Hemen, inguruneak posizioaren informazioa eta ezaugarrien leiho historikoa barne hartzen dituen egoera aberatsa osatzen du. Leiho-ikuspegi hori emanez, Transformer-ek denborazko ereduak modelatu ditzake. Inguruneko urrats bakoitzak posizioak eguneratzen ditu, irabaziak edo galerak kalkulatzen ditu eta egoera eta sari berri bat itzultzen dio agenteari. Truke zikliko honek feedback begizta bat sustatzen du, agenteari zer funtzionatzen duen eta zer ez ikasten utziz.
Erabakiak hartzeko motorra DiscreteDDQNAgent klasean dago, DQN Bikoitzaren ikuspegia ezartzen duena. DQN bikoitzak Q-learning-en gehiegizko estimazio-alborapenari aurre egiten laguntzen du, ekintza hautatzeko eta balio-estimaziorako sare bereiziak erabiliz. Agenteak Transformer-en oinarritutako ereduaren online_net
eta target_net
instantzia mantentzen ditu eta errepikapen-buffer bat erabiltzen du iraganeko esperientziak probatzeko. Prestakuntzan zehar, bere parametroak eguneratzen ditu aurreikusitako Q-balioen eta xede-saretik eratorritako helburuko Q-balioen arteko aldea minimizatuz:
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()
Kode honek trebakuntza-errutina zaindua erakusten du: agenteak behin eta berriz lagintzen ditu iraganeko trantsizioen lote txikiak, DDQN galera kalkulatzen du eta online_net
eguneratzen du. Aldian-aldian, target_net
-en eguneratze leun bat egiten du hobekuntzak poliki-poliki jarraitzeko. Transformer baten ereduak ezagutzeko gaitasunak DQN Bikoitzaren ikaskuntza-dinamika egonkorrarekin konbinatuz, agentea pixkanaka trebeagoa da merkataritza errentagarriak hautatzen.
Merkatuaren baldintzak, ordea, ez dira inoiz geldirik gelditzen. Hegazkortasunaren aldaketek, arauzko aldaketak edo bat-bateko likidezia-gertaerek atzoko irabazleak gaurko galtzaile bihur ditzakete. Halako txandak kudeatzeko, Test-Time Training (TTT) kontzeptua sartzen da. Esperientzia ugari bildu ondoren egindako eguneraketetan soilik fidatu beharrean, TTT-k sareko zenbait zati dinamikoki egokitzeko aukera ematen du egoera berriak iristen diren heinean, baita inferentzian ere. Egokitzapen azkar honi esker, agenteak bere estrategiak berriro kalibratzeko aukera ematen dio hegan, ezusteko egoeretara egokituz, birziklapen ziklo oso baten zain egon gabe.
Kode honetan, TTT errazten da inferentzian zehar parametroak selektiboki entrenatuz eta parametroen azpimultzo txiki batean zentratuz. Agenteak, adibidez, bere sarearen zati bat alda dezake eredu berriak azkar xurgatzeko. activate_lora()
eta deactivate_lora()
metodoek (orain ez dira erakusten Transformer, Env, DDQN eta TTT logikan zentratzen garenez) parametro moldagarri hauek aktibatu eta desaktibatu egiten dituzte. Kode zati horrek LoRA (maila baxuko egokitzapena) erreferentzia egiten duen arren, filosofia bera aplikatzen da: TTTk esan nahi du ereduaren zati batzuk proba garaian ikasteko gaitzea. TTT modua aktibo dagoenean, optimizatzaile espezializatu batek parametro hauek unean bertan eguneratzen ditu:
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()
Eguneratze-errutina laguntzaile honek, proba garaian abiarazitakoak, sistemaren moldagarritasuna erakusten du. Agenteak sarrera-ezaugarri batzuk nahita ezkutatzen ditu eta horiek berreraikitzen saiatzen da, egungo merkatu-erregimenaren barne irudikapena hobetuz. Horrela, datuen aldaketei azkar erreakzionatu eta estrategia errentagarriak mantendu ditzake etengabe aldatzen ari den panorama batean.
Laburbilduz, osagai horien arteko elkarreraginak merkataritza-makina sendo eta malgua sortzen du. Transformer oinarritutako ereduak merkatu-seinaleen ulermen aberatsa eta testuinguruaren araberakoa eskaintzen du. TradingEnv-ek baldintza errealistak eta feedback begiztak simulatzen ditu. DQN Bikoitzaren esparruak ekintza-balioen ikaskuntza egonkorra bermatzen du, merkataritza-erabakiak pixkanaka hobetuz. Azkenik, TTT-k agenteari arin egoteko aukera ematen dio, bere barne-parametroak egokituz eredu berriei aurre egiten dionean. Elkarrekin, elementu hauek ereduen aitorpenean sofistikatua eta merkatuaren ziurgabetasunaren aurrean erresistentea den sistema baten agertokia ezartzen dute, hurrengo belaunaldiko merkataritza-estrategietarako ikuspegi sinesgarria eskaintzen duena.
Zein da Emaitza?
Hurrengo Mailako Potentziala
Iruzkinak, parte hartu, eskaintza bat eskaini 🤯
Ez utzi hau bitxikeria iragankorra izan. Komentatu, kritikatu, galderak egin. Zure estrategia nola bideratu edo DRL irtenbide malgu bat zure pila batean nola integratu galdetzen baduzu, utzi iruzkin bat.