شاخص تصادفی بولینگر در پایتون.

ساخت وبلاگ

ایجاد و ترسیم نشانگر تصادفی بولینگر با استفاده از پایتون.

اگر دو شاخص فنی قدرتمند شناخته شده را با هم جمع کنیم ، چه می شود؟این چه چیزی را ارائه می دهد و چگونه می توانیم از آن در تجارت استفاده کنیم؟در این مقاله باندهای بولینگر و نوسان ساز تصادفی از منظر یک استراتژی یکپارچه بحث شده است.

من به تازگی بعد از موفقیت کتاب قبلی با عنوان شاخص های فنی جدید در پایتون ، کتاب جدیدی منتشر کرده ام. کتاب جدید دارای توضیحات کامل تر و افزودن استراتژی ها با صفحه GitHub اختصاص داده شده به کد (دائماً پرجمعیت و به روز شده است). اگر احساس می کنید که این مورد علاقه شما است ، دریغ نکنید ، همچنین نسخه PDF قابل خرید است ، می توانید با من در LinkedIn تماس بگیرید.

کتاب استراتژی های معاملاتی

Amazon. com: کتاب استراتژی های تجارت (9798532885707): Kaabar ، Sofien: Books

مفهوم عادی سازی

این تکنیک عالی به ما امکان می دهد مقادیر بین 0 تا 1 را به دام بیندازیم (یا اگر بخواهیم 100 را ضرب کنیم). این مفهوم در مورد کم کردن حداقل مقدار در یک دوره برگشت خاص از مقدار فعلی و تقسیم بر حداکثر مقدار در همان دوره برگشت منهای منهای حداقل مقدار (همان در نامزد) می چرخد.

برای اینکه بتوانیم داده ها را دستکاری کنیم ، ابتدا باید یک آرایه OHLC (نه یک قاب داده) داشته باشیم و سه عملکرد دستکاری کوچک زیر را تعریف کنیم:

# تابع اضافه کردن تعداد مشخصی از ستون هاdef adder (داده ها ، زمان): برای من در محدوده (1 ، زمان + 1): z = np. zeros ((len (data) ، 1) ، dtype = float)data = np. append (داده ها ، z ، محور = 1) داده های بازگشت# عملکردی برای حذف تعداد مشخصی از ستون هاdef deleter (داده ، فهرست ، زمان): برای من در محدوده (1 ، زمان + 1): داده = np. delete (داده ، فهرست ، محور = 1) داده های بازگشت# تابع حذف تعداد مشخصی از ردیف ها از ابتداپرش DEF (داده ، پرش): داده = داده [پرش:]] داده های بازگشت

ما می توانیم سعی کنیم عملکرد عادی سازی در پایتون را کدگذاری کنیم. موارد زیر یک سری زمانی معین را عادی می کند:

def normalizer (داده ، نگاه ، چه چیزی ، کجا): برای من در محدوده (len (data)): تلاش كردن:داده ها [i ، Where] = (data [i ، What] - min (data [i - lookback + 1: i + 1 ، چه])) / (حداکثر (داده ها [i - lookback + 1: i + 1 ، چه]) - حداقل (داده ها [i - Lookback + 1: I + 1 ، چه])) به جز ValueError:عبور داده ها [: ، کجا] = داده ها [: ، کجا] * 100DATA = پرش (داده ها ، نگاه برگشتی) داده های بازگشت

اگر عملکرد را در قیمت بسته شدن چهارچوب زمانی EURUSD با یک دوره 50 بازپرداخت اعمال کنیم (به معنی ، عملکرد به 50 مقدار آخر نگاه می کند و حداقل و حداکثر مقادیر را از آنجا انتخاب می کند) نمودار زیر را خواهیم داشت.

# با استفاده از عملکردmy_data = عادی کننده (my_data ، 50 ، 3 ، 4)

ایجاد نوسان ساز تصادفی گام به گام

نوسان ساز تصادفی به دنبال یافتن مناطق فراگیر و بیش از حد با استفاده از ارتفاع و پایین با استفاده از فرمول عادی سازی همانطور که در زیر آمده است:

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

ما عملکرد زیر را ایجاد خواهیم کرد که تصادفی را در داده OHLC محاسبه می کند:

