0% found this document useful (0 votes)
10 views9 pages

Биток Бот

This document is a Pine Script code for a trading strategy on the BTCUSDTPERP market, designed for a 15-minute timeframe. It includes various technical indicators such as ADX, RSI, MACD, and others to determine long and short entry signals based on market conditions. The strategy also incorporates backtesting features and risk management parameters like stop loss and take profit percentages.

Uploaded by

ziddibaloch8800
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views9 pages

Биток Бот

This document is a Pine Script code for a trading strategy on the BTCUSDTPERP market, designed for a 15-minute timeframe. It includes various technical indicators such as ADX, RSI, MACD, and others to determine long and short entry signals based on market conditions. The strategy also incorporates backtesting features and risk management parameters like stop loss and take profit percentages.

Uploaded by

ziddibaloch8800
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 9

//@version=4

strategy("15MIN BTCUSDTPERP BOT", overlay=true, pyramiding=1,initial_capital =


10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 100,
calc_on_order_fills=false,
slippage=0,commission_type=strategy.commission.percent,commission_value=0)

//SOURCE
===================================================================================
===================================================================================
===================================================================================
=========

src = input(ohlc4)

// INPUTS
===================================================================================
===================================================================================
===================================================================================
=========

//ADX
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------------------------------------------------------------

Act_ADX = input(true, title = "AVERAGE DIRECTIONAL INDEX", type = input.bool)


ADX_options = input("MASANAKAMURA", title = "ADX OPTION", options = ["CLASSIC",
"MASANAKAMURA"])
ADX_len = input(11, title = "ADX LENGTH", type = input.integer, minval = 1)
th = input(12, title = "ADX THRESHOLD", type = input.float, minval = 0, step = 0.5)

//Range
Filter-----------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-------------

length0 = input(13, title="Range Filter lenght"),mult = input(1, title="Range


Filter mult")

//
SAR--------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-------------

start = input(title="SAR Start", type=input.float, step=0.001, defval=0)


increment = input(title="SAR Increment", type=input.float, step=0.001,
defval=0.006)
maximum = input(title="SAR Maximum", type=input.float, step=0.01, defval=1)
width = input(title="SAR Point Width", type=input.integer, minval=1, defval=1)

//
RSI--------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---

len_3 = input(70, minval=1, title="RSI lenght")


src_3 = input(close, "RSI Source")

//TWAP Trend
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----

smoothing = input(title="TWAP Smoothing", defval= 10)


resolution = input("0", "TWAP Timeframe")

//
JMA--------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
------------

inp = input(title="JMA Source", type=input.source, defval=close)


reso = input(title="JMA Resolution", type=input.resolution, defval="")
rep = input(title="JMA Allow Repainting?", type=input.bool, defval=false)
src0 = security(syminfo.tickerid, reso, inp[rep ? 0 : barstate.isrealtime ? 1 : 0])
[rep ? 0 : barstate.isrealtime ? 0 : 1]
lengths = input(title="JMA Length", type=input.integer, defval=4, minval=1)

//
MACD-------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-------------

fast_length = input(title="MACD Fast Length", type=input.integer, defval=25)


slow_length = input(title="MACD Slow Length", type=input.integer, defval=50)
signal_length = input(title="MACD Signal Smoothing", type=input.integer, minval =
1, maxval = 50, defval = 9)

//Volume Delta
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
--

periodMa = input(title="Delta Length", minval=1, defval=45)

//Volume
weight-----------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------

maLength = input(title="Volume Weight Length", type=input.integer, defval=100,


minval=1)
maType = input(title="Volume Weight Type", type=input.string, defval="SMA",
options=["EMA", "SMA", "HMA", "WMA", "DEMA"])
rvolTrigger = input(title="Volume To Trigger Signal", type=input.float, defval=1.5,
step=0.1 , minval=0.1)

//
MA---------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------

length = input(51, minval=1, title="MA Length")


matype = input(5, minval=1, maxval=5, title="AvgType")

//
Momentum---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
----------------------------------------------

tmolength = input(45, title="Momentum Length")


calcLength = input(12, title="Momentum Calc length")
smoothLength = input(9, title="Momentum Smooth length")

//INDICATORS
===================================================================================
===================================================================================
===================================================================================
=====

//
ADX--------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
----------------

calcADX(_len) =>
up = change(high)
down = -change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
truerange = rma(tr, _len)
_plus = fixnan(100 * rma(plusDM, _len) / truerange)
_minus = fixnan(100 * rma(minusDM, _len) / truerange)
sum = _plus + _minus
_adx = 100 * rma(abs(_plus - _minus) / (sum == 0 ? 1 : sum), _len)
[_plus,_minus,_adx]

calcADX_Masanakamura(_len) =>
SmoothedTrueRange = 0.0
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementMinus = 0.0
TrueRange = max(max(high - low, abs(high -
nz(close[1]))), abs(low - nz(close[1])))
DirectionalMovementPlus = high - nz(high[1]) > nz(low[1]) - low ?
max(high - nz(high[1]), 0) : 0
DirectionalMovementMinus = nz(low[1]) - low > high - nz(high[1]) ?
max(nz(low[1]) - low, 0) : 0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) -
(nz(SmoothedTrueRange[1]) /_len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1])
- (nz(SmoothedDirectionalMovementPlus[1]) / _len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1])
- (nz(SmoothedDirectionalMovementMinus[1]) / _len) + DirectionalMovementMinus
DIP = SmoothedDirectionalMovementPlus /
SmoothedTrueRange * 100
DIM = SmoothedDirectionalMovementMinus /
SmoothedTrueRange * 100
DX = abs(DIP-DIM) / (DIP+DIM)*100
adx = sma(DX, _len)
[DIP,DIM,adx]

