<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Trader Skill Pack]]></title><description><![CDATA[Trader Skill Pack]]></description><link>https://traderskillpack.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Tue, 03 Nov 2026 14:41:41 GMT</lastBuildDate><atom:link href="https://traderskillpack.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[My position sizer refused my gold trade — here's the math it showed me]]></title><description><![CDATA[Most sizing advice is a formula: risk 1%, divide by your stop, done. What the formula hides is the floor — the broker's minimum lot. On a small account…]]></description><link>https://traderskillpack.hashnode.dev/my-position-sizer-refused-my-gold-trade-here-s-the-math-it-showed-me</link><guid isPermaLink="true">https://traderskillpack.hashnode.dev/my-position-sizer-refused-my-gold-trade-here-s-the-math-it-showed-me</guid><category><![CDATA[Python]]></category><category><![CDATA[trading, ]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[Trader Skill Pack]]></dc:creator><pubDate>Thu, 29 Oct 2026 16:30:18 GMT</pubDate><content:encoded><![CDATA[<p>Most sizing advice is a formula: risk 1%, divide by your stop, done. What the formula hides is the floor — the broker's minimum lot. On a small account, the minimum lot can risk MORE than your cap before you've made a single decision.</p>
<p>I ran the free Position Sizer sample on a gold setup: $8.00 stop distance, $5.00 risk cap. Real output:</p>
<p>MIN-LOT WARNING — this setup fits 0.00625 lots, which is below the 0.01 minimum lot. At the 0.01 minimum lot, this trade risks $8.00 — over your $5.00 cap.</p>
<p>The tool's answer was "don't take it at this size" — not a smaller number dressed up as compliance. Same tool, different market: BTC with a $300 stop distance and a $3.00 cap sizes to exactly 0.01 lots, risk exactly $3.00. Inside the cap, it says so; outside it, it refuses. That's the whole design.</p>
<p>The sizer is a free sample — plain Python, stdlib only, offline, places no orders: <a href="https://baldwinson3.gumroad.com/l/position-sizer-free">https://baldwinson3.gumroad.com/l/position-sizer-free</a></p>
<p>It's one of four tools in the Trader Skill Pack (risk gate, position sizer, exit planner, journal grader): <a href="https://baldwinson3.gumroad.com/l/trader-skill-pack">https://baldwinson3.gumroad.com/l/trader-skill-pack</a></p>
<p>Educational tool, not financial advice. Contract sizes and minimum lots vary by broker — check yours.</p>
]]></content:encoded></item><item><title><![CDATA[A $900 quote is where small shops quietly lose money — so I scripted the quote math]]></title><description><![CDATA[Ask a small contractor what a job costs and you'll get a number. Ask what the customer actually owes — subtotal, tax, deposit, balance on completion — and…]]></description><link>https://traderskillpack.hashnode.dev/a-900-quote-is-where-small-shops-quietly-lose-money-so-i-scripted-the-quote-math</link><guid isPermaLink="true">https://traderskillpack.hashnode.dev/a-900-quote-is-where-small-shops-quietly-lose-money-so-i-scripted-the-quote-math</guid><category><![CDATA[smallbusiness]]></category><category><![CDATA[Python]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[business]]></category><dc:creator><![CDATA[Trader Skill Pack]]></dc:creator><pubDate>Thu, 29 Oct 2026 14:21:59 GMT</pubDate><content:encoded><![CDATA[<p>Ask a small contractor what a job costs and you'll get a number. Ask what the customer actually owes — subtotal, tax, deposit, balance on completion — and the number gets built live, on a napkin, differently every time. That's where the quiet losses live: a forgotten tax line, a deposit that doesn't cover materials, a total the customer disputes because it was never written the same way twice.</p>
<p>I built a small quote builder (plain Python, stdlib only) that takes line items and prints the whole structure, the same way every time. Real output, one fencing job:</p>
<pre><code>Subtotal : $810.00
GST      : $40.50
Total    : $850.50
Deposit  : $255.15 (30%)
Valid to : 2026-11-09
</code></pre>
<p>Nothing exotic — that's the point. The value isn't the arithmetic; it's that the arithmetic is identical on quote one and quote one hundred, with the deposit and the expiry date printed instead of remembered.</p>
<p>It's one workflow in the Small Business AI Pack — quote builder plus the paperwork-loop tools around it (intake, follow-up, invoice chasing): <a href="https://baldwinson3.gumroad.com/l/small-business-ai-pack">https://baldwinson3.gumroad.com/l/small-business-ai-pack</a></p>
<p><em>Demo figures from the tool's own sample run. Tax treatment varies by jurisdiction — set yours before quoting for real.</em></p>
]]></content:encoded></item><item><title><![CDATA[I graded a 24-trade journal with a Python script. It failed — here's the exact output]]></title><description><![CDATA[Journaling advice usually stops at "write everything down." Storage isn't feedback. I wanted a grade: fixed bars, printed in the open, same verdict every…]]></description><link>https://traderskillpack.hashnode.dev/i-graded-a-24-trade-journal-with-a-python-script-it-failed-here-s-the-exact-output</link><guid isPermaLink="true">https://traderskillpack.hashnode.dev/i-graded-a-24-trade-journal-with-a-python-script-it-failed-here-s-the-exact-output</guid><category><![CDATA[Python]]></category><category><![CDATA[trading, ]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[Trader Skill Pack]]></dc:creator><pubDate>Thu, 29 Oct 2026 14:13:12 GMT</pubDate><content:encoded><![CDATA[<p>Journaling advice usually stops at "write everything down." Storage isn't feedback. I wanted a grade: fixed bars, printed in the open, same verdict every run.</p>
<p>So the grader reads a journal CSV and computes: profit factor, payoff, win rate, average win/loss, expectancy, max drawdown, longest loss run — then flags patterns against a published scorecard. Here is the actual, unedited output on the included sample journal (24 trades):</p>
<pre><code>JOURNAL GRADE — samples/sample_journal.csv
Trades            : 24 (14 wins / 10 losses)
Win rate          : 58.3%
Average win       : $3.36
Average loss      : $-9.01
Payoff            : 0.373
Profit factor     : 0.522
Net               : $-43.10
Expectancy / trade: $-1.80
Max drawdown      : $75.20
Longest loss run  : 4

