وسائل لوڈ ہو رہے ہیں... لوڈنگ...

سکیز بیک ٹیسٹ ٹرانسفارمر v2.0

مصنف:چاؤ ژانگ، تاریخ: 2024-04-28 14:09:26
ٹیگز:

img

جائزہ

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

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

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

حکمت عملی کے فوائد

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

حکمت عملی کے خطرات

  1. داخلہ قیمت ، اسٹاپ نقصان کی قیمت اور منافع کی قیمت کا تعین حکمت عملی کی واپسی پر بہت زیادہ اثر پڑتا ہے۔ پیرامیٹر کی غلط ترتیبات نقصانات کا باعث بن سکتی ہیں۔
  2. جب مارکیٹ میں شدید اتار چڑھاؤ ہوتا ہے تو، ایک پوزیشن کھولنے کے فورا بعد سٹاپ نقصان شروع ہوسکتا ہے، جس کے نتیجے میں نقصانات ہوتے ہیں۔
  3. اگر زیادہ سے زیادہ انعقاد کا وقت پوزیشن کو بند کرنے کا سبب بنتا ہے تو ، یہ بعد میں منافع کے موقع سے محروم ہوسکتا ہے۔
  4. حکمت عملی کچھ خاص مارکیٹ کے حالات میں اچھی طرح سے کارکردگی کا مظاہرہ نہیں کر سکتی ہے (جیسے کہ ایک ضمنی مارکیٹ).

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

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

خلاصہ

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


