Trading Research Hub

Trading Research Hub

Share this post

Trading Research Hub
Trading Research Hub
Research #20 - Kristjan Kullamägi, an 8-Figure Swing Trader
Copy link
Facebook
Email
Notes
More

Research #20 - Kristjan Kullamägi, an 8-Figure Swing Trader

The Story and Systems Behind Kristjan's Success as a Swing Trader

pedma's avatar
pedma
Dec 26, 2023
∙ Paid
2

Share this post

Trading Research Hub
Trading Research Hub
Research #20 - Kristjan Kullamägi, an 8-Figure Swing Trader
Copy link
Facebook
Email
Notes
More
Share

👋 Hey there, Pedma here! Welcome to this month’s free edition of Pedma’s Newsletter. Each week, I'll share with you a blend of market research, personal trading experiences, and practical strategies, all aimed at making the world of systematic trading more relatable and accessible.

If you’re not a subscriber, here’s what you missed this month:

  1. My non-traditional journey to become a profitable systematic trader

If you’re not yet a part of our community, subscribe to stay updated with these more of these posts, and to access all our content.


One of the most interesting traders I’ve encountered is Kristjan Kullamägi. According to many reports, Kristjan has managed to grow a 9,000$ account starting in 2013, to over 82,000,000$ by 2021. This is an incredible rate of return and achievement so in this article I will cover the following topis:

  • His initial journey

  • Position sizing and risk

  • The strategy and rules he used

  • Backtest of his strategy applied to crypto

At the end of the article I will provide the code of this strategy for premium members to test it on their own.

Initial Journey as a Trader

Kullamägi started trading in 2011 as a day-trader. According to reports he managed to blow his account 4 times in the first few years. This is the classical story of many aspiring traders and certainly my own. I can’t forget the first account I blew.

However he eventually moved from lower timeframes to focus on higher timeframes and becoming a swing trader. One of the reasons he moved away from lower timeframes was indeed due to the increased opportunity when one holds for longer periods of time.

Moving to higher timeframes is a something that most directional traders in this business, given enough time, will naturally lean towards as their accounts get too large for the timeframe they’re trading or the volatility and noise becomes something that they can’t stomach long-term. If you’re a reader of my content, you know that most of my trading is based on the weekly timeframe.

Position Sizing and Risk

Kristjan says that for this strategy we should never have more than 30% of a position held over night, which allows us to estimate that his positions usually take around 10-20% of account size. A size that I personally keep for my own trading also.

His risk for each position fluctuates between 0.25%-1%. If we make the assumption of an account of 100,000$ we can calculate that:

  • Max position size: 10,000$ - 20,000$

  • Risk on position: 250$ - 1,000$

When Kristjan had a smaller account, in order to grow the portfolio faster, he used a more aggressive maximum risk on position of 0.5%-1.5%.

He admits that at the beginning when we was starting out, he risked more than this but due to the fact that he didn’t have a full grasp of risk management and position sizing.

The Breakout Trade

The initial thesis for this strategy is that if we study thousands of the biggest winning stocks over the past 100 years, they have a tendency to move higher in a slow but consistent increase over time. He also mentions that they can make a 20-50% initial move, pull back, go sideways and then make a new leg move.

The first thing that Kristjan wants to see is a 30%-100% increase in price over the course of a few weeks with the 10,20 and 50 simple moving average on a rising trend.

Next we need a consolidation to be formed for at least 2 weeks with a maximum duration of 8 weeks, and we need to know the highest and lowest points of that consolidation so that we can measure the trade when it breaks out.

  • Highest point: 38,499.90

  • Lowest point: 34,446.30

As price breaks out of its consolidation we can now buy the position and set our stop loss at the low of the breakout bar. Note that the stop can never be higher than the Average True Range (ATR). Since we don’t know the final ATR at the breakout bar (since the bar isn’t closed) we will assume that we use the bar right before the breakout bar as our indication of the ATR.

  • Entry Price: 38,499.9

  • Stop Loss: 37,600

  • ATR: 1197.10

  • Distance from Entry Price to Stop Loss: 38,499.9 - 37,600 = 899.9

  • Distance < ATR: YES

Managing the Trade

Kristjan suggests to sell 1/3 or half of the position 3-5 days after entry and then move the stop to breakeven. The remaining position then it’s trailed with a stop using the 10 or 20 day moving average. If the price closes below the moving average then the trade is closed

Statistical Backtest on Top 20 Cryptocurrencies by Market Capitalization

