مومنٹم روٹیشن اسٹاک ٹریڈنگ کی حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-09-19 22:14:24
ٹیگز:

جائزہ

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

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

  1. 14 ادوار کی لمبائی کے ساتھ RSI کا حساب لگائیں
  2. اسٹاک آر ایس آئی کا حساب لگانا، اسٹوکاسٹک لمبائی 14، ہموار K 3، اور ہموار D 1 کے ساتھ RSI کی بنیاد پر
  3. جب اسٹاک آر ایس آئی زیادہ فروخت سے زیادہ خریدنے میں بڑھتا ہے تو طویل عرصے تک جانا
  4. جب اسٹاک آر ایس آئی زیادہ خریدنے سے زیادہ فروخت میں گرتا ہے تو مختصر ہوجائیں
  5. 5 گنا تک پوزیشن شامل کرنے کے لئے پرامڈ ٹریڈنگ کا استعمال کریں
  6. ہر اضافہ کے بعد سٹاپ نقصان اور ٹریلنگ سٹاپ مقرر کریں
  7. سٹاپ نقصان کو متحرک کیا جاتا ہے جب پوزیشن کو کم
  8. اسٹاپ نقصان اور ٹریلنگ اسٹاپ کی بنیاد پر پوزیشنوں کا انتظام کریں

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

اس حکمت عملی کے فوائد یہ ہیں:

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

خطرے کا تجزیہ

نوٹ کرنے کے لیے کچھ خطرات:

  1. صرف اسٹاک آر ایس آئی پر انحصار کرنا اسے اچانک واقعات کا شکار بنا دیتا ہے۔ دوسرے اشارے سے تصدیق کریں۔
  2. صرف مضبوط رجحان کی مصنوعات پر لاگو ہوتا ہے۔ متضاد ضمنی بازاروں سے گریز کریں۔
  3. بہت زیادہ اضافے سے نقصانات میں اضافہ ہو سکتا ہے۔ کنٹرول گہرائی میں اضافہ کرتا ہے۔
  4. غلط سٹاپ نقصان کی ترتیب سے اوور اسٹاپ کا سبب بن سکتا ہے۔ مارکیٹ کی بنیاد پر اسٹاپ کو ایڈجسٹ کریں۔
  5. لین دین کے اخراجات کی نگرانی کریں۔ اعلی تعدد کی تجارت بھاری کمیشن پیدا کرتی ہے۔

اصلاح کی ہدایات

حکمت عملی کو بہتر بنانے کے کچھ طریقے:

  1. بہترین فٹ کے لئے RSI لمبائی پیرامیٹر کو بہتر بنائیں.
  2. ہموار سگنل کے لئے اسٹاک کے اور ڈی ادوار کو بہتر بنائیں.
  3. سگنلز کو فلٹر کرنے کے لیے دوسرے اشارے شامل کریں اور جھوٹی تجارت سے گریز کریں۔
  4. متحرک طور پر مارکیٹ کے حالات کی بنیاد پر اضافہ اوقات کو ایڈجسٹ کریں.
  5. کم سٹاپ کی شرح کے لئے سٹاپ نقصان منطق کو بہتر بنائیں.
  6. پیسے کے انتظام پر مبنی پوزیشن سائزنگ ماڈیول شامل کریں.
  7. اعلی تعدد کی تجارت کو محدود کرنے کے لئے کمیشن کنٹرول شامل کریں.

نتیجہ

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


