<?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: stooq1</title>
    <description>The latest articles on DEV Community by stooq1 (@stooq1).</description>
    <link>https://dev.to/stooq1</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4133152%2Fe492d48c-da9d-42ad-a002-73a38b93b52d.png</url>
      <title>DEV Community: stooq1</title>
      <link>https://dev.to/stooq1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stooq1"/>
    <language>en</language>
    <item>
      <title>I wrote down the pass mark before the test. Then I failed it.</title>
      <dc:creator>stooq1</dc:creator>
      <pubDate>Sat, 19 Sep 2026 17:43:08 +0000</pubDate>
      <link>https://dev.to/stooq1/i-wrote-down-the-pass-mark-before-the-test-then-i-failed-it-4a03</link>
      <guid>https://dev.to/stooq1/i-wrote-down-the-pass-mark-before-the-test-then-i-failed-it-4a03</guid>
      <description>&lt;p&gt;&lt;em&gt;A trend rule, two markets, one day of work, and three moments where my own checking was the thing that was broken. Code and data: &lt;a href="https://github.com/stooq1/strategy-graveyard/blob/main/trend_daily.py" rel="noopener noreferrer"&gt;trend_daily.py&lt;/a&gt;, &lt;a href="https://github.com/stooq1/strategy-graveyard" rel="noopener noreferrer"&gt;strategy-graveyard&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The rule is the most boring one in the book. On daily bars, take the sign of the return over the last N bars, size the position so that each instrument contributes the same volatility, cap the leverage, rebalance weekly or when the sign flips, charge costs per side and pay funding on perpetuals. The version I declared before any of this ran was an ensemble of three windows: 60, 120 and 250 days.&lt;/p&gt;

&lt;p&gt;I had already tested it on Binance perpetuals and on three Russian futures families, written the result down as "a positive-expectancy crash hedge, not income", and moved on. Then I went back and finished the job on the remaining six futures families. What follows is one day of work, in order, including the parts where I was wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrong the first time: a prediction I had written in my own journal
&lt;/h2&gt;

&lt;p&gt;The journal said, in plain words: the other six families will not change the picture, they will only add diversification of the same shape. That was a real prediction about a test I had not run, which is the only kind worth grading.&lt;/p&gt;

&lt;p&gt;Nine families instead of three took the portfolio from Sharpe 0.56 at t 1.5 to 0.83 at t 2.3, and cut the maximum drawdown from 19% to 12%. Better still, the six families the rule had never seen, taken alone, gave 0.88 at t 2.4 — cleanly out of sample, and better than the three the rule had been developed on. The usual direction of travel is the opposite.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrong the second time: I was cutting the best days from one side only
&lt;/h2&gt;

&lt;p&gt;The project has a standing rule that every positive result gets decomposed by its top five days, because an edge that is really three good days is exposure, not edge. The daily trend had 49% of its total in five days, all of them in early 2022, and I had filed that as a mark against it.&lt;/p&gt;

&lt;p&gt;Then I cut the best days from the benchmark too, which is the obvious thing to do and which I had not done.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;full&lt;/th&gt;
&lt;th&gt;minus top 5&lt;/th&gt;
&lt;th&gt;minus top 10&lt;/th&gt;
&lt;th&gt;minus top 20&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;trend ensemble&lt;/td&gt;
&lt;td&gt;0.88&lt;/td&gt;
&lt;td&gt;0.55&lt;/td&gt;
&lt;td&gt;0.40&lt;/td&gt;
&lt;td&gt;0.13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vol-scaled long&lt;/td&gt;
&lt;td&gt;0.35&lt;/td&gt;
&lt;td&gt;−0.03&lt;/td&gt;
&lt;td&gt;−0.18&lt;/td&gt;
&lt;td&gt;−0.45&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Removing five days out of 1,741 takes the benchmark from +23.5% to −1.9%. Concentration was a property of the market, not a defect of the rule, and the rule was in fact &lt;em&gt;less&lt;/em&gt; concentrated than buy-and-hold. My check had been asymmetric, and asymmetric checks always flatter whichever side you forget to cut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrong the third time: a column in my own script was lying
&lt;/h2&gt;

