{
	"version": "https://jsonfeed.org/version/1",
	"title": "Piero Ocampo",
	"icon": "https://avatars.micro.blog/avatars/2026/02/1865085.jpg",
	"home_page_url": "https://pieroocampo.com/",
	"feed_url": "https://pieroocampo.com/feed.json",
	"items": [
			{
				"id": "http://pieroocampo.micro.blog/2026/04/24/vibe-coding-my-trades.html",
				"title": "Vibe Coding my trades",
				"content_html": "<p>For a few years, I have been following <a href=\"https://themoneyprinter.substack.com/\">Garret Baldwin&rsquo;s Substack</a> and trading on momentum, but I have always struggled to keep emotions out of my trading. I would exit a position early after a decline, only to see it climb the next day again, or I would stay in a losing trade for too long. So I decided to outsource decision-making to a cold, dead, lifeless Python script.</p>\n<p>Now, I had never used the Schwab (the platform I use) API and SDK for anything, and with a demanding job and 3 kids, I wasn&rsquo;t going to write this thing, but ChatGPT would. Back then, one of the O3 versions was pretty decent at coding, and over a MEX-EWR flight, I had it do the first draft:</p>\n<ul>\n<li>Authenticate to Schwab (the model guided me through the whole account setup process)</li>\n<li>Get a new session for my account (it figured out that the API uses a hash of the account, which would have probably taken me hours reading StackOverflow (remember StackOverflow?) and Reddit posts.</li>\n<li>Get the quotes for a list of symbols</li>\n<li>Define the stop (in this version, it was the higher of a 10 exponential moving average and a chandelier stop)</li>\n<li>Create or update the stop market order</li>\n</ul>\n<p>It was pretty cool! It was mesmerizing to have that ready in the span of a 4.5-hour flight! It even used dotenv for the configuration and to keep secrets in a safe spot, and structured the whole repo for me. Of course, these things have gotten so much better in the last year that it&rsquo;s no longer impressive, but back then, that was my aha moment with vibe coding.</p>\n<p>In time, I have been adding some stuff. When Cursor introduced agent mode, I (well, Claude Sonnet) did a whole refactoring. I added three strategies: loss-cutting to limit downside, a break-even conservative stop to keep a tight stop if the ticker doesn&rsquo;t take off, and a chandelier stop to trail winners and not sell too early.</p>\n<p>At this time, my experience has been much better. I know buy (if momentum is green) and run the script daily after the close to update my stops. I also added an export feature to upload the trades to my <a href=\"https://login.databricks.com/signup?provider=DB_FREE_TIER\">Databricks Free Edition</a> account and built a tracking dashboard. Today (on another MEX-EWR flight), I added a giveback percentage feature to limit the profit I give away if a runner that has been running for a while falls too fast, too suddenly.</p>\n<p>The results have been pretty good as the script has improved! Per my Schwab dashboard, my &ldquo;play portfolio&rdquo; (I keep the serious stuff in boring AF index funds) has been beating their &ldquo;Total Return Aggressive&rdquo; benchmark by a solid 40 points, and the S&amp;P 500 by 24. Of course, sample size is one year, results may vary, past results don&rsquo;t guarantee crap, and using it is terrible advice (of the non-financial kind).</p>\n<p>But here is the <a href=\"https://github.com/pieroocampo/schwab-trading-automation\">repo</a>, anyway.</p>\n",
				
				"date_published": "2026-04-24T12:04:54-04:00",
				"url": "https://pieroocampo.com/2026/04/24/vibe-coding-my-trades.html"
			},
			{
				"id": "http://pieroocampo.micro.blog/2026/01/15/hello-world-firsrt-microblog-post.html",
				
				"content_html": "<h1 id=\"hello-world\">Hello, World</h1>\n<p>Firsrt micro.blog post!</p>\n",
				
				"date_published": "2026-01-15T11:11:45-04:00",
				"url": "https://pieroocampo.com/2026/01/15/hello-world-firsrt-microblog-post.html"
			}
	]
}