I’ve chosen to test this strategy on the top 20 coins by market cap since the crypto sector is where I focus most of my time on and the concepts of this type of strategy should translate well into other assets that exhibit momentum and trend. If it doesn’t, then it’s a red flag to me in terms of robustness. Let’s allow the data to give us answers.

Here’s the list of assets used on this test:

  • BTCUSDT, ETHUSDT, SOLUSDT, BNBUSDT, XRPUSDT, ADAUSDT, AVAXUSDT, DOGEUSDT,. DOTUSDT, TRXUSDT, LINKUSDT, MATICUSDT, LTCUSDT, UNIUSDT, BCHUSDT, ICPUSDT, XLMUSDT, NEARUSDT, ATOMUSDT, INJUSDT

For simplicity purposes I didn’t use complex sizing mechanisms, I assumed an equally weighted division of the portfolio amongst all of the assets. For example for this test I’ve used a 100,000$ portfolio, which means for 20 assets we will have allocated 5,000$ per asset. This is not optimal portfolio allocation for a serious strategy but I want to keep it as simple as possible.

Clearly we have positive performance from this strategy driven by a highly momentum based market. Readers with more experience may be wondering why is that massive spike in current performance? That is due to the fact that some of the assets we’ve used have had massive performances lately and that is also one of the reasons they are on the top market cap list.

This is why we always must be careful when we test strategies on a set basket of coins based on market capitalization. This metrics shift across time and are highly dependent on current performance. We need to ensure that our testing is not filled with survivorship bias so that we are not deceived by testing only on coins that have survived. But for the purposes of this article, we will keep it to the highest market cap coins.

These are the simple metrics of the strategy performance:

  • Total Closed Win Trades: 24

  • Total Closed Lost Trades: 65

  • Total Closed Trades Win Rate: 26.97%

  • Total Open Trades: 6

  • Average Win Trade: 30.90

  • Average Loss Trade: -4.36

  • Ratio Avg Win to Loss: 7.09

Overall it is a decent strategy to investigate further and a lot of the concepts can be applied into other systems. It is based on solid principles of strong momentum trading and it should so well in most asset classes that exhibit these traits. I haven’t put too much focus on more portfolio based metrics like drawdowns and portfolio volatility as those will heavily depend on what risk strategy you employ on your own portfolio. Make sure that you test this strategy thoroughly before using it but we do have something to work with right here.

Strategy Code

  1. Dependencies: The script requires several Python libraries:

    • pandas: For data manipulation and analysis.

    • binance: Binance API Python wrapper for interacting with the Binance exchange.

    • datetime and dateutil.relativedelta: For date and time manipulation.

    • matplotlib.pyplot: For plotting and visualizing data.

    • ta: For technical analysis indicators.

  2. Functions:

    • connect_to_binance(API_KEY, SECRET_API_KEY): Connects to the Binance API using the provided API and secret keys.

    • get_spot_data(client, timeframe, days_range, selected_assets): Fetches historical spot data for the specified assets from Binance.

    • strategy_backtest(data, portfolio_value, risk_trade_percentage, min_days_in_consolidation, max_days_in_consolidation, min_perc_increase): Backtests a trading strategy using the fetched data.

  3. User Input Section:

    • API keys for Binance are required (API_KEY and SECRET_API_KEY).

    • Trading parameters like portfolio_value, risk_trade_percentage, and consolidation period settings need to be defined.

    • A list of cryptocurrency pairs (selected_assets) to analyze is specified.

  4. Data Fetching and Backtesting:

    • The script connects to Binance, fetches historical data for selected cryptocurrencies, and then performs a backtest of the trading strategy.

  5. Output:

    • The script outputs visual plots of individual and average portfolio performance.

    • DataFrames for closed trades, open trades, and all portfolio values are returned.

  6. Execution Steps:

    • Define Binance API keys and trading parameters.

    • Connect to Binance and fetch data.

    • Backtest the trading strategy with the fetched data.

  7. Customization:

    • Users can modify the list of cryptocurrencies and adjust trading parameters according to their requirements.

  8. Note:

    • This script interacts with live financial data and potentially executes trades; hence, it should be used cautiously. Ensure the security of API keys and understand the implications of automated trading.

This post is for paid subscribers

Already a paid subscriber? Sign in
© 2025 Trading Research Hub
Privacy ∙ Terms ∙ Collection notice
Start writingGet the app
Substack is the home for great culture

Share

Copy link
Facebook
Email
Notes
More