&lt;p&gt;Next I mapped the rule over a grid of windows from 30 to 300 days, and then stress-tested costs. The first cost run came back with the ensemble at Sharpe 1.28 where the baseline run had said 0.88 — at &lt;em&gt;higher&lt;/em&gt; costs. A number that improves when you make the world worse is not a discovery, it is a bug.&lt;/p&gt;

&lt;p&gt;It was a bug. The ensemble column in my script was labelled &lt;code&gt;"ensemble 60/120/250"&lt;/code&gt; as a hardcoded string, while the ensemble it actually computed used whatever windows the &lt;code&gt;--lookbacks&lt;/code&gt; flag was given. I had passed six windows and read the result as if it were three. One line to fix, and worth more as a habit than as a fix: when a number is suddenly better than the baseline, check that it is the same quantity before you check anything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result that looked very good
&lt;/h2&gt;

&lt;p&gt;With those three corrections in place, the picture on Russian futures was strong.&lt;/p&gt;

&lt;p&gt;The window map was a plateau, not a spike: every window from 30 to 200 days was positive, and only the annual windows died. Costs were a non-issue — you have to multiply the real 0.3–1.0 basis points per side by about fifty before the rule falls to the level of just being long. And the single best window, 30 days, held up on every cut I could think of: Sharpe 1.29, and 1.34 at t 3.5 with February and March 2022 removed entirely, which is to say it was &lt;em&gt;not&lt;/em&gt; a crash hedge after all. Removing its own top 20 days still left it positive while the benchmark was deeply negative.&lt;/p&gt;

&lt;p&gt;t 3.5 clears the bar I set for this project at the start. Nothing else in four months had cleared it.&lt;/p&gt;

&lt;p&gt;It is also exactly the moment to be suspicious, because I had found that window by scanning a grid after the fact, and the six "new" families had taken part in the scan, so they were no longer clean for this particular claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  So I wrote the threshold down first
&lt;/h2&gt;

&lt;p&gt;Before running anything on crypto, into the journal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Single window N=30, same vol targeting, same weekly rebalance, 7.5 bp per side, funding charged. If the shape from futures is real, N=30 gives at least 0.7 on the sixteen Binance perpetuals and at least 0.9 on the top four by liquidity with the longs held in spot, and beats the three-window ensemble on the same samples. Below 0.5 and N=30 is written off as fitted to one market.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then I ran it. 0.59 and 0.91 on the full samples; 0.55 and 0.73 compared on the same days as the benchmark. One threshold met on the headline number and missed once the samples were aligned, one threshold missed outright. N=30 did beat the ensemble on all four slices, so the direction survived. The magnitude did not: the same window that gave 1.26 to 1.34 on futures gives 0.55 to 0.73 here, and on the sixteen perpetuals it fails to beat a vol-scaled long position.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test that settled it
&lt;/h2&gt;