def stochastic (داده ، نگاه ، چه چیزی ، بالا ، پایین ، کجا): برای من در محدوده (len (data)): تلاش كردن:داده ها [i ، Where] = (Data [i ، What] - min (Data [i - Lookback + 1: I + 1 ، Low])) / (حداکثر (داده ها [I - Lookback + 1: I + 1 ، High]) - حداقل (داده ها [i - Lookback + 1: I + 1 ، Low])) به جز ValueError:عبور داده ها [: ، کجا] = داده ها [: ، کجا] * 100 داده های بازگشت# متغیر داده به آرایه OHLC اشاره دارد# متغیر جستجو به دوره (5 ، 14 ، 21 و غیره) اشاره دارد# آنچه متغیر به قیمت بسته شدن اشاره دارد# متغیر بالا به قیمت بالا اشاره دارد# متغیر پایین به قیمت پایین اشاره دارد# متغیر جایی که به کجا می توان نوسان ساز را قرار داد

طرح فوق مقادیر EURUSD را با یک نوسان ساز تصادفی 14 دوره ترسیم می کند. توجه کنید که این شاخص به دلیل ماهیت عملکرد عادی سازی آن که مقادیر بین حداقل و حداکثر را به دام می اندازد ، بین 0 تا 100 محدود خواهد شد.

گروههای بولینگر

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

بگذارید فرض کنیم که موارد فوق یک سری زمانی به موقع است. اگر ما مجبور شدیم مقدار بعدی را که بعد از 10 می آید حدس بزنیم ، یکی از بهترین حدس ها می تواند میانگین داده ها باشد. بنابراین ، اگر مقادیر را خلاصه کنیم و آنها را بر اساس کمیت آنها تقسیم کنیم (یعنی 5) ، ما 9 را دریافت می کنیم. این میانگین مجموعه داده فوق است. در پایتون می توانیم لیست یا آرایه را تولید کنیم و سپس میانگین را به راحتی محاسبه کنیم:

# وارد کردن کتابخانه مورد نیازوارد کردن numpy به عنوان np# ایجاد آرایهآرایه = [5 ، 10 ، 15 ، 5 ، 10]array = np. array (آرایه)# محاسبه میانگینarray. mean ()

اکنون که مقدار میانگین را محاسبه کرده ایم ، می توانیم ببینیم که هیچ ارزشی در مجموعه داده ها واقعاً برابر است 9. چگونه می دانیم که مجموعه داده به طور کلی به مجموعه داده نزدیک نیست؟این با آنچه ما انحراف استاندارد (نوسانات) می نامیم اندازه گیری می شود.

انحراف استاندارد به سادگی با حلقه در مقادیر فردی و مقایسه فاصله آنها با میانگین ، میانگین فاصله دور از میانگین را اندازه گیری می کند.

# محاسبه میانگینarray. std ()

قطعه کد فوق انحراف استاندارد مجموعه داده را که حدود 3. 74 است محاسبه می کند. این بدان معنی است که به طور متوسط ، مقادیر فردی 3. 74 واحد از 9 (میانگین) فاصله دارند. حال ، اجازه دهید ما به سمت توزیع عادی نشان داده شده در منحنی زیر حرکت کنیم.

منحنی فوق تعداد مقادیر موجود در تعدادی از انحرافات استاندارد را نشان می دهد. به عنوان مثال ، منطقه سایه دار به رنگ قرمز حدود 1. 33 برابر انحراف استاندارد به دور از میانگین صفر است. ما می دانیم که اگر داده ها به طور عادی توزیع می شوند ، پس از آن:

  • حدود 68 ٪ از داده ها در 1 انحراف استاندارد از میانگین قرار می گیرند.
  • حدود 95 ٪ از داده ها در 2 انحراف استاندارد از میانگین قرار می گیرند.
  • حدود 99 ٪ از داده ها در 3 انحراف استاندارد از میانگین قرار می گیرند.

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

اکنون ، با اطلاعات زیر ، ما آماده هستیم تا نشانگر Bollinger Bands را شروع کنیم:

  • داده های سری زمانی مالی می توانند میانگین متحرک داشته باشند که یک پنجره متوسط نورد را محاسبه می کند. به عنوان مثال ، میانگین متحرک 20 دوره هر بار که 20 دوره ای محاسبه می شود ، میانگین آن است که هر بار که یک نوار جدید شکل می گیرد ، تازه می شود.
  • در این پنجره میانگین نورد ، می توانیم انحراف استاندارد همان دوره برگشت را در میانگین متحرک محاسبه کنیم.

