وال سٹریٹ سی سی آئی انڈیکس پر مبنی ارتباط پر مبنی بولش/بیئرش کریپٹو ٹریڈنگ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2023-11-01 11:27:20
ٹیگز:

img

جائزہ

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

ڈیفالٹ پیرامیٹرز اور ETH / USDT کے ساتھ بیس علامت کے طور پر ، حکمت عملی میں DENT / USDT ، BTT / USDT ، FTT / USDT ، DOT / USDT وغیرہ جیسی علامتوں پر بیک ٹسٹ کے اچھے نتائج دکھائے گئے ہیں۔ یہ سمجھ میں آتا ہے کیونکہ ETH کریپٹو مارکیٹوں میں کافی اثر و رسوخ رکھتا ہے لہذا بہت سے کریپٹو ETH کی بڑی نقل و حرکت کی پیروی کرتے ہیں۔

نوٹ: ڈیفالٹ پیرامیٹرز کے ساتھ حکمت عملی کا مقصد 4h ٹائم فریم ہے۔ دوسرے ٹائم فریم پر ، مختلف سپورٹ کی لمبائی آزمائیں۔

حکمت عملی کیسے کام کرتی ہے

  1. ایک WMA بیس علامت پر حساب لگایا جاتا ہے، ڈیفالٹ کی طرف سے لمبائی 200 کے ساتھ.

  2. جب ڈبلیو ایم اے بڑھ رہا ہے تو، لمبا کرو. جب گر رہا ہے تو مختصر کرو.

  3. لانگ/شارٹ کے لئے ٹیک پروفیٹ اور لانگ/شارٹ کے لئے اسٹاپ لوس کا حساب فیصد ہے لہذا 0.05 = 5٪ وغیرہ۔ نیز ، ٹیک پروفیٹ/اسٹاپ لوس کا حساب بیس علامت پر نہیں بلکہ چارٹ کی علامت پر کیا جاتا ہے۔

  4. حکمت عملی مندرجہ ذیل منطق پر مبنی داخلہ اور باہر نکلنے کے لئے مارکیٹ کے احکامات کا استعمال کرتی ہے:

    • جب WMA بڑھ رہا ہے اور کوئی پوزیشن نہیں، طویل اندراج

    • جب WMA گر رہا ہے اور کوئی پوزیشن نہیں ہے، مختصر اندراج

    • جب طویل پوزیشن منافع >= TakeProfitLong فیصد، بند طویل

    • جب مختصر پوزیشن منافع >= TakeProfitShort فیصد، مختصر بند

    • جب لمبی پوزیشن کا نقصان >= اسٹاپ نقصان لمبی فیصد ، لمبی بندش

    • جب مختصر پوزیشن نقصان >= اسٹاپ نقصان مختصر فیصد، مختصر بند

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

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

  1. یہ حکمت عملی پیرامیٹرز کو ایڈجسٹ کرکے متعدد کریپٹو کرنسیوں پر استعمال کے لئے انتہائی موافقت پذیر ہے۔

  2. رجحان کا تعین کرنے کے لئے وال اسٹریٹ سی سی آئی کا استعمال کرتے ہوئے شور کی وجہ سے غلط تجارت سے بچتا ہے۔ سی سی آئی نے غلط بریک آؤٹ نقصانات سے بچنے میں مدد کرنے کے لئے بریک آؤٹ میں تاخیر کی ہے۔

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

  4. بغیر دستی مداخلت کے مکمل طور پر خودکار تجارت 24/7 رن ٹائم کی اجازت دیتی ہے۔

