تجارت الگوریتمی - الگوریتم معاملات Ichimoku

ساخت وبلاگ

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

نمونه هایی از این شاخص ها از میانگین های در حال حرکت به طور گسترده شناخته شده گرفته تا موارد کمتر شناخته شده تر و معروف تر مانند بازیابی فیبوناسی و چرخه زمان GANN متغیر است.

هیچ شاخص فنی Grail مقدس نیست ، اما Ichimoku - نام کامل Ichimoku Kinko Hyo - به خودی خود بسیار خوب است.

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

ichimoku kinko hyo

Ichimoku Kinko Hyo (تقریباً به معنی "نمودار تعادل یک نگاه" به زبان ژاپنی) یک شاخص فنی است که در دهه 1930 در ژاپن اختراع شد. این توسط مردی به نام Goichi Hosoda ساخته شده است که جالب توجه یک روزنامه نگار بود. گفته می شود این شاخص 30 سال برای توسعه او طول کشید و مدتی در دهه 1960 در معرض دید عموم قرار گرفت.

در اینجا تصویری از یک شاخص Ichimoku که روی EUR/USD اجرا می شود ، آورده شده است.

chart with indicator

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

بیایید این قسمت را به صورت بخشی تجزیه کنیم. Ichimoku Kinko Hyo دارای 6 مؤلفه است:

  • Tenkan-sen (خط قرمز): همچنین به عنوان خط تبدیل شناخته می شود ، این با افزودن حداکثر قیمت 9 دوره آخر به حداقل قیمت 9 دوره گذشته محاسبه می شود و این مقدار را به 2 تقسیم می کند.، این را می توان به عنوان یک خط کوتاهتر و سریعتر حرکت کرد.
  • Kijun-sen (خط آبی): همچنین به عنوان خط پایه شناخته می شود ، این با افزودن حداکثر قیمت 26 دوره آخر به حداقل قیمت 9 دوره گذشته محاسبه می شود و این مقدار را به 2 تقسیم می کند. به عنوان یک نسخه آهسته تر و بلند مدت Tenkan-Sen.
  • Chiko Span (خط سبز): همچنین به عنوان خط عقب مانده شناخته می شود ، این به سادگی قیمت های ترسیم شده 26 دوره پشت قیمت واقعی است. بنابراین ، در یک نمودار روزانه ، قیمت 26 نوامبر در 1 نوامبر در نمودار نشان داده می شود. این یکی کمی گیج کننده تر است که به آن نگاه کنید ، اما پس از شروع تطبیق در جایی که نشانگر عقب مانده است ، آسان تر می شود.
  • Senkou Span A (خط نارنجی-ish): این با افزودن تنکان-سن و کیجون سن محاسبه می شود و تقسیم بر اساس 2. این خط 26 دوره جلوتر ترسیم شده است ، جهت مخالف که دهانه چیکو ترسیم شده است.
  • Senkou Span B (خط بنفش): این با افزودن بالاترین میزان 52 دوره گذشته و کمترین کمترین 52 دوره گذشته محاسبه می شود و تقسیم بر 2. مانند Senkou Span A ، 26 دوره جلوتر ترسیم شده استبشر
  • با هم ، Senkou Span A و B یک منطقه ابری را ایجاد می کند که پر شده است. این منطقه به Kumo معروف است. کومو به عنوان شاخص های پشتیبانی و مقاومت عمل می کند.

همچنین اعداد 9 ، 26 و 52 به صورت سنگ تنظیم نشده اند. شما می توانید آنها را به هر آنچه می بینید متناسب باشید ، تغییر دهید ، اما من فکر می کنم بهتر است اگر ما به آنچه Goichi Hosoda پس از 30 سال توسعه انتخاب کرده است ، بچسبیم. دلیلی برای این شماره های خاص وجود ندارد ، یا حداقل چیزی که نمی توانم پیدا کنم. با این حال ، من هنوز آنها را دلخواه نمی نامم. اگر این شماره ها را انتخاب می کرد ، مرد مجبور بود به چیزی بپردازد.

سیگنالهایی که می توانیم مشخص کنیم

اکنون که بخش هایی را که نشانگر Ichimoku را تشکیل می دهند ، درک کرده ایم ، می توانیم ببینیم که چگونه می تواند سیگنال خرید یا فروش را نشان دهد.