گروههای بولینگر چیست؟هنگامی که قیمت ها حرکت می کنند ، می توانیم میانگین (میانگین) در اطراف آنها را محاسبه کنیم تا موقعیت آنها را نسبت به میانگین آنها بهتر درک کنیم. با انجام این کار ، ما همچنین می توانیم محاسبه کنیم که آنها از نظر آماری از کجا ایستاده اند.

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

ایده باندهای بولینگر این است که دو موانع محاسبه شده از یک ثابت که توسط انحراف استاندارد نورد محاسبه شده است ، تشکیل شود. آنها در اصل موانع هستند که احتمال اینکه قیمت بازار در درون آنها باشد ، وجود دارد. باند Bollinger پایین می تواند به عنوان یک پشتیبانی پویا در نظر گرفته شود در حالی که باند بولینگر فوقانی می تواند به عنوان یک مقاومت پویا در نظر گرفته شود. از این رو ، گروههای بولینگر ترکیبی از میانگین متحرک است که از قیمت ها پیروی می کند و یک باند انحراف استاندارد متحرک که در کنار قیمت و میانگین متحرک حرکت می کند.

برای محاسبه دو باند ، از فرمول های نسبتاً ساده زیر استفاده می کنیم:

با ثابت بودن تعداد انحرافات استاندارد که ما برای پاکت نامه ها با آن انتخاب می کنیم. به طور پیش فرض ، شاخص یک میانگین حرکت ساده 20 دوره و دو انحراف استاندارد را به دور از قیمت محاسبه می کند ، سپس آنها را با هم ترسیم می کند تا درک بهتری از هرگونه افراط آماری داشته باشد. این بدان معنی است که در هر زمان ، می توانیم میانگین و استاندارد انحراف 20 مشاهده آخر را که داریم محاسبه کنیم و سپس انحراف استاندارد را با ثابت ضرب کنیم. سرانجام ، می توانیم آن را از میانگین اضافه و تفریق کنیم تا باند بالایی و پایین را پیدا کنیم.

واضح است که نمودار زیر به راحتی قابل درک است. هر بار که قیمت به یکی از گروهها می رسد ، یک موقعیت متضاد مناسب تر است و این با واکنش هایی که تمایل داریم ببینیم وقتی قیمت ها به این افراط و تفریط می رسند ، مشهود است. بنابراین ، هر زمان که EURUSD به گروه فوقانی برسد ، می توان گفت که از نظر آماری باید ادغام شود و وقتی به گروه پایین برسد ، می توان گفت که از نظر آماری باید گزاف گویی کند.

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

حال ، ما باید برخی از ستون ها را به آرایه OHLC اضافه کنیم ، میانگین متحرک و عملکردهای بولینگر را تعریف کنیم ، سپس در نهایت از آنها استفاده کنیم.

# اضافه کردن چند ستونDATA = ADDER (داده ، 20)def ma (داده ، نگاه ، چه ، کجا): برای من در محدوده (len (data)):تلاش كردن:داده ها [i ، Where] = (Data [i - Lookback + 1: I + 1 ، What] . Mean ()) به جز indexerror:عبورداده های بازگشتنوسانات def (داده ، نگاه ، چه ، کجا): برای من در محدوده (len (data)):تلاش كردن:داده ها [i ، Where] = (داده ها [i - Lookback + 1: I + 1 ، What] . Std ()) به جز indexerror:عبور داده های بازگشتdef bollingerbands (داده ها ، boll_lookback ، استاندارد_ distance ، چه ، کجا): # محاسبه میانگینma (داده ، boll_lookback ، چه ، کجا)  # محاسبه نوساناتنوسانات (داده ، boll_lookback ، چه ، جایی + 1) داده ها [: ، کجا + 2] = داده ها [: ، کجا] + (استاندارد_دستنس * داده ها [: ، کجا + 1])داده ها [: ، جایی + 3] = داده ها [: ، کجا] - (استاندارد_دستنس * داده ها [: ، کجا + 1]) داده های بازگشت# با استفاده از عملکرد برای محاسبه یک باند بولینگر 20 دوره با 2 انحراف استانداردداده ها = بولینجر (داده ها ، 20 ، 2 ، 3 ، 4)

