My First Personal Project with OpenClaw: A Bitcoin Auto-Trading System#
2026-03-14

For my first personal project with OpenClaw, I decided to build a Bitcoin auto-trading system.
Investing is not a new topic for me. My original intention was clear a long time ago: keep learning little by little, build up experience through trial and error, and eventually reach a point where I would have my own investment strategy and be able to invest in a systematic way without being pushed around by emotion. But when I look back now, after well over a decade, not as much has changed as I expected.
My fund investments and gold investments worked out reasonably well. At least in terms of results, they were successful enough. Stock investing, on the other hand, was close to a failure. I did not lose much, but I did not meaningfully gain either. In particular, I executed stock trades so cautiously that I spent a long time in a state where both gains and losses stayed vague. The more disappointing part is that I did not build enough intellectual assets along the way. I failed to leave behind reusable knowledge in a form I could draw on later: why a judgment was right or wrong, which strategies worked in which market regimes, and what should inform the next decision.
In the long run, I think personal investing capability matters a great deal. Profit from investing ultimately comes from trades. And in those trades, there may be someone on the other side taking the loss. Even if AI or brokerages help with technical execution and access to information, those advantages will increasingly be available to competitors as well. If everyone has access to similar tools, what will ultimately create separation is likely what I look at, how I interpret it, and what principles I act on. That is why I place so much weight on personal investing ability.
That is what led me to start a personal project related to investing. And at this moment, Bitcoin felt like the most approachable place to begin building an automated system. The market is open 24/7, data is relatively easy to access, automation experiments have a lower barrier to entry, and it felt like a good environment for running small strategy experiments repeatedly. The result is this initial btc-trader snapshot.
After finishing this first version, I came away with a much clearer sense of how I want to develop it next. I also felt something even more important: the way I approach work itself needs to change from how I used to do it. In the past, I would spend a long time defining the goal first, then make a plan, then shape the design, and only after that start building. Now, even when the goal is still abstract, I can try something quickly first, and then use the outputs and suggestions generated by AI to refine the goal and the plan. This is not just about speed. What feels much more significant is that it lets me think about direction more efficiently and on a more informed basis.
Note: This is not investment advice. It is a personal study note and a project retrospective.
What I built in version 1#
The current version is a Phase 1 paper-trading system for Upbit KRW-BTC. Here, paper trading means a simulation-style trading approach that records hypothetical fills and profit/loss instead of placing orders with real money. In other words, it is not yet at the stage of sending real trades. What I implemented first is the minimum skeleton of an automated trading system: market data collection, indicator calculation, signal generation, risk checks, and trade logging.
The flow is fairly simple.
- Fetch market data.
- Calculate technical indicators such as RSI, MA, MACD, and Bollinger Bands.
- Generate buy / sell / hold signals based on strategy rules.
- Check whether each action stays within risk limits.
- Record fills through simulation-style paper trading instead of real execution.
- Save logs and a daily report.
Phase 1 strategy: RSI + MACD#
The first version is intentionally not very complex. In fact, I wanted to avoid starting with something overly complicated. If I piled on too many indicators and too many exception rules from the beginning, it would become much harder later to separate what actually mattered from what did not. So I started with a simple combination: RSI + MACD + MA20.
The buy conditions are as follows.
- If
RSI(14) <= 45, I treat it as an oversold zone, and that alone can trigger a buy signal. - If the
MACDhistogram turns from negative to positive, I treat it as a supporting signal for momentum reversal. - If the current price is above
MA20, that adds confidence by suggesting a short-term uptrend.
The key point is that condition 1 is the basic trigger, while conditions 2 and 3 serve to increase confidence.
The sell conditions are as follows.
- If
RSI(14) >= 72, I treat it as an overbought zone, and that alone can trigger a sell signal. - I also watch for the
MACDhistogram to turn from positive to negative. - I look at cases where the current price is below
MA20whileRSI > 50.
So the sell logic can be understood in two paths: RSI overbought on its own, or MACD reversal plus simultaneous trend weakening.
I also kept the stop-loss / take-profit rules simple.
- Stop loss:
-3%from entry - Take profit:
+5%from entry
I am not using these numbers because I believe they are universally correct. At this stage, it felt more important to build a structure where I can observe how the strategy behaves, rather than obsess over finding the perfect parameters right away.
Risk management mattered as much as the strategy itself#
When people think about automated trading, they often jump straight to the strategy. But in practice, the risk constraints matter just as much. No matter how convincing a signal may look, the outcome can break down quickly if frequency and position sizing are not controlled.
The current version uses the following basic limits.
| Setting | Default | Meaning |
|---|---|---|
MAX_TRADES_PER_HOUR | 3 | Maximum number of trades per hour |
MAX_POSITION_RATIO | 20% | Maximum allocation per entry |
MAX_TOTAL_POSITION | 80% | Maximum total portfolio exposure |
STOP_LOSS_RATIO | -3% | Stop-loss threshold |
TAKE_PROFIT_RATIO | +5% | Take-profit threshold |
To me, these limits are more than just safety guards. Any strategy, in the end, has to be a system that controls itself before it tries to beat the market. The entry condition matters, but so do the answers to these questions: how often to enter / how much to allocate each time / where to cut losses and lock in gains.
How I understand the indicators used here#
This project is not about inventing technical indicators from scratch. It is closer to taking widely used indicators and re-understanding them in my own language, then connecting them into a working system.
MA (Moving Average)#
A moving average is the average closing price over a given period, and it is one of the most basic tools for judging trend.
MA20: the average of the last 20 candles, used for short-term trendMA60: the average of the last 60 candles, used for mid-term to longer-term flow- If price is above
MA20, I interpret that as a short-term uptrend; if it is below, as a short-term downtrend
In this system, I use MA20 / MA60 on the 1-hour timeframe.
EMA (Exponential Moving Average)#
EMA is a moving average that puts more weight on recent data. Because it responds faster than a simple MA, it is useful for shorter-term changes and momentum analysis.
- The basic idea is that today’s EMA reflects a weighted portion of the gap between yesterday’s EMA and today’s price
- The shorter the period, the more sensitive it is to recent price action
- The longer the period, the smoother it becomes
In this system, EMA is used inside RSI calculation and in MACD calculation.
MACD#
MACD is an indicator that tries to capture both trend and momentum through the difference between short-term EMA and long-term EMA.
MACD line:EMA(12) - EMA(26)Signal line: 9-period EMA of the MACD lineHistogram:MACD line - Signal line
I found the sign change of the histogram especially useful. A shift from negative to positive can be read as momentum turning upward, while a shift from positive to negative can be read as momentum turning downward.
Bollinger Bands#
Bollinger Bands place upper and lower bands around MA20 using standard deviation, making them useful for reading both relative price position and volatility.
- Upper band:
MA20 + standard deviation x 2 - Lower band:
MA20 - standard deviation x 2 - If the band width narrows, volatility may be contracting; if it widens, volatility may be expanding
I am not using Bollinger Bands directly as a buy / sell condition in the current strategy, but they could later become a volatility filter or a supporting signal.
RSI#
RSI compares recent gains and losses to estimate whether the market is becoming overheated or overly weak. Its value ranges from 0 ~ 100.
70or above is often interpreted as overbought30or below is often interpreted as oversold
In this system, I use RSI(14), with 45 or below for buy and 72 or above for sell. These are slightly relaxed compared to the classic 30 / 70 thresholds. For the first version, that felt like a reasonable compromise between avoiding overly sensitive signals and avoiding a system that almost never trades.
RSIMACDStrategy#
The current base strategy class is RSIMACDStrategy. It combines RSI, the MACD histogram, and MA20 to decide between buy / sell / hold.
- Buy:
RSI <= 45is the main trigger, while MACD reversal andprice > MA20increase confidence - Sell:
RSI >= 72or the combination ofMACD reversal + price < MA20 + RSI > 50 - Confidence: calculated in the
0.33 ~ 1.0range based on how many conditions are met
This is also a starting point for adding more strategies later. The natural next step, in my view, is to expand the set of strategy classes and make them comparable on top of BaseStrategy.
A change in how I work#
For me, this project was not just about saying, “I built a Bitcoin auto-trader.” More importantly, it changed my sense of how to start and how to move forward.
My old pattern was roughly this: define the goal clearly, make a plan, design the structure, and then start building. I do not think that approach is wrong. But when the goal is still abstract, there are many cases where you cannot clearly see the real problems until you build something tangible.
This time, I approached it the other way around. I built the smallest meaningful version first. And once that result existed, I could see much more clearly:
- which parts actually mattered,
- which design choices were excessive and which were missing,
- what needed to be validated next,
- and where automation should end and human interpretation should begin.
I think this matters a great deal in the age of AI. Instead of keeping an abstract goal inside my head for too long, I can now turn it into something working quickly, then use AI-generated implementations and suggestions as a basis for revising the goal and the plan. That is more than a productivity boost. It feels closer to lowering the cost of figuring out the right direction.
Where I want to take this next#
The roadmap currently written in the repository looks like this.
- Phase 1 (current): data collection + technical indicators + paper trading
- Phase 2: live trading integration + Telegram alerts + monitoring dashboard
- Phase 3: external data (Fear & Greed, on-chain) + backtesting
- Phase 4: multi-strategy system + portfolio optimization
At the moment, I think it is more important to build a repeatable learning system than to rush toward a “profitable auto-trader.” Trade logs need to remain, the reasoning behind strategy decisions needs to remain, and results need to be interpretable afterward. That is how intellectual assets accumulate over time. And the lack of that accumulation is exactly what felt most disappointing in my investing history so far.
That is also where this OpenClaw project gets its meaning. The first version is still simple, and it is closer to an initial prototype than to a full investment system. But at least now I can talk more concretely about what kind of system I need to build, and what kind of experiments I need to run, in order to grow my own investing capability.
That alone makes this first project meaningful enough.