&lt;p&gt;Levels are noisy. Shape is harder to fake, so I mapped the same nine windows on crypto and compared the shapes by rank correlation.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;sample&lt;/th&gt;
&lt;th&gt;30&lt;/th&gt;
&lt;th&gt;45&lt;/th&gt;
&lt;th&gt;60&lt;/th&gt;
&lt;th&gt;90&lt;/th&gt;
&lt;th&gt;120&lt;/th&gt;
&lt;th&gt;160&lt;/th&gt;
&lt;th&gt;200&lt;/th&gt;
&lt;th&gt;250&lt;/th&gt;
&lt;th&gt;300&lt;/th&gt;
&lt;th&gt;long&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;16 perps&lt;/td&gt;
&lt;td&gt;0.59&lt;/td&gt;
&lt;td&gt;0.37&lt;/td&gt;
&lt;td&gt;0.55&lt;/td&gt;
&lt;td&gt;0.30&lt;/td&gt;
&lt;td&gt;0.55&lt;/td&gt;
&lt;td&gt;0.01&lt;/td&gt;
&lt;td&gt;0.32&lt;/td&gt;
&lt;td&gt;0.38&lt;/td&gt;
&lt;td&gt;0.59&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.70&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;top-4 + spot&lt;/td&gt;
&lt;td&gt;0.75&lt;/td&gt;
&lt;td&gt;0.36&lt;/td&gt;
&lt;td&gt;0.59&lt;/td&gt;
&lt;td&gt;0.24&lt;/td&gt;
&lt;td&gt;0.70&lt;/td&gt;
&lt;td&gt;0.37&lt;/td&gt;
&lt;td&gt;0.48&lt;/td&gt;
&lt;td&gt;0.56&lt;/td&gt;
&lt;td&gt;0.64&lt;/td&gt;
&lt;td&gt;0.63&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;futures, all 9&lt;/td&gt;
&lt;td&gt;1.29&lt;/td&gt;
&lt;td&gt;1.18&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;0.84&lt;/td&gt;
&lt;td&gt;0.94&lt;/td&gt;
&lt;td&gt;1.08&lt;/td&gt;
&lt;td&gt;0.65&lt;/td&gt;
&lt;td&gt;0.16&lt;/td&gt;
&lt;td&gt;−0.19&lt;/td&gt;
&lt;td&gt;0.21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Rank correlation of each shape with the futures shape: &lt;strong&gt;+0.90&lt;/strong&gt; for the six new futures families, &lt;strong&gt;−0.12&lt;/strong&gt; and &lt;strong&gt;+0.03&lt;/strong&gt; for the two crypto samples. Average of the short windows minus average of the long ones: +0.86 on futures, +0.02 and −0.07 on crypto. On the sixteen perpetuals a vol-scaled long beats all nine windows in a row.&lt;/p&gt;

&lt;p&gt;So the gradient replicates across two samples of one market and does not exist on the other market at all. Which means the 0.91 that squeaked past my threshold was the best draw from a flat surface — and first place out of nine on flat ground is worth very little, particularly when you arrive already knowing which window to hope for.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually believe now
&lt;/h2&gt;

&lt;p&gt;Not "a trend premium exists". The honest sentence is: this rule worked on one market in one regime. On Russian futures from 2019 to 2026 it is strong and survives every cut I know how to make. On crypto — the only venue I can actually trade — what remains is alpha of 0.58 to 0.78 against a vol-scaled long at roughly zero correlation. That is a real diversifier to a long position and it is not an income: about 7% a year at 10% volatility, which on a ten-thousand-dollar account is a few hundred dollars and a 13% drawdown.&lt;/p&gt;

&lt;p&gt;The most plausible explanation for the gap is unglamorous. Russian futures spent 2022 to 2026 in a long decline, where the short side pays; crypto spent the same years going up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would ask of any daily-trend backtest
&lt;/h2&gt;

&lt;p&gt;Say which period you used and admit what it was. Include funding. Fix the instrument list before the run, or set it by a rule that cannot see the outcome. Cut the top days from the benchmark as well as from the strategy. Map the parameter instead of reporting one value, and check whether the &lt;em&gt;shape&lt;/em&gt; replicates rather than whether the peak does. And when you go to a second market, write the pass mark down before you look — not because it makes you right, but because it makes you unable to negotiate with yourself afterwards.&lt;/p&gt;

&lt;p&gt;That last one is the only reason this write-up says what it says. I had a t of 3.5 and every incentive to believe it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Full journal, code and all the numbers above: &lt;a href="https://github.com/stooq1/strategy-graveyard" rel="noopener noreferrer"&gt;github.com/stooq1/strategy-graveyard&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>datascience</category>
      <category>cryptocurrency</category>
    </item>
    <item>
      <title>I tested "harvest extreme funding on small perps" on all 658 Binance perpetuals: it died in 2023</title>
      <dc:creator>stooq1</dc:creator>
      <pubDate>Sat, 19 Sep 2026 16:38:59 +0000</pubDate>
      <link>https://dev.to/stooq1/i-tested-harvest-extreme-funding-on-small-perps-on-all-658-binance-perpetuals-it-died-in-2023-46mh</link>
      <guid>https://dev.to/stooq1/i-tested-harvest-extreme-funding-on-small-perps-on-all-658-binance-perpetuals-it-died-in-2023-46mh</guid>
      <description>&lt;p&gt;&lt;em&gt;658 Binance perpetuals, 364 hedgeable, 1,125 episodes, one pre-declared rule. Code and data: &lt;a href="https://github.com/stooq1/strategy-graveyard/blob/main/funding_scan.py" rel="noopener noreferrer"&gt;funding_scan.py&lt;/a&gt;, &lt;a href="https://github.com/stooq1/strategy-graveyard/blob/main/results/funding_scan_episodes.csv" rel="noopener noreferrer"&gt;results/funding_scan_episodes.csv&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The promise