اگر به احساسات بازار و نحوه مدل سازی موقعیت یابی معامله گران نهادی علاقه دارید ، احساس راحتی کنید که به مقاله زیر نگاهی بیندازید:

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

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

بولینگر تصادفی

ایده این نشانگر استفاده از نوارهای بولینگر بر روی مقادیر نوسان ساز تصادفی است ، بنابراین یک پاکت تشکیل می دهد و نیاز به موانع فوقانی و پایین را به عنوان پروکسی های پشتیبانی/مقاومت از بین می برد. این امر به ویژه می تواند برای نوسان ساز تصادفی طولانی مدت مفید باشد زیرا آنها نسبت به نوسان سازهای 2 دوره یا 10 دوره ای کمتری دارند.

پارامترهای پیش فرض Bollinger Stochastic به شرح زیر خواهد بود:

  • یک نوسان ساز تصادفی 55 دوره ای به طور معمول بر روی قیمت های بالا ، پایین و پایانی اعمال می شود.
  • باند 10 دوره ای بولینجر که بر روی نوسان ساز تصادفی با انحراف استاندارد 1. 5 اعمال می شود.

از نمودار فوق ، مشخص است که ما خط آبی را به عنوان سطح بیش از حد و خط نارنجی به عنوان سطح فراگیر تعبیر خواهیم کرد. بنابراین ، استراتژی های افراطی می توانند بسیار ساده باشند:

  • هر زمان که نوسانگر تصادفی 55 دوره ای را لمس می کند یا از باند فوقانی بولینگر 10 دوره ای برخورد می کند ، طولانی بروید (خرید).
  • هر زمان که نوسانگر تصادفی 55 دوره ای را لمس کند یا باند پایین بولینگر 10 دوره را لمس کند ، کوتاه بروید (بفروشید).

برای ایجاد شاخص ، می توانیم این کد را دنبال کنیم:

boll_lookback = 10Standard_deviation = 1. 5stochastic_lookback = 55my_data = تصادفی (my_data ، rsi_lookback ، 3 ، 4 ، ژانر = 'High-Low')my_data = bollingerbands (my_data ، boll_lookback ، standard_deviation ، 4 ، 5)

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

نشانگر سیگنال فوق به دنبال این دو فرمول ایجاد می شود:

  • اگر نوسان ساز تصادفی بالاتر از باند بولینگر فوقانی باشد ، مقدار فعلی نشانگر سیگنال 1 است.
  • اگر نوسان ساز تصادفی زیر باند پایین بولینگر باشد ، مقدار فعلی نشانگر سیگنا ل-1 است.
برای من در محدوده (len (my_data)): اگر my_data [i ، 5] - my_data [i ، 4]<0: my_data [i ، 9] = 1elif my_data [i ، 4] - my_data [i ، 6]<0: my_data [i ، 9] = -1

بازگشت به نسخه معمولی شاخص. این استراتژی هنگامی که با مدیریت ریسک مناسب بر اساس شاخص های نوسانات همراه باشد ، به خوبی کار می کند. در زیر نمودار سیگنال در EURUSD را نشان می دهد.

سیگنال DEF (داده ها ، stochastic_column ، under_boll ، پایین_بول ، خرید ، فروش): DATA = ADDER (داده ، 10) برای من در محدوده (len (data)):اگر داده [i ، stochastic_column]داده ها [i - 1 ، lower_boll]:داده [i ، خرید] = 1 elif Data[i, stochastic_column]>داده ها [i ، under_boll] و داده ها [i - 1 ، stochastic_column]داده ها [i ، فروش] = -1 داده های بازگشت

فراوانی سیگنال ها کاملاً سالم است و امکانات زیادی را برای مدیریت سفارشات بر اساس تکنیک های ریسک و روش های حفاظت از سود ارائه می دهد.

چارچوب تست پشت