خطرے کا تجزیہ

  1. ہدف کریپٹو قیمت کو بیس کریپٹو سے الگ کرنے کا خطرہ ، جس سے حکمت عملی کی ناکامی کا باعث بنتا ہے۔ متعدد بیس کریپٹو کا استعمال کرکے اور سب سے زیادہ وابستہ کو منتخب کرکے بہتر بنایا جاسکتا ہے۔

  2. اچانک اتار چڑھاؤ کے خطرے کو پوزیشنوں کو روکنے کے لۓ. سٹاپ نقصان فی صد کو ایڈجسٹ کرسکتے ہیں یا پیچھے رکنے کا استعمال کرسکتے ہیں.

  3. ٹیک پروفیٹ کا خطرہ فیصد کافی رجحان کے فوائد پر قبضہ کرنے کے لئے بہت کم ہے۔ رجحان کی پیروی یا متحرک منافع لے سکتے ہیں۔

  4. غلط بریک آؤٹ کا خطرہ جس سے اسٹاپ نقصان سے باہر نکلنا پڑتا ہے۔ سی سی آئی پیرامیٹرز کو ٹون کر سکتے ہیں یا دوبارہ اندراج کی منطق شامل کرسکتے ہیں۔

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

  1. متعدد بیس کرپٹو کے مابین ارتباط کا تجزیہ کریں اور سنگل بیس کرپٹو کے خطرے کو کم کرنے کے لئے اشارے کو جوڑیں۔

  2. رجحان ٹریکنگ کو شامل کریں تاکہ اتار چڑھاؤ کی بنیاد پر TakeProfit / StopLoss کو متحرک طور پر ایڈجسٹ کیا جاسکے۔

  3. پوزیشنوں کو روکنے والے انتہائی چالوں کو روکنے کے لئے مرحلے وار اسٹاپ شامل کریں.

  4. سٹاپ نقصان سے باہر نکلنے کے بعد مزید رجحانات کو یاد کرنے سے بچنے کے لئے دوبارہ داخلہ منطق شامل کریں.

  5. سی سی آئی پیرامیٹرز اور ترتیبات کو بہتر بنانے کے لئے سگنل کی تاثیر کو بہتر بنانے کے لئے.

  6. موافقت کو بہتر بنانے کے لئے ہر ہدف کریپٹو کے لئے الگ الگ پیرامیٹرز کو بہتر بنائیں۔

  7. اکاؤنٹ کے سائز کی بنیاد پر پوزیشن سائزنگ کو بہتر بنائیں.

خلاصہ

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


/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
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/
// © levieux

//@version=5
strategy(title='Correlation Strategy', shorttitle='Correlation Strategy', initial_capital=1000, overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)

supportLength = input.int(200, minval=1, title='Support Length')
supportSymbol = input('BTC_USDT:swap', title='Correlated Symbol')
supportSource = input(hlc3, title='Price Source')
takeprofitLong = input.float(0.2, 'Take Profit Long', step=0.01)
takeprofitShort = input.float(0.15, 'Take Profit Short', step=0.01)
stoplossLong = input.float(0.1, 'Stop Loss Long', step=0.01)
stoplossShort = input.float(0.04, 'Stop Loss Short', step=0.01)
start = input(defval = timestamp("01 Jan 2016 00:00 +0000"), title = "Start Time")
end = input(defval = timestamp("31 Dec 2050 23:59 +0000"), title = "End Time")

supportTicker = request.security(supportSymbol, timeframe.period, supportSource, lookahead=barmerge.lookahead_off)  //input(close, title="Source")
supportLine = ta.wma(supportTicker, supportLength)

window() => true

if not window()
    strategy.cancel_all()

supportLongPrice = close
supportShortPrice = close

if strategy.position_size > 0
    supportLongPrice := supportLongPrice[1]
if strategy.position_size < 0
    supportShortPrice := supportShortPrice[1]

longCondition = ta.rising(supportLine, 5) and window() and strategy.position_size <= 0
shortCondition = ta.falling(supportLine, 5) and window() and window() and strategy.position_size > 0
takeprofitLongCondition = takeprofitLong > 0 and window() and strategy.position_size > 0 and supportTicker > supportLongPrice * (1 + takeprofitLong)
stoplossLongCondition = stoplossLong > 0 and window() and strategy.position_size > 0 and supportTicker < supportLongPrice * (1 - stoplossLong)
takeprofitShortCondition = takeprofitShort > 0 and window() and strategy.position_size < 0 and supportTicker > supportShortPrice * (1 + takeprofitShort)
stoplossShortCondition = stoplossShort > 0 and window() and strategy.position_size < 0 and supportTicker < supportShortPrice * (1 - stoplossShort)

if longCondition
    strategy.entry('Long', strategy.long)
    supportLongPrice := supportTicker

if shortCondition
    strategy.entry('Short', strategy.short)
    supportShortPrice := supportTicker

if takeprofitLongCondition
    strategy.close('Long')
if stoplossLongCondition
    strategy.close('Long')
if takeprofitShortCondition
    strategy.close('Short')
if stoplossShortCondition
    strategy.close('Short')

///////////////////
// MONTHLY TABLE //

new_month = month(time) != month(time[1])
new_year  = year(time)  != year(time[1])

eq = strategy.equity

