کثیر عنصر کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-10-31 15:45:39
ٹیگز:

img

جائزہ

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

حکمت عملی منطق

ملٹی فیکٹر حکمت عملی بنیادی طور پر مندرجہ ذیل پہلوؤں پر مبنی ہے:

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

  • رجحان کے بعد کا حصہ رجحان کی سمت کا تعین کرنے کے لئے ایس ایم اے کے سنہری صلیب کا استعمال کرتا ہے۔ جب تیز ایس ایم اے سست ایس ایم اے سے اوپر عبور کرتا ہے تو خرید کا اشارہ پیدا ہوتا ہے۔ جب تیز ایس ایم اے سست ایس ایم اے سے نیچے عبور کرتا ہے تو فروخت کا اشارہ پیدا ہوتا ہے۔

  • بریک آؤٹ کا حصہ اس بات کی نگرانی کرتا ہے کہ آیا قیمت ایک مخصوص مدت میں سب سے زیادہ قیمت سے اوپر ٹوٹ جاتی ہے یا سب سے کم قیمت سے نیچے ٹوٹ جاتی ہے۔ جب قیمت سب سے زیادہ قیمت سے اوپر ٹوٹ جاتی ہے تو یہ خریدنے کو متحرک کرے گا ، اور جب قیمت سب سے کم قیمت سے نیچے ٹوٹ جاتی ہے تو فروخت کرے گا۔

  • ADX اشارے کا استعمال رجحان کی طاقت کی پیمائش کرنے کے لئے کیا جاتا ہے۔ رجحان کی تجارت کے سگنل صرف اس وقت پیدا ہوتے ہیں جب رجحان کافی مضبوط ہوتا ہے۔

  • سٹاپ نقصان اور لے منافع لائنز منافع بخش کو بہتر بنانے کے لئے لاگو کیا جاتا ہے.

خلاصہ میں، کثیر عوامل کی حکمت عملی مندرجہ ذیل منطق پر عمل کرتی ہے:

  1. جب ADX ایک حد سے اوپر ہوتا ہے تو ، رجحان کو مضبوط سمجھا جاتا ہے۔ رجحان کی پیروی کرنے والی حکمت عملی اثر انداز ہوتی ہے۔ جب ADX حد سے نیچے ہوتا ہے تو ، مارکیٹ کی حد ہوتی ہے۔ صرف آسکیلیٹنگ حکمت عملی اثر انداز ہوتی ہے۔

  2. ایک رجحان سازی مارکیٹ میں، SMA گولڈن کراس ایک طویل اندراج کو متحرک کرتا ہے اور موت کراس پوزیشنوں سے باہر نکلنے کو متحرک کرتا ہے.

  3. ایک رینجنگ مارکیٹ میں، اسٹوکاسٹک آسکیلیٹر سے ٹریڈنگ سگنل کی پیروی کی جاتی ہے.

  4. بریک آؤٹ کی حکمت عملی مضبوط رفتار پر عمل کرنے کے لئے دونوں مارکیٹ کے حالات میں لاگو ہوتا ہے.

  5. سٹاپ نقصان اور منافع لینے کی لائنیں منافع میں مقفل کرنے اور نقصانات کو محدود کرنے کے لئے مقرر کی جاتی ہیں.

فوائد کا تجزیہ

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

  1. یہ رجحانات کو اچھی طرح سے چلاتا ہے اور رجحانات کی مارکیٹوں میں اعلی جیت کی شرح حاصل کرتا ہے.

  2. یہ رینج سے منسلک مارکیٹوں سے فائدہ اٹھا سکتا ہے اور پوزیشنوں میں پھنس جانے سے بچتا ہے.

  3. اس میں مناسب طریقے سے مقرر سٹاپ نقصان اور منافع لینے کے ساتھ اعلی منافع کے عوامل ہیں.

  4. یہ غلط سگنل سے نقصانات کو کم کرنے کے لئے رجحان کی طاقت پر غور کرتا ہے.

  5. متعدد اشارے کا امتزاج مضبوط تجارتی سگنلز کا باعث بنتا ہے۔

  6. بہتر کارکردگی کے لئے پیرامیٹرز کو بہتر بنایا جا سکتا ہے.

خطرے کا تجزیہ

