برای پیش بینی بازده سهام از نوسان ساز RSI استفاده کنید (دقت بیش از 70 ٪!)

ساخت وبلاگ

فقط نوسان ساز میانگین متحرک (OSMA) و RSI را از پست یاد گرفت. RSI یک شاخص مفید از روند و حرکت است. با الهام از این ، من می خواهم سعی کنم از آن به عنوان ویژگی یادگیری ماشین استفاده کنم تا بازده سهام آینده را پیش بینی کنم.

محاسبه RSI و OSMA آن

استحکام نسبی (RS) و نشانگر مقاومت نسبی (RSI) را می توان از میانگین متحرک (MA) از اختلاف قیمت مثبت تاریخی (٪) که بر اساس اختلاف قیمت منفی (٪) تقسیم می شود ، محاسبه کرد.

rs = (ma از اختلاف مثبت) / (کارشناسی ارشد اختلاف منفی)

RSI = 100-100/(1+RS)

در اینجا کد جولیا محاسبه است. ما از زمان های بسته بندی جولیا استفاده می کنیم.

  • درصدچ (Price_ts) تابعی برای محاسبه اختلاف قیمت در ٪ از قیمت LAG-1 است.
  • سری زمانی "بالا" و "پایین" اختلاف مثبت (٪) و اختلاف قیمت منفی (٪) است که با تعیین مقدار علامت مخالف 0 ایجاد می شود.
  • up_roll و down_roll میانگین حرکت اختلاف مثبت و تفاوت منفی برای دوره "حلقه" است.
  • F_RSI تابعی است که باید در هر عنصر سری زمانی اعمال شود تا RSI = 100 - (100/1+up_roll/down_roll) محاسبه شود.
  • timeseries. map برای اعمال تابع F_RSI در هر عنصر سری زمانی استفاده می شود. استفاده از عملکرد نقشه به جای حلقه برای عملیات سری زمانی معمول است.
