How To Develop Strategy For ZenBot

A complete guide to Zen bot codes and instruction to start automatic trading on crypto exchange platforms.

How To Develop Strategy For ZenBot

We recommend reading How To Install Zen Trading Bot to understand how to install Zen trading bot for their project.


What is Strategy?

A trading strategy is a predetermined plan intended to produce a positive return by going long or short on markets. The key reasons that a well-researched trading approach helps are its verifiability, quantifiability, accuracy and objectivity.
It is a system of buying and selling in markets that is based on predefined principles that are used to make trading decisions.

Points to Remember

  • Zenbot is NOT a reliable fire engine for money. Use it at your own risk. Use it at your own risk.
  • It is an experiment now with cryptocurrencies, and so is Zenbot. In other words, at all times, both can fail.
  • To run a bot and generally trading, thorough review of risks and parameters must be carried out. You can lose a lot by mistaking the atmosphere.
  • Do not leave the bot for a long time unattended. Zenbot doesn't know when, so be able to avoid it when there's too much loss.
  • Often, the default trade parameters fail to equate to a buy-in strategy so that you run those simulations and look for the best exchange / pair parameters before "all-in."


When the trade command is running, Zenbot can respond to the following keypress commands:

  • Press b will activate sales, s for sale, and B and S for business (taker) orders.

  • Press c or C will cancel all active orders.

  • Press -m or M will turn to manual mode (--manual).

These commands can be used to circumvent the function of the bot. Or, this helps you to make your own trade choices, when running with the --manual flag.

Conf/argument override files

To run trade or sim commands with a pre-defined set of options, use:

zenbot trade --conf <path>

Where path points to a JS file which exports an object hash that overrides any conf or argument variables.

For example, this file will run gdax.ETH-USD with options specific for that market:

var c = module.exports = {}

// ETH settings (note: this is just an example, not necessarily recommended)
c.selector = 'gdax.ETH-USD'
c.period = '10m'
c.trend_ema = 20
c.neutral_rate = 0.1
c.oversold_rsi_periods = 20
c.max_slippage_pct = 10
c.order_adjust_time = 10000

The Noop Strategy

If we want to use the bot without trading for us, but just to use it for balance summary and manual trading,
then we can start the bot with

--strategy noop

Then; the bot will not trade automatically.

    Just do nothing. Can be used to e.g. for training the strategy.
    --period=<value>  period length, same as --period_length (default: 30m)
    --period_length=<value>  period length, same as --period (default: 30m)

The Trend_EMA Strategy

  • The default approach is called trend_ema and remains in./extensions/strategies/trend ema.

  • Defaults to use a 2 m duration, but you may circumvent this by adding e.g. --period=5 m to the sim or trade commands.

  • Consider trend_ema rate > = 0 upward trend and trend_ema rate < 0 downward trend

  • Buys at the beginning of the upward trend, sells at the beginning of the downward trend.

trend_ema (default)
    Buy when (EMA - last(EMA) > 0) and sell when (EMA - last(EMA) < 0). Optional buy on low RSI.
    --period=<value>  period length, same as --period_length (default: 2m)
    --period_length=<value>  period length, same as --period (default: 2m)
    --min_periods=<value>  min. number of history periods (default: 52)
    --trend_ema=<value>  number of periods for trend EMA (default: 26)
    --neutral_rate=<value>  avoid trades if abs(trend_ema) under this float (0 to disable, "auto" for a variable filter) (default: auto)
    --oversold_rsi_periods=<value>  number of periods for oversold RSI (default: 14)
    --oversold_rsi=<value>  buy when RSI reaches this value (default: 10)

The MACD Strategy

  • A lagging measure for tracking patterns is the moving average convergence divergence measurement.

  • It can be very useful for 1h exchange times, it tends to be too erroneous, and moveable averages are quite lost in a short time like 15 m.

  • It does not signal many 'buy' or 'sell,' only one per pattern leading to a higher quality trading scheme.

  • Particularly when the bot enters in the middle of a trend, it prevents the transaction unless this trend begins.

    Buy when (MACD - Signal > 0) and sell when (MACD - Signal < 0).
    --period=<value>  period length, same as --period_length (default: 1h)
    --period_length=<value>  period length, same as --period (default: 1h)
    --min_periods=<value>  min. number of history periods (default: 52)
    --ema_short_period=<value>  number of periods for the shorter EMA (default: 12)
    --ema_long_period=<value>  number of periods for the longer EMA (default: 26)
    --signal_period=<value>  number of periods for the signal EMA (default: 9)
    --up_trend_threshold=<value>  threshold to trigger a buy signal (default: 0)
    --down_trend_threshold=<value>  threshold to trigger a sold signal (default: 0)
    --overbought_rsi_periods=<value>  number of periods for overbought RSI (default: 25)
    --overbought_rsi=<value>  sold when RSI exceeds this value (default: 70)

The RSI Strategy

  • Try to buy low by monitoring high water readings from RSI and sell high

  • Efficient on the lateral or recovering markets after price declines.

  • The algorithm relies on price recovery. It is dangerous to be used in bear markets

  • If the other methods cost you money, it will do better, so essentially it "turns the signal back" and anticipates a turnaround rather than waiting for the pattern to proceed.

    Attempts to buy low and sell high by tracking RSI high-water readings.
    --period=<value>  period length, same as --period_length (default: 2m)
    --period_length=<value>  period length, same as --period (default: 2m)
    --min_periods=<value>  min. number of history periods (default: 52)
    --rsi_periods=<value>  number of RSI periods
    --oversold_rsi=<value>  buy when RSI reaches or drops below this value (default: 30)
    --overbought_rsi=<value>  sell when RSI reaches or goes above this value (default: 82)
    --rsi_recover=<value>  allow RSI to recover this many points before buying (default: 3)
    --rsi_drop=<value>  allow RSI to fall this many points before selling (default: 0)
    --rsi_divisor=<value>  sell when RSI reaches high-water reading divided by this value (default: 2)

The Speed Strategy

  • Trade is better than normal in percentage increases over the past two 1 m periods.

  • This technique is novel and has very different sim outcomes.

  • It is not Suggested Though.

  • Its drawback is that in low volatility conditions, it performs very poorly and misses signs of progressive patterns.

    Trade when % change from last two 1m periods is higher than average.
    --period=<value>  period length, same as --period_length (default: 1m)
    --period_length=<value>  period length, same as --period (default: 1m)
    --min_periods=<value>  min. number of history periods (default: 3000)
    --baseline_periods=<value>  lookback periods for volatility baseline (default: 3000)
    --trigger_factor=<value>  multiply with volatility baseline EMA to get trigger value (default: 1.6)


Similar read:

This is a fun project with Zenbot and is shared for those who are interested in experimenting in crypto bots. This does not constitue any financial advice, please read disclaimer for details. Stay connected to for more updates on blockchain, technology, projects and subscribe to our
Weekly newsletter.


Disclaimer: The information contained on this web page is for education purpose only. Readers are suggested to conduct their own research, review, analyze and verify the content before relying on them.

To publish press releases, project updates and guest posts with us, please email at

Subscribe to EtherWorld YouTube channel for easy digestable content.

Support us at Gitcoin

You've something to share with the blockchain community, join us on Discord!

Follow us at Twitter, Facebook, LinkedIn, and Instagram.

Share Tweet Send
You've successfully subscribed to
Great! Next, complete checkout for full access to
Welcome back! You've successfully signed in
Success! Your account is fully activated, you now have access to all content.