[DIPlusC,DIMinusC,ADXC] = calcADX(ADX_len)
[DIPlusM,DIMinusM,ADXM] = calcADX_Masanakamura(ADX_len)
DIPlus = ADX_options == "CLASSIC" ? DIPlusC : DIPlusM
DIMinus = ADX_options == "CLASSIC" ? DIMinusC : DIMinusM
ADX = ADX_options == "CLASSIC" ? ADXC : ADXM

ADX_color = DIPlus > DIMinus and ADX > th ? color.green : DIPlus < DIMinus and ADX
> th ? color.red : color.orange
barcolor(color = Act_ADX ? ADX_color : na, title = "ADX")

//Range
Filter-----------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
------------------

out = 0., cma = 0., cts = 0.


Var = variance(src,length0)*mult
sma = sma(src,length0)

secma = pow(nz(sma - cma[1]),2)


sects = pow(nz(src - cts[1]),2)
ka = Var < secma ? 1 - Var/secma : 0
kb = Var < sects ? 1 - Var/sects : 0

cma := ka*sma+(1-ka)*nz(cma[1],src)
cts := kb*src+(1-kb)*nz(cts[1],src)

css = cts > cma ? color.green : color.red


a = plot(cts,"CTS",color.red,2,transp=0)
b = plot(cma,"CMA",color.green,2,transp=0)
fill(a,b,color=css,transp=80)

rangegood = cts > cma


rangebad = cts < cma

//
SAR--------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-------------

psar = sar(start, increment, maximum)


dir = psar < close ? 1 : -1

psarColor = dir == 1 ? color.green : color.red


psarPlot = plot(psar, title="PSAR", style=plot.style_circles, linewidth=width,
color=psarColor, transp=0)

var color longColor = color.green


var color shortColor = color.red

sargood = dir ==1


sarbad = dir ==-1
//
RSI--------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---

up_3 = rma(max(change(src_3), 0), len_3)


down_3 = rma(-min(change(src_3), 0), len_3)
rsi_3 = down_3 == 0 ? 100 : up_3 == 0 ? 0 : 100 - (100 / (1 + up_3 / down_3))

rsiob = (rsi_3 < 70)


rsios = (rsi_3 > 30)

//TWAP Trend
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----

res = resolution != "0" ? resolution : timeframe.period


