متعدد اشارے اسکریننگ اور متحرک اسٹاپ نقصان پر مبنی خودکار تجارتی حکمت عملی


تخلیق کی تاریخ: 2023-09-26 14:38:40 آخر میں ترمیم کریں: 2023-09-26 14:38:40
کاپی: 0 کلکس کی تعداد: 398
1
پر توجہ دیں
1141
پیروکار

جائزہ

اس حکمت عملی میں ٹریڈنگ سگنلز کا مجموعی طور پر فیصلہ کرنے کے لئے متعدد اشارے جیسے کہ فاسٹ لائن ، میڈ لائن ، سست لائن اور ایم اے سی ڈی کا استعمال کیا جاتا ہے ، جبکہ اے ٹی آر پر مبنی متحرک اسٹاپ نقصان کا طریقہ کار استعمال کیا جاتا ہے تاکہ خطرے کی سطح کو کنٹرول کیا جاسکے۔ یہ حکمت عملی درمیانی اور مختصر لائنوں پر خودکار تجارت کے لئے موزوں ہے۔

حکمت عملی کا اصول

اس حکمت عملی میں بنیادی طور پر ای ایم اے اوسط لائن ، ایم اے سی ڈی اشارے اور اے ٹی آر اشارے استعمال کیے جاتے ہیں۔ ای ایم اے اوسط لائن کی تیز ، درمیانی اور آہستہ لائنیں رجحان کا تعین کرنے کا نظام تشکیل دیتی ہیں ، ایم اے سی ڈی اشارے تجارتی سگنل پیدا کرنے میں معاون ہیں ، اے ٹی آر اشارے اسٹاپ نقصان کی لائن قائم کرنے کے لئے استعمال کیا جاتا ہے۔ خاص طور پر ، تیز ، درمیانی اور آہستہ لائنوں کے متعدد خالی صفوں کے امتزاج کے ذریعہ رجحان کی سمت کا تعین کرنے کے لئے ، پھر ایم اے سی ڈی اشارے کے صفر محور کراسنگ کے ساتھ مل کر داخلہ سگنل کے لئے ، انٹر کثیر وقت کی تیز لائن کو درمیانی لائن سے گزرنا پڑتا ہے ، اور ایگزٹ کثیر وقت کی تیز لائن کو نچلی لائن سے گزرنا پڑتا ہے۔ انٹر کثیر وقت کی تیز لائن کو درمیانی لائن سے گزرنا پڑتا ہے ، اور ایگزٹ کثیر وقت کی تیز لائن کو درمیانی لائن سے گزرنا پڑتا ہے۔ اس کے علاوہ ، اسٹاپ نقصان کی لائن اے ٹی آر اشارے کی نقل و حرکت کو ایڈج

طاقت کا تجزیہ

  • ایک کثیر اشارے کے مجموعے کا فیصلہ، ٹریڈنگ سگنل درست اور قابل اعتماد ہے.
  • اس کے علاوہ ، یہ بھی واضح ہے کہ کس طرح ٹرینڈ کی سمت کا اندازہ لگانے کے لئے ایک تیز ، درمیانی اور سست لائن سسٹم استعمال کیا جاتا ہے۔
  • ایم اے سی ڈی انڈیکس کی مدد سے ، جعلی توڑ سے بچنے کے لئے
  • متحرک نقصان کو روکنے سے خطرے پر قابو پانے میں مدد ملتی ہے۔
  • حکمت عملی زیادہ میکانائزڈ ہے ، جو خودکار تجارت کے لئے موزوں ہے۔

خطرہ اور اصلاح

  • پیرامیٹرز کی ترتیب پیچیدہ ہے اور بہت زیادہ ٹیسٹ کی اصلاح کی ضرورت ہے.
  • کثیر اشارے کے مجموعے کا تعین کرنے کی منطق پیچیدہ ہے اور دستی طور پر کام کرنا مشکل ہے۔
  • ٹرانزیکشن حجم توانائی وغیرہ جیسے دیگر فلٹرنگ شرائط کو شامل کیا جانا چاہئے ، تاکہ اس سے بچایا جاسکے۔
  • مشین لرننگ ٹریڈنگ حکمت عملی کو بہتر بنانے پر غور کیا جاسکتا ہے ، جس میں الگورتھم کے استعمال سے بہتر پیرامیٹرز استعمال کیے جاسکتے ہیں۔

خلاصہ کریں۔

