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


تخلیق کی تاریخ: 2023-10-31 15:45:39 آخر میں ترمیم کریں: 2023-10-31 15:45:39
کاپی: 0 کلکس کی تعداد: 709
1
پر توجہ دیں
1617
پیروکار

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

جائزہ

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

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

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

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

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

  • بریک آؤٹ حکمت عملی کا حصہ یہ دیکھتا ہے کہ آیا قیمت کسی مخصوص دورانیے میں سب سے زیادہ یا کم قیمت کو توڑتی ہے۔ جب قیمت سب سے زیادہ قیمت سے زیادہ ہو تو خریدیں؛ جب قیمت کم قیمت سے کم ہو تو فروخت کریں۔

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

  • اسٹاپ لائن اور اسٹاپ لائن قائم کریں اور مناسب اسٹاپ اسٹاپ تناسب طے کریں۔

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

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

  2. رجحانات میں ، جب ایس ایم اے تیزی سے سست لائن سونے کے کراس میں کھلے عہدے پر خریدیں ، اور جب ڈیڈ فورک میں خالی پوزیشنیں۔

  3. غیر یقینی صورتحال کے دوران اشارے کے لئے ٹریڈنگ سگنل پر عملدرآمد کرنا

  4. ٹرانسمیشن کی حکمت عملی دونوں مارکیٹ کے ماحول میں استعمال کیا جاتا ہے، جس میں چینلز کو ٹریک کرنے کے لئے استعمال کیا جاتا ہے.

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

طاقت کا تجزیہ

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

  1. رجحانات کے مطابق چلنے کے قابل، رجحانات کے حالات میں اعلی جیت کی شرح حاصل کریں.

  2. اس کے علاوہ ، یہ بھی کہا گیا ہے کہ یہ کمپنیاں غیر متوقع طور پر غیر منافع بخش ہوسکتی ہیں ، اور اس کے نتیجے میں ، ان کی سرمایہ کاری میں اضافہ ہوتا ہے۔

  3. زیادہ منافع بخش عنصر کے ساتھ ، اسٹاپ اسٹاپ نقصان کی ترتیب معقول ہے۔

  4. ٹرینڈ کی طاقت کو مدنظر رکھتے ہوئے ، نقصانات کو کم کیا جاسکتا ہے۔

  5. ایک سے زیادہ اشارے کے ساتھ مل کر، ایک مضبوط ٹریڈنگ سگنل تشکیل دے سکتے ہیں.

  6. پیرامیٹرز کی اصلاح کے ذریعے بہتر پیرامیٹرز کا مجموعہ حاصل کیا جاسکتا ہے۔

خطرے کا تجزیہ

ملٹی فیکٹر حکمت عملی میں کچھ خطرات بھی ہیں، جن میں سے کچھ یہ ہیں:

  1. غلط کثیر عنصر کا مجموعہ تجارتی سگنل کی الجھن کا سبب بن سکتا ہے ، جس میں بہترین عنصر کا مجموعہ تلاش کرنے کے لئے بار بار جانچ کی ضرورت ہوتی ہے۔

  2. بہت سے پیرامیٹرز کو بہتر بنانے کی ضرورت ہے، بہتر بنانے کے لئے مشکل ہے، کافی تاریخی اعداد و شمار کی حمایت کی ضرورت ہے.

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

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

  5. بریک ٹریڈز کو آسانی سے فکسڈ کیا جاسکتا ہے اور اس کے لئے مناسب اسٹاپ نقصان کی حکمت عملی کی ضرورت ہوتی ہے۔

مندرجہ بالا خطرات کے لئے، آپ کو مندرجہ ذیل نکات سے بہتر بنانے کی ضرورت ہے:

  1. تاریخی اعداد و شمار میں مختلف عوامل کی استحکام کی جانچ کریں ، استحکام کے عوامل کو منتخب کریں۔

  2. جینیاتی الگورتھم جیسے ذہین اصلاح کے طریقوں کا استعمال کرتے ہوئے بہترین پیرامیٹرز تلاش کریں.

  3. زیادہ سے زیادہ واپسی کو کنٹرول کرنے کے لئے معقول اسٹاپ لائن قائم کریں۔

  4. اضافی اشارے کے ساتھ ، رجحان کا رخ موڑ دیا گیا ہے۔

  5. زیادہ سے زیادہ نقصان سے بچنے کے لئے توڑنے والے سودوں کی روک تھام کی حکمت عملی کو بہتر بنائیں۔

اصلاح کی سمت

ایک کثیر عنصر کی حکمت عملی میں مزید اصلاحات کی گنجائش ہے:

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

مشین لرننگ کا استعمال کرتے ہوئے بہترین حکمت عملی کا وزن تلاش کرنا

  1. پیرامیٹرز کی اصلاح کے لئے ذہین الگورتھم کا استعمال کیا جاسکتا ہے ، جو تیزی سے اصلاح کی تلاش میں ہے۔

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)