/*backtest
start: 2023-09-11 00:00:00
end: 2023-09-13 13:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This script was created for educational purposes only.
// © mcristianrios

// FEEL FREE TO DROP A COMMENT AND A LIKE IF YOU USE IT OR IT SERVES YOU WELL

//@version=4
//strategy(title="Pyramiding Strategy To Study [mcristianrios]", commission_type=strategy.commission.cash_per_contract, commission_value=0.0002, overlay=true, default_qty_value=1000, initial_capital=100, calc_on_order_fills=false, currency="USD", overlay=true, pyramiding=5)
// study(title="Pyramiding Strategy To Study [mcristianrios]", overlay=true)

int pyramiding            = input(1,  'Pyramiding', minval=1, maxval=5)
int slPips                = input(80, 'SL Pips')
int ttPips                = input(60, 'Trail Trig')
int trailOffset           = input(60, 'Trail Offset')

// === PYRAMIDING DECLARATION === {
var int   longPyramiding  = 0
var int   shortPyramiding = 0

// To save init of operation price
var float close1          = na
var float close2          = na
var float close3          = na
var float close4          = na
var float close5          = na

// How far did the Trailing Stop Get?
var float far1            = na
var float far2            = na
var float far3            = na
var float far4            = na
var float far5            = na
// }

// === STOCHASTIC RSI === {
smoothK                   = input(3, minval=1)
smoothD                   = input(1, minval=1)
lengthRSI                 = input(14, minval=1)
lengthStoch               = input(14, minval=1)
src                       = input(close, title="RSI Source")

rsi1                      = rsi(src, lengthRSI)
k                         = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d                         = sma(k, smoothD)
// }

// === SOME CONDITION TO TAKE A POSITION === {
goLong  = k[1] < 80 and k >= 80 and longPyramiding  < pyramiding
goShort = k[1] > 20 and k <= 20 and shortPyramiding < pyramiding
// }

// === PYRAMIDING SIMULATION === {
var string lastOperation = ''
if (goLong  and lastOperation != 'LONG') or (goShort and lastOperation != 'SHORT')
    // RESET
    longPyramiding           := 0
    shortPyramiding          := 0
    far1                     := na
    far2                     := na
    far3                     := na
    far4                     := na
    far5                     := na
    close1                   := na
    close2                   := na
    close3                   := na
    close4                   := na
    close5                   := na

// === SUM ONE INTO 'LONG' OR 'SHORT' PYRAMIDING AND REMEMBER LAST OPERATION TYPE === {
isCallOrShort = if goLong and longPyramiding < pyramiding
    lastOperation := 'LONG'
    longPyramiding := longPyramiding + 1

    true
else
    isShort = if goShort and shortPyramiding < pyramiding
        lastOperation := 'SHORT'
        shortPyramiding := shortPyramiding + 1

        true
    else
        false

    isShort
// }

// === SAVE CURRENT PRICE === {
if isCallOrShort
    if na(close1)
        close1 := close
    else
        if na(close2)
            close2 := close
        else
            if na(close3)
                close3 := close
            else
                if na(close4)
                    close4 := close
                else
                    if na(close5)
                        close5 := close
// }

if longPyramiding > 0
    // If Trail Stop was not triggered and distance is achieved saved it
    if na(far1) and high > close1 + syminfo.mintick * 10 * ttPips
        far1 := high
    if na(far2) and high > close2 + syminfo.mintick * 10 * ttPips
        far2 := high
    if na(far3) and high > close3 + syminfo.mintick * 10 * ttPips
        far3 := high
    if na(far4) and high > close4 + syminfo.mintick * 10 * ttPips
        far4 := high
    if na(far5) and high > close5 + syminfo.mintick * 10 * ttPips
        far5 := high
    
    // Update how far our position went
    if not na(far1) and high > far1
        far1 := high
    if not na(far2) and high > far2
        far2 := high
    if not na(far3) and high > far3
        far3 := high
    if not na(far4) and high > far4
        far4 := high
    if not na(far5) and high > far5
        far5 := high
        
    /// === SL not na(trailing stop) ? Use Trailing Stop : Use Default Stop Loss === {
    if not na(close1) and (not na(far1) ? low <= far1 - syminfo.mintick * 10 * trailOffset : low <= close1 - syminfo.mintick * 10 * slPips)
        longPyramiding := longPyramiding - 1
        close1         := na
        far1           := na
    if not na(close2) and (not na(far2) ? low <= far2 - syminfo.mintick * 10 * trailOffset : low <= close2 - syminfo.mintick * 10 * slPips)
        longPyramiding := longPyramiding - 1
        close2         := na
        far2           := na
    if not na(close3) and (not na(far3) ? low <= far3 - syminfo.mintick * 10 * trailOffset : low <= close3 - syminfo.mintick * 10 * slPips)
        longPyramiding := longPyramiding - 1
        close3         := na
        far3           := na
    if not na(close4) and (not na(far4) ? low <= far4 - syminfo.mintick * 10 * trailOffset : low <= close4 - syminfo.mintick * 10 * slPips)
        longPyramiding := longPyramiding - 1
        close4         := na
        far4           := na
    if not na(close5) and (not na(far5) ? low <= far5 - syminfo.mintick * 10 * trailOffset : low <= close5 - syminfo.mintick * 10 * slPips)
        longPyramiding := longPyramiding - 1
        close5         := na
        far5           := na
    // }

// Log when long pyramiding changed
if longPyramiding[1] != longPyramiding[2]
    label.new(bar_index, high, tostring(longPyramiding[1]), xloc.bar_index, yloc.price, size = size.normal, color=color.blue, textcolor=color.white)

if shortPyramiding > 0
    // If Trail Stop was not triggered and distance is achieved saved it
    if na(far1) and low < close1 - syminfo.mintick * 10 * ttPips
        far1 := low
    if na(far2) and low < close2 - syminfo.mintick * 10 * ttPips
        far2 := low
    if na(far3) and low < close3 - syminfo.mintick * 10 * ttPips
        far3 := low
    if na(far4) and low < close4 - syminfo.mintick * 10 * ttPips
        far4 := low
    if na(far5) and low < close5 - syminfo.mintick * 10 * ttPips
        far5 := low
    
    // Update how far our position went
    if not na(far1) and low < far1
        far1 := low
    if not na(far2) and low < far2
        far2 := low
    if not na(far3) and low < far3
        far3 := low
    if not na(far4) and low < far4
        far4 := low
    if not na(far5) and low < far5
        far5 := low
        
    /// === SL not na(trailing stop) ? Use Trailing Stop : Use Default Stop Loss === {
    if not na(close1) and (not na(far1) ? high >= far1 + syminfo.mintick * 10 * trailOffset : high >= close1 + syminfo.mintick * 10 * slPips)
        shortPyramiding := shortPyramiding - 1
        close1          := na
        far1            := na
    if not na(close2) and (not na(far2) ? high >= far2 + syminfo.mintick * 10 * trailOffset : high >= close2 + syminfo.mintick * 10 * slPips)
        shortPyramiding := shortPyramiding - 1
        close2          := na
        far2            := na
    if not na(close3) and (not na(far3) ? high >= far3 + syminfo.mintick * 10 * trailOffset : high >= close3 + syminfo.mintick * 10 * slPips)
        shortPyramiding := shortPyramiding - 1
        close3          := na
        far3            := na
    if not na(close4) and (not na(far4) ? high >= far4 + syminfo.mintick * 10 * trailOffset : high >= close4 + syminfo.mintick * 10 * slPips)
        shortPyramiding := shortPyramiding - 1
        close4          := na
        far4            := na
    if not na(close5) and (not na(far5) ? high >= far5 + syminfo.mintick * 10 * trailOffset : high >= close5 + syminfo.mintick * 10 * slPips)
        shortPyramiding := shortPyramiding - 1
        close5          := na
        far5            := na
    // }

// Log when long pyramiding changed
if shortPyramiding[1] != shortPyramiding[2]
    label.new(bar_index, high + syminfo.mintick * 10 * 22, tostring(shortPyramiding[1]), xloc.bar_index, yloc.price, size = size.normal, color=color.red, textcolor=color.white)
// }

// === COMMENT IF STUDY === {
strategy.entry("Long",  strategy.long,  when = goLong  and longPyramiding  <= pyramiding)
strategy.entry("Short", strategy.short, when = goShort and shortPyramiding <= pyramiding)

strategy.exit("Exit Long",  "Long",  loss=slPips * 10, trail_points=ttPips * 10, trail_offset=trailOffset * 10)
strategy.exit("Exit Short", "Short", loss=slPips * 10, trail_points=ttPips * 10, trail_offset=trailOffset * 10)
// }

// === UNCOMMENT IF STUDY === {
// plot(ttPips,      title='TrailTrig',   color=na, display=display.none)
// plot(trailOffset, title='TrailOffset', color=na, display=display.none)
// plot(slPips,      title='LossPips',    color=na, display=display.none)

// string longTradeId     = 'tradeid=long{{ticker}}_PYRAMIDING_[MCRISTIANRIOS]'
// string shortTradeId    = 'tradeid=short{{ticker}}_PYRAMIDING_[MCRISTIANRIOS]'
// string basicTrade      = 'tradesymbol={{ticker}} sl={{plot("LossPips")}} trailtrig={{plot("TrailTrig")}} traildist={{plot("TrailOffset")}}'

// alertcondition(goLong  and longPyramiding  <= pyramiding, title='Long',   message='long '  + basicTrade + ' ' + longTradeId)
// alertcondition(goShort and shortPyramiding <= pyramiding, title='Short',  message='short ' + basicTrade + ' ' + shortTradeId)

// alertcondition(goLong  and longPyramiding  <= pyramiding, title='XShort', message='closepart part=1 ' + shortTradeId)
// alertcondition(goShort and shortPyramiding <= pyramiding, title='XLong',  message='closepart part=1 ' + longTradeId)
// }

// Background color for backtest
bgcolor(goLong[1] ? color.lime : goShort[1] ? color.red : na, transp=70)


مزید