اس حکمت عملی میں ایک ساتھ متعدد اشارے کا فائدہ ہوتا ہے ، جس سے رجحانات کا زیادہ درست اندازہ لگایا جاسکتا ہے ، اور اس کے ساتھ ہی اس کی واپسی کو بھی کنٹرول کیا جاسکتا ہے۔ پیرامیٹرز کی اصلاح اور دیگر فلٹرنگ شرائط کو شامل کرکے ، حکمت عملی کی استحکام کو مزید بڑھایا جاسکتا ہے۔ مجموعی طور پر ، حکمت عملی عام اور قابل اعتماد ہے ، جو درمیانی اور مختصر لائنوں کی خودکار تجارت کے لئے موزوں ہے ، اور اس کی بڑی عملی قدر ہے۔

حکمت عملی کا ماخذ کوڈ
/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-18 21:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("STRAT_STEMWAP", overlay=true, pyramiding = 0, default_qty_value = 10, slippage = 3)

EMA_Smooth_Period = input(7, minval=1)
ST_EMA = ema(close, EMA_Smooth_Period)

ST_VWAP_Period = input(7, minval=1)
VWAP_TUNING_MULT = input(type=input.float, defval=0.000)
ST_VWAP = ema(vwap,ST_VWAP_Period)


ST_VWAP_TUNING = VWAP_TUNING_MULT * (ST_EMA - ST_VWAP)


length = input(title="ATR Period", type=input.integer, defval=13)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=2.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true)
highlightState = input(title="Highlight State ?", type=input.bool, defval=true)

atr = mult * atr(length)


StopLoss_Long_Adjust = input(22.00, type=input.float)
StopLoss_Short_Adjust = input(16.00, type=input.float)