کثیر عوامل کی حکمت عملی سے وابستہ خطرات بھی ہیں:

  1. عوامل کا غلط امتزاج متضاد تجارتی سگنل کا باعث بن سکتا ہے۔ بہترین امتزاج تلاش کرنے کے لئے وسیع پیمانے پر جانچ کی ضرورت ہے۔

  2. متعدد پیرامیٹرز سے اصلاح کی مشکل بڑھ جاتی ہے اور کافی تاریخی اعداد و شمار کی ضرورت ہوتی ہے۔

  3. جب رجحان الٹ جاتا ہے تو یہ پوزیشنوں کو وقت پر ختم کرنے میں ناکام ہوسکتا ہے، جس سے بڑے نقصانات ہوتے ہیں.

  4. ADX اشارے کے اثرات میں تاخیر ہوتی ہے اور یہ رجحان کے موڑ کے مقامات کو یاد کر سکتا ہے۔

  5. بریکآؤٹ ٹریڈنگ نقصان دہ پوزیشنوں میں پھنس جانے کا شکار ہے۔ معقول سٹاپ نقصان کی ضرورت ہے۔

خطرات کو مندرجہ ذیل طریقوں سے کم کیا جاسکتا ہے:

  1. عوامل کے استحکام کا بیک ٹیسٹنگ اور مستحکم لوگوں کو منتخب کرنا.

  2. زیادہ سے زیادہ پیرامیٹرز تلاش کرنے کے لئے ہیورسٹک اصلاح کے الگورتھم کا استعمال کرتے ہوئے.

  3. زیادہ سے زیادہ ڈراؤنڈ کو کنٹرول کرنے کے لئے مناسب سٹاپ نقصان کی ترتیب.

  4. رجحان کی تبدیلی کا پتہ لگانے کے لئے اضافی اشارے شامل کرنا۔

  5. بریک آؤٹ ٹریڈنگ کے لئے سٹاپ نقصان کے قوانین کو بہتر بنانا۔

بہتری کی ہدایات

کثیر عوامل کی حکمت عملی میں ابھی بھی بہتری کی گنجائش ہے:

  1. بہتر مجموعے تلاش کرنے کے لئے زیادہ سے زیادہ عوامل جیسے اتار چڑھاؤ، حجم وغیرہ کی جانچ کرنا.

  2. فیکٹر وزن کو متحرک طور پر بہتر بنانے کے لئے مشین لرننگ کی تکنیک کا استعمال کرتے ہوئے

  3. تیز رفتار پیرامیٹر کی اصلاح کے لئے ہیورسٹک الگورتھم کا فائدہ اٹھانا۔

  4. مختلف انعقاد کی مدت کے تحت منافع کی جانچ.

  5. متحرک سٹاپ نقصان کے قوانین کی تلاش کرنا۔ مثال کے طور پر، کچھ منافع حاصل کرنے کے بعد سٹاپ نقصان کو بڑھانا۔

  6. سگنل کے معیار کو بہتر بنانے کے لیے زیادہ فلٹرز جیسے حجم کے چوٹیوں کو شامل کرنا۔

  7. ADX پیرامیٹرز کو بہتر بنانا یا زیادہ اعلی درجے کی رجحان کا پتہ لگانے والے اشارے کا استعمال کرنا۔

نتیجہ

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


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// strategy("Strategy_1", shorttitle="Strategy1",overlay=true ,pyramiding = 12, initial_capital=25000, currency='EUR', commission_type = strategy.commission.cash_per_order, commission_value = 3, default_qty_type = strategy.percent_of_equity, default_qty_value = 20)
	
// Revision:        1
// Author:          Jonas

// === INPUT ===
    //   > BACKTEST RANGE <
FromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
FromDay = input(defval=1, title="From Day", minval=1, maxval=31)
FromYear = input(defval=2017, title="From Year", minval=2010)
ToMonth = input(defval=1, title="To Month", minval=1, maxval=12)
ToDay = input(defval=1, title="To Day", minval=1, maxval=31)
ToYear = input(defval=9999, title="To Year", minval=2010)

    //   > STRATEGY SETTINGS <
bolOS = input(defval = false, type=input.bool, title="Oscillating Strategy")
bolTS = input(defval = true, type=input.bool, title="Trend Strategy")
bolBO = input(defval = false, type=input.bool, title="Breakout Strategy")

strStrategy = input(defval = "Long", type=input.string, title="Trade Strategy",options = ["Long", "Short","Long & Short"])

flStopLoss = input(defval = 2.0, title="Stop Loss %", type=input.float)/100
flTakeProfit = input(defval = 4.0, title="Take Profit %", type=input.float)/100

    //   > SMA <

fastMA = input(defval=8, type=input.integer, title="FastMA length", minval=1, step=1)
slowMA = input(defval=21, type=input.integer, title="SlowMA length", minval=1, step=1)

    //  > ADX <
