آموزش mql5 و ارائه نمونه کدهای مفید برای ساخت ربات فارکس

بله دقیقا همینطوره :wink:

1 لایک کرده

این هم فایل نهایی پروژه

MyExpert.mq5 (7.7 کیلوبایت)

1 لایک کرده

و در انتها برای فعال شدن عملیات کلیک روی دکمه های خرید و فروش کد زیر را به فایل اصلی پروژه اضافه میکنیم

void OnChartEvent(const int32_t id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   MqlTick t;
   double l = GetLotSize();
   if(id==CHARTEVENT_CLICK && sparam=="")
     {
      int x = (int)lparam;
      int y = (int)dparam;

      datetime time;
      int sw = 0;

      if(ChartXYToTimePrice(0, x, y, sw, time, vChartPrice))
        {
         Comment("Selected Chart Price = ", vChartPrice);
         SymbolInfoTick(_Symbol, t);

         if(vChartPrice > t.ask)
           {
            ButtonTextChange(0, "Btn_Buy_Stop", "Buy Stop at "+(string)vChartPrice);
            ButtonTextChange(0, "Btn_Sell_Limit", "Sell Limit at "+(string)vChartPrice);

            ObjectSetInteger(0, "Btn_Buy_Limit", OBJPROP_XDISTANCE, -1000);
            ObjectSetInteger(0, "Btn_Sell_Stop", OBJPROP_XDISTANCE, -1000);
            ObjectSetInteger(0, "Btn_Buy_Stop",  OBJPROP_XDISTANCE, 100);
            ObjectSetInteger(0, "Btn_Sell_Limit",OBJPROP_XDISTANCE, 400);
            ChartRedraw();
           }
         else
            if(vChartPrice < t.bid)
              {
               ButtonTextChange(0, "Btn_Buy_Limit", "Buy Limit at "+(string)vChartPrice);
               ButtonTextChange(0, "Btn_Sell_Stop", "Sell Stop at "+(string)vChartPrice);

               ObjectSetInteger(0, "Btn_Buy_Limit", OBJPROP_XDISTANCE, 100);
               ObjectSetInteger(0, "Btn_Sell_Stop", OBJPROP_XDISTANCE, 400);
               ObjectSetInteger(0, "Btn_Buy_Stop",  OBJPROP_XDISTANCE, -1000);
               ObjectSetInteger(0, "Btn_Sell_Limit",OBJPROP_XDISTANCE, -1000);
               ChartRedraw();
              }
        }
     }
   else
      if(id==CHARTEVENT_OBJECT_CLICK && sparam=="Btn_Buy")
        {
         SymbolInfoTick(_Symbol, t);
         OpenPosition(true, t.ask - (SL_Distance * _Point), t.bid + (TP_Distance * _Point));
         ObjectSetInteger(ChartID(), sparam, OBJPROP_STATE, 0);
        }
      else
         if(id==CHARTEVENT_OBJECT_CLICK && sparam=="Btn_Sell")
           {
            SymbolInfoTick(_Symbol, t);
            OpenPosition(false, t.bid + (SL_Distance * _Point), t.ask - (TP_Distance * _Point));
            ObjectSetInteger(ChartID(), sparam, OBJPROP_STATE, 0);
           }
         else
            if(id==CHARTEVENT_OBJECT_CLICK && sparam=="Btn_Sell_Stop")
              {
               OpenSellStopOrderAtPrice("", vChartPrice, vChartPrice + (SL_Distance * _Point), vChartPrice - (TP_Distance * _Point), 0, l);
               ObjectSetInteger(ChartID(), sparam, OBJPROP_STATE, 0);
              }
            else
               if(id==CHARTEVENT_OBJECT_CLICK && sparam=="Btn_Buy_Stop")
                 {
                  OpenBuyStopOrderAtPrice("", vChartPrice, vChartPrice - (SL_Distance * _Point), vChartPrice + (TP_Distance * _Point), 0, l);
                  ObjectSetInteger(ChartID(), sparam, OBJPROP_STATE, 0);
                 }
               else
                  if(id==CHARTEVENT_OBJECT_CLICK && sparam=="Btn_Sell_Limit")
                    {
                     OpenSellLimitOrderAtPrice("", vChartPrice, vChartPrice + (SL_Distance * _Point), vChartPrice - (TP_Distance * _Point), 0, l);
                     ObjectSetInteger(ChartID(), sparam, OBJPROP_STATE, 0);
                    }
                  else
                     if(id==CHARTEVENT_OBJECT_CLICK && sparam=="Btn_Buy_Limit")
                       {
                        OpenBuyLimitOrderAtPrice("", vChartPrice, vChartPrice - (SL_Distance * _Point), vChartPrice + (TP_Distance * _Point), 0, l);
                        ObjectSetInteger(ChartID(), sparam, OBJPROP_STATE, 0);
                       }
  }
