Posts

Storage Sense deleted my backtest cache because Windows could not tell I was reading it

Image
I run eleven automated crypto trading bots. Two of them — a 25-coin bot and a 50-coin bot — exist because a machine-learning backtest said their entry signal beats a coin-flip by enough to trade live. That backtest takes hours to run, so the results are cached to disk. On September 25th I went looking for the 25-coin cache and it was not there. Not corrupted. Not truncated. Gone, as if it had never been written. I had not deleted it. Nobody else has access to this machine. The folder it lived in, Windows' default %TEMP%, still had fifteen other cache files in it, ranging from a few hundred kilobytes to 279 megabytes, all built by the same scripts, all supposedly just as permanent. These caches exist because the training run behind them is not cheap. Each one is a walk-forward retrain: the model is refit every quarter on data up to that point and scored only on the quarter after, so a single 25-coin pass touches years of history dozens of times over. That is normally hour...

Adding forced liquidation to my backtest inverted the answer it had been giving me for months

Image
I run eleven automated crypto trading bots. One of them, a SOL strategy on the 5-minute chart, had been running at 15x leverage for months because a backtest told me 15x made more money than 10x. That backtest had no forced liquidation in it. The engine tracked position size, entry price, fees, slippage and stop losses, and it never once asked whether the exchange would have closed the position out from under me first. Isolated margin does exactly that, and it does not care what your stop loss says. I added liquidation to the engine and re-ran the same four years. The comparison does not shift. It inverts. What the same data says once margin calls exist Same strategy, same four years, same 155 trades. The only change is the liquidation model. 15x returns less than 10x, draws down twelve times harder, and gets liquidated three times. There is no tradeoff here to think carefully about. 10x wins on every axis at once, which is the shape you get when the losing option was never...

A third of my index numbers changed when I asked Google the same question three times

Image
A month ago I published a post saying I had run two automated blogs for a month , shipped 81 posts, and gotten exactly one of them indexed by Google. Then I stopped. No new posts, no edits, no indexing requests, no link building. Both sites sat completely untouched for 33 days. Today I re-inspected every URL on both sites. I expected the numbers to be identical, and I was going to write a short post about how nothing changes when you do nothing. Two things happened instead. One number moved on its own. And when I checked my measurement against itself, I found that a third of last month's figures were noise I had reported as fact. The one that moved The Blogspot site went from zero indexed to one indexed while I was not touching it. One post out of 37, so I want to be careful about how much weight that carries. It is a single URL. But it happened during the one period when I was provably not doing anything, which makes it the cleanest data point I have. Whatever put that...

I had another AI review my trading bot. It found three ways my books were wrong.

Image
I wrote a trading bot with AI assistance, tested it, and ran it. Then I did something I had not done before: I handed the whole file to a different model, cold, with no context about how it was built, and asked it to look for accounting errors. It came back with three. All of them were in code I had read many times. None of them crashed anything. That is the part worth writing down. The three 1. The bot recorded the size it asked for, not the size it got. market_fill() returned the fill price and nothing else. So open_position() , add_in() , and close_out() all took the requested quantity and wrote that into state as if it were fact. Exchanges do not always give you what you asked for. Contract counts get rounded. A single order can be truncated by the venue max market order size. When either happens, the exchange position and the bot idea of the position drift apart, silently, with no error anywhere, because from the bot perspective the order succeeded. The fix was to widen...

I thought my pipeline retried 6 times. It was making up to 48 billed calls.

Image
My publishing pipeline had a retry limit. MAX_TOPIC_ATTEMPTS = 6 . If a draft failed validation — too short, dead link, too similar to an existing post — it would throw the topic away and try a different one, up to six times, then give up. Six attempts. That was the mental model. Six is a small number, so I never thought about it again. That last part is the actual mistake. I set the constant myself, I picked the value deliberately, and having picked it I stopped treating it as a question. A number you chose feels known in a way a number you inherited does not — which is backwards, because the one you chose is the one nobody else has checked. What made me look was a day where the schedule ran and nothing appeared on the blog. No post, no error I'd been alerted about, just an empty run. I went into the logs expecting a crash and found the opposite: the pipeline had worked perfectly, generated draft after draft, rejected every one of them on validation, exhausted its attempts, and...

I let AI run two blogs for a month. Google indexed 1 post out of 81.

Image
I built two fully automated blog pipelines. Pick a topic, research it, write the body, generate the images, publish — no human in the loop. One was WordPress on its own domain, the other was Blogspot. WordPress ran from July 23 to August 23 and shipped 44 posts. Blogspot started August 8 and stopped on the same day the other one did, so 37 posts in 15 days. Eighty-one posts total. Both pipelines ran on a schedule with no approval step. A run would ground itself against official sources, draft the body, generate three to five images, run a mechanical validation pass (word count, live-link checks, duplicate detection against previous posts, required-field checks), retry on failure, and publish. If validation failed too many times, the run gave up and logged it. That was the entire loop. It worked, in the sense that posts appeared on a schedule and none of them were broken. Today I measured what Google actually did with them. One post is indexed. Out of 81. The one that made it is a ...