adx_len = input(defval=10, type=input.integer, title="ADX length", minval=1, step=1)
adx_trend = input(defval=30, type=input.integer, title="ADX Tr", minval=1, step=1)
adx_choppy = adx_trend
adx_limit = adx_trend

    //  > TRENDSCORE <
ts_fromIndex = input(title="From", type=input.integer, minval=1, defval=10)
ts_toIndex = input(title="To", type=input.integer, minval=1, defval=14)
ts_src = input(title="Source", type=input.source, defval=close)

    // > Oscillator <
stoch_length = 14
stoch_OverBought = 75
stoch_OverSold = 25
stoch_smoothK = 3
stoch_smoothD = 3

// === BACK TEST RANGE FUNCTION ===
window_start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
window_finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= window_start and time <= window_finish ? true : false

//plot(stop_level_Long, title="TEST",color=color.red, style=plot.style_linebr, linewidth=2)
//plot(take_level_Long, color=color.green, style=plot.style_linebr, linewidth=2)

// === ADX ===
adx_up = change(high)
adx_down = -change(low)
adx_trur = rma(tr, adx_len)
adx_plus = fixnan(100 * rma(adx_up > adx_down and adx_up > 0 ? adx_up : 0, adx_len) / adx_trur)
adx_minus = fixnan(100 * rma(adx_down > adx_up and adx_down > 0 ? adx_down : 0, adx_len) / adx_trur)
adx_sum = adx_plus + adx_minus

ADX = 100 * rma(abs(adx_plus - adx_minus) / (adx_sum == 0 ? 1 : adx_sum), adx_len)

//=== TRENDSCORE ===
trendscore(ts_src, ts_fromIndex, ts_toIndex) =>
	ts_sum = 0.0
	for i = ts_fromIndex to ts_toIndex
        ts_sum := ts_sum + (ts_src >= nz(ts_src[i]) ? 1 : -1)
    ts_sum

intTS = trendscore(ts_src, ts_fromIndex, ts_toIndex)
// Long if  TrendDirection = 1, Short if TrendDirection = -1; Indifferent if TrendDirection = 0
intTrendDirection = (intTS > (ts_toIndex-ts_fromIndex)) ? 1 : (intTS < (ts_fromIndex-ts_toIndex)) ? -1 : 0

    //  > TREND CONDITION <
adx_growing = ADX > highest(ADX[1],3)
intTrend = ((ADX >= adx_limit) and (ADX[1] >= adx_limit) and adx_growing) ? intTrendDirection : 0

// === ATR ===
ATR = sma(tr,10)
ATR_100 = ATR /abs(high - low)


// === STOCHASTICS ===

stoch_k = sma(stoch(close, high, low, stoch_length), stoch_smoothK)
stoch_d = sma(stoch_k, stoch_smoothD)

// === FILTER & CONDITIONS ===
    //  > STOCHASTICS <
bolFilter_OS1 = close[1] > hl2[1]



bolSigOsc_long_1 = (na(stoch_k) or na(stoch_d)) ? false : (crossover(stoch_d,stoch_OverSold) and stoch_k > stoch_d) ? true:false
bolSigOsc_short_1 = (na(stoch_k) or na(stoch_d)) ? false : (crossunder(stoch_d,stoch_OverBought) and stoch_k < stoch_d) ? true:false

bolLongOpenOS = bolSigOsc_long_1 and bolFilter_OS1
bolLongCloseOS = bolSigOsc_short_1

bolShortOpenOS = bolSigOsc_short_1 and bolFilter_OS1
bolShortCloseOS = bolSigOsc_long_1

    //  > TREND <

bolFilter_TS1 = close[1] > hl2[1] and open[1] < hl2[1]
bolFilter_TS2 = sma(close,50)>sma(close,50)[10]
bolFilter_TS3 = close[1] < hl2[1] and open[1] > hl2[1]

bolSigTrendLO1 = sma(close, fastMA) > sma(close, slowMA)
bolSigTrendLO2 = close > sma(close,fastMA)
bolSigTrendLO3 = bolSigTrendLO1 and bolSigTrendLO2

bolSigTrendLC1 = sma(close, fastMA) < sma(close, slowMA)
bolSigTrendLC2 = close < sma(close, fastMA)
bolSigTrendLC3 = bolSigTrendLC1 and bolSigTrendLC2

bolSigTrendSO1 = bolSigTrendLC3
bolSigTrendSC1 = bolSigTrendLO1

bolLongOpenTS = bolSigTrendLO3 and bolFilter_TS1
bolLongCloseTS = bolSigTrendLC3 and bolFilter_TS3