هسته نشانگر Ichimoku دو خط اصلی ، Tenkan-Sen و Kijun-Sen است. حرکت آهسته تر و کاهش واکنش به حرکت بازار از Kijun-Sen (از این رو که به عنوان خط پایه نامگذاری شده است) با حرکت سریعتر و واکنش پذیری حیرت انگیز به بازار از Tenkan-Sen (خط تبدیل) در تضاد است. این تفاوت در رفتار به دلیل تفاوت در مدت زمانی است که در آن محاسبه می شود (9 در مقابل 26 دوره). این دو خط وقتی قیمت بالا یا پایین می روند از یکدیگر عبور می کنند.

علاوه بر این ، دهانه های Senkou دامنه خوبی را برای میزان بالا یا پایین قیمت به احتمال زیاد به وجود می آورد. البته ، هیچ چیز قطعی نیست ، و قطعاً وقتی به بازارهای مالی می رسد ، اما به نظر می رسد محاسبات با استفاده از 52 روز گذشته زمینه خود را حفظ می کند.

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

گذرگاه Tenkan-Sen از Kijun-Sen نشان می دهد که قیمت در کوتاه مدت به سمت بالا حرکت کرده است و سیگنال خرید را نشان می دهد.

علاوه بر این، اگر آنها بالاتر از Kumo باشند (به این معنی که عبور از بالای ابر اتفاق افتاده است)، این بدان معنی است که قیمت از بالاترین سطح 52 روز گذشته و به طور قابل توجهی به سمت بالا حرکت می کند. این آن را به یک سیگنال خرید قوی تبدیل می کند.

از سوی دیگر، عبور Tenkan-sen از Kijun-sen نشان می دهد که قیمت در کوتاه مدت به سمت پایین حرکت کرده است که سیگنالی برای فروش است.

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

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

الگوریتم

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

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

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

بنابراین، به طور خلاصه، در اینجا الگوریتم قرار داده شده است:

Algorithm for ichimoku trading

تبدیل به کد

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

خوشبختانه، چندین توابع داخلی در MQL4 وجود دارد که به ما امکان می دهد تایپ کردن معادلات خط مبنا و تبدیل را کنار بگذاریم. با این حال، اگر از زبانی استفاده می کنید که این زبان ها را ندارد، همچنان خوب است که آنها را در دسترس داشته باشید.

در اینجا الگوریتم اصلی درون یک تابع آمده است:

خالی شروع کنید()  بین المللی بلیط = 0; بین المللی سفارش; بین المللی سفارش بستن; بین المللی OrderTotal1 = شمارنده سفارش(1111); بین المللی OrderTotal2 = شمارنده سفارش(2222); دو برابر متقاعد کردن[9]; دو برابر خط پایه[26]; دو برابر تبدیل = CopyClose(سمبل(), 0, 0, 9, متقاعد کردن); دو برابر پایه = CopyClose(سمبل(), 0, 0, 26, خط پایه); دو برابر حداکثر خط = بیشترین(متقاعد کردن, 9); دو برابر خط کوچک = کمترین(متقاعد کردن, 9); دو برابر حکیم = بیشترین(خط پایه, 26); دو برابر خط کوچک = کمترین(خط پایه, 26); دو برابر خط تبدیل = (حداکثر خط + خط کوچک) / 2; دو برابر پایه = (حکیم + خط کوچک) / 2; if((خط تبدیل > پایه) && (OrderTotal1  2)) بلیط = سفارش دادن(سمبل(),op_buy,اندازه زیادی,پرسیدن,3,0,0,خالی,1111,0,سبز); برای(بین المللی c = 0; c  حاد(); c++) سفارش = انتخاب کردن(c, select_by_pos); if(نوع سفارش() == op_sell) سفارش بستن = سفارش(سفارش(), ترتیب(), پرسیدن, 3, قرمز); > > > if((پایه > خط تبدیل) && (OrderTotal2  2)) بلیط = سفارش دادن(سمبل(),op_sell,اندازه زیادی,پیشنهاد,3,0,0,خالی,2222,0,قرمز); برای(بین المللی c = 0; c  حاد(); c++) سفارش = انتخاب کردن(c, select_by_pos); if(نوع سفارش() == op_buy) سفارش بستن = سفارش(سفارش(), ترتیب(), پیشنهاد, 3, سبز); > > > > 

کد نسبتاً ساده است ، بنابراین می توانیم بدون مقدمه خیلی زیاد آن را شروع کنیم.

چند خط اول کد بیشتر برای کمک به صاف کردن عملکرد ضروری است:

 بین المللی بلیط = 0; بین المللی سفارش; بین المللی سفارش بستن; بین المللی OrderTotal1 = شمارنده سفارش(1111); بین المللی OrderTotal2 = شمارنده سفارش(2222); 

بلیط INT به سادگی راهی برای MQL4 است تا معاملات شما را پیگیری کند. به عنوان مثال ، هر تجارت بعدی که در آن قرار دارید شماره خواهد بود. تجارت شماره 1 ، تجارت شماره 2 و غیره.

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

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

