اگر موقعیت طولانی باشد - باید بسته شود؟
- آیا باید توقف دنباله دار تنظیم شود؟
- باید بسته شود؟
- آیا باید توقف دنباله دار تنظیم شود؟
به نظر می رسد که بسیار ساده و فقط 4 بلوک اصلی است.
حال اجازه دهید ما سعی کنیم قطعات کد را به صورت مرحله به مرحله برای هر بخش از طرح ساختاری تولید کنیم:
- اولیه سازی متغیرها کلیه متغیرهایی که در برنامه خبره مورد استفاده قرار می گیرند باید با توجه به نحو زبان متاکووت 4 اول تعریف شوند. به همین دلیل بلوک را برای اولیه سازی متغیرها در ابتدای برنامه وارد می کنیم
بیرونی دو برابرTakeProfit =50; بیرونی دو برابرتعداد زیادی =0.1; بیرونی دو برابرtrailingStop =30; بیرونی دو برابرmacDopenlevel =3; بیرونی دو برابرmacDcloselevel =2; بیرونی دو برابرmatrendperiod =26;
زبان متاکووت 4 با اصطلاح "متغیرهای خارجی" تکمیل می شود. متغیرهای خارجی را می توان بدون اصلاح کد منبع برنامه متخصص از خارج تنظیم کرد. این انعطاف پذیری اضافی را فراهم می کند. در برنامه ما ، متغیر matrendperiod به عنوان متغیر خارجی تعریف می شود. ما تعریف این متغیر را در ابتدای برنامه وارد می کنیم.
بیرونی دو برابرmatrendperiod =26;
// بررسی داده های اولیه // مهم است که اطمینان حاصل کنیم که متخصص با یک عادی کار می کند // نمودار و کاربر هیچ اشتباهی در تنظیم خارجی انجام نداد // متغیرها (تعداد زیادی ، Stoploss ، TakeProfit ، // trailingstop) در مورد ما ، ما TakeProfit را بررسی می کنیم // در نمودار کمتر از 100 میله if(میله100) <چاپ("میله های کمتر از 100"); برگشت(0);> if(TakeProfit10) <چاپ("استفاده کمتر از 10"); برگشت(0); // بررسی Profit> در نظر گرفتنشروع ()<دو برابرmacDcurrent ، macDprevious ، سیگنال سیگنال ؛دو برابرSignalPrevious ، Macrrent ، MapRevious ؛در نظر گرفتنCNT ، بلیط ، کل ؛// برای ساده سازی برنامه نویسی و سرعت بخشیدن به دسترسی // داده ها در متغیرهای داخلی قرار می گیرندmacDcurrent =imacd(خالی,0,12,26,9,close قیمت، mode_main ،0) ؛macDprevious =imacd(خالی,0,12,26,9,close قیمت، mode_main ،1) ؛سیگنالimacd(خالی,0,12,26,9,close قیمت، mode_signal ،0) ؛سیگنالimacd(خالی,0,12,26,9,close قیمت، mode_signal ،1) ؛mAcurrent =IMA(خالی,0، matrendperiod ،0,حالت_ما,close قیمت,0) ؛mapRevious =IMA(خالی,0، matrendperiod ،0,حالت_ما,close قیمت,1);
کل =حاد(); if(کل 1)
- چک ها: در دسترس بودن وجوه در حساب و غیره قبل از تجزیه و تحلیل وضعیت بازار توصیه می شود وضعیت حساب خود را بررسی کنید تا مطمئن شوید که برای باز کردن موقعیت ، بودجه رایگان در آن وجود دارد.
if(AccountFreeMargin ()<(1000*مقدار زیادی))<چاپ("We have no money. Free Margin keyword">برگشت(0);>
// امکان موقعیت طولانی (خرید) را بررسی کنید if(MacDcurrent0 && MacdCurrent>سیگنال(MacdCurrent)>(MacDopenlevel*نقطه) && MaCurrent>MapRevious)سفارش دادن(سمبل() ، op_buy ، تعداد زیادی ، سؤال کردن ،3,0، بپرسید+TakeProfit*نقطه, "نمونه MACD",16384,0،سبز)؛if(ticket>0) <if(انتخاب کردن(بلیط ، select_by_ticket ، mode_trades))چاپ("خرید سفارش باز شد:",OrderOpenPrice());> دیگر چاپ("خطای باز کردن سفارش خرید:",گلیستور()); برگشت(0);>
// امکان موقعیت کوتاه (فروش) را بررسی کنید if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MacDopenlevel*نقطه) و & macrrentسفارش دادن(سمبل() ، op_sell ، تعداد زیادی ، پیشنهاد ،3,0، پیشنهاد پرفش*نقطه, "نمونه MACD",16384,0،قرمز)؛if(ticket>0) <if(انتخاب کردن(بلیط ، select_by_ticket ، mode_trades))چاپ("سفارش فروش باز شد:",OrderOpenPrice());> دیگر چاپ("خطای باز کردن سفارش فروش:",گلیستور()); برگشت(0);> برگشت(0);>
// ورود صحیح به بازار مهم است ، // اما خروج صحیح از آن مهمتر است. برای(CNT =0؛ cnt<انتخاب کردن(CNT ، select_by_pos ، mode_trades) ؛if(OrderType () // برای موقعیت باز شده بررسی کنیدordersymbol () ==سمبل()) // نماد را بررسی کنید
"CNT" - "یک متغیر چرخه است که باید در ابتدای برنامه به شرح زیر تعریف شود:
int cnt = 0 ؛
if(OrderType () == op_buy)// موقعیت طولانی باز می شود
- باید بسته شود؟شرط خروج از یک موقعیت طولانی: MACD با خط سیگنال آن عبور می کند ، MACD بالاتر از صفر است ، به سمت پایین می رود و توسط خط سیگنال به سمت بالا می رود.
if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MacDcloselevel*نقطه)) 3، بنفش) ؛// موقعیت بستن برگشت(0); // خروج>
// بررسی توقف دنباله دار if(TrailingStop>0) <if(Bid-OrderOpenPrice()>نقطه*TrailingStop)<if(Orderstoploss ()نقطه*TrailingStop ، OrderTakeProfit () ،0،سبز)؛برگشت(0);>>>
ما بریس اپراتور را می بندیم.
دیگر // به موقعیت کوتاه بروید
- باید بسته شود؟شرط برای خروج از یک موقعیت کوتاه: MACD با خط سیگنال آن عبور می کند ، MACD زیر صفر است ، به سمت بالا می رود و توسط خط سیگنال به سمت پایین می رود.
if(MacDcurrent0 && MacdCurrent>SignalCurrent && macDprevious (MacDcloselevel*نقطه)) 3، بنفش) ؛// موقعیت بستن برگشت(0); // خروج>
// بررسی توقف دنباله دار if(TrailingStop>0) <if((OrderOpenPrice()-Ask)>(نقطه*trailingstop))<if((OrderStopLoss()>(بپرسید+نقطه*TrailingStop)) ||(Orderstoploss () ==0)) نقطه*TrailingStop ، OrderTakeProfit () ،0،قرمز)؛برگشت(0);>>>
بستن تمام براکت مجعد که باز است.
>>> برگشت(0);>
بنابراین ، به دنبال این روش گام به گام ، ما مشاور متخصص خود را نوشتیم.
مرحله 3 - مونتاژ کد حاصل از برنامه
بیایید تنظیمات مشاور Expert Advisor (با استفاده از یک دکمه یا یک خط در منوی "Properties") را باز کنیم. به ما پنجره ای پیشنهاد می شود که در آن باید تنظیمات خارجی پارامترهای کار را تعریف کنیم:
بیایید تمام کد را از بخش قبلی جمع کنیم:
//+------------------------------------------------------------------+ // |macd sample. mq4 | // |کپی رایت © 2005 ، Metaquotes Software Corp. | // |https://www. metaquotes. net/ | //+------------------------------------------------------------------+ بیرونی دو برابرTakeProfit =50; بیرونی دو برابرتعداد زیادی =0.1; بیرونی دو برابرtrailingStop =30; بیرونی دو برابرmacDopenlevel =3; بیرونی دو برابرmacDcloselevel =2; بیرونی دو برابرmatrendperiod =26; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ در نظر گرفتنشروع ()<دو برابرmacDcurrent ، macDprevious ، سیگنال سیگنال ؛دو برابرSignalPrevious ، Macrrent ، MapRevious ؛در نظر گرفتنCNT ، بلیط ، کل ؛// بررسی داده های اولیه // مهم است که اطمینان حاصل کنیم که متخصص با یک عادی کار می کند // نمودار و کاربر هیچ اشتباهی در تنظیم خارجی انجام نداد // متغیرها (تعداد زیادی ، Stoploss ، TakeProfit ، // trailingstop) در مورد ما ، ما TakeProfit را بررسی می کنیم // در نمودار کمتر از 100 میله if(میله100) <چاپ("میله های کمتر از 100"); برگشت(0);> if(TakeProfit10) <چاپ("استفاده کمتر از 10"); برگشت(0); // بررسی Profit> // برای ساده سازی برنامه نویسی و سرعت بخشیدن به دسترسی // داده ها در متغیرهای داخلی قرار می گیرندmacDcurrent =imacd(خالی,0,12,26,9,close قیمت، mode_main ،0) ؛macDprevious =imacd(خالی,0,12,26,9,close قیمت، mode_main ،1) ؛سیگنالimacd(خالی,0,12,26,9,close قیمت، mode_signal ،0) ؛سیگنالimacd(خالی,0,12,26,9,close قیمت، mode_signal ،1) ؛mAcurrent =IMA(خالی,0، matrendperiod ،0,حالت_ما,close قیمت,0) ؛mapRevious =IMA(خالی,0، matrendperiod ،0,حالت_ما,close قیمت,1) ؛کل =حاد(); if(کل 1) <// بدون سفارش باز شده شناسایی شده if(AccountFreeMargin ()<(1000*مقدار زیادی))<چاپ("We have no money. Free Margin keyword">برگشت(0);> // امکان موقعیت طولانی (خرید) را بررسی کنید if(MacDcurrent0 && MacdCurrent>سیگنال(MacdCurrent)>(MacDopenlevel*نقطه) && MaCurrent>MapRevious)سفارش دادن(سمبل() ، op_buy ، تعداد زیادی ، سؤال کردن ،3,0، بپرسید+TakeProfit*نقطه,"نمونه MACD",16384,0،سبز)؛if(ticket>0) <if(انتخاب کردن(بلیط ، select_by_ticket ، mode_trades))چاپ("خرید سفارش باز شد:",OrderOpenPrice());> دیگر چاپ("خطای باز کردن سفارش خرید:",گلیستور()); برگشت(0);> // امکان موقعیت کوتاه (فروش) را بررسی کنید if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MacDopenlevel*نقطه) و & macrrentسفارش دادن(سمبل() ، op_sell ، تعداد زیادی ، پیشنهاد ،3,0، پیشنهاد پرفش*نقطه,"نمونه MACD",16384,0،قرمز)؛if(ticket>0) <if(انتخاب کردن(بلیط ، select_by_ticket ، mode_trades))چاپ("سفارش فروش باز شد:",OrderOpenPrice());> دیگر چاپ("خطای باز کردن سفارش فروش:",گلیستور()); برگشت(0);> برگشت(0);> // ورود صحیح به بازار مهم است ، // اما خروج صحیح از آن مهمتر است. برای(CNT =0؛ cntانتخاب کردن(CNT ، select_by_pos ، mode_trades) ؛if(OrderType () // برای موقعیت باز شده بررسی کنیدordersymbol () ==سمبل()) // نماد را بررسی کنید <if(OrderType () == op_buy)// موقعیت طولانی باز می شود <// آیا باید بسته شود؟ if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MacDcloselevel*نقطه)) 3، بنفش) ؛// موقعیت بستن برگشت(0); // خروج> // بررسی توقف دنباله دار if(TrailingStop>0) <if(Bid-OrderOpenPrice()>نقطه*TrailingStop)<if(Orderstoploss () نقطه*TrailingStop)نقطه*TrailingStop ، OrderTakeProfit () ،0،سبز)؛برگشت(0);>>>> دیگر // به موقعیت کوتاه بروید <// آیا باید بسته شود؟ if(MacDcurrent0 && MacdCurrent>سیگنال(MacdCurrent)>(MacDcloselevel*نقطه)) 3، بنفش) ؛// موقعیت بستن برگشت(0); // خروج> // بررسی توقف دنباله دار if(TrailingStop>0) <if((OrderOpenPrice()-Ask)>(نقطه*trailingstop))<if((OrderStopLoss()>(بپرسید+نقطه*TrailingStop)) ||(Orderstoploss () ==0)) نقطه*TrailingStop ، OrderTakeProfit () ،0،قرمز)؛برگشت(0);>>>>>> برگشت(0);> // پایان. برای پیکربندی نهایی مشاور متخصص ما ، فقط مقادیر متغیرهای خارجی "تعداد = 1" ، "ضرر متوقف (S/L) = 0" (استفاده نشده است) ، "سود (T/P) = 120" را مشخص کنید (مناسب برای فواصل یک ساعته) ، "توقف دنباله دار (T/s) = 30". البته می توانید ارزشهای خود را تنظیم کنید. دکمه "کامپایل" را فشار دهید و در صورت عدم وجود پیام خطایی (به هر حال ، می توانید متن را از لیست بالا در متائیتور کپی کنید) ، برای ذخیره مشاور متخصص ، دکمه "ذخیره" را فشار دهید.
هشدار: کلیه حقوق این مواد توسط Metaquotes Ltd. کپی یا چاپ مجدد این مواد به طور کامل یا جزئی محفوظ است.