یہ حکمت عملی ایک مقدار کی تجارت کی حکمت عملی ہے جو دو طرفہ قیمت کے جھٹکے پر مبنی ہے۔ اس میں قیمت کے اہم معاون مزاحمت کی حیثیت سے اہم اعلی اور کم استعمال کیا جاتا ہے ، اور جب قیمت ایک اہم اونچائی کو توڑتی ہے تو زیادہ کام کرتی ہے ، اور جب وہ ایک اہم نچلی سطح کو توڑتی ہے تو اسے خالی کردیتی ہے ، دو طرفہ کارروائیوں کو پورا کرتی ہے۔
اس حکمت عملی کا بنیادی منطق دو طرفہ قیمتوں میں اہم نقطہ نظر پر مبنی ہے۔ خاص طور پر ، اس میں درج ذیل اقدامات ہیں:
ایک مخصوص دورانیے کے لئے Pivot High اور Low کا حساب لگائیں۔ یہاں ta.pivothigh () اور ta.pivotlow () فنکشنز کا استعمال کرتے ہوئے حالیہ 2 دن کی اعلی ترین قیمت کو اعلی ترین قیمت کے طور پر اور حالیہ 1 دن کی کم ترین قیمت کو کم ترین قیمت کے طور پر شمار کیا گیا ہے۔
جب قیمت اوپر حساب لگائی گئی اہم اونچائیوں کو توڑتی ہے تو ، زیادہ داخلہ کریں۔ جب قیمت اہم کم سے تجاوز کرتی ہے تو ، کم سے کم داخلہ۔
اسٹاپ نقصان کا استعمال کریں۔ جب زیادہ کام کیا جاتا ہے تو ، اسٹاپ نقصان کی قیمت اونچائی + کم سے کم قیمت میں تبدیلی کی اکائی ہوتی ہے۔ جب خالی ہوتا ہے تو ، اسٹاپ نقصان کی قیمت کم - کم سے کم قیمت میں تبدیلی کی اکائی ہوتی ہے۔
اس کے علاوہ، یہ آپ کو آپ کے کاروبار کے بارے میں معلومات فراہم کرتا ہے، اور آپ کو آپ کے کاروبار کے بارے میں معلومات فراہم کرتا ہے.
اس طرح ، جب قیمت میں ہلچل ہوتی ہے تو ، اہم نقطہ نظر کے وقت بروقت داخل ہونے اور تیزی سے روکنے کے قابل ہوجاتا ہے ، اس طرح منافع ہوتا ہے۔ جب قیمت نئی اونچائی یا نئی کم سے تجاوز کرتی ہے تو ، حکمت عملی متعدد بار جمع منافع حاصل کرسکتی ہے۔
اس طرح کی دو طرفہ حکمت عملی کے کچھ اہم فوائد ہیں:
آسان سمجھنے اور لاگو کرنے کے لئے آسان ہے ۔ اس حکمت عملی کو صرف Pivot اعلی اور کم نقطہ نظر کو توڑنے کی طرف سے داخل ہونے کے لئے، بہت آسان ہے ۔
اسٹاپ نقصان کو آسانی سے ترتیب دیں۔ زیادہ سے زیادہ کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم کم از کم سے کم کم از کم کم از کم از کم از کم سے کم کم از کم سے کم کم از کم کم سے کم کم از کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم سے کم کم
اس حکمت عملی کو دو طرفہ طور پر استعمال کیا جاسکتا ہے۔ اس حکمت عملی کو تجارت کے دوران یا اس کے بعد بھی استعمال کیا جاسکتا ہے ، اور اس سے فائدہ اٹھایا جاسکتا ہے۔
اسٹریٹجی کے لئے موزوں ہے۔ جب قیمت میں بار بار اضافہ اور کمی ہوتی ہے تو ، حکمت عملی اکثر میدان میں داخل ہوسکتی ہے اور منافع کما سکتی ہے۔
اس حکمت عملی کے فوائد کے باوجود ، کچھ خطرات ہیں جن کے بارے میں آگاہ رہنا ضروری ہے:
اہم نقطہ کی غلط شناخت نقصانات میں اضافہ کر سکتی ہے۔ اگر اہم اعلی اور کم نقطہ کی غلط ترتیب ہو تو ، انتہائی صورتوں میں ، اس کا پیچھا کیا جاسکتا ہے۔
یہ حکمت عملی اس وقت منافع کمانے کے لئے بہت مشکل ہے جب قیمتوں میں ہلچل کی بجائے یکطرفہ توڑ شروع ہوجائے۔
بریک اپ ایک مختصر مدت کا جھوٹا بریک اپ ہوسکتا ہے۔ مختصر مدت میں بھی جھوٹا بریک اپ ہوسکتا ہے ، جس سے حکمت عملی غلط تجارت پیدا کرتی ہے۔
مجموعی طور پر ، یہ حکمت عملی زلزلے کے حالات میں استعمال کرنے کے لئے موزوں ہے۔ سرمایہ کاروں کو محتاط رہنے کی ضرورت ہے کہ وہ رجحان کے حالات میں اس حکمت عملی کو استعمال کرنے سے گریز کریں۔
مذکورہ بالا خطرات کو مدنظر رکھتے ہوئے ، اس حکمت عملی میں اصلاحات کے لئے بنیادی طور پر درج ذیل پہلوؤں پر گنجائش ہے۔
ذہین انتخاب کلیدی اعلی اور کم پوائنٹ پیرامیٹرز۔ مشین لرننگ جیسے ذرائع کے ذریعہ ، نظام کو خود بخود مناسب کلیدی پوائنٹ پیرامیٹرز کا انتخاب کرنے کے لئے بہتر بنانے کی اجازت دی جاسکتی ہے۔
رجحان کا فیصلہ کرنے کے ساتھ۔ حکمت عملی کی بنیاد پر رجحان کا فیصلہ کرنے کی منطق میں اضافہ کریں ، اس حکمت عملی کو زلزلے کے حالات میں استعمال کریں ، اور ایک طرفہ رجحان میں حکمت عملی کو بند کردیں ، اور اس طرح نقصان کو کم کریں۔
اضافی اسٹاپ اسٹریٹجی۔ آپ کو مزید خطرہ پر قابو پانے کے ل more زیادہ نفیس اسٹاپ اسٹریٹجی جیسے چلنے والی اسٹاپ ، وقفے وقفے سے توڑنے والی اسٹاپ وغیرہ ڈیزائن کرنے کی اجازت ہے۔
یہ حکمت عملی ایک سادہ عملی دو طرفہ توڑنے کی حکمت عملی ہے۔ یہ قیمت کے اہم نکات پر توڑنے پر انحصار کرتا ہے ، اور اس کا خطرہ قابو میں ہے۔ یہ حکمت عملی ہلچل کی صورتحال کے لئے موزوں ہے ، جس سے دو طرفہ تجارت منافع بخش ہوسکتی ہے۔ تاہم ، اس حکمت عملی میں کچھ خطرات بھی موجود ہیں ، سرمایہ کاروں کو احتیاط سے استعمال کرنے کی ضرورت ہے ، اور اس میں بہتر بنانے کی گنجائش ذہین انتخاب کے پیرامیٹرز ، رجحانات کے ساتھ مل کر ، اور مزید نفیس اسٹاپ نقصان کی حکمت عملی کو ڈیزائن کرنے میں ہے۔
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy('Monthly Returns with Benchmark', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=25, commission_type=strategy.commission.percent, commission_value=0.1)
////////////
// Inputs //
// Pivot points inputs
leftBars = input(2, group = "Pivot Points")
rightBars = input(1, group = "Pivot Points")
// Styling inputs
prec = input(2, title='Return Precision', group = "Monthly Table")
from_date = input(timestamp("01 Jan 2000 00:00 +0000"), "From Date", group = "Monthly Table")
prof_color = input.color(color.green, title = "Gradient Colors", group = "Monthly Table", inline = "colors")
loss_color = input.color(color.red, title = "", group = "Monthly Table", inline = "colors")
// Benchmark inputs
use_cur = input.bool(true, title = "Use current Symbol for Benchmark", group = "Benchmark")
symb_bench = input('BTC_USDT:swap', title = "Benchmark", group = "Benchmark")
disp_bench = input.bool(true, title = "Display Benchmark?", group = "Benchmark")
disp_alpha = input.bool(true, title = "Display Alpha?", group = "Benchmark")
// Pivot Points Strategy
swh = ta.pivothigh(leftBars, rightBars)
swl = ta.pivotlow(leftBars, rightBars)
hprice = 0.0
hprice := not na(swh) ? swh : hprice[1]
lprice = 0.0
lprice := not na(swl) ? swl : lprice[1]
le = false
le := not na(swh) ? true : le[1] and high > hprice ? false : le[1]
se = false
se := not na(swl) ? true : se[1] and low < lprice ? false : se[1]
if le
strategy.entry('PivRevLE', strategy.long, comment='PivRevLE', stop=hprice + syminfo.mintick)
if se
strategy.entry('PivRevSE', strategy.short, comment='PivRevSE', stop=lprice - syminfo.mintick)
plot(hprice, color=color.new(color.green, 0), linewidth=2)
plot(lprice, color=color.new(color.red, 0), linewidth=2)
///////////////////
// MONTHLY TABLE //
new_month = month(time) != month(time[1])
new_year = year(time) != year(time[1])
eq = strategy.equity
bench_eq = close
// benchmark eq
bench_eq_htf = request.security(symb_bench, timeframe.period, close)
if (not use_cur)
bench_eq := bench_eq_htf
bar_pnl = eq / eq[1] - 1
bench_pnl = bench_eq / bench_eq[1] - 1
cur_month_pnl = 0.0
cur_year_pnl = 0.0
// Current Monthly P&L
cur_month_pnl := bar_index == 0 ? 0 :
time >= from_date and (time[1] < from_date or new_month) ? bar_pnl :
(1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1
// Current Yearly P&L
cur_year_pnl := bar_index == 0 ? 0 :
time >= from_date and (time[1] < from_date or new_year) ? bar_pnl :
(1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
bench_cur_month_pnl = 0.0
bench_cur_year_pnl = 0.0
// Current Monthly P&L - Bench
bench_cur_month_pnl := bar_index == 0 or (time[1] < from_date and time >= from_date) ? 0 :
time >= from_date and new_month ? bench_pnl :
(1 + bench_cur_month_pnl[1]) * (1 + bench_pnl) - 1
// Current Yearly P&L - Bench
bench_cur_year_pnl := bar_index == 0 ? 0 :
time >= from_date and (time[1] < from_date or new_year) ? bench_pnl :
(1 + bench_cur_year_pnl[1]) * (1 + bench_pnl) - 1
var month_time = array.new_int(0)
var year_time = array.new_int(0)
var month_pnl = array.new_float(0)
var year_pnl = array.new_float(0)
var bench_month_pnl = array.new_float(0)
var bench_year_pnl = array.new_float(0)
// Filling monthly / yearly pnl arrays
if array.size(month_time) > 0
if month(time) == month(array.get(month_time, array.size(month_time) - 1))
array.pop(month_pnl)
array.pop(bench_month_pnl)
array.pop(month_time)
if array.size(year_time) > 0
if year(time) == year(array.get(year_time, array.size(year_time) - 1))
array.pop(year_pnl)
array.pop(bench_year_pnl)
array.pop(year_time)
if (time >= from_date)
array.push(month_time, time)
array.push(year_time, time)
array.push(month_pnl, cur_month_pnl)
array.push(year_pnl, cur_year_pnl)
array.push(bench_year_pnl, bench_cur_year_pnl)
array.push(bench_month_pnl, bench_cur_month_pnl)
// Monthly P&L Table
var monthly_table = table(na)
if array.size(year_pnl) > 0 and barstate.islastconfirmedhistory
monthly_table := table.new(position.bottom_right, columns=15, rows=array.size(year_pnl) * 3 + 5, border_width=1)
// Fill monthly performance
table.cell(monthly_table, 0, 0, 'Perf', bgcolor = #999999)
table.cell(monthly_table, 1, 0, 'Jan', bgcolor = #999999)
table.cell(monthly_table, 2, 0, 'Feb', bgcolor = #999999)
table.cell(monthly_table, 3, 0, 'Mar', bgcolor = #999999)
table.cell(monthly_table, 4, 0, 'Apr', bgcolor = #999999)
table.cell(monthly_table, 5, 0, 'May', bgcolor = #999999)
table.cell(monthly_table, 6, 0, 'Jun', bgcolor = #999999)
table.cell(monthly_table, 7, 0, 'Jul', bgcolor = #999999)
table.cell(monthly_table, 8, 0, 'Aug', bgcolor = #999999)
table.cell(monthly_table, 9, 0, 'Sep', bgcolor = #999999)
table.cell(monthly_table, 10, 0, 'Oct', bgcolor = #999999)
table.cell(monthly_table, 11, 0, 'Nov', bgcolor = #999999)
table.cell(monthly_table, 12, 0, 'Dec', bgcolor = #999999)
table.cell(monthly_table, 13, 0, ' ', bgcolor = #999999)
table.cell(monthly_table, 14, 0, 'Year', bgcolor = #999999)
max_abs_y = math.max(math.abs(array.max(year_pnl)), math.abs(array.min(year_pnl)))
max_abs_m = math.max(math.abs(array.max(month_pnl)), math.abs(array.min(month_pnl)))
for yi = 0 to array.size(year_pnl) - 1 by 1
table.cell(monthly_table, 0, yi + 1, str.tostring(year(array.get(year_time, yi))), bgcolor=#cccccc)
table.cell(monthly_table, 13, yi + 1, ' ', bgcolor=#999999)
y_color = color.from_gradient(array.get(year_pnl, yi), -max_abs_y, max_abs_y, loss_color, prof_color)
table.cell(monthly_table, 14, yi + 1, str.tostring(math.round(array.get(year_pnl, yi) * 100, prec)), bgcolor=y_color)
for mi = 0 to array.size(month_time) - 1 by 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 = color.from_gradient(array.get(month_pnl, mi), -max_abs_m, max_abs_m, loss_color, prof_color)
table.cell(monthly_table, m_col, m_row, str.tostring(math.round(array.get(month_pnl, mi) * 100, prec)), bgcolor=m_color)
// Fill benchmark performance
next_row = array.size(year_pnl) + 1
if (disp_bench)
table.cell(monthly_table, 0, next_row, 'Bench', bgcolor=#999999)
table.cell(monthly_table, 1, next_row, 'Jan', bgcolor=#999999)
table.cell(monthly_table, 2, next_row, 'Feb', bgcolor=#999999)
table.cell(monthly_table, 3, next_row, 'Mar', bgcolor=#999999)
table.cell(monthly_table, 4, next_row, 'Apr', bgcolor=#999999)
table.cell(monthly_table, 5, next_row, 'May', bgcolor=#999999)
table.cell(monthly_table, 6, next_row, 'Jun', bgcolor=#999999)
table.cell(monthly_table, 7, next_row, 'Jul', bgcolor=#999999)
table.cell(monthly_table, 8, next_row, 'Aug', bgcolor=#999999)
table.cell(monthly_table, 9, next_row, 'Sep', bgcolor=#999999)
table.cell(monthly_table, 10, next_row, 'Oct', bgcolor=#999999)
table.cell(monthly_table, 11, next_row, 'Nov', bgcolor=#999999)
table.cell(monthly_table, 12, next_row, 'Dec', bgcolor=#999999)
table.cell(monthly_table, 13, next_row, ' ', bgcolor = #999999)
table.cell(monthly_table, 14, next_row, 'Year', bgcolor=#999999)
max_bench_abs_y = math.max(math.abs(array.max(bench_year_pnl)), math.abs(array.min(bench_year_pnl)))
max_bench_abs_m = math.max(math.abs(array.max(bench_month_pnl)), math.abs(array.min(bench_month_pnl)))
for yi = 0 to array.size(year_time) - 1 by 1
table.cell(monthly_table, 0, yi + 1 + next_row + 1, str.tostring(year(array.get(year_time, yi))), bgcolor=#cccccc)
table.cell(monthly_table, 13, yi + 1 + next_row + 1, ' ', bgcolor=#999999)
y_color = color.from_gradient(array.get(bench_year_pnl, yi), -max_bench_abs_y, max_bench_abs_y, loss_color, prof_color)
table.cell(monthly_table, 14, yi + 1 + next_row + 1, str.tostring(math.round(array.get(bench_year_pnl, yi) * 100, prec)), bgcolor=y_color)
for mi = 0 to array.size(month_time) - 1 by 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 = color.from_gradient(array.get(bench_month_pnl, mi), -max_bench_abs_m, max_bench_abs_m, loss_color, prof_color)
table.cell(monthly_table, m_col, m_row + next_row + 1, str.tostring(math.round(array.get(bench_month_pnl, mi) * 100, prec)), bgcolor=m_color)
// Fill Alpha
if (disp_alpha)
next_row := array.size(year_pnl) * 2 + 3
table.cell(monthly_table, 0, next_row, 'Alpha', bgcolor=#999999)
table.cell(monthly_table, 1, next_row, 'Jan', bgcolor=#999999)
table.cell(monthly_table, 2, next_row, 'Feb', bgcolor=#999999)
table.cell(monthly_table, 3, next_row, 'Mar', bgcolor=#999999)
table.cell(monthly_table, 4, next_row, 'Apr', bgcolor=#999999)
table.cell(monthly_table, 5, next_row, 'May', bgcolor=#999999)
table.cell(monthly_table, 6, next_row, 'Jun', bgcolor=#999999)
table.cell(monthly_table, 7, next_row, 'Jul', bgcolor=#999999)
table.cell(monthly_table, 8, next_row, 'Aug', bgcolor=#999999)
table.cell(monthly_table, 9, next_row, 'Sep', bgcolor=#999999)
table.cell(monthly_table, 10, next_row, 'Oct', bgcolor=#999999)
table.cell(monthly_table, 11, next_row, 'Nov', bgcolor=#999999)
table.cell(monthly_table, 12, next_row, 'Dec', bgcolor=#999999)
table.cell(monthly_table, 13, next_row, '', bgcolor=#999999)
table.cell(monthly_table, 14, next_row, 'Year', bgcolor=#999999)
max_alpha_abs_y = 0.0
for yi = 0 to array.size(year_time) - 1 by 1
if (math.abs(array.get(year_pnl, yi) - array.get(bench_year_pnl, yi)) > max_alpha_abs_y)
max_alpha_abs_y := math.abs(array.get(year_pnl, yi) - array.get(bench_year_pnl, yi))
max_alpha_abs_m = 0.0
for mi = 0 to array.size(month_pnl) - 1 by 1
if (math.abs(array.get(month_pnl, mi) - array.get(bench_month_pnl, mi)) > max_alpha_abs_m)
max_alpha_abs_m := math.abs(array.get(month_pnl, mi) - array.get(bench_month_pnl, mi))
for yi = 0 to array.size(year_time) - 1 by 1
table.cell(monthly_table, 0, yi + 1 + next_row + 1, str.tostring(year(array.get(year_time, yi))), bgcolor=#cccccc)
table.cell(monthly_table, 13, yi + 1 + next_row + 1, ' ', bgcolor=#999999)
y_color = color.from_gradient(array.get(year_pnl, yi) - array.get(bench_year_pnl, yi), -max_alpha_abs_y, max_alpha_abs_y, loss_color, prof_color)
table.cell(monthly_table, 14, yi + 1 + next_row + 1, str.tostring(math.round((array.get(year_pnl, yi) - array.get(bench_year_pnl, yi)) * 100, prec)), bgcolor=y_color)
for mi = 0 to array.size(month_time) - 1 by 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 = color.from_gradient(array.get(month_pnl, mi) - array.get(bench_month_pnl, mi), -max_alpha_abs_m, max_alpha_abs_m, loss_color, prof_color)
table.cell(monthly_table, m_col, m_row + next_row + 1, str.tostring(math.round((array.get(month_pnl, mi) - array.get(bench_month_pnl, mi)) * 100, prec)), bgcolor=m_color)