با حرکت ، ما این چند خط را داریم:

 دو برابر متقاعد کردن[9]; دو برابر خط پایه[26]; دو برابر تبدیل = CopyClose(سمبل(), 0, 0, 9, متقاعد کردن); دو برابر پایه = CopyClose(سمبل(), 0, 0, 26, خط پایه); 

اینجاست که خطوط تبدیل (Tenkan-Sen) و Base (Kijun-Sen) را تعریف می کنیم. همانطور که قبلاً گفتم ، MQL4 دارای برخی از کارکردهای داخلی است که از محاسبات برای ما مراقبت می کند. با این حال ، ما می خواهیم نحوه اجرای الگوریتم را به صورت دستی بررسی کنیم.

ما 2 آرایه ایجاد خواهیم کرد ، یکی برای خط تبدیل و دیگری برای پایه. از آنجا که می دانیم در هر آرایه چند عنصر وجود دارد (9 و 26) ، می توانیم هنگام تعریف آنها ، آنها را به صورت آماری اختصاص دهیم.

روش پر کردن آرایه ها از طریق تابعی به نام CopyClose است که آخرین قیمت X را در آرایه ما برای ما کپی می کند.

با توجه به اسناد 2 ، پارامترها به شرح زیر است:

int copyclose (string symbol_name ، int timeframe ، int start_pos ، int count ، close_array []) ؛

با استفاده از این، می توانیم آن را با اطلاعاتی که داریم پر کنیم - هیچ نماد یا جفت ارز خاصی نمی خواهیم، بنابراین می توانیم آن را به عنوان NULL بگذاریم. بازه زمانی ما زمان فعلی است، بنابراین آن را 0 می گذاریم. مقدار شروع ما جدیدترین مقدار است، یعنی 0 را نیز قرار می دهیم. تعداد ما 9 و 26 است، بنابراین برای یک نمونه از تابع، 9 و برایدیگر ما 26 را قرار می دهیم. برای آرایه نزدیک خود، به سادگی نام آرایه خود را قرار می دهیم - خط تبدیل یا خط پایه.

حالا این قسمت را داریم:

 دو برابر حداکثر خط = بیشترین(متقاعد کردن, 9); دو برابر خط کوچک = کمترین(متقاعد کردن, 9); دو برابر حکیم = بیشترین(خط پایه, 26); دو برابر خط کوچک = کمترین(خط پایه, 26); دو برابر خط تبدیل = (حداکثر خط + خط کوچک) / 2; دو برابر پایه = (حکیم + خط کوچک) / 2; 

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

پس از آن، معادله خود را می نویسیم و مقادیر حداکثر و حداقل خود را وصل می کنیم.

علاوه بر این، یک راه ساده تر و داخلی برای انجام این کار وجود دارد - می توانیم از تابع iIchimoku استفاده کنیم:

با نگاهی به مستندات 3، پارامترها به شرح زیر است:

iIchimoku (نماد، بازه زمانی، تنکان سن، کیجون سن، دوره سنکو اسپان B، منبع داده، تغییر زمانی) 

با استفاده از این، می توانیم آن را با اطلاعاتی که داریم پر کنیم - هیچ نماد یا جفت ارز خاصی نمی خواهیم، بنابراین می توانیم آن را به عنوان NULL بگذاریم. بازه زمانی ما زمان فعلی است، بنابراین آن را 0 می گذاریم. سپس، سه مقدار بعدی را به ترتیب با 9، 26 و 52 جایگزین می کنیم. منبع داده این است که کدام خط را به عنوان مقدار بازگشتی می خواهید - خط تبدیل، خط پایه یا یکی از خطوط Senkou Span. برای این کار 1 را در خط تبدیل و 2 را برای خط پایه قرار می دهیم. در نهایت، ما به هیچ وجه نمی خواهیم زمان را تغییر دهیم، بنابراین آن را 0 نگه می داریم.

این ما را نتیجه خواهد داد

 دو برابر خط تبدیل = آیچیموکو(خالی, 0, 9, 26, 52, 1, 0); دو برابر پایه = آیچیموکو(خالی, 0, 9, 26, 52, 2, 0); 

به جای این همه کارخوبه، نه؟

