<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ada Corujo</title>
    <description>The latest articles on DEV Community by Ada Corujo (@apexhedgefund).</description>
    <link>https://dev.to/apexhedgefund</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3882108%2F15f626b0-8977-4094-bab1-79b7699bd155.jpg</url>
      <title>DEV Community: Ada Corujo</title>
      <link>https://dev.to/apexhedgefund</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/apexhedgefund"/>
    <language>en</language>
    <item>
      <title>How Machine Learning Is Actually Used in Digital Asset Portfolio Management (Not the Hype Version)</title>
      <dc:creator>Ada Corujo</dc:creator>
      <pubDate>Thu, 16 Apr 2026 09:38:20 +0000</pubDate>
      <link>https://dev.to/apexhedgefund/how-machine-learning-is-actually-used-in-digital-asset-portfolio-management-not-the-hype-version-39o7</link>
      <guid>https://dev.to/apexhedgefund/how-machine-learning-is-actually-used-in-digital-asset-portfolio-management-not-the-hype-version-39o7</guid>
      <description>&lt;p&gt;&lt;em&gt;By Ada Corujo, Risk Analyst at Apex Hedge Fund&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;There's a lot of noise about AI and crypto. Most of it is marketing. This is an attempt to describe what machine learning actually does — and doesn't do — in a serious digital asset management context.&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem ML is solving
&lt;/h2&gt;

&lt;p&gt;Traditional portfolio management models were built for assets that trade on regulated exchanges with predictable liquidity, clear fundamentals, and relatively stable correlation structures. Digital assets break most of those assumptions.&lt;/p&gt;

&lt;p&gt;Crypto markets trade 24/7. Liquidity can collapse in minutes. Correlations between assets are unstable — they're low during normal conditions and spike toward 1.0 during stress events, which is precisely when you need diversification to work. On-chain data gives you signals that have no equivalent in traditional markets. None of this fits neatly into a model built for equities.&lt;/p&gt;

&lt;p&gt;ML doesn't fix these problems. But it handles certain parts of them better than classical approaches.&lt;/p&gt;




&lt;h2&gt;
  
  
  What we actually use it for
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Signal generation from on-chain data
&lt;/h3&gt;

&lt;p&gt;On-chain metrics — wallet activity, exchange inflows and outflows, miner behavior, network transaction volume — contain information about supply and demand dynamics that price alone doesn't capture. The challenge is that these signals are noisy, non-linear, and interact with each other in ways that are hard to model explicitly.&lt;/p&gt;

&lt;p&gt;Gradient boosted trees and random forests handle this reasonably well. You're not predicting price — you're generating a probability distribution over near-term conditions that informs position sizing and hedging decisions. The model doesn't tell you what to buy. It tells you something about the risk environment you're operating in.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Simplified example of feature set for on-chain signal model
&lt;/span&gt;&lt;span class="n"&gt;features&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;exchange_netflow_btc_7d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;# Exchange inflow minus outflow
&lt;/span&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;active_addresses_30d_change&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;# Network activity trend
&lt;/span&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;miner_reserve_change_14d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;# Miner selling pressure
&lt;/span&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;stablecoin_supply_ratio&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;# Dry powder on sidelines
&lt;/span&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;funding_rate_perpetuals&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;# Sentiment in derivatives market
&lt;/span&gt;    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;realized_volatility_7d&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;# Short-term vol regime
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These features don't have clean linear relationships with outcomes. Tree-based models tolerate that. Linear regression doesn't.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dynamic correlation estimation
&lt;/h3&gt;

&lt;p&gt;Standard portfolio theory uses historical correlation matrices. The problem is that crypto correlations are regime-dependent — they look one way during trending markets and completely different during liquidation cascades.&lt;/p&gt;

&lt;p&gt;We use a rolling Hidden Markov Model to identify regime states and estimate separate correlation matrices per regime. When the model detects a shift toward a stress regime, the portfolio construction logic adjusts accordingly — reducing concentration, increasing hedge ratios, tightening drawdown controls.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Regime detection — simplified
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;hmmlearn&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;hmm&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hmm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GaussianHMM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;n_components&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Low vol / trending / stress
&lt;/span&gt;    &lt;span class="n"&gt;covariance_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;full&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;n_iter&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;returns_matrix&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;regimes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;returns_matrix&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn't predicting the future. It's describing the current environment more accurately than a static model does.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anomaly detection for risk monitoring
&lt;/h3&gt;

&lt;p&gt;Position-level risk monitoring runs a one-class SVM against a baseline of normal market microstructure. When intraday behavior deviates significantly from baseline — unusual bid-ask spread widening, abnormal order book depth changes, correlated liquidation signals across multiple assets — it flags for manual review before the situation becomes a loss event.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.svm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OneClassSVM&lt;/span&gt;

&lt;span class="n"&gt;detector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OneClassSVM&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;kernel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rbf&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;detector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;normal_conditions_matrix&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Returns -1 for anomalies, 1 for normal
&lt;/span&gt;&lt;span class="n"&gt;anomaly_flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;detector&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current_conditions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;False positive rate matters a lot here. Too many false flags and the system gets ignored. We tune nu conservatively and validate against historical stress events.&lt;/p&gt;




&lt;h2&gt;
  
  
  What ML doesn't do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It doesn't predict price.&lt;/strong&gt; Anyone telling you their ML model predicts crypto prices with meaningful accuracy is either confused about what their model is doing or lying.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn't replace judgment.&lt;/strong&gt; The models generate inputs to decisions — they don't make decisions. When a regime shift flag fires, a human looks at it. When anomaly detection triggers, a human reviews the position. The model narrows the decision space. It doesn't close it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn't handle black swan events well.&lt;/strong&gt; A model trained on historical data has no meaningful representation of events outside that distribution. March 2020, the FTX collapse, the Luna implosion — these were outside the training distribution of any model that hadn't seen them. The response to those events was risk framework, not ML output.&lt;/p&gt;




&lt;h2&gt;
  
  
  The honest summary
&lt;/h2&gt;

&lt;p&gt;ML in portfolio management is useful for specific, well-defined tasks where the signal-to-noise ratio is high enough and the training data is sufficient. On-chain signal extraction, regime detection, and anomaly monitoring fit that description reasonably well.&lt;/p&gt;

&lt;p&gt;It's not a competitive advantage by itself. A gradient boosted tree trained on the same public on-chain data everyone has access to isn't going to generate persistent alpha. The edge, if there is one, comes from the combination of the model, the features you engineer, the risk framework it feeds into, and the execution discipline around it.&lt;/p&gt;

&lt;p&gt;Anyone who tells you otherwise is selling something.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ada Corujo is a Risk Analyst at Apex Hedge Fund, a SEC-regulated digital asset manager. &lt;a href="https://apexhedgefund.com" rel="noopener noreferrer"&gt;apexhedgefund.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>crypto</category>
      <category>blockchain</category>
      <category>investing</category>
    </item>
  </channel>
</rss>