bolShortOpenTS = bolSigTrendSO1 and bolFilter_TS3
bolShortCloseTS = bolLongOpenTS and bolFilter_TS1

plot(sma(close, fastMA), title='FastMA', color=color.green, linewidth=2, style=plot.style_line)  // plot FastMA
plot(sma(close, slowMA), title='SlowMA', color=color.red, linewidth=2, style=plot.style_line)  // plot SlowMA



    //  > BREAKOUT <
flFilter_BS1 = 0.5 * stdev(close,slowMA)[1]
bolFilter_BS2 = volume > sma(volume,slowMA)*1.25

bolSigBreakoutLO1 = close > (highestbars(high,slowMA)[1] + flFilter_BS1)
bolSigBreakoutLC1 = barssince(bolSigBreakoutLO1)==5

bolSigBreakoutSO1 = close < lowestbars(low,slowMA)[1] - flFilter_BS1
bolSigBreakoutSC1 = barssince(bolSigBreakoutSO1)==5


bolLongOpenBO = bolSigBreakoutLO1 and bolFilter_BS2
bolLongCloseBO = bolSigBreakoutLC1

bolShortOpenBO = bolSigBreakoutSO1 and bolFilter_BS2
bolShortCloseBO = bolSigBreakoutSC1

//=== STRATEGIES ENTRIES & EXITS ===
    //  > STOPS & LIMITS <
stop_level_Long = strategy.position_avg_price * (1 - flStopLoss)
take_level_Long = strategy.position_avg_price * (1 + flTakeProfit)
stop_level_Short = strategy.position_avg_price * (1 + flStopLoss)
take_level_Short = strategy.position_avg_price * (1 - flTakeProfit)

    //  > ENTRIES / CLOSES / EXITS <
if window() //only in backtest-window
    if (bolOS == true)
        if (intTrend == 0)
            if(strStrategy == "Long" or strStrategy == "Long & Short")
                strategy.entry("Lng Osc", strategy.long, when=bolLongOpenOS)  // buy long when "within window of time" AND crossover
            if(strStrategy == "Short" or strStrategy == "Long & Short")
                strategy.entry("Short Osc", strategy.short, when=bolShortOpenOS)
        strategy.close("Lng Osc", when=(bolLongCloseOS))
        //strategy.exit("Exit L OS/STD", "Lng Osc", stop = strategy.position_avg_price - 2*stdev(close,10))
        strategy.exit("Exit L OS/%", "Lng Osc", stop=stop_level_Long)
        strategy.close("Short Osc", when=(bolShortCloseOS))
        //strategy.exit("Exit S OS/STD", "Short Osc", stop = strategy.position_avg_price + 2*stdev(strategy.position_avg_price,10))
        strategy.exit("Exit S OS/%", "Short Osc", stop=stop_level_Short)
    if (bolTS == true)
        if (not(intTrend == 0))
            if((strStrategy == "Long") or (strStrategy == "Long & Short"))
                strategy.entry("Lng TD", strategy.long, when=bolLongOpenTS)  // buy long when "within window of time" AND crossover
            if((strStrategy == "Short") or (strStrategy == "Long & Short"))
                strategy.entry("Short TD", strategy.short, when=(bolShortOpenTS and bolTS))  // buy long when "within window of time" AND crossover
        strategy.exit("Exit L TD", "Lng TD", stop=stop_level_Long)
        strategy.close("Lng TD", when=bolLongCloseTS)
        strategy.exit("Exit S TD", "Short TD", stop=stop_level_Short)
        strategy.close("Short TD", when=bolShortCloseTS)
    if (bolBO == true)
        if((strStrategy == "Long") or (strStrategy == "Long & Short"))
            strategy.entry("Lng BO", strategy.long, when=bolLongOpenBO)  // buy long when "within window of time" AND crossover
            strategy.close("Lng BO", when=bolLongCloseBO)
            //strategy.exit("Exit L BO/STD", "Lng BO", stop = strategy.position_avg_price - 2*stdev(strategy.position_avg_price,10))
            strategy.exit("Exit L BO/2.5%", "Lng BO", stop=stop_level_Long)
        if((strStrategy == "Short") or (strStrategy == "Long & Short"))
            strategy.entry("Short BO", strategy.short, when=bolShortOpenBO)  // buy long when "within window of time" AND crossover
            strategy.close("Short BO", when=bolShortCloseBO)
            //strategy.exit("Exit S BO/STD", "Short BO", stop = strategy.position_avg_price - 2*stdev(strategy.position_avg_price,10))
            strategy.exit("Exit S BO/%", "Short BO", stop=stop_level_Short)




مزید