Free-Trading-Bots
  • Introduction
  • Go to WunderTrading
  • Public roadmap
  • Free TradingView Strategies
    • RSI-VWAP
    • MTF Stochastic
    • Forex Master
    • TSI CCI HULL
    • Trading Bot for Binance Futures
      • MTF Stochastic – trading bot for Binance Futures
    • Trading Bot for BitMEX
      • MACD strategy with ATR for BitMEX
    • Trading Bot for Bybit
      • MTF Stochastic – trading bot for Bybit
    • Trading Bot for Deribit
      • RSI-VWAP – Trading Bot for Deribit
    • Trading Bot for FTX
      • Scalping Bot - trading bot for FTX
      • Keltner's Channel Bot - Trading Bot for FTX
      • RSI-VWAP 2.0 - Trading Bot for FTX
      • MACD strategy - Free Crypto Trading Bot
Powered by GitBook
On this page
  • Settings
  • Strategy script code

Was this helpful?

  1. Free TradingView Strategies
  2. Trading Bot for BitMEX

MACD strategy with ATR for BitMEX

Free Trading Bot for BitMEX.

PreviousTrading Bot for BitMEXNextTrading Bot for Bybit

Last updated 4 years ago

Was this helpful?

To make our community more profitable we decided to start a series in which we will review open-source TradingView strategies. The aim of the review is to select a strategy (or a number of strategies) from TradingView and run a reality check on it, optimise them and convert into alerts, so you can set it up as a bot on the Wunderbit Trading platform.

What we will provide:

  • Open-strategy source

  • Strategy adjustment for particular exchange, pair and timeframe

  • Backtest

This week we would like to provide our own strategy that you can apply to BitMEX exchange. This is a trend based strategy that uses EMA and SMA intersection for determining the direction of the trend and MACD for the entry signal. At the same time, the strategy uses ATR, which is working as a trailing stop.

The strategy entry will work when the Trend ribbon will turn green and MACD line will crossover the signal line. This strategy also takes into account the pyramiding and allows it to enter the second time if the signal will repeat itself.

There are 3 exit points. The first 10% of the position will be closed when the price will increase by 2%. The second portion of 50% will be closed when the price reaches 5% Take profit target. The remaining 40 % of the position will wait for the exit signal which will occur when the price closes below the ATR line.

The strategy is using a fixed amount in dollars, each time the entry occurs the strategy will enter with 100$ in the order.

The strategy can be applied to other crypto assets. However, they will require input changes.

IMPORTANT

  • This is a trend strategy and works better in the trending market

  • This is Long Only strategy

  • We added the trend identifier using the EMA and SMA interaction

  • We Added Take profit and stop-loss levels

  • We added inputs for the period selection, so you could see how the strategy is performing on a monthly basis.

Settings

Applicable to Bitmex: ETH-USD 30 min

Input

Value

Period

39

Fast Length

7

Slow Length

14

Source

close

Signal Smoothing

3

Simple MA(Oscillator)

False (NA)

Simple MA(Signal Line)

True (tick)

Long Take Profit 1 %

2

Long Take Profit 1 Qty

10

Long Take Profit 2 %

5

Long Take Profit 2 Qty

50

SL Multiplier

3.5

ATR Period

6

Strategy script code

You can copy this code and paste it into your TradingView

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Wunderbit Trading

//@version=4
strategy("MACD Strategy", overlay=true, pyramiding=2, commission_type=strategy.commission.percent, commission_value=0.04, initial_capital=100,  default_qty_type = strategy.cash, default_qty_value = 100, currency = currency.USD)

// FUNCTIONS

Ema(src,p) =>
    ema = 0.
    sf = 2/(p+1)
    ema := nz(ema[1] + sf*(src - ema[1]),src)

Sma(src,p) => a = cum(src), (a - a[max(p,0)])/max(p,0)

Atr(p) =>
    atr = 0.
    Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
    atr := nz(atr[1] + (Tr - atr[1])/p,Tr)

/// TREND
ribbon_period = input(39, "Period", step=1)

leadLine1 = ema(close, ribbon_period)
leadLine2 = sma(close, ribbon_period)

p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)


// MACD
fast_length = input(title="Fast Length", type=input.integer, defval=7)
slow_length = input(title="Slow Length", type=input.integer, defval=14)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 3)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=true)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? Sma(src, fast_length) : Ema(src, fast_length)
slow_ma = sma_source ? Sma(src, slow_length) : Ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? Sma(macd, signal_length) : Ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
// plot(macd, title="MACD", color=col_macd, transp=0)
// plot(signal, title="Signal", color=col_signal, transp=0)


// TAKE PROFIT AND STOP LOSS
long_tp1_inp = input(2, title='Long Take Profit 1 %', step=0.1)/100
long_tp1_qty = input(10, title="Long Take Profit 1 Qty", step=1)

long_tp2_inp = input(5, title='Long Take Profit 2%', step=0.1)/100
long_tp2_qty = input(50, title="Long Take Profit 2 Qty", step=1)

long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp)
long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp)


// Stop Loss
multiplier = input(3.5, "SL Mutiplier", minval=1, step=0.1)
ATR_period=input(6,"ATR period", minval=1, step=1)

// Strategy
entry_long=crossover(macd,signal) and leadLine2 < leadLine1
entry_price_long=valuewhen(entry_long,close,0)
SL_floating_long = entry_price_long - multiplier*Atr(ATR_period)
exit_long= close < SL_floating_long 

///// BACKTEST PERIOD ///////
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

if testPeriod()
    strategy.entry("long", strategy.long, comment="Insert Enter Long Comment", when=entry_long)
    strategy.exit("TP1","long", qty_percent=long_tp1_qty, limit=long_take_level_1)//, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.exit("TP2", qty_percent=long_tp2_qty, limit=long_take_level_2) //, trail_points=entry_price_long * long_trailing / syminfo.mintick, trail_offset=entry_price_long * long_trailing / syminfo.mintick)
    strategy.close("long", when=exit_long, comment="Insert Exit Long comment" )


// LONG POSITION
plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit")
plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit")
plot(strategy.position_size > 0 ? SL_floating_long : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")

MACD strategy with ATR for BitMEX