با داشتن سیگنال ها ، اکنون می دانیم که الگوریتم چه زمانی می توانست سفارشات خرید و فروش خود را قرار دهد ، به این معنی که ما یک ماکت تقریبی از گذشته داریم که در آن می تواند تصمیمات ما را بدون هیچ تعصب عقب کنترل کند. ما باید با توجه به شرایط ما ، چگونه استراتژی را انجام می داد. این بدان معنی است که ما باید بازده را محاسبه کرده و معیارهای عملکرد را تجزیه و تحلیل کنیم. در این بخش سعی در پوشش ملزومات و ارائه چارچوبی خواهد داشت. ما ابتدا می توانیم با ساده ترین اندازه گیری همه ، بیانیه سود و زیان شروع کنیم. وقتی سیستم خود را به عقب برگردانیم ، می خواهیم ببینیم که آیا این پول ایجاد کرده است یا پول خود را از دست داده است. از این گذشته ، این یک بازی ثروت است. این کار می تواند با محاسبه سود و زیان ، بازده ناخالص و خالص و همچنین ترسیم طرح سهام که صرفاً سری زمانی تعادل ما است با توجه به یک الگوریتم کامل که خرید و فروش سفارشات را بر اساس استراتژی آغاز می کند ، انجام شود. قبل از اینکه این را ببینیم ، باید از موارد زیر اطمینان حاصل کنیم زیرا می خواهیم چارچوبی که در همه جا متناسب باشد:

در جدول فوق آمده است که ما باید نشانگر یا ژنراتور سیگنال را در ستون 4 یا 5 داشته باشیم (به یاد داشته باشید ، نمایه سازی در پایتون از صفر شروع می شود). سیگنال خرید (ثابت = 1) در ستون فهرست بندی شده در 6 ، و سیگنال کوتاه فروش (ثابت = -1) در ستون فهرست بندی شده در 7. دلیل این امر این است که در داده های OHLC ، ما 4 ستون اول را اشغال کرده ایم که قبل از داشتن دو ستون سیگنال ، 1 یا 2 ستون را برای قرار دادن شاخص های خود قرار می دهیم. استفاده از عملکرد Deleter که در بالا مشاهده می شود می تواند به شما در دستیابی به این سفارش کمک کند در صورتی که شاخص ها بیش از 2 ستون را اشغال کنند.

اولین قدم برای ساختن منحنی سهام ، محاسبه سود و ضرر و زیان حاصل از معاملات فردی است که ما می گیریم. به دلایل سادگی ، می توانیم خرید و فروش را با قیمت های پایانی در نظر بگیریم. این بدان معناست که وقتی سیگنال را از شاخص یا الگوی نزدیک دریافت می کنیم ، تجارت را در نزدیکی شروع می کنیم تا اینکه سیگنال دیگری را که در آن خارج می شویم و تجارت جدید را آغاز می کنیم ، بدست آوریم. در زندگی واقعی ، ما این کار را عمدتاً در قسمت بعدی انجام می دهیم ، اما به طور کلی در FX تفاوت بزرگی وجود ندارد. کدی که برای ستون های سود/ضرر تعریف می شود ، زیر است:

DEF Holding (داده ، خرید ، فروش ، buy_retu ، sell_retu): برای من در محدوده (len (data)):تلاش كردن:اگر داده [i ، خرید] == 1:برای یک محدوده (i + 1 ، i + 1000):اگر داده [a ، buy]! = 0 یا data [a ، sell]! = 0:داده ها [a ، buy_retu] = (داده [a ، 3] - داده [i ، 3])زنگ تفريحدیگری:ادامه هید داده های elif [i ، فروش] == -1:برای یک محدوده (i + 1 ، i + 1000):اگر داده [a ، buy]! = 0 یا data [a ، sell]! = 0:داده ها [a ، sell_retu] = (داده [i ، 3] - داده [a ، 3])زنگ تفريحدیگری:ادامه هیدبه جز indexerror:عبور# با استفاده از عملکردنگه داشتن (my_data ، 6 ، 7 ، 8 ، 9)

این به ستون های 8 و 9 به ما می دهد که از نتایج سود و زیان ناخالص حاصل از معاملات گرفته شده برخوردار هستند. حال ، ما باید آنها را به اعداد تجمعی تبدیل کنیم تا منحنی سهام را محاسبه کنیم. برای انجام این کار ، ما از تابع فهرست زیر استفاده می کنیم:

DEF INDEXER (DATA ، مورد انتظار ، LOT ، سرمایه گذاری): # تکامل نمونه کارها نمودارindexer = داده ها [: ، 8:10] # ایجاد یک آرایه ترکیبی برای بازده طولانی و کوتاهz = np. zeros ((len (data) ، 1) ، dtype = float)indexer = np. append (Indexer ، Z ، Axis = 1) # ترکیب بازدهبرای من در محدوده (LEN (شاخص)):تلاش كردن:اگر ایندکسر [i ، 0]! = 0:Indexer [i ، 2] = Indexer [i ، 0] - (انتظار می رود_ cost / lot) اگر ایندکسر [i ، 1]! = 0:Indexer [i ، 2] = Indexer [i ، 1] - (انتظار می رود_ cost / lot)به جز indexerror:عبور # تغییر به مقادیر پولیIndexer [: ، 2] = Indexer [: ، 2] * LOT # ایجاد آرایه تعادل نمونه کارهاindexer = np. append (Indexer ، Z ، Axis = 1)Indexer [: ، 3] = سرمایه گذاری # اضافه کردن بازگشت به تعادلبرای من در محدوده (LEN (شاخص)): Indexer [I ، 3] = Indexer [I - 1 ، 3] + (Indexer [I ، 2]) indexer = np. array (فهرست بندی) بازگشت NP. Array (ایندکسر)# با استفاده از عملکرد برای یک استراتژی 0. 1 قطعه در 10،000 دلار سرمایه گذاریانتظار می رود_ cost = 0. 5 * (lot / 10000)# 0. 5 پخش پیپسرمایه گذاری = 10000lot = 10000Equity_curve = Indexer (my_data ، انتظار می رود_ cost ، lot ، سرمایه گذاری)

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