longStop = (ST_EMA) - atr - (ST_VWAP_TUNING) - StopLoss_Long_Adjust
longStopPrev = nz(longStop[1], longStop)
longStop := (close[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = (ST_EMA) + atr - (ST_VWAP_TUNING) + StopLoss_Short_Adjust
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (close[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (close) > shortStopPrev ? 1 : dir == 1 and (close) < longStopPrev ? -1 : dir


fastLength = input(1, minval=1), medLength=input(4, minval=1), slowLength=input(24, minval=1), signalLength=input(8,minval=1)
fastMA = ema(close, fastLength)
//,fastMA1 = ema(close[1], fastLength), fastMA2 = ema(close[2], fastLength),fastMA3 = ema(close[3], fastLength),fastMA4 = ema(close[4], fastLength),fastMA5 = ema(close[5], fastLength), fastMA6 = ema(close[6], fastLength), fastMA7 = ema(close[7], fastLength),fastMA8 = ema(close[8], fastLength),fastMA9 = ema(close[9], fastLength),fastMA10 = ema(close[10], fastLength),fastMA11 = ema(close[11], fastLength),fastMA12 = ema(close[12], fastLength),fastMA13 = ema(close[13], fastLength)
medMA = ema(close, medLength)
//, medMA1 = ema(close[1], medLength), medMA2 = ema(close[2], medLength), medMA3 = ema(close[3], medLength), medMA4 = ema(close[4], medLength), medMA5 = ema(close[5], medLength), medMA6 = ema(close[6], medLength), medMA7 = ema(close[7], medLength), medMA8 = ema(close[8], medLength), medMA9 = ema(close[9], medLength), medMA10 = ema(close[10], medLength), medMA11 = ema(close[11], medLength), medMA12 = ema(close[12], medLength), medMA13 = ema(close[13], medLength)
slowMA = ema(close, slowLength)
//, slowMA1 = ema(close[1], slowLength), slowMA2 = ema(close[2], slowLength), slowMA3 = ema(close[3], slowLength), slowMA4 = ema(close[4], slowLength), slowMA5 = ema(close[5], slowLength), slowMA6 = ema(close[6], slowLength), slowMA7 = ema(close[7], slowLength), slowMA8 = ema(close[8], slowLength), slowMA9 = ema(close[9], slowLength), slowMA10 = ema(close[10], slowLength), slowMA11 = ema(close[11], slowLength), slowMA12 = ema(close[12], slowLength), slowMA13 = ema(close[13], slowLength)
macd = fastMA - slowMA
//, macd1 = fastMA1 - slowMA1, macd2 = fastMA2 - slowMA2, macd3 = fastMA3 - slowMA3, macd4 = fastMA4 - slowMA4, macd5 = fastMA5 - slowMA5, macd6 = fastMA6 - slowMA6, macd7 = fastMA7 - slowMA7, macd8 = fastMA8 - slowMA8, macd9 = fastMA9 - slowMA9, macd10 = fastMA10 - slowMA10, macd11 = fastMA11 - slowMA11, macd12 = fastMA12 - slowMA12, macd13 = fastMA13 - slowMA13
fmacd = fastMA - medMA
//, fmacd1 = fastMA1 - medMA1,fmacd2 = fastMA2 - medMA2,fmacd3 = fastMA3 - medMA3,fmacd4 = fastMA4 - medMA4,fmacd5 = fastMA5 - medMA5, fmacd6 = fastMA6 - medMA6, fmacd7 = fastMA7 - medMA7, fmacd8 = fastMA8 - medMA8, fmacd9 = fastMA9 - medMA9, fmacd10 = fastMA10 - medMA10, fmacd11 = fastMA11 - medMA11, fmacd12 = fastMA12 - medMA12, fmacd13 = fastMA13 - medMA13
smacd = slowMA - medMA
//, smacd1 = slowMA1 - medMA1, smacd2 = slowMA2 - medMA2, smacd3 = slowMA3 - medMA3, smacd4 = slowMA4 - medMA4, smacd5 = slowMA5 - medMA5, smacd6 = slowMA6 - medMA6, smacd7 = slowMA7 - medMA7, smacd8 = slowMA8 - medMA8, smacd9 = slowMA9 - medMA9, smacd10 = slowMA10 - medMA10, smacd11 = slowMA11 - medMA11, smacd12 = slowMA12 - medMA12, smacd13 = slowMA13 - medMA13,


signal = ema(macd, signalLength)
//,signal1 = sma(macd1, signalLength),signal2 = sma(macd2, signalLength),signal3 = sma(macd3, signalLength),signal4 = sma(macd4, signalLength),signal5 = sma(macd5, signalLength),signal6 = sma(macd6, signalLength),signal7 = sma(macd7, signalLength),signal8 = sma(macd8, signalLength),signal9 = sma(macd9, signalLength),signal10 = sma(macd10, signalLength),signal11 = sma(macd11, signalLength),signal12 = sma(macd12, signalLength),signal13 = sma(macd13, signalLength),
fsignal = ema(fmacd, signalLength)
//, fsignal1 = sma(fmacd1, signalLength), fsignal2 = sma(fmacd2, signalLength), fsignal3 = sma(fmacd3, signalLength), fsignal4 = sma(fmacd4, signalLength), fsignal5 = sma(fmacd5, signalLength), fsignal6 = sma(fmacd6, signalLength), fsignal7 = sma(fmacd7, signalLength), fsignal8 = sma(fmacd8, signalLength), fsignal9 = sma(fmacd9, signalLength), fsignal10 = sma(fmacd10, signalLength), fsignal11 = sma(fmacd11, signalLength), fsignal12 = sma(fmacd12, signalLength), fsignal13 = sma(fmacd13, signalLength),
ssignal = ema(smacd, signalLength)
//, ssignal1 = sma(smacd1, signalLength), ssignal2 = sma(smacd2, signalLength), ssignal3 = sma(smacd3, signalLength), ssignal4 = sma(smacd4, signalLength), ssignal5 = sma(smacd5, signalLength), ssignal6 = sma(smacd6, signalLength), ssignal7 = sma(smacd7, signalLength), ssignal8 = sma(smacd8, signalLength), ssignal9 = sma(smacd9, signalLength), ssignal10 = sma(smacd10, signalLength), ssignal11 = sma(smacd11, signalLength), ssignal12 = sma(smacd12, signalLength), ssignal13 = sma(smacd13, signalLength),


ATR_Signal_Period = input(2, type=input.integer, minval=1, maxval=2000)


SetStopLossShort = 0.0
SetStopLossShort := if(strategy.position_size < 0)
    StopLossShort = shortStop
    min(StopLossShort,SetStopLossShort[1])


plot(SetStopLossShort, style = plot.style_cross, color = color.yellow)    


SetStopLossLong = 0.0
SetStopLossLong := if(strategy.position_size > 0)
    StopLossLong = longStop
    max(StopLossLong,SetStopLossLong[1])


plot(SetStopLossLong, style = plot.style_cross, color = color.purple)

ATR_SIGNAL_FINE_TUNE = input(0.986, type=input.float)  

tol_atr = atr(ATR_Signal_Period)*ATR_SIGNAL_FINE_TUNE

StopLoss_Initial_Short = input(1.00, type=input.float)
StopLoss_Initial_Long = input(5.00, type=input.float)



VOLUME_CHECK_SHORT = input(42)
VOLUME_CHECK_LONG = input(16)

MAX_LOSS = input(0.00, type=input.float)

//Custom Time Interval
fromMinute = input(defval = 0, title = "From Minute", minval = 0, maxval = 60)
fromHour = input(defval = 0, title = "From Hour", minval = 0, maxval = 24)
fromDay = input(defval = 1, title = "From Day", minval = 1)
fromMonth = input(defval = 1, title = "From Month", minval = 1)
fromYear = input(defval = 2019, title = "From Year", minval = 1900)
tillMinute = input(defval = 0, title = "Till Minute", minval = 0, maxval = 60)
tillHour = input(defval = 0, title = "Till Hour", minval = 0, maxval = 24)
tillDay = input(defval = 1, title = "Till Day", minval = 1)
tillMonth = input(defval = 1, title = "Till Month", minval = 1)
tillYear = input(defval = 2021, title = "Till Year", minval = 1900)
timestampStart = timestamp(fromYear,fromMonth,fromDay,fromHour,fromMinute)
timestampEnd = timestamp(tillYear,tillMonth,tillDay,tillHour,tillMinute)



if ( strategy.position_size <= 0 and ((fsignal[1] -fsignal) <= 0) and volume > VOLUME_CHECK_LONG and ( cross(signal, macd) or cross(signal[1], macd[1]) or cross(signal[2], macd[2]) or cross(signal[3], macd[3]) or cross(signal[4], macd[4]) or cross(signal[5], macd[5]) or cross(signal[6], macd[6]) or cross(signal[7], macd[7]) or  cross(signal[8], macd[8]) or  cross(signal[9], macd[9]) or  cross(signal[10], macd[10]) or  cross(signal[11], macd[11]) or  cross(signal[12], macd[12]) or  cross(signal[13], macd[13])  or cross(fmacd, macd) or cross(fmacd[1],macd[1]) or  cross(fmacd[2],macd[2]) or cross(fmacd[3],macd[3]) or cross(fmacd[4],macd[4])or cross(fsignal, fmacd)  or cross(fmacd, smacd) )  and (  (crossover(close,open+tol_atr) or crossover(close[1],open[1]+tol_atr[1]) or crossover(close[2],open[2]+tol_atr[2]) or crossover(close[3],open[3]+tol_atr[3]) or crossover(close[4],open[4]+tol_atr[4]) or crossover(close[5],open[5]+tol_atr[5]) or crossover(close[6],open[6]+tol_atr[6]) or crossover(close[7],open[7]+tol_atr[7]) or crossover(close[8],open[8]+tol_atr[8]) or crossover(close[9],open[9]+tol_atr[9]) or crossover(close[10],open[10]+tol_atr[10]) ) or ( (cross(ssignal, smacd) or cross(ssignal[1],smacd[1]) or cross(ssignal[2],smacd[2])) and ( (ssignal - ssignal[1]) > 0 ) ) )  )
    strategy.exit("SELL")
    strategy.entry("BUY", strategy.long)
    strategy.exit("BUY_STOP","BUY", stop = close - StopLoss_Initial_Long)
    

if ( (dir == -1 and dir[1] == 1 and dir[2] == 1 and dir[3] == 1 and dir[4] == 1 ) and strategy.position_size >= 0 and volume > VOLUME_CHECK_SHORT and ((fsignal[1] -fsignal) >= 0)  and (  crossunder(close, open - tol_atr) or crossunder(close[1], open[1] - tol_atr[1]) or crossunder(close[2], open[2] - tol_atr[2]) or crossunder(close[3], open[3] - tol_atr[3]) )  and ( cross(signal, macd) or cross(signal[1], macd[1]) or cross(signal[2], macd[2]) or cross(signal[3], macd[3]) or cross(signal[4], macd[4]) or cross(signal[5], macd[5]) or cross(signal[6], macd[6]) or cross(signal[7], macd[7]) or  cross(signal[8], macd[8]) or  cross(signal[9], macd[9]) or  cross(signal[10], macd[10]) or  cross(signal[11], macd[11])  or  cross(signal[12], macd[12]) or  cross(signal[13], macd[13])  )  )
    strategy.exit( "BUY")
    strategy.entry("SELL", strategy.short)
    strategy.exit("SELL_STOP","SELL", stop = close + StopLoss_Initial_Short)
    

strategy.close_all(when = strategy.openprofit <  (-1 * MAX_LOSS) )


// if (strategy.max_contracts_held_long > 0 )
//     strategy.exit("BUY_TRAIL_STOP","BUY", stop = longStop - StopLoss_Long_Adjust)
    
// if (strategy.max_contracts_held_short > 0 )    
//     strategy.exit("SELL_TRAIL_STOP","SELL", stop = shortStop + StopLoss_Short_Adjust)


    
    //strategy.exit("BUY_TRAIL_STOP","BUY", stop = SetStopLossLong)
    //strategy.exit("SELL_TRAIL_STOP","SELL", stop = SetStopLossShort)