این قسمت آخر کد نیز نسبتاً ساده است:

 if((خط تبدیل > پایه) && (OrderTotal1  2)) بلیط = سفارش دادن(سمبل(),op_buy,اندازه زیادی,پرسیدن,3,0,0,خالی,1111,0,سبز); برای(بین المللی c = 0; c  حاد(); c++) سفارش = انتخاب کردن(c, select_by_pos); if(نوع سفارش() == op_sell) سفارش بستن = سفارش(سفارش(), ترتیب(), پرسیدن, 3, قرمز); > > > if((پایه > خط تبدیل) && (OrderTotal2  2)) بلیط = سفارش دادن(سمبل(),op_sell,اندازه زیادی,پیشنهاد,3,0,0,خالی,2222,0,قرمز); برای(بین المللی c = 0; c  حاد(); c++) سفارش = انتخاب کردن(c, select_by_pos); if(نوع سفارش() == op_buy) سفارش بستن = سفارش(سفارش(), ترتیب(), پیشنهاد, 3, سبز); > > > 

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

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

نتایج

اکنون که الگوریتم خود را به صورت کد پیاده سازی کرده ایم ، اجازه دهید یک پشتی را انجام دهیم تا ببینیم که معامله گر Ichimoku ما چگونه انجام می دهد. می توانید کد کامل را در GitHub من مشاهده کنید.

در اینجا شرایطی که من برای آزمایش الگوریتم استفاده می کنم وجود دارد:

Settings for algo test

من از EUR/USD در نمودار 4 ساعته استفاده می کنم (بنابراین تمام دوره های ما که Ichimoku برای محاسبه استفاده می کند 4 ساعت خواهد بود) و من آن را از اول ژانویه 2018 تا 20 دسامبر 2018 آزمایش می کنم. تعادل 10،000 دلار و از اندازه 0. 1 استفاده می کند. من همچنین از گسترش 5 استفاده می کنم ، فقط به این ترتیب که بیش از حد در عملکرد الگوریتم ما دخالت نمی کند. در حال حاضر ، من بیشتر به نحوه عملکرد آن در بازار و نه استحکام اهمیت می دهم.

در اینجا نتایج وجود دارد:

Profit results of algo test

و در اینجا گزارش دقیق تر است:

Report of algo test

ما می توانیم ببینیم که این الگوریتم سود خالص 3089 دلار کسب کرده است ، که در حدود یک است~31 ٪ بازده سال. اصلاً بد نیست! اما مطمئناً پیشرفت هایی وجود دارد که می توان انجام داد.

نکته مثبت این است که حداکثر کاهش 45/13 درصد بود و در نمودار سود می بینید که سهام عدالت (خط سبز) هرگز زیر تراز حساب فرو نمی رود. این بدان معنی است که ما تجارت بزرگی از دست ندادیم.

علاوه بر این ، معاملات کوتاه ما فقط 50 ٪ از زمان موفقیت آمیز بود و معاملات طولانی ما فقط موفق بود~39 ٪ از زمان. این واقعیت که ما هنوز سودآوری از این اعداد را کسب کردیم ، تعجب آور است و به قدرت سیستم Ichimoku اشاره دارد ، زیرا بزرگترین تجارت سودآوری ما (438 دلار) در حدود 4 برابر به عنوان بزرگترین تجارت باخت ما (-101 دلار) بود.

نتیجه

برای نتیجه گیری ، من می گویم که این سیستم قطعاً مؤثر است و از پتانسیل بسیار خوبی برخوردار است. 9 ، 26 و 52 به نظر می رسد یک نقطه شیرین قطعی است ، زیرا آنها اجازه می دهند سیستم به بازار واکنشی نشان دهد - نه خیلی واکنشی در جایی که باعث ایجاد تجارت در هنگام نوسانات شود و به اندازه کافی واکنشی نباشد ، تا حدودیجایی که شما در معاملات سودآور از دست نمی دهید.

من همچنین تا آنجا که می گویم این یکی از تنها سیستم های تجاری است که به خودی خود می تواند سودآور باشد ، بدون اینکه شاخص های دیگری درگیر شوند. به نظر می رسد این آزمایش توسط BabyPips انجام شده است ، زیرا آنها یک سیستم تجاری بسیار مشابه را که در این پست وبلاگ انجام دادیم انجام دادند.

من همچنین تعجب می کنم که برای بهبود سیستم چه ترفندهایی می تواند ایجاد شود - به ویژه ، چگونه می توانیم به طور موثری از Cloud Kumo به عنوان یک سیگنال تجاری استفاده کنیم. امکانات زیادی وجود دارد ، و مطمئناً ایچیموکو یک شاخص امیدوار کننده است.

پلتفرم های تجاری...
ما را در سایت پلتفرم های تجاری دنبال می کنید

برچسب : نویسنده : مریم کاویانی بازدید : <-PostHit-> تاريخ : شنبه 7 مرداد 1402 ساعت: 12:55