نسبت ریسک-پاداش: تعریف شده و پشتیبان

ساخت وبلاگ

نسبت پاداش ریسک سود بالقوه برای هر دلار در معرض خطر را اندازه گیری می کند. این نسبت بین ارزش در ریسک و هدف سود است. به عنوان مثال ، اگر یک سهام را برای 10 با هدف سود 12 خریداری کنید و یک ضرر را در 9 تنظیم کنید ، نسبت ریسک-پاداش 1: 2 است زیرا شما 1 دلار را در معرض خطر قرار می دهید.

در این پست ، من در مورد تعریف نسبت ریسک-پاداش در بالا توضیح خواهم داد ، که چرا این فقط نیمی از معادله است ، و پشت پرده چگونه نسبت های مختلف پاداش ریسک برای یک استراتژی حرکت سهام عدالت عمل می کند. تعداد کمی از کتابهای تجاری بیان می کنند که تجارت آسان است: اگر شما نظم و انضباط داشته باشید و همیشه سود خود را از ضررهای خود بزرگتر کنید ، می توانید بیشتر از آنچه برنده می شوید از دست بدهید و هنوز هم درآمد کسب کنید. بیایید این را به آزمایش بپردازیم.

همچنین ، اعتبار به Aswath Damodaran برای معرفی من به نمایندگی عالی از خطر: نماد چینی برای بحران و فرصت.

نسبت ریسک-پاداش چیست؟

نسبت ریسک-پاداش ، که اغلب به عنوان RRR به اختصار است ، تعداد دلار در معرض خطر در مقایسه با سود بالقوه است. بیشتر معامله گران پیش از قرار دادن تجارت ، RRR را مانند 1: 2 هدف قرار می دهند. قرار دادن تجارت "RRR" سه سفارش یا یک دستور براکت خواهد بود. بیایید این سفارشات را با جزئیات بررسی کنیم.

تعداد دلار در معرض خطر یا ارزش در معرض خطر ، کل پولی است که یک معامله گر می تواند در تجارت تعیین شده توسط توقف از دست بدهد ، از جمله لغزش:

ریسک = (قیمت خرید-از دست دادن) * سهام

سود بالقوه یا هدف سود ، تفاوت بین سفارش فروش است که معمولاً به عنوان یک سفارش محدود و قیمت خرید قرار می گیرد:

سود بالقوه = (سفارش محدود - قیمت خرید) * سهام

برای تصویر تصویر AMD از TradingView که نشان دهنده ریسک (قرمز) است: نسبت پاداش (سبز) 2. 0 ، تصویر زیر را مشاهده کنید.

سفارشات نسبت ریسک-پاداش به عنوان مثال

  1. یک سفارش ورود به طور کلی به عنوان یک حد یا محدود کردن محدود تنظیم شده است
  2. یک ترتیب کم در معرض خطر ، به طور معمول به عنوان یک توقف از دست دادن قرار می گیرد
  3. یک سفارش با سود بالا ، معمولاً به عنوان یک سفارش محدود برای سودآوری تعیین می شود
  1. یک سفارش ورود به طور کلی به عنوان یک حد یا محدود کردن محدود تنظیم شده است
  2. یک ترتیب با یک ترتیب در معرض خطر ، به طور معمول به عنوان یک توقف از دست دادن قرار می گیرد
  3. یک سفارش کم سود ، که معمولاً به عنوان یک سفارش محدود برای سودآوری تعیین می شود

برخی از کارگزاران از سفارشات براکت پشتیبانی می کنند ، که این امر باعث می شود مدیریت رنگ آمیزی ریسک-پاداش باشد. به جای قرار دادن سه سفارش ، می توانید یک سفارش براکت ایجاد کنید.

بنابراین نسبت ریسک شما باید چه باشد؟بدون دانستن درصد برنده خود ، نمی توانید RRR بهینه ایجاد کنید:

نسبت ریسک-پاداش: فقط نیمی از تصویر