plt. plot (Equity_curve [: ، 3] ، linewidth = 1 ، label = 'eurusd)plt. grid ()plt. legend ()plt. axhline (y = سرمایه گذاری ، رنگ = "سیاه" ، خط عرض = 1)plt. title ("استراتژی" ، FontSize = 20)

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

من قبل از ارائه یک عملکرد کامل عملکرد که همه آنها را با هم خروجی می کند ، به سرعت نسبت ها و معیارهای اصلی را ارائه خواهم داد. از این رو ، بحث های زیر عمدتاً اطلاعاتی است ، اگر به کد علاقه مند هستید ، می توانید در پایان آن را پیدا کنید.

نسبت ضربه = 42. 28 ٪# نسبت شبیه سازی شده

نسبت ضربه بسیار آسان است. این به سادگی تعداد معاملات برنده بیش از تعداد معاملات انجام شده در کل است. به عنوان مثال ، اگر در طی 5 سال 1359 معاملات داشته باشیم و در 711 از آنها سودآور بوده ایم ، نسبت ضربه ما (دقت) 711/1359 = 52. 31 ٪ است.

سود خالص به سادگی آخرین ارزش در منحنی سهام خالص از هزینه های منهای تعادل اولیه است. این به سادگی ارزش افزوده ای است که در ابتدا سرمایه گذاری کرده ایم.

سود خالص = 1209. 4 دلار# سود شبیه سازی شده

معیار بازده خالص بازده شما در سرمایه گذاری یا حقوق صاحبان سهام است. اگر با 1000 دلار شروع کرده اید و در پایان سال ، تراز شما 1300 دلار نشان می دهد ، 30 ٪ سالم می کردید.

بازده خالص = 30. 01 ٪# بازگشت شبیه سازی شده

یک نگاه سریع به میانگین سود در معاملات و میانگین ضرر می تواند به ما در مدیریت بهتر خطرات خود کمک کند. به عنوان مثال ، اگر میانگین سود ما 1. 20 دلار باشد و میانگین ضرر ما 4. 02 دلار باشد ، ما می دانیم که چیزی درست نیست زیرا ما برای افزایش بیش از حد پول بسیار زیاد پول می گیریم.

متوسط سود = 56. 95 دلار در هر تجارت# افزایش متوسط شبیه سازی شدهضرر متوسط = -41. 14 دلار در هر تجارت# از دست دادن متوسط شبیه سازی شده

پس از آن ، ما می توانیم دو اقدام را محاسبه کنیم:

  • نسبت نظری ریسک-پاداش: این نسبت مطلوب از دستاوردهای متوسط به ضرر متوسط است. نسبت 2. 0 به این معنی است که ما دو برابر بیشتر از آنچه خطر می کنیم هدف قرار می دهیم.
  • نسبت ریسک-پاداش تحقق یافته: این نسبت واقعی دستاوردهای متوسط به ضرر متوسط است. نسبت 0. 75 به این معنی است که ما سه چهارم از آنچه را که خطر داریم هدف قرار می دهیم.
پاداش ریسک نظری = 2. 00# نسبت شبیه سازی شدهپاداش ریسک تحقق یافته = 0. 75# نسبت شبیه سازی شده

عامل سود یک روش نسبتاً سریع و سر راست برای محاسبه سودآوری استراتژی است. این به عنوان سود ناخالص کل نسبت به کل ضرر ناخالص در ارزشهای مطلق محاسبه می شود ، از این رو ، تفسیر فاکتور سود (همچنین به عنوان شاخص سودآوری در ژارگون دارایی شرکت ها گفته می شود) این است که چقدر سود در هر 1 دلار ضرر ایجاد می کندبشرفرمول فاکتور سود:

ضریب سود = 1. 34# عامل سود شبیه سازی شده

انتظار یک اقدام انعطاف پذیر است که توسط لورن برنوت مشهور ارائه شده است که از میانگین پیروزی/باخت و نسبت ضربه تشکیل شده است. این سود یا ضرر مورد انتظار را در رقم دلار که با نسبت ضربه وزن دارد ، فراهم می کند. نرخ پیروزی همان چیزی است که ما از آن به عنوان نسبت ضربه در فرمول زیر یاد می کنیم و از طریق آن ، نسبت ضرر 1 - نسبت ضربه است.

انتظار = 1. 33 دلار در هر تجارت# انتظار شبیه سازی شده

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

معاملات = 3697# شماره شبیه سازی شده

اکنون ، ما آماده هستیم تا تمام معیارهای فوق را همزمان نشان دهیم. پس از محاسبه عملکرد شاخص ، می توانیم از عملکرد عملکرد زیر استفاده کنیم تا معیارهای مورد نیاز خود را به ما ارائه دهیم:

عملکرد DEF (شاخص ، داده ، نام): # شاخص سودآوریindexer = np. delete (شاخص ، 0 ، محور = 1)indexer = np. delete (شاخص ، 0 ، محور = 1) سود = []ضرر = []np. count_nonzero (داده ها [: ، 7])np. count_nonzero (داده ها [: ، 8]) برای من در محدوده (LEN (شاخص)): if indexer[i, 0]>0:مقدار = ایندکسر [i ، 0]سود = np. append (سود ، ارزش) اگر ایندکسر [i ، 0]<0:مقدار = ایندکسر [i ، 0]ضرر = np. append (ضرر ، ارزش) # محاسبه نسبت ضربهHIT_RATIO = دور ((لن (سود) / (سود) + لن (ضرر))) * 100 ، 2) تحقق یافته_risk_reward = دور (ABS (سود. mean () / ضرر. mean ()) ، 2) # سود / ضرر و زیان مورد انتظار و کلانتظار می رود_پروفیت = np. mean (سود)مورد انتظار_ losses = np. abs (np. mean (ضرر))total_profits = دور (np. sum (سود) ، 3)total_losses = دور (np. abs (np. sum (ضرر)) ، 3) # توقع، انتظارانتظار = دور ((انتظار می رود_پروفیت * (HIT_RATIO / 100)) 
n- (انتظار می رود_لاس * (1 - (HIT_RATIO / 100))) ، 2) # بزرگترین برد و بزرگترین باختبزرگترین_وین = دور (حداکثر (سود) ، 2)بزرگترین_ loss = دور (حداقل (ضرر) ، 2)  # بازگشت کلindexer = داده ها [: ، 10:12] # ایجاد یک آرایه ترکیبی برای بازده طولانی و کوتاهz = np. zeros ((len (data) ، 1) ، dtype = float)indexer = np. append (Indexer ، Z ، Axis = 1) # ترکیب بازدهبرای من در محدوده (LEN (شاخص)):تلاش كردن:اگر ایندکسر [i ، 0]! = 0:Indexer [i ، 2] = Indexer [i ، 0] - (انتظار می رود_ cost / lot) اگر ایندکسر [i ، 1]! = 0:Indexer [i ، 2] = Indexer [i ، 1] - (انتظار می رود_ cost / lot)به جز indexerror:عبور # تغییر به مقادیر پولیIndexer [: ، 2] = Indexer [: ، 2] * LOT # ایجاد آرایه تعادل نمونه کارهاindexer = np. append (Indexer ، Z ، Axis = 1)Indexer [: ، 3] = سرمایه گذاری # اضافه کردن بازگشت به تعادلبرای من در محدوده (LEN (شاخص)): Indexer [I ، 3] = Indexer [I - 1 ، 3] + (Indexer [I ، 2]) indexer = np. array (فهرست بندی) total_retu = (ایندکسر [-1 ، 3] / ایندکسر [0 ، 3]) - 1total_retu = total_retu * 100  چاپ ('----------- عملکرد -----------' ، نام)چاپ ('نسبت ضربه =' ، hit_ratio ، '٪')چاپ ('سود خالص =' ، '$' ، دور (ایندکسر [-1 ، 3] - ایندکسر [0 ، 3] ، 2))چاپ ('انتظار =' ، '$' ، انتظار ، "در هر تجارت")چاپ ('فاکتور سود =' ، دور (total_profits / total_losses ، 2))چاپ ('کل بازده =' ، دور (Total_retu ، 2) ، '٪')چاپ('')چاپ ('متوسط سود =' ، '$' ، دور ((انتظار می رود_پروفیت) ، 2) ، "در هر تجارت")چاپ ('متوسط ضرر =' ، '$' ، دور ((انتظار می رود_لاس * -1) ، 2) ، "در هر تجارت")چاپ ("بزرگترین سود =" ، "$" ، بزرگترین_وین)چاپ ("بزرگترین ضرر =" ، "$" ، بزرگترین_لوس)چاپ('')چاپ ('تحقق یافته rr =' ، تحقق یافته_risk_reward)چاپ ("حداقل =" ، "$" ، دور (حداقل (فهرست [: 3]) ، 2))چاپ ('حداکثر =' ، '$' ، دور (حداکثر (شاخص [: ، 3]) ، 2))چاپ ('trades =' ، len (سود) + len (ضرر))# با استفاده از عملکردعملکرد (Equity_curve ، My_data ، 'Eurusd)