&lt;/h2&gt;

&lt;p&gt;There is an idea people like to recommend to traders with small accounts: harvest extreme funding. A perpetual on a hyped coin trades at a premium to spot, leveraged longs pay shorts 0.5–2% every eight hours — hundreds, sometimes thousands of percent annualized. Short the perp, buy the same amount of spot, price risk is hedged, sit and collect. Funds cannot go there: a small perp has no capacity even for a million dollars. For $10,000 it has plenty. It sounds like the one class of edge where small capital is an advantage.&lt;/p&gt;

&lt;p&gt;I tested it on the complete Binance USDT-M funding history, September 2019 to September 2026. Below: the rule, the numbers, and why this edge does not exist in 2025–2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exactly was tested
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Data.&lt;/strong&gt; The current list of Binance USDT perpetuals from &lt;code&gt;exchangeInfo&lt;/code&gt; — 658 symbols. 364 of them have a USDT spot pair on the same exchange: only those can be hedged and only those enter the calculation. Every symbol's full funding history (&lt;code&gt;/fapi/v1/fundingRate&lt;/code&gt;), 2019-09-10 to 2026-09-18. One caveat matters: &lt;code&gt;exchangeInfo&lt;/code&gt; only lists live contracts. Delisted perps — exactly the ones where things went worst — are not in the sample, so reality is worse than the numbers below, not better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The rule&lt;/strong&gt; was written down before the run and never tuned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;entry after three consecutive payments at ≥ 100% annualized (converted using the actual payment interval — 8, 4 or 1 hour);&lt;/li&gt;
&lt;li&gt;position: short perp + long spot of equal size; each subsequent positive payment is collected, each negative one is paid;&lt;/li&gt;
&lt;li&gt;exit after the first payment below 30% annualized;&lt;/li&gt;
&lt;li&gt;costs: 50 bp of notional per episode — two taker round trips (spot 10 bp + perp 5 bp per side) plus a slippage allowance for illiquid names;&lt;/li&gt;
&lt;li&gt;basis ignored. This is conservative: when funding is extreme the perp trades at a premium, the short is opened rich and closed after the premium collapses — a gain, not a loss.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "three consecutive payments" filter is not optimization but protection against false starts: a single payment at 100% annualized on an 8-hour interval is 0.09% of notional, less than the episode's costs. The single-payment variant is shown too; it is worse everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two output numbers.&lt;/strong&gt; An upper bound — "take every episode at $10,000" (nobody has that capital, but it shows the size of the phenomenon). And a simulation: $10,000, at most three concurrent positions of $3,333, episodes taken in time order, skipped when all slots are busy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;1,125 episodes in total, about 160 per year. Median duration 2.7 days. After costs 58% are profitable, median episode +0.20% of notional, mean +1.02%. The top-5 episodes are only 6% of the total — this is not a story about five lucky trades. By year:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;year&lt;/th&gt;
&lt;th&gt;episodes&lt;/th&gt;
&lt;th&gt;profitable&lt;/th&gt;
&lt;th&gt;median net, % notional&lt;/th&gt;
&lt;th&gt;sum net, % notional&lt;/th&gt;
&lt;th&gt;take all at 10k, USD&lt;/th&gt;
&lt;th&gt;simulation 10k / 3 slots, USD&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;170&lt;/td&gt;
&lt;td&gt;52%&lt;/td&gt;
&lt;td&gt;+0.1&lt;/td&gt;
&lt;td&gt;+66&lt;/td&gt;
&lt;td&gt;+6,623&lt;/td&gt;
&lt;td&gt;+597&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;td&gt;615&lt;/td&gt;
&lt;td&gt;63%&lt;/td&gt;
&lt;td&gt;+0.6&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+1,001&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;+100,103&lt;/td&gt;
&lt;td&gt;+2,750&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2023&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td&gt;22%&lt;/td&gt;
&lt;td&gt;−0.2&lt;/td&gt;
&lt;td&gt;−5&lt;/td&gt;
&lt;td&gt;−513&lt;/td&gt;
&lt;td&gt;+26&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;233&lt;/td&gt;
&lt;td&gt;68%&lt;/td&gt;
&lt;td&gt;+0.3&lt;/td&gt;
&lt;td&gt;+105&lt;/td&gt;
&lt;td&gt;+10,493&lt;/td&gt;
&lt;td&gt;+284&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2025&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;21%&lt;/td&gt;
&lt;td&gt;−0.3&lt;/td&gt;
&lt;td&gt;−8&lt;/td&gt;
&lt;td&gt;−773&lt;/td&gt;
&lt;td&gt;−258&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2026 (to Sep 18)&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;−0.4&lt;/td&gt;
&lt;td&gt;−9&lt;/td&gt;
&lt;td&gt;−850&lt;/td&gt;
&lt;td&gt;−283&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In 2021 it worked, and how: IOTA +15.3% of notional in 20 days (61 consecutive payments at 104% annualized and above), TRB +14.9%, ANKR +14.0%, EGLD +12.7%, YFI +12.6%, 1INCH +12.0% — all in January–February and March–April 2021. January 2021 alone, summed across all hedgeable perps, would have paid more than $100,000 per $10,000-per-episode, if you had infinitely many such $10,000s.&lt;/p&gt;