نسبت ریسک-پاداش 1: 2 ممکن است از نظر تئوری عالی به نظر برسد ، اما اگر فقط با 1: 4 از معاملات خود موفق باشید ، به طور مداوم پول خود را از دست خواهید داد. این چیزی نیست که ما می خواهیم!

ما باید میانگین درصد برنده را برای تجارت به ارمغان بیاوریم. ما RRR 1: 2 و 50 ٪ درصد برنده داریم. مجدداً یک RRR 1: 2 به این معنی است که ما 1. 00 را برای ساخت 2. 00 خطر می کنیم. اگر معاملات ما 50 ٪ از زمان موفقیت آمیز باشد ، می توانیم بفهمیم چه چیزی انتظار داریم در هر تجارت در طولانی مدت انجام دهیم:

انتظار = میانگین _ Winpercent - Averageloss _ LossPercent Payetance = 2. 0 _ 50 ٪ - 1. 0 _ 50 ٪ انتظار = 100 ٪ - 50 ٪ انتظار = 50 ٪

این انتظار نشان می دهد که برای هر خطر 1. 00 باید 0. 50 انتظار داشته باشیم. ریاضی نیز منطقی است. به طور متوسط ، ما یک تجارت برنده و یک تجارت از دست خواهیم داد. اگر در یک تجارت 2. 00 کسب کنیم و در تجارت بعدی 1. 00 از دست بدهیم ، 1. 00 بیش از دو معاملات یا 0. 50 در هر تجارت انجام خواهیم داد. به یاد داشته باشید ، ما فقط 2. 00 و 3. 00 را تولید می کنیم زیرا 3. 00 هدف ماست ، اما 3. 00 - 1. 00 دلار سود ماست.

زمان در اینجا نیز یک عامل مهم است. اگر دو مجموعه تجاری انتظار یکسان داشته باشند ، اما یک تجارت دو برابر بیشتر از این اتفاق می افتد ، تجارت فرکانس بالاتر سود دو برابر خواهد کرد.

نسبت بهینه ریسک-پاداش

بیایید ببینیم که چگونه استراتژی حرکت سهام ما با نسبت های مختلف پاداش ریسک انجام می شود.

نسبت ریسک-پاداش خلاصه شده

بنابراین دفعه بعد که کسی به شما می گوید تجارت آسان است و تمام آنچه شما نیاز دارید مدیریت پول عالی است ، حفر کنید. آنچه را که می گویند بگیرید و آن را بر روی بازه های زمانی ، ابزارها ، استراتژی ها و بازارها آزمایش کنید. من نمی گویم که سفارشات RRR و براکت کار نمی کند ، اما من می گویم همه چیز را آزمایش کنید! همچنین ، سرمایه گذاری و تجارت ممکن است رقابتی ترین بازی در شهر باشد - به عبارت دیگر ، کار ساده ای نیست.

کد

مثل همیشه ، کد در مورد Alpha GitHub تجزیه و تحلیل خواهد بود

این کد تقریباً با ضرر بهینه توقف برای سهام ارسال شده قبلاً یکسان است. تنها تفاوت این است که ما به جای ماهانه هفتگی را مجدداً تعادل می دهیم. من یک دستور سودآوری و درصد برنده تجارت اضافه کرده ام. من تصمیم گرفتم که هر یک از سفارشات فردی را نشان دهم ، اما به جای آن می توانستیم از یک سفارش براکت استفاده کنیم.