bar_pnl = eq / eq[1] - 1
bar_bh = (close-close[1])/close[1]

cur_month_pnl = 0.0
cur_year_pnl  = 0.0
cur_month_bh = 0.0
cur_year_bh  = 0.0

// Current Monthly P&L
cur_month_pnl := new_month ? 0.0 : 
                 (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1 
cur_month_bh := new_month ? 0.0 : 
                 (1 + cur_month_bh[1]) * (1 + bar_bh) - 1

// Current Yearly P&L
cur_year_pnl := new_year ? 0.0 : 
                 (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
cur_year_bh := new_year ? 0.0 : 
                 (1 + cur_year_bh[1]) * (1 + bar_bh) - 1

// Arrays to store Yearly and Monthly P&Ls
var month_pnl  = array.new_float(0)
var month_time = array.new_int(0)
var month_bh  = array.new_float(0)

var year_pnl  = array.new_float(0)
var year_time = array.new_int(0)
var year_bh  = array.new_float(0)

end_time = false

end_time:= time_close + (time_close - time_close[1]) > timenow or barstate.islastconfirmedhistory

if (not na(cur_month_pnl[1]) and (new_month or end_time))
    if (end_time[1])
        array.pop(month_pnl)
        array.pop(month_time)
        
    array.push(month_pnl , cur_month_pnl[1])
    array.push(month_time, time[1])
    array.push(month_bh , cur_month_bh[1])

if (not na(cur_year_pnl[1]) and (new_year or end_time))
    if (end_time[1])
        array.pop(year_pnl)
        array.pop(year_time)
        
    array.push(year_pnl , cur_year_pnl[1])
    array.push(year_time, time[1])
    array.push(year_bh , cur_year_bh[1])

// Monthly P&L Table    
var monthly_table = table(na)

getCellColor(pnl, bh)  => 
    if pnl > 0
        if bh < 0 or pnl > 2 * bh
            color.new(color.green, transp = 20)
        else if pnl > bh
            color.new(color.green, transp = 50)
        else
            color.new(color.green, transp = 80)
    else
        if bh > 0 or pnl < 2 * bh
            color.new(color.red, transp = 20)
        else if pnl < bh
            color.new(color.red, transp = 50)
        else
            color.new(color.red, transp = 80)

if end_time
    monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_pnl) + 1, border_width = 1)

    table.cell(monthly_table, 0,  0, "",     bgcolor = #cccccc)
    table.cell(monthly_table, 1,  0, "Jan",  bgcolor = #cccccc)
    table.cell(monthly_table, 2,  0, "Feb",  bgcolor = #cccccc)
    table.cell(monthly_table, 3,  0, "Mar",  bgcolor = #cccccc)
    table.cell(monthly_table, 4,  0, "Apr",  bgcolor = #cccccc)
    table.cell(monthly_table, 5,  0, "May",  bgcolor = #cccccc)
    table.cell(monthly_table, 6,  0, "Jun",  bgcolor = #cccccc)
    table.cell(monthly_table, 7,  0, "Jul",  bgcolor = #cccccc)
    table.cell(monthly_table, 8,  0, "Aug",  bgcolor = #cccccc)
    table.cell(monthly_table, 9,  0, "Sep",  bgcolor = #cccccc)
    table.cell(monthly_table, 10, 0, "Oct",  bgcolor = #cccccc)
    table.cell(monthly_table, 11, 0, "Nov",  bgcolor = #cccccc)
    table.cell(monthly_table, 12, 0, "Dec",  bgcolor = #cccccc)
    table.cell(monthly_table, 13, 0, "Year", bgcolor = #999999)


    for yi = 0 to array.size(year_pnl) - 1
        table.cell(monthly_table, 0,  yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor = #cccccc)
        
        y_color = getCellColor(array.get(year_pnl, yi), array.get(year_bh, yi))
        table.cell(monthly_table, 13, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100)) + " (" + str.tostring(math.round(array.get(year_bh, yi) * 100)) + ")", bgcolor = y_color)
        
    for mi = 0 to array.size(month_time) - 1
        m_row   = year(array.get(month_time, mi))  - year(array.get(year_time, 0)) + 1
        m_col   = month(array.get(month_time, mi)) 
        m_color = getCellColor(array.get(month_pnl, mi), array.get(month_bh, mi))
        
        table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100)) + " (" + str.tostring(math.round(array.get(month_bh, mi) * 100)) +")", bgcolor = m_color)

مزید