یہ میرا BTCUSDTPERP 15 منٹ بوٹ ہے بہترین نتائج بائننس فیوچر پر BTCUSDTPERP پر ہیں نتائج مخصوص حجم اشارے پر منحصر ہے جو بائننس فیوچر پر بہترین کام کرتا ہے
15 منٹ بوٹس واقعی تیز ہیں، یہ ایک اچھی ترتیب تلاش کرنے کے لئے مشکل ہے، کم از کم کے ارد گرد 3-4 ماہ ہے جس میں 15 منٹ backtesting کی وجہ سے
یہ بوٹ مخصوص ہے واقعی اعلی٪ منافع بخش تجارت ہے. خالص منافع بھی بہت اچھا ہے. تاہم 15 منٹ بوٹس طویل مدتی میں استعمال کرنے کے لئے انتہائی مشکل ہیں, تو میں نے کے طور پر deflaut ترتیبات میں کر سکتے ہیں.
تو، یہ بوٹ 11 مختلف اشارے استعمال کرتا ہے:
ADX
رینج فلٹر
SAR
آر ایس آئی
ٹی ڈبلیو اے پی
جے ایم اے
ایم اے سی ڈی
حجم ڈیلٹا
حجم وزن
ایم اے اور آخر میں Qucik چارٹس (15min) میں بہتر نتائج کے لئے میں نے شامل کرنے کا فیصلہ کیا:
اسٹاک
ADX - - کسی بھی دھوکہ دہی کے بغیر رجحان کا ٹھوس نظارہ کرتا ہے: صرف سبز سلاخوں پر لمبا ، صرف سرخ سلاخوں پر شارٹس۔ اس سے صحیح رجحان کی وضاحت کرنے میں میری حکمت عملی میں مدد ملتی ہے ، غیر شناخت شدہ رجحانات کے لئے اورنج آپشن بھی موجود ہے۔
رینج فلٹر - یہ اشارے رجحانات کی بہتر نظر کے لئے ہے، رجحانات کی وضاحت، یہ ہر بیل / ریچھ کے جالوں کے لئے اہم ہے جو بہت مختلف رجحانات کی وجہ سے بہت مدد کرتا ہے.
SAR - پیرابولک SAR ایک تکنیکی اشارے ہے جو کسی اثاثے کی قیمت کی سمت کا تعین کرنے کے ساتھ ساتھ اس بات پر بھی توجہ مبذول کرواتا ہے کہ جب قیمت کی سمت بدل رہی ہے۔ SAR سپورٹ کرنے والا بوٹ ، جب رجحانات آہستہ آہستہ بدل رہے ہیں تو نئی تجارتیں نہ کھولنا۔
آر ایس آئی کی قدر حکمت عملی کو صحیح وقت پر تجارت روکنے میں مدد دیتی ہے۔ جب آر ایس آئی اوور بُک ہے تو حکمت عملی نئی لانگ نہیں کھولتی ، اور جب آر ایس آئی اوور سیل ہے تو حکمت عملی نئی شارٹس نہیں کھولتی۔
TWAP - رینج فلٹر کے طور پر ایک ہی کام ہے، صرف رجحانات کی بہتر نظر کے لئے ہے، رجحانات کی وضاحت.
جے ایم اے - جوریک موونگ اوسط اشارے کم سے کم وقت کے وقفے کے اندر قیمت کے منحنی خطوط کو ہموار کرنے کا ایک یقینی طریقہ ہے۔ اشارے کرنسی کے تاجروں کو مضبوط قیمت کی نقل و حرکت کے دوران بہترین قیمت فلٹرز میں سے ایک پیش کرتا ہے۔ اس وقت ، جب بٹ کوائن کی قیمت کی کارروائی بہت مضبوط ہے ، اس اشارے کی ضرورت ہے۔
ایم اے سی ڈی (MACD) ایک رجحان پر مبنی رفتار کا اشارے ہے جو ایک سیکیورٹی کی قیمت کے دو چلتے ہوئے اوسط کے درمیان تعلقات کو ظاہر کرتا ہے۔ ایم اے سی ڈی کا حساب 12 پیریڈ ای ایم اے سے 26 پیریڈ ایکسپونینشل چلتے ہوئے اوسط (ای ایم اے) کو گھٹاتے ہوئے کیا جاتا ہے۔ آج، میک ڈی، جے ایم اے کی طرح ایک منافع بخش بوٹس بنانے کے لئے ضروری ہے.
حجم ڈیلٹا - ایک مجموعی حجم ڈیلٹا نقطہ نظر جو ایس اینڈ سی میگزین کے اکتوبر 2003 کے شمارے میں شائع شدہ وادم گیملفارب کے بل اور بیر بیلنس اشارے پر مبنی ہے۔ اپنی ضروریات کے مطابق اوسط کی لمبائی کو ایڈجسٹ کریں (علامت ، ٹائم فریم ، وغیرہ)
حجم وزن - حکمت عملی کے لئے سب سے اہم اشارے ہے، فلیٹ چارٹ پر کھلی تجارت سے بچنے کے لئے، نئی تجارت مضبوط حجم بار کے بعد کھلی ہیں.
MA 5-10-30 - پچھلے لوگوں کی طرح یہ رجحانات کو بہتر دیکھنے کے لئے ہے، اور صحیح طریقے سے رجحانات کی وضاحت، بھی Speed_MA مستقبل کی قیمت کی کارروائی کی پیشن گوئی کے لئے استعمال کر رہے ہیں.
اسٹوکاسٹک اسٹاک رجحان کی تبدیلیوں کی پیش گوئی کرنے کے لئے مفید ہے۔ یہ قیمتوں کی رفتار پر بھی توجہ مرکوز کرتا ہے اور اس سے زیادہ خریدنے اور زیادہ فروخت کی سطح کی نشاندہی کرنے کے لئے استعمال کیا جاسکتا ہے
لطف اٹھائیں ;)
بیک ٹسٹ
/*backtest start: 2022-05-20 00:00:00 end: 2022-06-18 23:59:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © wielkieef //@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