با استفاده از Timeseriesعملکرد TORSI (Price_ts ، Loopback)PCT = درصدچ (Price_ts)upidx = findall(pct["Close"] .>0)downidx = findall (pct ["نزدیک"].<0)up = map( (timestamp, values) >(Timestamp ، اگر مقادیر<0 ; 0 ; else ;values ;end), pct)down = map( (timestamp, values) >(Timestamp ، اگر مقادیر<0 ; abs(values) ; else ;0 ;end), pct)up_roll = در حال حرکت (میانگین ، بالا ، حلقه برگشت)down_roll = در حال حرکت (میانگین ، پایین ، حلقه برگشت)تابع f_rsi (مقادیر)x = مقادیر [1]y = مقادیر [2]RSI = 100 - (100 / (1 + x / y))[RSI ، 0]پایانupdown = timeseries. rename (timeseries. merge (up_roll ، down_roll) ، [: up ،: down])rsi_ts = TimeSeries.rename(TimeSeries.map((timestamp, values) >.RSI_TS را برگردانیدپایان

میانگین حرکت RSI را می توان به راحتی با عملکرد "حرکت (میانگین ، ...)" محاسبه کرد.

rsi_ma = timeseries. Rename (حرکت (میانگین ، rsi_ts ، j) ، نماد ("rsima-" ، i ، "-" ، j))

مهندسی ویژگی

نوسان ساز میانگین متحرک RSI (OSRSI) می تواند به عنوان ویژگی مدل استفاده شود. برای هر محاسبه OSRSI ، 2 میانگین در حال حرکت وجود دارد: (1) MA در محاسبه up_roll و down_roll ، و (2) MA RSI. برای هر کارشناسی ارشد باید دوره حلقه برگشت را مشخص کنیم ، بگذارید I و J باشد ، و به شرح زیر تعریف شده است:

rsi_ts = torsi (price_ts ، i)RSI_MA = در حال حرکت (میانگین ، RSI_TS ، J)orsi = rsi_ts .- rsi_ma

با استفاده از اهرم اتوماسیون رایانه ، می توانیم به جای اینکه فقط روی یک مقدار واحد حلقه در تجزیه و تحلیل قرار بگیریم ، مقدار I و J را از یک محدوده دور کنیم.

برای من در روز 10: روز 1rsi_ts = torsi (price_ts ، i)نتیجه_ rsi = ادغام (نتیجه_رسی ، rsi_ts ، روش =: درونی)برای J در روز 10: روز 1rsi_ma = timeseries. Rename (حرکت (میانگین ، rsi_ts ، j) ، نماد ("rsima-" ، i ، "-" ، j))orsi = timeseries. rename (rsi_ts .- rsi_ma ، نماد ("orsi-" ، i ، "-" ، j))نتیجه_روسی = ادغام (refrine_orsi ، orsi ، روش =: درونی)پایانپایان

همه این Osrmi (I ، J) یک ماتریس تشکیل می دهند. این ماتریس می تواند برای تشخیص الگوی به شبکه عصبی Convolution (CNN) تغذیه شود. من از ماتریس OSRSI روز جاری و روزهای قبلی (seqlen) استفاده می کنم تا دنباله ای از ماتریس را به عنوان ورودی لایه های CNN تشکیل دهم. سپس ، بیش از 2-GRU ، و لایه متراکم نهایی برای به دست آوردن نرخ پیش بینی شده بازگشت روز بعد.

تابع build_reg_model (NH ، Seqlen)a = کف (int8 ، nh)زنجیره بازگشت (x >flux. unsqueeze (x ، 4) ،# اولین نتیجهConv((2, 2), seqlen=>a ، pad = (1،1) ، relu) ،ماکسپول ((2،2)) ،# نتیجه دومConv((2, 2), a=>NH ، pad = (1،1) ، relu) ،ماکسپول ((2،2)) ،# حلول سومConv((2, 2), Nh=>NH ، pad = (1،1) ، relu) ،ماکسپول ((2،2)) ، flux. flatten ،ترک تحصیل (0. 1) ،(x>انتقال (x)) ، GRU (1 ، NH) ،GRU (NH ، NH) ،(x >x [: ، پایان]) ،متراکم (NH ، 1) ،(x >x [1]))پایان

مشابه پست قبلی من ، من از میانگین متحرک 5 روزه نرخ بازده قیمت نزدیک به عنوان متغیر هدف به منظور صاف کردن فلوکسیون استفاده می کنم.

تابع تابع (Price_ts)PCT = Timeseries. Rename (درصدچ (قیمت_ت) ، [: بازگشت])PCT = در حال حرکت (میانگین ، PCT ، 5)retu TimeSeries.map((timestamp, values) >(Timestamp ، 100*مقادیر) ، PCT)پایان

ارزیابی نتیجه

من از داده های 3 ساله 2840. hk برای آموزش و آزمایش استفاده می کنم. من 150 نقطه داده غیب آخر را برای آزمایش نگه می دارم. تعداد دوره آموزش 25 است.

epochs num_epoch flux. train! (mse_loss ، flux. params (m) ، train_loader ، rmsprop (lr ، mm))

در اینجا نمودار مقدار پیش بینی شده در خط قرمز (Y1) و مقدار واقعی در خط آبی (Y2) قرار دارد.

در معاملات واقعی ، دقت پیش بینی بالا یا پایین (بازده مثبت/منفی) در P/L بسیار مهمتر از اتصالات واقعی ارزش است. من همچنین دقت و ماتریس سردرگمی را محاسبه می کنم. دقت 77 ٪ است! که بهتر از مدل های قبلی من است.

دقت: 0. 77ماتریس سردرگمی:[0. 27 ، 0. 093][0. 13 ، 0. 5]

در اینجا پارامترهای بیش از حد آزمایش فوق وجود دارد:

seqlen = 8NH = 20LR = 0. 000129MM = 0. 75روز = 8روز 1 = 8+20

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

فارکس را از کجا شروع کنیم...
ما را در سایت فارکس را از کجا شروع کنیم دنبال می کنید

برچسب : نویسنده : لیما اصغرپورسازونی بازدید : 29 تاريخ : دوشنبه 2 مرداد 1402 ساعت: 10:40