//+------------------------------------------------------------------+

2 لایک کرده

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

اول اینکه پس از اجرای ربات دکمه های Buy و Sell و Buy Limit و Sell Limit و Buy Stop و Sell Stop روی چارت ظاهر میشن. کار دکمه های Buy و Sell همینطور که از اسمشون مشخصه باز کردن معاملات عادی خرید و فروش هست. فاصله SL و TP بر حسب پوینت در پارامتر های ورودی تعیین شده . همچنین مقدار لات سایز نیز بر اساس پارامتر های ورودی یا بصورت ثابت و یا به صورت محاسبه بر مبنای بالانس انجام میشه .

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

برای این نوع از سفارشات هم از همون روش تعیین لات سایز و SL و TP استفاده میشه.

1 لایک کرده

فایل BuySell.mq5 :

این فایل حاوی 5 تابع هست که به ترتیب توضیح میدم

تابع OpenSellStopOrderAtPrice

این تابع یک سفارش SellStop در قیمتی که تعیین میکنید ثبت میکنه

پارامتر های ورودی :

string vDescription = “”, double vPrice = 0, double vSL = 0, double vTP = 0, datetime ExpireAt = 0, double vCustomLot = 0

vDescription به سفارش توضیحات اضافه میکنه . هر چی دوست دارید بین اون دوتا کتیشن بنویسید تا در ستون کامنت سفارش نمایش داده بشه

vPrice برای تعیین قیمت مورد نظر شما جهت سفارش گذاری استفاده میشه

مقادیر vSL و vTP به ترتیب قیمت های استاپلاس و تیک پروفیت را تعیین می کنند

ExpireAt تاریخ و زمان انقضای سفارش را مشخص میکند

vCustomLot مقدار دلخواه لات سایز را تعیین میکند


تابع OpenBuyStopOrderAtPrice

این تابع یک سفارش BuyStop در قیمتی که تعیین میکنید ثبت میکنه

توضیحات و پارامتر های این تابع هم مانند تابع قبلیست


تابع OpenBuyLimitOrderAtPrice

این تابع یک سفارش BuyLimit در قیمتی که تعیین میکنید ثبت میکنه

توضیحات و پارامتر های این تابع هم مانند تابع قبلیست


تابع OpenSellLimitOrderAtPrice

این تابع یک سفارش SellLimit در قیمتی که تعیین میکنید ثبت میکنه

توضیحات و پارامتر های این تابع هم مانند تابع قبلیست


تابع OpenPosition

سه مقدار ورودی دارد که به ترتیب isBuy و sl و tp هستند

اگر مقدار isBuy را true انتخاب کنید ربات معامله خرید انجام میدهد و اگر false انتخاب کنید فروش !

مقادیر sl و tp هم برای تعیین استاپ لاس و تیک پروفیت هستند

3 لایک کرده

سلام دوستان…وقتتون بخیر…یه سوال دارم…آیا امکان داره فایل help متاادیتور رو به صورت مجزا داشت؟ اگر بله امکانش هست اینجا قرارش بدید؟….

ممنون از شما و از مدرس عزیز….

این اشتباهه.

همون لینک سایت mql5.com و metatrader5.com بزار با لینک Code Base, Articles, Market و … همون mql5.com کامل و جامع ست دگه.

1 لایک کرده

منظورت help که نرم افزار meta editor معرفی میکنه یا اون help که reference هست که زبان mql5 معرفی میکنه.

mql5.rar (8.0 مگابایت)

اینو به پوشه

%AppData%\MetaQuotes\Terminal\Help

منتقل کن.

این فایل به روز نیست، تاریخ 12/9/2025 هست.

1 لایک کرده