&lt;p&gt;From 2022 through 2026 the total is −$2,136 on the upper bound and −$515 in the simulation. The last twelve months: −$293.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it died
&lt;/h2&gt;

&lt;p&gt;Three things are visible directly in the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Payment interval.&lt;/strong&gt; In the 2020–2021 episodes the median interval between payments is 8 hours. From 2023 it is 4 hours: Binance moved volatile contracts to more frequent funding. The same annualized rate is now paid in half-size portions, and the "three consecutive payments" rule triggers after 12 hours instead of a day — faster, one would think. But:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Episode duration.&lt;/strong&gt; The median episode lasted 3.0 days in 2021 and in 2024, 0.67 days in 2025 and 0.5 days in 2026. The spike collapses within one or two payments after it becomes visible. Somebody harvests it faster than it can be confirmed to exist — and that somebody is not a person with $10,000 but bots for which the predicted next funding rate is a signal measured in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New listings.&lt;/strong&gt; A separate check over 361 listings: the average funding in the first 14 days is &lt;strong&gt;−53% annualized&lt;/strong&gt;. Median +5%; above 100% in five percent of listings. New coins get shorted by the crowd, and the crowd pays the longs, not the other way round. "Harvesting funding on listings" in 2024–2026 means paying it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Maybe the rule is just slow?
&lt;/h2&gt;

&lt;p&gt;I checked an optimistic bound: entry on the &lt;em&gt;predicted&lt;/em&gt; rate, i.e. one payment earlier than my rule allows, with the entry payment credited. This is better than anything actually executable. Sum of net across all episodes of the year, % of notional:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;entry threshold&lt;/th&gt;
&lt;th&gt;2021&lt;/th&gt;
&lt;th&gt;2024&lt;/th&gt;
&lt;th&gt;2025&lt;/th&gt;
&lt;th&gt;2026&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;100% annualized, 3 payments&lt;/td&gt;
&lt;td&gt;+1,108&lt;/td&gt;
&lt;td&gt;+123&lt;/td&gt;
&lt;td&gt;−4.0&lt;/td&gt;
&lt;td&gt;−6.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;200% annualized, 3 payments&lt;/td&gt;
&lt;td&gt;+663&lt;/td&gt;
&lt;td&gt;+11&lt;/td&gt;
&lt;td&gt;+4.6&lt;/td&gt;
&lt;td&gt;−1.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;300% annualized, 2 payments&lt;/td&gt;
&lt;td&gt;+351&lt;/td&gt;
&lt;td&gt;+3.5&lt;/td&gt;
&lt;td&gt;+5.3&lt;/td&gt;
&lt;td&gt;−2.2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So even taking &lt;em&gt;every&lt;/em&gt; episode in the market in 2025, ahead of the rule and with unlimited capital, you would have collected 4–5% of notional over the year — $500 on $10,000 for infinite attention. In 2026, a loss at any threshold.&lt;/p&gt;