از DateTime واردات DateTime ، واردات Timedelta واردات ریاضی به عنوان bt از موقعیت ها. بخش های واردات get_security_data ، get_securities_data ،  get_sp500_tickers از شاخص ها . Momentum واردات start_date = '2010-01-01' 'end_date =' 2019-12-31. Strptime (start_date ، '٪ y- ٪ m- ٪ d') پایان = dateTime. strptime (end_date ، '٪ y- ٪ m- ٪ d') معیار = 'spy' ucleude_window = 10 memony_window = 90 minimum_period = mominal_window +موقعیت های ude_window = 20 use_atr = حرکت کلاس کاذب (bt. ind. operatio): lines = ('trend' ،) param = dict (دوره = minimum_period ، udude_window = udude_window) fun = momentum def __init __ (self): self. addminperiod (self. p. period) self. excude_window = self. p. excude_window استراتژی کلاس (bt. strategy): params = dict (num_positions = موقعیت ها ، use_atr = use_atr ، rrr = 2. 0 ، stop_loss = 0. 05 ، atr_factor = 3. 0 ، when = bt. Timer. Session_Start ، timer = true ، روزهای هفته = [1] ، هفته کاری = true ، momentum = momentum ، momentum_period = minimum_period) def __init __ (self): self. d_with_len = [] self. orders =<>self. inds =<>self. rebalance_date = no self. add_timer (هنگامی که = self. p. when ، روزهای هفته = self. p. weekdays ، WeekCarry = self. p. weekcarry) برای d در self. datas [1:]: self. orders [d]= [] self. inds [d] =<> self.inds[d]['momentum'] = self.p.momentum(d, period=MINIMUM_PERIOD, plot=False) self.inds[d]['atr'] = bt.indicators.ATR(d, period=14) def prenext(self): # Add data for datas that meet preprocessing requirements # And call next even though data is not available for all tickers self.d_with_len = [d for d in self.datas[1:] if len(d)] if len(self.d_with_len)>= self.p.num_positions: self.next() def nextstart(self): # This is only called once when all data is present # So we are not uecessarily calculating d_with_len self.d_with_len = self.datas[1:] self.next() print("All datas loaded") def next(self): if self.rebalance_date: today = self.data.datetime.date(ago=0) buy_date = self.rebalance_date + timedelta(days=1) if today == buy_date: #print("BUY DATE: ", buy_date) self.rebalance_buy() def notify_timer(self, timer, when, *args, **kwargs): if len(self.d_with_len)>= self.p.num_positions: self.rebalance_sell() def rebalance_sell(self): self.rebalance_date = self.data.datetime.date(ago=0) self.rankings = list(self.d_with_len) self.rankings.sort(key=lambda s: self.inds[s]['momentum'][0], reverse=True) for i, d in enumerate(self.rankings): if self.getposition(d).size != 0: if i>= self. p. num_positions: self. close (d ، ticker = d. p. name) برای o در self. orders [d]: اگر o و o. status == o. accepted و  (o. getordeame () == 'Stop 'یا O. GetOrderName () ==' limit '): self. cancel (o) # رتبه مطابق با حرکت و لیست سهام برگشتی # سهام را بخرید با نقدی باقی مانده rebalance_buy (خود): موقعیت = 0 برای D در خود. Data: اگر self. getposition (D) . Size! = 0: موقعیت ها += 1 اگر موقعیت ها0 and  pos_value>D. Close [0]: buy_size = pos_value // d. close [0] buy_order = self. buy (d ، size = buy_size ، انتقال = false ، ticker = d. p. name) اگر self. p. use_atr: sell_price = d. بستن [0] + self. inds [d] ['Atr'] [0] * self. p. atr_factor * self. p. rrr stop_price = d. close [0] - self. inds [d] ['ATR'] [0] * self. p. atr_factor stop_loss = (self. inds [d] ['Atr'] [0] * self. p. atr_factor) / d. close [0] other: sell_price = (1. 0 + self. p. stop_loss * self. p. rrr) * d. close [0] stop_price = (1. 0 - self. p. stop_loss) * d. close [0] stop_loss = self. p. loss sell_order = self. sell (d ، d ،قیمت = sell_price ، size = buy_order. size ، exectype = bt. order. limit ، انتقال = false ، parent = buy_order ، ticker = d. p. name) stop_order = self. sell (d ، price = stop_price ، size = buy_order. size ، exectype.= bt. order. stop ، transfic = true ، parent = buy_order ، ticker = d. p. name) self. orders [d] . Append (sell_order) self. orders [d] . Append (stop_order) def stop (خود): خود. ending_value = دور (self. broker. get_value () ، 2) self. pnl = دور (self. ending_value - startCash ، 2) اگر __name__ == '__main__': startCash = 10000 cerebro = bt. cerebro (stdstats = false ، optretuu= نادرست) # اضافه کردن معیار (Data [0]) معیار = get_security_data (معیار_ticker ، شروع ، پایان) benchdata = bt. feeds. pandasdata (dataname = بنچارک ، نام = 'جاسوسی') cerebro. addddata (benchdata)# اضافه کردن اوراق بهادار (Data [1:]) Tickers = get_sp500_tickers () اوراق بهادار = get_securities_data (Tickers ، start_date ، end_date) # اضافه کردن اوراق بهادار به عنوان dataS1: برای تیک ، داده ها در اوراق بهادار. groupby (سطح = 0): اگر len (data)<minimum_period: print(f"skipping:="" ticker="" with="" length="" ="" does="" not="" meet="" the="" minimum="" of="" .")="" continue="" print(f"adding="" ticker:="" d="bt.feeds.PandasData(dataname=data.droplevel(level=0)," name="ticker," plot="False)" d.plotinfo.plotmaster="benchdata" d.plotinfo.plotlinelabels="True" cerebro.adddata(d)="" print('starting="" portfolio="" value:="" %.2f'="" %="" cerebro.broker.getvalue())="" #="" add="" strategy="" if="" use_atr:="" cerebro.optstrategy(strategy,="" rrr="(1," 2,="" 3,="" 4),="" atr_factor="(1," 4,="" 5))="" else:="" stop_loss="(0.05," 0.10,="" 0.15,="" 0.20,="" 0.25))="" observers="" &="" analyzers="" cerebro.addobserver(bt.observers.cashvalue)="" cerebro.addobserver(bt.observers.benchmark,="" data="benchdata," _doprenext="True," timeframe="bt.TimeFrame.NoTimeFrame)" cerebro.addanalyzer(bt.analyzers.retus)="" cerebro.addanalyzer(bt.analyzers.drawdown)="" cerebro.addobserver(bt.observers.trades)="" cerebro.addobserver(bt.observers.buysell)="" analyze="" trades="" cerebro.addanalyzer(bt.analyzers.tradeanalyzer,="" _name="trades" )="" run="" optimization="" opt_results="cerebro.run(tradehistory=False)" generate="" results="" list="" final_results_list="[]" for="" in="" opt_results:="" run:="" value="strategy.ending_value" pnl="strategy.PnL" total_trades="trades.total.closed" total_won="trades.won.total" perc_win="total_won" drawdown="strategy.analyzers.drawdown.get_analysis()['max']['drawdown']" final_results_list.append([rrr,="" perc_win,="" stop_loss,="" pnl,="" drawdown])="" print(f"strategy="" total="" retu:="" ")="" #sort="" by_pnl="sorted(final_results_list," key="lambda" x:="" x[3],="" reverse="True)" by_win="sorted(final_results_list," x[1],="" #print="" print('results:="" ordered="" by="" profit:')="" result="" by_pnl:="" print('|="" |="" win%="" stop="" drawdown|')="" <>%="" <>="" <>'سفارش="" داده="" شده="" توسط="" win="" ٪:="" ')="" برای="" نتیجه="" در="" by_win:="" چاپ="" ('="" ٪="" drawd="" print="" |<>="" <>' 

گزارش این تبلیغ

مدرسه فارکس معامله گر ایرانی...
ما را در سایت مدرسه فارکس معامله گر ایرانی دنبال می کنید

برچسب : نویسنده : صالح پور مهروز بازدید : 14 تاريخ : پنجشنبه 19 مرداد 1402 ساعت: 13:14