weight = barssince(change(security(syminfo.tickerid, res, time,
lookahead=barmerge.lookahead_on)))
price = 0.
price:= weight == 0 ? src : src + nz(price[1])
twap = price / (weight + 1)
ma_ = smoothing < 2 ? twap : sma(twap, smoothing)
bullish = iff(smoothing < 2, src >= ma_, src > ma_)
disposition = bullish ? color.lime : color.red
basis = plot(src, "OHLC4", disposition, linewidth=1, transp=100)
work = plot(ma_, "TWAP", disposition, linewidth=2, transp=20)
fill(basis, work, disposition, transp=65)

//
JMA--------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
------------

jsa = (src0 + src0[lengths]) / 2


sig = src0 > jsa ? 1 : src0 < jsa ? -1 : 0

jsaColor = sig > 0 ? color.lime : sig < 0 ? color.red : color.orange


plot(jsa, color=jsaColor, linewidth=2)

jmagood = sig > 0


jmabad = sig < 0

//
MACD-------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-------------

fast_ma = ema(src, fast_length)


slow_ma = ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma(macd, signal_length)

macdgood = macd > signal


macdbad = macd < signal

//Volume Delta
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
--

bullPower = iff(close < open, iff(close[1] < open, max(high - close[1], close -
low), max(high - open, close - low)), iff(close > open, iff(close[1] > open, high
- low, max(open - close[1], high - low)), iff(high - close > close - low,
iff(close[1] < open, max(high - close[1], close - low), high - open), iff(high -
close < close - low, iff(close[1] > open, high - low, max(open - close[1], high -
low)), iff(close[1] > open, max(high - open, close - low), iff(close[1] < open,
max(open - close[1], high - low), high-low))))))
bearPower = iff(close < open, iff(close[1] > open, max(close[1] - open, high -
low), high - low), iff(close > open, iff(close[1] > open, max(close[1] - low, high
- close), max(open - low, high - close)), iff(high - close > close - low,
iff(close[1] > open, max(close[1] - open, high - low), high - low), iff(high -
close < close - low, iff(close[1] > open, max(close[1] - low, high - close), open -
low), iff(close[1] > open, max(close[1] - open, high - low), iff(close[1] < open,
max(open - low, high - close), high - low))))))

bullVolume = (bullPower / (bullPower + bearPower)) * volume


bearVolume = (bearPower / (bullPower + bearPower)) * volume

delta = bullVolume - bearVolume


cvd = cum(delta)
cvdMa = sma(cvd, periodMa)

deltagood = cvd > cvdMa


deltabad = cvd < cvdMa

//Volume
weight-----------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------

getMA0(length) =>
maPrice = ema(volume, length)
if maType == "SMA"
maPrice := sma(volume, length)
if maType == "HMA"
maPrice := hma(volume, length)
if maType == "WMA"
maPrice := wma(volume, length)
if maType == "DEMA"
e1 = ema(volume, length)
e2 = ema(e1, length)
maPrice := 2 * e1 - e2
maPrice

ma = getMA0(maLength)
rvol = volume / ma

volumegood = volume > rvolTrigger * ma

//
MA---------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------

ma5 = sma(close, 5)
ma10 = sma(close, 10)
ma30 = sma(close, 30)

magood = ma5 > ma30


mabad = ma5 < ma30

simplema = sma(src,length)
exponentialma = ema(src,length)
hullma = wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
weightedma = wma(src, length)
volweightedma = vwma(src, length)
avgval = matype==1 ? simplema : matype==2 ? exponentialma : matype==3 ? hullma :
matype==4 ? weightedma : matype==5 ? volweightedma : na
MA_speed = (avgval / avgval[1] -1 ) *100

masgood = MA_speed > 0


masbad = MA_speed < 0

//
Momentum---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------------------------------

data = 0
for i = 1 to tmolength-1
if close > open[i]
data := data + 1
if close < open[i]
data := data - 1

EMA5 = ema(data, calcLength)


Main = ema(EMA5, smoothLength)
Signal = ema(Main, smoothLength)

momentumgood = Main > Signal


momentumbad = Main < Signal

//
STRATEGY===========================================================================
===================================================================================
===================================================================================
==============

Long = (DIPlus > DIMinus and ADX > th) and volumegood and sargood and rsiob and
macdgood and deltagood and magood and masgood and bullish and jmagood and rangegood
and momentumgood
Short = (DIPlus < DIMinus and ADX > th) and volumegood and sarbad and rsios and
macdbad and deltabad and mabad and masbad and jmabad and rangebad and momentumbad