FLAGS:
  - PF BELOW DESK BAR — profit factor 0.5216 is under 1.20.
  - PAYOFF DISCIPLINE FAIL — average loss $9.01 is bigger than average win $3.36 and the win rate (58.3%) is under 65%.
  - STACKING — 4 positions open at once (max); lot size escalated after a loss 3 time(s).
  - MISSING STOP — 4 of 24 trades have no stop recorded.

DESK VERDICT: BELOW THE DESK BAR — PF under 1.20.
</code></pre>
<p>The interesting line is STACKING. The journal's worst drawdown didn't come from its biggest single loss — it came from four correlated positions, each "small," all wrong at the same price, with size escalating after losses. That's a pattern a spreadsheet of your trades already contains; most people just never compute it.</p>
<p>The tool is plain Python (stdlib only, offline, places no orders). It's the Journal Grader — standalone $9.99: <a href="https://baldwinson3.gumroad.com/l/journal-grader">https://baldwinson3.gumroad.com/l/journal-grader</a> — and it's also in the Trader Skill Pack with a risk gate, position sizer, and exit planner: <a href="https://baldwinson3.gumroad.com/l/trader-skill-pack">https://baldwinson3.gumroad.com/l/trader-skill-pack</a></p>
<p>Run it on your own journal and the verdict might be kinder. The bars don't move either way — that's the point.</p>
<p><em>Educational tool, not financial advice. The sample journal is fabricated, labelled fabricated, and fails on purpose.</em></p>
]]></content:encoded></item><item><title><![CDATA[The paperwork loop is where small shops leak money]]></title><description><![CDATA[A small shop's money problems are rarely the work. They're the loop around the work: Quote goes out late (or from a notebook) → invoice drifts from the…]]></description><link>https://traderskillpack.hashnode.dev/the-paperwork-loop-is-where-small-shops-leak-money</link><guid isPermaLink="true">https://traderskillpack.hashnode.dev/the-paperwork-loop-is-where-small-shops-leak-money</guid><dc:creator><![CDATA[Trader Skill Pack]]></dc:creator><pubDate>Mon, 26 Oct 2026 18:15:05 GMT</pubDate><content:encoded><![CDATA[<p>A small shop's money problems are rarely the work. They're the loop around the work:</p>
<p>Quote goes out late (or from a notebook) → invoice drifts from the quote → nobody follows up → a bad review gets answered from the hip and makes it worse.</p>
<p>Each step is small. Together they decide whether good work turns into money. I built four small tools for that loop — each a Claude skill paired with a deterministic Python calculator/checker, because the arithmetic and the dates are exactly the parts that should never depend on memory or mood.</p>
<h2>Quotes: computed, dated, with an expiry</h2>
<p>A quote built from a job description, with line totals, tax, and deposit-to-book computed — and a valid-until date on it. An open quote with no expiry isn't a quote, it's a standing offer to argue later. The pack includes the three messages that surround a quote: the cover message, the declined-quote reply, and the scope-change confirmation — extra work priced before it's done, not after.</p>
<h2>Invoices: status is arithmetic, not a feeling</h2>
<p>The invoice matches the quote, applies payments, and computes its own status: PAID / PARTIAL / OPEN / OVERDUE, with days overdue counted, and an optional late-fee line. "I think he still owes me" becomes a number with a date on it.</p>
<h2>Review replies: a lint for the expensive mistakes</h2>
<p>Reply templates by star level — plus a checker that blocks the mistakes that cost real money:</p>
<ul>
<li>Arguing with a reviewer in public</li>
<li>Offering anything in exchange for a changed review</li>
<li>Posting contact details in the reply</li>
<li>Shipping a template with the placeholders still in it</li>
</ul>
<p>The templates ask for reviews honestly, and the pack says so.</p>
<h2>Follow-ups: dated plans, not memory</h2>
<p>Chase sequences for quotes, invoices, and review asks: every step dated, a word-for-word template for each, and weekend steps shifted to Monday — shown, not hidden. Follow-up that depends on "when I remember" is follow-up that doesn't happen.</p>
<h2>Tested, with the evidence in the box</h2>
<p>31/31 end-to-end checks pass, including independent recomputation of the quote and invoice totals and calendar-verified scheduler dates. Plain Python, standard library only, works offline. Nothing in the pack sends anything — it prepares; the owner sends. Tax and legal questions stay with the owner, and the pack says that too.</p>
<h2>The pack</h2>
<p><a href="https://baldwinson3.gumroad.com/l/small-business-ai-pack">https://baldwinson3.gumroad.com/l/small-business-ai-pack</a></p>
<p>Launch offer: code FIRSTDOLLAR takes 10% off every paid pack in the store.</p>
<p>If you run a small shop: which step of the loop leaks the most for you — quoting, invoicing, reviews, or the follow-up? That's the answer I actually want.</p>
<p>— Trader Skill Pack team. Admin tools; not tax, legal, or financial advice.</p>
]]></content:encoded></item><item><title><![CDATA[Position sizing is arithmetic, not vibes]]></title><description><![CDATA[Most trade plans I see fail before the entry is even discussed. Not because the idea is bad — because the size was picked by feel, and the stop, if there…]]></description><link>https://traderskillpack.hashnode.dev/position-sizing-is-arithmetic-not-vibes</link><guid isPermaLink="true">https://traderskillpack.hashnode.dev/position-sizing-is-arithmetic-not-vibes</guid><dc:creator><![CDATA[Trader Skill Pack]]></dc:creator><pubDate>Mon, 26 Oct 2026 16:39:57 GMT</pubDate><content:encoded><![CDATA[<p>Most trade plans I see fail before the entry is even discussed. Not because the idea is bad — because the size was picked by feel, and the stop, if there is one, was priced after the fact. Position sizing is the one part of trading that is pure arithmetic. It deserves to be done like arithmetic.</p>
<h2>The only formula</h2>
<p>Position size answers one question: if my stop is hit, exactly how much do I lose?</p>
<p>risk per unit = |entry − stop| × contract value per unit size = risk budget ÷ risk per unit, rounded DOWN</p>
<p>The contract value is where people slip. For BTCUSD on most CFD brokers, 1 lot = 1 BTC, so a $300 stop distance risks $300 per lot. For gold (XAUUSD), 1 lot = 100 oz, so a $1 stop distance risks $100 per lot — a hundred times more sensitive than it looks on the chart. Every broker's spec sheet says this in plain text; almost nobody reads it before sizing.</p>
<p>Two rules do the heavy lifting:</p>
<ol>
<li>Round down, always. Rounding to nearest quietly overspends your budget half the time. A size that risks $5.40 against a $5 budget is not "about $5" — it is a broken rule with extra steps.</li>
<li>The minimum lot can break you before the market does. This is the trap for small accounts, and it is the one nobody posts about.</li>
</ol>
<h2>The minimum-lot trap, with real numbers</h2>
<p>Worked example one — BTC, entry $100,000, stop $99,700 (a $300 stop distance), max loss $3:</p>
<p>→ 0.01 lots, risk exactly $3.00.</p>
<p>Clean. The math fits the minimum lot exactly.</p>
<p>Worked example two — gold, entry $4,000, stop $3,992 (an $8 stop distance), max loss $5. The honest size is 0.00625 lots. The smallest size the broker allows is 0.01 lots — which risks $8, not $5. There is no compliant size for this plan. Your choices are to widen the budget consciously, pick a different stop, or not take the trade. What you cannot honestly do is click 0.01 and call it a $5 risk.</p>
<p>Most sizing tools round politely and stay quiet here. The one I built prints this instead:</p>
<p>MIN-LOT WARNING — NO COMPLIANT SIZE EXISTS FOR THIS PLAN Minimum lot 0.01 risks $8.00 — MORE than your $5.00 cap.</p>
<p>Loud, specific, and before entry — which is the only time it helps.</p>
<h2>Why a tool, and why inside Claude</h2>
<p>I kept re-deriving this by hand and occasionally getting it wrong in exactly the ways above, so I turned the checklist into a small tool: a Claude skill file plus a plain-Python program (standard library only, no installs, works offline). You state the instrument, entry, stop, and the most you're willing to lose; it returns the exact size or the warning. It places no orders, connects to no broker, and uses no API keys — it is arithmetic with a hard edge. The contract table (BTCUSD, XAUUSD, US500, major FX pairs) is labelled "verify against your broker's specs" everywhere, because brokers differ and the tool should say so.</p>
<p>Honest limits: sizing math says nothing about whether a trade idea is good. It will not make anyone profitable. What it removes is one specific, provable mistake — risking more than you said you would, without noticing.</p>
<h2>Try it</h2>
<p>The Position Sizer is free, in full — not a crippled demo: <a href="https://baldwinson3.gumroad.com/l/position-sizer-free">https://baldwinson3.gumroad.com/l/position-sizer-free</a></p>
<p>It's one of four discipline skills in the Trader Skill Pack (a risk gate that blocks any plan with no stop, an exit planner, and a journal grader that flags stacking): <a href="https://baldwinson3.gumroad.com/l/trader-skill-pack">https://baldwinson3.gumroad.com/l/trader-skill-pack</a></p>
<p>Launch code: FIRSTDOLLAR — 10% off all paid listings in the store, through Oct 27 ~12:00 MDT.</p>
<p>I'd genuinely value criticism on the minimum-lot behavior and the contract table — what instruments or edge cases would you want covered?</p>
<p>— The Trader Skill Pack team. We build Claude skills for trading discipline. Educational tool, not financial advice.</p>
]]></content:encoded></item></channel></rss>