این باید چیزی مانند موارد زیر به ما بدهد:

----------- عملکرد ----------- EURUSDنسبت ضربه = 42. 28 ٪سود خالص = 1209. 4 دلارانتظار = 0. 33 دلار در هر تجارتضریب سود = 1. 01بازده کل = 120. 94 ٪متوسط سود = 56. 95 دلار در هر تجارتضرر متوسط = -41. 14 دلار در هر تجارتبزرگترین سود = 347. 5 دلاربزرگترین ضرر = -311. 6 $ RR = 1. 38حداقل = $ -1957. 6حداکثر = 4004. 2 دلارمعاملات = 3697# همه موارد فوق نتایج شبیه سازی شده است و استراتژی یا شاخص ارائه شده را منعکس نمی کند

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

روش تجارت فیبوناچی - راهنمای کامل.

Fibonacci & Trading ، چگونه از آن استفاده می شود؟

نتیجه گیری و سلب مسئولیت مهم

به یاد داشته باشید که همیشه آزمونهای پشتی خود را انجام دهید. همیشه باید باور داشته باشید که افراد دیگر اشتباه می کنند. شاخص ها و سبک تجارت من ممکن است برای من مفید باشد اما شاید برای شما نباشد.

من معتقدم که قاشق غذاخوری نیستم. من با انجام و نه با کپی آموخته ام. شما باید ایده ، عملکرد ، شهود ، شرایط استراتژی را بدست آورید و سپس خودتان را توضیح دهید (حتی بهتر) خودتان را تست کنید و قبل از تصمیم گیری برای زنده کردن آن یا از بین بردن آن ، آن را بهبود بخشید. انتخاب من برای ارائه نتایج آزمایشی پشتی باید خواننده را به سمت کشف بیشتر استراتژی و کار بر روی آن سوق دهد. به این ترتیب می توانید استراتژی بهتر خود را با من به اشتراک بگذارید و ما با هم ثروتمند خواهیم شد.

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

ما را در سایت فارکس وکسب درامد دنبال می کنید

برچسب : نویسنده : احمد قانع پور بازدید : 29 تاريخ : چهارشنبه 18 مرداد 1402 ساعت: 11:54