//
BACKTESTING========================================================================
===================================================================================
===============================================================
// ————— Backtest input
Act_BT = input(true, title = "BACKTEST", type = input.bool)
backtest_time = input(180, title ="BACKTEST DAYS", type = input.integer,
minval = 1)*24*60*60*1000
entry_Type = input("% EQUITY", title = "ENTRY TYPE", options =
["CONTRACTS","CASH","% EQUITY"])
et_Factor = (entry_Type == "CONTRACTS") ? 1 : (entry_Type == "%
EQUITY") ? (100/(strategy.equity/close)) : close

//
Signals----------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
--------------

// SL AND
TP---------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------------------------

stopPer = input(3.6, title='Stop Loss % [plotshape]', type=input.float) / 100


takePer = input(0.8, title='Take Profit % [plotshape]', type=input.float) / 100

long_short = 0
long_last = Long and (nz(long_short[1]) == 0 or nz(long_short[1]) == -1)
short_last = Short and (nz(long_short[1]) == 0 or nz(long_short[1]) == 1)
long_short := long_last ? 1 : short_last ? -1 : long_short[1]

longPrice = valuewhen(long_last, close, 0)


shortPrice = valuewhen(short_last, close, 0)

longStop = longPrice * (1 - stopPer)


shortStop = shortPrice * (1 + stopPer)
longTake = longPrice * (1 + takePer)
shortTake = shortPrice * (1 - takePer)

//plot lines
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------------

plotshape(long_short==1 ? longTake : na, style=shape.cross, color=color.gray,


location=location.absolute )
plotshape(long_short==-1 ? shortTake : na, style=shape.cross, color=color.gray,
location=location.absolute )

longBar1 = barssince(long_last)
longBar2 = longBar1 >= 1 ? true : false
shortBar1 = barssince(short_last)
shortBar2 = shortBar1 >= 1 ? true : false

Long_SL = long_short==1 and longBar2 and low < longStop


Short_SL = long_short==-1 and shortBar2 and high > shortStop

Long_TP = long_short==1 and longBar2 and high > longTake


Short_TP = long_short==-1 and shortBar2 and low < shortTake

long_short := (long_short==1 or long_short==0) and longBar2 and (Long_SL or


Long_TP) ? 0 : (long_short==-1 or long_short==0) and shortBar2 and (Short_SL or
Short_TP) ? 0 : long_short

last_long_cond = Long and long_last


last_short_cond = Short and short_last

//
plotshapes-------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------------------------------

plotshape(last_long_cond, title="Long x1", color=color.blue,


style=shape.triangleup, location=location.belowbar, size=size.small,
textcolor=color.white, text="Long" , transp=1)
plotshape(last_short_cond, title="Short x1", color=color.red,
style=shape.triangledown, location=location.abovebar, size=size.tiny,
textcolor=color.white, text="Short" ,transp=1)

plotshape(Long_SL, location=location.belowbar, color=color.black, size=size.tiny ,


text="SL", textcolor=color.fuchsia)
plotshape(Short_SL, location=location.abovebar, color=color.black, size=size.tiny ,
text="SL", textcolor=color.fuchsia)

plotshape(Long_TP,style=shape.triangledown, location=location.abovebar,
color=color.gray, size=size.tiny , text="TP", textcolor=color.red)
plotshape(Short_TP,style=shape.triangleup, location=location.belowbar,
color=color.gray, size=size.tiny , text="TP", textcolor=color.green)

if last_long_cond and Act_BT


strategy.entry("L", strategy.long)

if last_short_cond and Act_BT


strategy.entry("S", strategy.short)

per(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price /
syminfo.mintick) : float(na)
stoploss=input(title=" stop loss [BT]", defval=3.6, minval=0.01)
los = per(stoploss)
q=input(title=" qty percent", defval=100, minval=1)

tp=input(title=" Take profit [BT]", defval=0.8, minval=0.01)

strategy.exit("tp", qty_percent = q, profit = per(tp), loss = los)

//By wielkieef

You might also like