&lt;p&gt;As a control, the 16 majors alone (BTC, ETH, XRP, ADA, LTC…): episodes at ≥ 100% annualized exist only in 2020–2021 and in a short burst in 2024; 2022–2023 and 2025–2026 have none. The $10,000 simulation on majors: +$364 per year on average, all of it from 2021.&lt;/p&gt;

&lt;h2&gt;
  
  
  What follows
&lt;/h2&gt;

&lt;p&gt;For a small-capital trader in 2026, the "capacity edge on small perps" story is a story. The phenomenon was real, large and broad in 2021 (not five coins but hundreds of episodes, 63% of them profitable), came back for a few months in 2024, and has been negative under every reading of the data since. The cause is structural — more frequent funding and automation — and structural causes do not revert on their own.&lt;/p&gt;

&lt;p&gt;The general lesson is the same as in the rest of this project: before believing in an edge, measure it on the full sample, with a rule written down in advance, with costs, and with a simulation of the capital you actually have. Here that took an hour of scripting and twenty minutes of downloading.&lt;/p&gt;

&lt;p&gt;Reproduce:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python funding_scan.py &lt;span class="nt"&gt;--fetch&lt;/span&gt; &lt;span class="nt"&gt;--scan&lt;/span&gt; &lt;span class="nt"&gt;--confirm&lt;/span&gt; 3
python funding_scan.py &lt;span class="nt"&gt;--scan&lt;/span&gt; &lt;span class="nt"&gt;--enter&lt;/span&gt; 200 &lt;span class="nt"&gt;--confirm&lt;/span&gt; 3     &lt;span class="c"&gt;# threshold sensitivity&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All episodes with dates, durations and results: &lt;a href="https://github.com/stooq1/strategy-graveyard/blob/main/results/funding_scan_episodes.csv" rel="noopener noreferrer"&gt;results/funding_scan_episodes.csv&lt;/a&gt;; the yearly summary: &lt;a href="https://github.com/stooq1/strategy-graveyard/blob/main/results/funding_scan_by_year.csv" rel="noopener noreferrer"&gt;results/funding_scan_by_year.csv&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not modelled, and making reality worse: delisted perps (absent from the sample), delisting risk on an open position, inability to close spot in a thin book, basis moving against the position when exiting before the premium collapses, margin on the short leg during vertical rallies. Not modelled, and making it better: the perp premium at entry (it accrues to the short when it collapses). The second is smaller than the first.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is one write-up from a series. Over four months I ran the same treatment on order-book walls, aggressor flow, liquidation cascades, cross-market lead-lag ("conductors"), daily trend following and funding carry. Almost all of it is negative, and the point of the repo is that the negatives can be trusted: rules written before the runs, costs per side, every green cell decomposed by top-5 days and by side, and an own-momentum control for every "leader" effect. The infrastructure is there too — a Binance websocket to ClickHouse collector running unattended since June, a tokenized-index feed, MOEX ISS and Dukascopy fetchers, and a backtest engine without lookahead. Full table of closed hypotheses: &lt;a href="https://github.com/stooq1/strategy-graveyard" rel="noopener noreferrer"&gt;https://github.com/stooq1/strategy-graveyard&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>datascience</category>
      <category>cryptocurrency</category>
    </item>
  </channel>
</rss>