/*backtest
start: 2023-04-22 00:00:00
end: 2024-04-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy(title="Squeeze Backtest by Shaqi v2.0", overlay=true, pyramiding=0, currency="USD", process_orders_on_close=true, commission_type=strategy.commission.percent, commission_value=0.075, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, backtest_fill_limits_assumption=0)
R0 = "6 Hours"
R1 = "12 Hours"
R2 = "24 Hours"
R3 = "48 Hours"
R4 = "1 Week"
R5 = "2 Weeks"
R6 = "1 Month"
R7 = "Maximum"

BL = "low"
BH = "high"
BO = "open"
BC = "close"
BHL= "mid (hl)"
BOC = "mid (oc)"

LONG = "LONG"
SHORT = "SHORT"

direction = input.string(title="Direction", defval=LONG, options=[LONG, SHORT], group="Squeeze Settings")
strategy.risk.allow_entry_in(direction == LONG ? strategy.direction.long : strategy.direction.short)
openPercent = input.float(1.4, "Open, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
closePercent = input.float(0.6, "Close, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
stopPercent = input.float(0.8, "Stop Loss, %", minval=0.01, maxval=100, step=0.1, inline="Percents", group="Squeeze Settings") * 0.01
isMaxBars = input.bool(true, "Max Bars To Sell", inline="MaxBars", group="Squeeze Settings")
maxBars = input.int(10, title="", minval=0, maxval=1000, step=1, inline="MaxBars", group="Squeeze Settings")
bind = input.string(BC, "Bind", options=[BL, BH, BO, BC, BHL, BOC], group="Squeeze Settings")
isRange = input.bool(true, "Fixed Range", inline="Range", group="Backtesting Period")
rangeStart = input.string(R2, "", options=[R0, R1, R2, R3, R4, R5, R6, R7], inline="Range", group="Backtesting Period")
periodStart = input(timestamp("12 Apr 2024 00:00 +0000"), "Backtesting Start", group="Backtesting Period")
periodEnd = input(timestamp("20 Apr 2024 00:00 +0000"), "Backtesting End", group="Backtesting Period")

int startDate = na
int endDate = na
if isRange
    if rangeStart == R0
        startDate := timenow - 21600000
        endDate := timenow
    else if rangeStart == R1
        startDate := timenow - 43200000
        endDate := timenow
    else if rangeStart == R2
        startDate := timenow - 86400000
        endDate := timenow
    else if rangeStart == R3
        startDate := timenow - 172800000
        endDate := timenow
    else if rangeStart == R4
        startDate := timenow - 604800000
        endDate := timenow
    else if rangeStart == R5
        startDate := timenow - 1209600000
        endDate := timenow
    else if rangeStart == R6
        startDate := timenow - 2592000000
        endDate := timenow
    else if rangeStart == R7
        startDate := time
        endDate := timenow
else 
    startDate := periodStart
    endDate := periodEnd
    
float bindOption = na
if bind == BL
    bindOption := low
else if bind == BH
    bindOption := high
else if bind == BO
    bindOption := open
else if bind == BC
    bindOption := close
else if bind == BHL
    bindOption := hl2
else
    bindOption := ohlc4

afterStartDate = (time >= startDate)
beforeEndDate = (time <= endDate)
periodCondition = true
notInTrade = strategy.position_size == 0
inTrade = strategy.position_size != 0

barsFromEntry = ta.barssince(strategy.position_size[0] > strategy.position_size[1])
entry = strategy.position_size[0] > strategy.position_size[1]
entryBar = barsFromEntry == 0
notEntryBar = barsFromEntry != 0
openLimitPrice = direction == LONG ? (bindOption - bindOption * openPercent) : (bindOption + bindOption * openPercent)

closeLimitPriceEntry = openLimitPrice * (direction == LONG ? 1 + closePercent : 1 - closePercent)
closeLimitPrice = strategy.position_avg_price * (direction == LONG ? 1 + closePercent : 1 - closePercent)

stopLimitPriceEntry = direction == LONG ? openLimitPrice - openLimitPrice * stopPercent : openLimitPrice + openLimitPrice * stopPercent
stopLimitPrice = direction == LONG ? strategy.position_avg_price - strategy.position_avg_price * stopPercent : strategy.position_avg_price + strategy.position_avg_price * stopPercent

if periodCondition and notInTrade
    strategy.entry(direction == LONG ? "BUY" : "SELL", direction == LONG ? strategy.long : strategy.short, limit = openLimitPrice, stop = stopLimitPriceEntry)
    strategy.exit("INSTANT", limit = closeLimitPriceEntry, stop = stopLimitPriceEntry, comment_profit = direction == LONG ? 'INSTANT SELL' : 'INSTANT BUY', comment_loss = 'INSTANT STOP')
if inTrade 
    strategy.cancel("INSTANT")
    strategy.exit(direction == LONG ? "SELL" : "BUY", limit = closeLimitPrice, stop = stopLimitPrice, comment_profit = direction == LONG ? "SELL" : "BUY", comment_loss = "STOP")
if isMaxBars and barsFromEntry == maxBars
    strategy.close_all(comment = "TIMEOUT STOP", immediately = true)



showStop = stopPercent <= 0.20

// plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=1)
// plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=1)
// plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=1)
plot(showStop ? stopLimitPrice : na, title="Stop Loss Limit Order", force_overlay=true, style=plot.style_linebr, color=#c50202, linewidth=1, offset=0)
plot(closeLimitPrice, title="Take Profit Limit Order", force_overlay=true, style=plot.style_linebr, color = direction == LONG ? color.red : color.blue, linewidth=1, offset=0)
plot(strategy.position_avg_price, title="Buy Order Filled Price", force_overlay=true, style=plot.style_linebr, color=direction == LONG ? color.blue : color.red, linewidth=1, offset=0)

plot(openLimitPrice, title="Trailing Open Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.blue : color.red, 30), offset=1)
plot(closeLimitPriceEntry, title="Trailing Close Position Limit Order", style=plot.style_stepline, color=color.new(direction == LONG ? color.red : color.blue, 80), offset=1)
plot(stopLimitPriceEntry, title="Trailing Stop Position Limit Order", style=plot.style_stepline, color=color.new(#c50202, 80), offset=1)



مزید