
اس حکمت عملی میں رجحان کی سمت کا تعین کرنے کے لئے دو مختلف ادوار کی سادہ حرکت پذیر اوسط کی کراسنگ کا استعمال کیا جاتا ہے ، اور جب رجحان ہوتا ہے تو تجارت کی جاتی ہے۔ اس کے ساتھ ہی ، اس حکمت عملی میں ایک متوقع پینل بھی متعارف کرایا گیا ہے جس کا استعمال اس حکمت عملی کے متوقع منافع کو مختلف ٹائم اسکیل کے تحت حساب کرنے اور ظاہر کرنے کے لئے کیا جاتا ہے تاکہ صارفین حکمت عملی کی کارکردگی کا بہتر اندازہ لگاسکیں۔ اس حکمت عملی میں کلیدی اشارے جیسے تاریخی دورانیے میں جیت ، اوسط منافع اور اوسط نقصانات کو مدنظر رکھا گیا ہے ، جس سے یہ ظاہر ہوتا ہے کہ حکمت عملی مختلف مارکیٹ کے حالات میں کس طرح کی کارکردگی کا مظاہرہ کرتی ہے۔
اس حکمت عملی کا مرکز مارکیٹ کے رجحانات کا تعین کرنے کے لئے دو مختلف ادوار (اس معاملے میں 14 اور 28 دن) کی سادہ حرکت پذیر اوسط کا استعمال کرنا ہے۔ جب مختصر مدت کی اوسط نیچے سے اوپر کی طرف سے طویل مدتی اوسط کو عبور کرتی ہے تو ، مارکیٹ کو اوپر کی طرف جانے کے لئے سمجھا جاتا ہے ، حکمت عملی زیادہ پوزیشن کھولتی ہے۔ اس کے برعکس ، جب مختصر مدت کی اوسط اوپر سے نیچے کی طرف سے طویل مدتی اوسط کو عبور کرتی ہے تو ، مارکیٹ کو نیچے کی طرف جانے کے لئے سمجھا جاتا ہے ، حکمت عملی خالی پوزیشن کھولتی ہے۔ اس طرح ، حکمت عملی مختلف مارکیٹ کے رجحانات کے مطابق ڈھال سکتی ہے ، اور جب رجحانات ہوتے ہیں تو بروقت پوزیشن بناسکتی ہے تاکہ اس رجحان سے فائدہ اٹھایا جاسکے۔
بنیادی رجحانات اور تجارتی منطق کے علاوہ ، حکمت عملی میں ایک متوقع قیمت پینل بھی متعارف کرایا گیا ہے جس میں حکمت عملی کے متوقع منافع کو مختلف ٹائم اسکیل (ماہانہ اور سالانہ) پر حساب اور ظاہر کرنے کے لئے استعمال کیا جاتا ہے۔ متوقع قیمت کا حساب حکمت عملی کے تاریخی دورانیے میں کلیدی اعدادوشمار پر مبنی ہے ، جس میں شامل ہیں:
ان اشارے کا استعمال کرتے ہوئے، اس وقت کی مدت کے لئے حکمت عملی کی توقع کی قیمت کا حساب لگایا جا سکتا ہے: متوقع قیمت = جیت کی شرح × اوسط منافع - (1 - جیت کی شرح) × اوسط نقصان
چارٹ پر مختلف ٹائم فریموں کے لئے متوقع اقدار کو ہیٹ گراف کی شکل میں دکھا کر ، صارف کو ایک نظر میں حکمت عملی کی مختلف مارکیٹ کے حالات میں متوقع کارکردگی کا اندازہ لگایا جاسکتا ہے ، جس سے حکمت عملی کے اطلاق اور خطرات کا بہتر اندازہ لگایا جاسکتا ہے۔
رجحانات کے مطابق ڈھالنے کی صلاحیت: اس حکمت عملی کو رجحانات کا اندازہ لگانے کے لئے متحرک اوسط کی کراسنگ کا استعمال کرتے ہوئے ، مارکیٹ کے مختلف رجحانات کے تحت پوزیشنوں کو بروقت ایڈجسٹ کرنے کے قابل بناتا ہے۔ اس سے حکمت عملی کو رجحانات والے بازاروں میں بہتر منافع حاصل کرنے کی اجازت ملتی ہے۔
بصری کارکردگی کی تشخیص: بلٹ ان متوقع قیمت پینل ایک ہیٹ گراف کی شکل میں حکمت عملی کی متوقع آمدنی کو مختلف ٹائم فریموں میں ظاہر کرتا ہے ، صارف کو مختلف مارکیٹ کے حالات میں حکمت عملی کی کارکردگی کا جائزہ لینے کی اجازت دیتا ہے۔ اس طرح کی بصری کارکردگی کا مظاہرہ صارف کو مزید فیصلہ سازی کے حوالہ فراہم کرتا ہے۔
کلیدی اعدادوشمار پر غور کیا گیا: متوقع قیمت کا حساب کتاب نہ صرف حکمت عملی کی جیت کی شرح پر غور کرتا ہے ، بلکہ اوسط منافع اور اوسط نقصان کے اثرات کو بھی شامل کرتا ہے۔ اس حساب کتاب کا طریقہ حکمت عملی کی اصل کارکردگی کو زیادہ جامع اور زیادہ درست طریقے سے ظاہر کرنے کے قابل ہے ، اور صارفین کو زیادہ قابل اعتماد حوالہ فراہم کرتا ہے۔
لچکدار پیرامیٹرز کی ترتیب: صارف اپنی مرضی کے مطابق چارٹ کی نمائش کو ایڈجسٹ کرنے اور استعمال کے تجربے کو بہتر بنانے کے قابل بناتا ہے۔
اتار چڑھاؤ والے بازاروں میں ناقص کارکردگی: چونکہ حکمت عملی کا فائدہ اٹھانے کے لئے رجحانات پر زیادہ انحصار ہوتا ہے ، لہذا اتار چڑھاؤ والے بازاروں یا غیر واضح مارکیٹ کے ماحول میں ، بار بار تجارت سے بڑے پیمانے پر پوائنٹس اور تجارت کی لاگت آسکتی ہے ، جس سے حکمت عملی کی مجموعی کارکردگی متاثر ہوتی ہے۔
توقعات کی پیمائش کی حدود: اگرچہ توقعات کا پینل حکمت عملی کی کارکردگی کا اندازہ لگانے کا ایک بدیہی طریقہ فراہم کرتا ہے ، لیکن یہ اب بھی تاریخی اعداد و شمار پر مبنی ہے۔ مارکیٹ میں اہم تبدیلیوں یا انتہائی حالات کی صورت میں ، تاریخی اعداد و شمار حکمت عملی کی اصل کارکردگی کی اچھی طرح سے عکاسی نہیں کرسکتے ہیں ، اور توقعات کا حوالہ دینے کی اہمیت کم ہوسکتی ہے۔
پیرامیٹرز کے انتخاب کا اثر بہت زیادہ ہے: اس حکمت عملی کی کارکردگی کا انحصار بڑی حد تک چلتی اوسط کے دورانیہ کے انتخاب پر ہے۔ مختلف دورانیہ کے مجموعے سے بالکل مختلف تجارتی نتائج برآمد ہوسکتے ہیں۔ اگر منتخب کردہ پیرامیٹرز مارکیٹ کی خصوصیات کے لئے اچھی طرح سے موزوں نہیں ہیں تو حکمت عملی کی اصل کارکردگی توقع سے زیادہ انحراف کا شکار ہوسکتی ہے۔
مزید تکنیکی اشارے متعارف کروائیں: موجودہ متحرک اوسط کی بنیاد پر ، دیگر تکنیکی اشارے متعارف کرانے پر غور کیا جاسکتا ہے جیسے MACD ، RSI وغیرہ ، تاکہ رجحانات کی طاقت اور استحکام کا بہتر اندازہ لگایا جاسکے ، اور اس طرح حکمت عملی میں داخلے اور باہر نکلنے کے وقت کو بہتر بنایا جاسکے۔
پوزیشن مینجمنٹ کو بہتر بنائیں: موجودہ حکمت عملی میں ٹریڈنگ سگنل کے ظہور پر پوزیشنوں کو طے کرنے کا عمل اختیار کیا گیا ہے۔ مارکیٹ میں اتار چڑھاؤ ، رجحان کی طاقت اور دیگر عوامل کے مطابق پوزیشنوں کو متحرک طور پر ایڈجسٹ کرنے پر غور کیا جاسکتا ہے ، تاکہ خطرے کو بہتر طور پر کنٹرول کیا جاسکے اور منافع میں اضافہ کیا جاسکے۔
اسٹریٹجی میں مناسب اسٹاپ لاس میکانزم شامل کرنا اسٹریٹجی کو پہلے سے موجود منافع کو وقت پر لاک کرنے میں مدد دیتا ہے ، جبکہ ممکنہ نقصان کو محدود کرتا ہے۔ اس سے حکمت عملی کے رسک کو فائدہ اٹھانے میں مدد ملتی ہے ، جس سے یہ مارکیٹ کے مختلف حالات میں نسبتا strong مضبوط کارکردگی کا مظاہرہ کرسکتا ہے۔
مطلوبہ اقدار کے حساب کو بہتر بنائیں: مطلوبہ اقدار کے حساب کے طریقوں کو مزید بہتر بنایا جاسکتا ہے ، جیسے کہ ٹرانزیکشن لاگت کو مدنظر رکھنا ، موبائل ونڈو متعارف کرانا وغیرہ ، تاکہ مطلوبہ اقدار کے اشارے کی افادیت اور افادیت کو بہتر بنایا جاسکے۔ اس کے علاوہ ، اسٹریٹجک کارکردگی کی تشخیص کے دیگر اشارے بھی دریافت کیے جاسکتے ہیں ، تاکہ صارفین کو زیادہ جامع حوالہ فراہم کیا جاسکے۔
اس حکمت عملی میں مارکیٹ کے رجحانات کا اندازہ لگانے کے لئے متحرک اوسط کا استعمال کیا گیا ہے اور جب رجحانات سامنے آتے ہیں تو بروقت پوزیشنوں کو حاصل کرنے کے لئے فائدہ اٹھایا جاتا ہے۔ اس کے ساتھ ہی ، حکمت عملی میں ایک بدیہی متوقع قیمت پینل بھی متعارف کرایا گیا ہے جس کا استعمال حکمت عملی کے متوقع منافع کو مختلف ٹائم اسکیل پر ظاہر کرنے کے لئے کیا جاتا ہے تاکہ صارفین کو مزید فیصلہ سازی کا حوالہ مل سکے۔ اگرچہ یہ حکمت عملی اتار چڑھاؤ والی مارکیٹ میں خراب کارکردگی کا مظاہرہ کرسکتی ہے ، اور اس کی قیمتوں کا حساب لگانے میں کچھ حدود موجود ہیں ، لیکن مزید تکنیکی اشارے متعارف کرانے ، پوزیشن مینجمنٹ کو بہتر بنانے اور اسٹاپ نقصان کے اقدامات کو شامل کرنے سے حکمت عملی کے منافع کے خطرے کو مزید بڑھا دیا جاسکتا ہے ، تاکہ یہ مارکیٹ کے مختلف ماحول میں بہتر طور پر ڈھال سکے۔
/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ir0nantc2
//@version=5
strategy("Expected Value Panel", overlay=true)
// ロングエントリー条件 / Long entry condition
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
strategy.entry("My Long Entry Id", strategy.long)
// ショートエントリー条件 / Short entry condition
shortCondition = ta.crossunder(ta.sma(close, 14), ta.sma(close, 28))
if (shortCondition)
strategy.entry("My Short Entry Id", strategy.short)
// ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
// Please copy the code below and paste it into the strategy where you want to display the expected value.
// 以下のコードをコピーして期待値を表示させたいストラテジーに貼り付けて下さい。
// ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
// 表示選択 / Display selection
show_performance = input.bool(true, '期待値ON/OFF (Show Expected Value)', group='Expected Value / ©ir0nantc2')
transparency = input.int(50, '透過度 (Transparency)', minval=0, maxval=100, group='Expected Value / ©ir0nantc2')
prec = 2
// 背景色 / Background color
bg_color(value) =>
na(value) ? color.new(color.gray, transparency) : value > 0.0 ? color.new(color.green, transparency) :
value < 0.0 ? color.new(color.red, transparency) :color.new(color.gray, transparency)
// 利益と損失の追跡 / Track profits and losses
var float total_monthly_profit = 0.0
var float total_yearly_profit = 0.0
if show_performance
new_month = month(time) != month(time[1])
new_year = year(time) != year(time[1])
cur_month_pnl = 0.0, cur_year_pnl = 0.0
eq = strategy.equity
bar_pnl = eq / eq[1] - 1
// 月次・年次 期待値 / Monthly & Yearly Expected Value
cur_month_pnl := new_month ? 0.0 : (1 + cur_month_pnl[1]) * (1 + bar_pnl) - 1
cur_year_pnl := new_year ? 0.0 : (1 + cur_year_pnl[1]) * (1 + bar_pnl) - 1
// 年次および月次期待値を格納 / Store monthly and yearly expected values
var month_pnl = array.new_float(), var month_time = array.new_int()
var year_pnl = array.new_float(), var year_time = array.new_int()
// 期待値計算の変数 / Variables for expected value calculation
var month_wins = array.new_int(), var month_losses = array.new_int()
var month_avg_win = array.new_float(), var month_avg_loss = array.new_float()
var year_wins = array.new_int(), var year_losses = array.new_int()
var year_avg_win = array.new_float(), var year_avg_loss = array.new_float()
// 月次および年次期待値の配列更新 / Update arrays for monthly and yearly expected values
bool last_computed = false
if (not na(cur_month_pnl[1]) and (new_month or barstate.islastconfirmedhistory))
if (last_computed and array.size(month_pnl) > 0)
array.pop(month_pnl), array.pop(month_time)
array.pop(month_wins), array.pop(month_losses)
array.pop(month_avg_win), array.pop(month_avg_loss)
array.push(month_pnl, cur_month_pnl[1]), array.push(month_time, time[1])
array.push(month_wins, 0), array.push(month_losses, 0)
array.push(month_avg_win, 0.0), array.push(month_avg_loss, 0.0)
if (not na(cur_year_pnl[1]) and (new_year or barstate.islastconfirmedhistory))
if (last_computed and array.size(year_pnl) > 0)
array.pop(year_pnl), array.pop(year_time)
array.pop(year_wins), array.pop(year_losses)
array.pop(year_avg_win), array.pop(year_avg_loss)
array.push(year_pnl, cur_year_pnl[1]), array.push(year_time, time[1])
array.push(year_wins, 0), array.push(year_losses, 0)
array.push(year_avg_win, 0.0), array.push(year_avg_loss, 0.0)
last_computed := barstate.islastconfirmedhistory ? true : last_computed
// 勝ち取引と負け取引を追跡 / Track winning and losing trades
if (strategy.closedtrades > 0 and na(strategy.closedtrades[1]) == false)
closed_profit = strategy.netprofit - strategy.netprofit[1]
if closed_profit > 0
if array.size(month_wins) > 0
wins = array.get(month_wins, array.size(month_wins) - 1) + 1
avg_win = (array.get(month_avg_win, array.size(month_avg_win) - 1) * (wins - 1) + closed_profit) / wins
array.set(month_wins, array.size(month_wins) - 1, wins)
array.set(month_avg_win, array.size(month_avg_win) - 1, avg_win)
if array.size(year_wins) > 0
wins = array.get(year_wins, array.size(year_wins) - 1) + 1
avg_win = (array.get(year_avg_win, array.size(year_avg_win) - 1) * (wins - 1) + closed_profit) / wins
array.set(year_wins, array.size(year_wins) - 1, wins)
array.set(year_avg_win, array.size(year_avg_win) - 1, avg_win)
else
if array.size(month_losses) > 0
losses = array.get(month_losses, array.size(month_losses) - 1) + 1
avg_loss = (array.get(month_avg_loss, array.size(month_avg_loss) - 1) * (losses - 1) + closed_profit) / losses
array.set(month_losses, array.size(month_losses) - 1, losses)
array.set(month_avg_loss, array.size(month_avg_loss) - 1, avg_loss)
if array.size(year_losses) > 0
losses = array.get(year_losses, array.size(year_losses) - 1) + 1
avg_loss = (array.get(year_avg_loss, array.size(year_avg_loss) - 1) * (losses - 1) + closed_profit) / losses
array.set(year_losses, array.size(year_losses) - 1, losses)
array.set(year_avg_loss, array.size(year_avg_loss) - 1, avg_loss)
// 月次テーブル / Monthly table
var monthly_table = table(na)
if (barstate.islastconfirmedhistory)
monthly_table := table.new(position.bottom_right, columns = 14, rows = array.size(year_time) + 1, border_width = 1)
table.cell(monthly_table, 0, 0, "", bgcolor = #bbbbbb00)
table.cell(monthly_table, 1, 0, "Jan", bgcolor = #bbbbbb)
table.cell(monthly_table, 2, 0, "Feb", bgcolor = #bbbbbb)
table.cell(monthly_table, 3, 0, "Mar", bgcolor = #bbbbbb)
table.cell(monthly_table, 4, 0, "Apr", bgcolor = #bbbbbb)
table.cell(monthly_table, 5, 0, "May", bgcolor = #bbbbbb)
table.cell(monthly_table, 6, 0, "Jun", bgcolor = #bbbbbb)
table.cell(monthly_table, 7, 0, "Jul", bgcolor = #bbbbbb)
table.cell(monthly_table, 8, 0, "Aug", bgcolor = #bbbbbb)
table.cell(monthly_table, 9, 0, "Sep", bgcolor = #bbbbbb)
table.cell(monthly_table, 10, 0, "Oct", bgcolor = #bbbbbb)
table.cell(monthly_table, 11, 0, "Nov", bgcolor = #bbbbbb)
table.cell(monthly_table, 12, 0, "Dec", bgcolor = #bbbbbb)
table.cell(monthly_table, 13, 0, "Year", bgcolor = #bbbbbb)
// 年次データの集計 / Collecting yearly data
var year_total_pnl = array.new_float()
var year_exp_val = array.new_float()
for yt = 0 to array.size(year_time) - 1
total_year_wins = 0, total_year_losses = 0
total_year_avg_win = 0.0, total_year_avg_loss = 0.0
total_year_pnl = 0.0
for mt = 1 to 12
idx = -1
for j = 0 to array.size(month_time) - 1
if year(array.get(month_time, j)) == year(array.get(year_time, yt)) and month(array.get(month_time, j)) == mt
idx := j
break
if idx != -1
total_year_pnl := total_year_pnl + array.get(month_pnl, idx)
total_year_wins := total_year_wins + array.get(month_wins, idx)
total_year_losses := total_year_losses + array.get(month_losses, idx)
total_year_avg_win := total_year_avg_win + (array.get(month_avg_win, idx) * array.get(month_wins, idx))
total_year_avg_loss := total_year_avg_loss + (array.get(month_avg_loss, idx) * array.get(month_losses, idx))
total_year_avg_win := total_year_wins > 0 ? total_year_avg_win / total_year_wins : 0.0
total_year_avg_loss := total_year_losses > 0 ? total_year_avg_loss / total_year_losses : 0.0
win_rate = total_year_wins + total_year_losses > 0 ? total_year_wins / (total_year_wins + total_year_losses) : na
exp_val = win_rate ? (win_rate * total_year_avg_win) - ((1 - win_rate) * math.abs(total_year_avg_loss)) : na
array.push(year_total_pnl, total_year_pnl)
array.push(year_exp_val, exp_val)
for yt = 0 to array.size(year_time) - 1
table.cell(monthly_table, 0, yt + 1, str.tostring(year(array.get(year_time, yt))), bgcolor = #bbbbbb)
y_color = bg_color(array.get(year_exp_val, yt))
value_to_display = na(array.get(year_exp_val, yt)) ? "" : str.tostring(math.round(array.get(year_exp_val, yt) * 100, prec))
table.cell(monthly_table, 13, yt + 1, value_to_display, bgcolor = y_color, text_color=color.new(color.white, 0))
for mt = 0 to array.size(month_time) - 1
m_row = year(array.get(month_time, mt)) - year(array.get(year_time, 0)) + 1
m_col = month(array.get(month_time, mt))
if array.size(month_wins) > mt and array.size(month_losses) > mt and array.size(month_avg_win) > mt and array.size(month_avg_loss) > mt
win_rate = array.get(month_wins, mt) / (array.get(month_wins, mt) + array.get(month_losses, mt))
exp_val = (win_rate * array.get(month_avg_win, mt)) - ((1 - win_rate) * math.abs(array.get(month_avg_loss, mt)))
m_color = bg_color(exp_val)
value_to_display = na(exp_val) ? "" : str.tostring(math.round(exp_val * 100, prec))
table.cell(monthly_table, m_col, m_row, value_to_display, bgcolor = m_color, text_color=color.new(color.white, 0))
else
table.cell(monthly_table, m_col, m_row, "", bgcolor = color.new(color.gray, transparency), text_color=color.new(color.white, 0))
// [EOF]