یہ حکمت عملی رجحان کی سمت کا تعین کرنے کے لئے مختلف ادوار کے ساتھ دو سادہ حرکت پذیر اوسطوں کے کراس اوور کا استعمال کرتی ہے اور جب کوئی رجحان ظاہر ہوتا ہے تو تجارت میں داخل ہوتی ہے۔ اسی وقت ، حکمت عملی میں حکمت عملی کے متوقع منافع کو مختلف وقت کے پیمانوں پر حساب کرنے اور ظاہر کرنے کے لئے متوقع قیمت پینل بھی متعارف کرایا گیا ہے ، جس سے صارفین کو حکمت عملی کی کارکردگی کا بہتر اندازہ لگانے کی اجازت ملتی ہے۔ متوقع قیمت پینل اہم اشارے جیسے حکمت عملی کی جیت کی شرح ، اوسط منافع اور تاریخی ادوار کے دوران اوسط نقصان کو مدنظر رکھتا ہے ، اور حکمت عملی کی کارکردگی کو مختلف مارکیٹ کے حالات میں بدیہی انداز میں پیش کرتا ہے۔
اس حکمت عملی کا بنیادی مقصد مارکیٹ کے رجحانات کا تعین کرنے کے لئے مختلف ادوار (14 دن اور 28 دن کی اس مثال میں) کے ساتھ دو سادہ حرکت پذیر اوسطوں کے کراس اوور کا استعمال کرنا ہے۔ جب مختصر مدتی اوسط نیچے سے طویل مدتی اوسط سے اوپر کی طرف بڑھتا ہے تو ، یہ سمجھا جاتا ہے کہ مارکیٹ میں اضافہ ہوا ہے ، اور حکمت عملی ایک طویل پوزیشن کھولتی ہے۔ اس کے برعکس ، جب مختصر مدتی اوسط اوپر سے طویل مدتی اوسط سے نیچے کی طرف بڑھتا ہے تو ، یہ سمجھا جاتا ہے کہ مارکیٹ میں کمی کا رجحان داخل ہوا ہے ، اور حکمت عملی ایک مختصر پوزیشن کھولتی ہے۔ اس طرح ، حکمت عملی مختلف مارکیٹ کے رجحانات کے مطابق ڈھال سکتی ہے اور بروقت انداز میں پوزیشنیں قائم کرسکتی ہے جب رجحانات رجحانات کے ذریعہ لائے گئے منافع کو پکڑنے کی طرح نظر آتے ہیں۔
بنیادی رجحان کا تعین اور تجارتی منطق کے علاوہ ، حکمت عملی میں حکمت عملی کے متوقع منافع کو مختلف وقت کے پیمانوں (ماہانہ اور سالانہ) پر حساب کرنے اور ظاہر کرنے کے لئے متوقع قیمت کا پینل بھی متعارف کرایا گیا ہے۔ متوقع قیمت کا حساب کتاب تاریخی ادوار کے دوران حکمت عملی کے اہم شماریاتی اشارے پر مبنی ہے ، بشمول:
ان اشارے کا استعمال کرتے ہوئے، اس وقت کی مدت میں حکمت عملی کی متوقع قیمت کا حساب لگایا جا سکتا ہے: متوقع قیمت = جیت کی شرح × اوسط منافع - (1 - جیت کی شرح) × اوسط نقصان
چارٹ پر گرمی کے نقشے کی شکل میں مختلف وقت کی مدت کے متوقع اقدار کو ظاہر کرنے سے، صارفین مختلف مارکیٹ کے حالات میں حکمت عملی کی متوقع کارکردگی کو ایک نظر میں دیکھ سکتے ہیں، اس طرح حکمت عملی کی قابل اطلاق اور خطرے کو بہتر طور پر سمجھ سکتے ہیں.
رجحانات کے مطابق بہت زیادہ موافقت: رجحانات کا تعین کرنے کے لئے حرکت پذیر اوسط کراس اوورز کا استعمال کرکے ، حکمت عملی مارکیٹ میں ہونے والی تبدیلیوں کو اپنانے کے لئے مختلف مارکیٹ کے رجحانات کے تحت پوزیشنوں کو بروقت انداز میں ایڈجسٹ کرسکتی ہے۔ اس سے حکمت عملی کو رجحانات کی منڈیوں میں اچھی واپسی حاصل کرنے کے قابل بناتا ہے۔
بدیہی کارکردگی کا اندازہ: بلٹ ان متوقع قیمت پینل ایک ہیٹ میپ کی شکل میں مختلف وقت کے ادوار میں حکمت عملی کی متوقع واپسی کو ظاہر کرتا ہے ، جس سے صارفین کو مختلف مارکیٹ کے حالات میں حکمت عملی کی کارکردگی کا جائزہ لینے کی اجازت ملتی ہے۔ یہ بصری کارکردگی کی پیش کش صارفین کو مزید فیصلہ سازی کے حوالہ جات فراہم کرتی ہے۔
اہم شماریاتی اشارے پر غور: متوقع قیمت کے حساب سے نہ صرف حکمت عملی کی جیت کی شرح پر غور کیا جاتا ہے بلکہ اوسط منافع اور اوسط نقصان کے اثرات کو بھی شامل کیا جاتا ہے۔ یہ حساب کتاب کا طریقہ حکمت عملی کی اصل کارکردگی کو زیادہ جامع اور درست طریقے سے ظاہر کرسکتا ہے ، جس سے صارفین کو زیادہ قابل اعتماد حوالہ جات فراہم ہوتے ہیں۔
لچکدار پیرامیٹر کی ترتیبات: صارفین اپنی ضروریات کے مطابق متوقع قیمت پینل اور اس کی شفافیت کو ظاہر کرنے کے لئے لچکدار طور پر مقرر کرسکتے ہیں۔ اس سے صارفین کو اپنی ترجیحات کے مطابق چارٹ کے ڈسپلے اثر کو ایڈجسٹ کرنے کی اجازت ملتی ہے ، جس سے صارف کا تجربہ بہتر ہوتا ہے۔
رینج سے منسلک مارکیٹوں میں خراب کارکردگی: چونکہ حکمت عملی بنیادی طور پر منافع پیدا کرنے کے لئے رجحانات پر انحصار کرتی ہے ، لہذا رینج سے منسلک یا رجحانات سے مبہم مارکیٹ کے حالات میں کثرت سے تجارت سے نمٹنے اور لین دین کے اخراجات میں نمایاں کمی واقع ہوسکتی ہے ، جو حکمت عملی کی مجموعی کارکردگی کو متاثر کرتی ہے۔
متوقع قیمت کے حساب کتاب کی حدود: اگرچہ متوقع قیمت پینل حکمت عملی کی کارکردگی کا اندازہ لگانے کا ایک بدیہی طریقہ فراہم کرتا ہے ، لیکن یہ حساب کتاب کے لئے ابھی بھی تاریخی اعداد و شمار پر مبنی ہے۔ جب مارکیٹ میں اہم تبدیلیاں آتی ہیں یا انتہائی حالات پیدا ہوتے ہیں تو ، تاریخی اعداد و شمار حکمت عملی کی اصل کارکردگی کو اچھی طرح سے ظاہر نہیں کرسکتے ہیں ، اور متوقع قیمت کی ریفرنس ویلیو کو کم کیا جاسکتا ہے۔
پیرامیٹرز کے انتخاب کا بڑا اثر: حکمت عملی کی کارکردگی کا انحصار بڑی حد تک چلتی اوسط ادوار کے انتخاب پر ہوتا ہے۔ مختلف ادوار کے مجموعے مکمل طور پر مختلف تجارتی نتائج پیدا کرسکتے ہیں۔ اگر منتخب پیرامیٹرز مارکیٹ کی خصوصیات کے مطابق اچھی طرح سے موافقت نہیں کرسکتے ہیں تو ، حکمت عملی کی اصل کارکردگی متوقع قیمت سے نمایاں طور پر انحراف کرسکتی ہے۔
مزید تکنیکی اشارے متعارف کروائیں۔ موجودہ حرکت پذیر اوسط کی بنیاد پر ، دیگر تکنیکی اشارے جیسے ایم اے سی ڈی اور آر ایس آئی کو بہتر اندازے کے لئے غور کیا جاسکتا ہے تاکہ رجحانات کی طاقت اور پائیداری کا تعین کیا جاسکے ، اس طرح حکمت عملی میں داخل ہونے اور باہر نکلنے کے وقت کو بہتر بنایا جاسکے۔
پوزیشن مینجمنٹ کو بہتر بنائیں: فی الحال ، جب تجارتی سگنل ظاہر ہوتے ہیں تو حکمت عملی ایک فکسڈ پوزیشن نقطہ نظر اپناتی ہے۔ مارکیٹ میں اتار چڑھاؤ اور رجحان کی طاقت جیسے عوامل کی بنیاد پر پوزیشنوں کو متحرک طور پر ایڈجسٹ کرنے پر غور کیا جاسکتا ہے تاکہ خطرات کو بہتر طور پر کنٹرول کیا جاسکے اور منافع میں اضافہ کیا جاسکے۔
اسٹاپ منافع اور اسٹاپ نقصان کے طریقہ کار کو شامل کریں: حکمت عملی میں معقول اسٹاپ منافع اور اسٹاپ نقصان کے طریقہ کار کو شامل کرنے سے حکمت عملی کو ممکنہ نقصانات کو محدود کرتے ہوئے بروقت طریقے سے موجودہ منافع میں تالا لگانے میں مدد مل سکتی ہے۔ اس سے حکمت عملی کے رسک - انعام تناسب کو بہتر بنانے اور مختلف مارکیٹ کے ماحول میں نسبتا ste مستحکم کارکردگی برقرار رکھنے میں مدد ملتی ہے۔
متوقع قیمت کے حساب کو بہتر بنائیں: متوقع قیمت کے حساب کے طریقہ کار کو مزید بہتر بنایا جاسکتا ہے ، جیسے لین دین کے اخراجات پر غور کرنا اور متوقع قیمت کے اشارے کی تاثیر اور عملیت کو بہتر بنانے کے لئے متحرک ونڈوز متعارف کرانا۔ اس کے علاوہ ، صارفین کو زیادہ جامع حوالہ جات فراہم کرنے کے لئے حکمت عملی کی کارکردگی کا اندازہ لگانے کے دیگر اشارے دریافت کیے جاسکتے ہیں۔
یہ حکمت عملی چلتی اوسط کراس اوورز کا استعمال کرتے ہوئے مارکیٹ کے رجحانات کا تعین کرتی ہے اور بروقت انداز میں پوزیشنیں قائم کرتی ہے جب رجحانات رجحانات کے ذریعہ لائے گئے منافع کو حاصل کرتے ہیں۔ اسی وقت ، حکمت عملی میں حکمت عملی کے متوقع منافع کو مختلف وقت کے پیمانوں پر ظاہر کرنے کے لئے ایک بدیہی متوقع قیمت پینل بھی متعارف کرایا گیا ہے ، جس سے صارفین کو زیادہ فیصلہ سازی کے حوالہ جات فراہم ہوتے ہیں۔ اگرچہ حکمت عملی رینج سے منسلک مارکیٹوں میں خراب کارکردگی کا مظاہرہ کرسکتی ہے اور متوقع قیمت کا حساب لگانے میں کچھ حدود ہیں ، لیکن زیادہ تکنیکی اشارے متعارف کرانے ، پوزیشن مینجمنٹ کو بہتر بنانے ، اسٹاپ منافع اور اسٹاپ نقصان کے طریقہ کار کو شامل کرنے ، اور دیگر اقدامات کے ذریعہ ، حکمت عملی کے خطرے کے منافع کے تناسب کو مزید بہتر بنایا جاسکتا ہے ، جس سے یہ مارکیٹ کے بدلتے ہوئے ماحول کو بہتر طور پر اپنانے کے قابل ہوجاتا ہے۔
/*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]