← К каталогу
Исходный код · ID 832

MahsinEA

muhsinea.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

MahsinEA — торговый советник для MetaTrader 4, обеспечивающий автоматическое управление ордерами на валютном рынке. Программа поддерживает два режима работы: ручной, управляемый кнопкой на графике, и автоматический, основанный на заданном времени начала торгов. В ручном режиме торговля активируется и деактивируется посредством интерактивной кнопки, отображаемой на чарте.
Советник размещает отложенные ордера на покупку и продажу, контролируя при этом текущий спред и допустимое проскальзывание. Встроенная система управления рисками позволяет задать фиксированный размер лота или рассчитать его как процент от текущего баланса счета. Также доступны параметры стоп-лосса и тейк-профита.
Время старта торгов настраивается для режима работы по расписанию. Советник отслеживает количество открытых и отложенных ордеров, предотвращая дублирование позиций. Параметр магического номера используется для идентификации управляемых ордеров.

Настройки программы

НастройкаОписание
======Trade Setting====== (A) Разделитель торговли — Разделитель секции настроек торговли
Maximum Spread (MaxSpread) Максимальный спред — Максимально допустимый спред для открытия ордера
Show Arrow (ShowArrows) Отображение стрелок — Отображение стрелок на графике при открытии ордеров
Max Slippage (0=Disabled) (Slippage) Максимальное проскальзывание — Максимальное допустимое проскальзывание при открытии ордера
Magic Магический номер — Магический номер для идентификации ордеров советника
comment Комментарий к ордерам — Комментарий к ордерам, отправляемым советником
======Risk Setting====== (A6) Разделитель риска — Разделитель секции настроек риска
Risk Management Type (Choose) (Lot_type) Тип управления рисками — Тип управления рисками: фиксированный лот или процент от эквити
Trade Type (cfg) Режим торговли — Режим торговли: ручной (кнопка на графике) или по времени
Fixed Lot Size (LotSize) Фиксированный размер лота — Фиксированный размер лота при фиксированном типе управления рисками
Risk % (EquityStop) Процент риска от эквити — Процент риска от эквити для расчёта размера лота
StopLoss Стоп-лосс — Уровень стоп-лосса для открытых ордеров
TakeProfit Тейк-профит — Уровень тейк-профита для открытых ордеров
StartTime Время начала торгов — Время начала торгов в режиме работы по расписанию
Получить полный код

Поиск по коду файла

#property version   "1.00"
#property strict

#include <Controls/Button.mqh>

CButton              FLA_Acivate_button;

enum Risk_Management
 {
   Fixed_Lot,Risk_Percent
 };   

enum Trademanager
 {
   Manual,Times
 };   

input string A="================================";//======Trade Setting======
input double MaxSpread = 0; // Maximum Spread
input bool  ShowArrows=true; // Show Arrow
extern double Slippage=3; // Max Slippage (0=Disabled)
input int Magic =1134;
input string comment ="";
input string A6="";//======Risk Setting======
input Risk_Management Lot_type=Fixed_Lot; // Risk Management Type (Choose)
input Trademanager    cfg = Manual ;// Trade Type
input double LotSize = 0.1; // Fixed Lot Size
input double EquityStop=0.5;//Risk %
input double StopLoss = 20;
input double TakeProfit =40;

extern string StartTime = "09:28";

int xv = 0;// Position X
int yv = 30;// Position Y

double mp =1;

string sub;
datetime tl;
double tickvalues;
datetime timestart;
datetime datenow;

int OnInit()
  {
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
  {

   ObjectDel();

  }

void ObjectDel()
   {
     string name;
     int totalObjects  = ObjectsTotal(0,0,-1);

    for(int i=totalObjects-1; i>= 0; i--)
       {
          name = ObjectName(0,i,0,-1);
          if(StringFind(name,"FLA",0)>=0) ObjectDelete(0,name);
       }

}

bool CreateButton(CButton &button,string objname,string text,int x1,int y1,int x2, int y2, string fontname, int fontsize, color clr)
  {

   string font = "Arial Black";

   if(!button.Create(0,objname,0,x1,y1,x2,y2))
      return(false);
   if(!button.Text(text))
      return(false);
   if(!button.Color(clrWhite))
      return(false);
   if(!button.ColorBackground(clr))
      return(false);
   if(!button.ColorBorder(clrBlack))
      return(false);
   if(!button.FontSize(fontsize))
      return(false);
    if(!button.Top())
      return(false);
   if(!button.BringToTop())
      return(false);
   if(!button.Font(font))   
      return(false);

   return(true);
  }

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

   if(ObjectGetInteger(0,"FLA_Acivate_button",OBJPROP_STATE))
    {

         ObjectSetInteger(0,"FLA_Acivate_button",OBJPROP_STATE,0);

         if(ObjectGetString(0,"FLA_Acivate_button",OBJPROP_TEXT)=="No Trading")
           {
             ObjectSetString(0,"FLA_Acivate_button",OBJPROP_TEXT,"Trading");   
           }  
         else if (ObjectGetString(0,"FLA_Acivate_button",OBJPROP_TEXT)=="Trading")
            {
              ObjectSetString(0,"FLA_Acivate_button",OBJPROP_TEXT,"No Trading");   
            }  

    }

  } 

void OnTick()
  {
      // код доступен только после оплаты
   }

int NumTrade(int d)
   {
     int tot=0;
     double total = OrdersTotal();

      for(int i=0;i<total;i++)
        {
            if(OrderSelect(i,SELECT_BY_POS))
              {
                if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
                  {
                    if(d==0 && OrderType() ==0)tot+=1;
                    if(d==1 && OrderType() ==1)tot+=1;
                    if(d==2 && (OrderType() ==0 || OrderType() ==1))tot+=1;
                  }  
              }
        }      
 return(tot);  
   }

int NumTradr()
   {
     int tot=0;
     double total = OrdersTotal();

      for(int i=0;i<total;i++)
        {
            if(OrderSelect(i,SELECT_BY_POS))
              {
                if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType()>1)
                  {
                     tot+=1;

                  }  
              }
        }      
 return(tot);  
   }   

void Indic()
   {

      OpenBuy(Close[0]);
      OpenSell(Close[0]);
      if(NumTradr()==1)CloseOrder();

   }

 void CloseOrder()
   {
      double total = OrdersTotal();
      for(int i=0;i<total;i++)
        {
            if(OrderSelect(i,SELECT_BY_POS))
              {
                if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType()>1)
                  {

                     if(!(OrderDelete(OrderTicket(),clrNONE)))Print("Pending Order Close Failed: ",GetLastError());

                   }  
                }   
           }

   }

void OpenBuy(double pr)
  {

   RefreshRates();
  double sl=0;
  double tp=0;
  double lot =0;

   int ticket=0,tries=0;

      int tries_main=0;
      while(ticket<=0)
        {
         RefreshRates();

         if(GetSpread()>MaxSpread && MaxSpread !=0)
           {
            Print("Order not opened because spread ("+(string)(GetSpread())+") is higher than max allowed spread ("+(string)MaxSpread);
            return;
           }

         color arrowColor=clrLimeGreen;
         if(!ShowArrows) arrowColor=clrNONE;

       lot=GetLots();
       if(lot <= 0){Print("Calculated Lot Size <= 0");return;}

        if(!AccountFreeMarginCheck(Symbol(),OP_BUY,lot)>0)
           {
            Print("Order not opened because there's not enough money to buy "+DoubleToStr(lot,2)+" lots, try to lower the volume, error: ="+(string)GetLastError());
            return;
           }

            double price = pr + mp*_Point*5;

            if(StopLoss!=0)
               {
                  sl = price-StopLoss *mp* Point();
                  sl=NormalizeDouble (sl, Digits);
                  if(sl > price-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point())
                  sl = price-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point();
               }

            if(TakeProfit!=0)
              {
                  tp = price+TakeProfit*mp*Point(); 
                  tp=NormalizeDouble (tp, Digits); 
                  if(tp < price+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point())
                  tp = price+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point();
              }

            ticket=OrderSend(Symbol(),OP_BUYSTOP,lot,price,(int)Slippage,sl,tp,comment,Magic,0,arrowColor);
            if(ticket<0)Print("Order Buy trade failed: ",err_msg(GetLastError()));

         tries_main++;
         if(tries_main>10)break;
        }

  }

void OpenSell(double pr)
  {

 double sl=0;
 double tp=0;
 double lot=0;

 RefreshRates();

   int ticket=0,tries=0;

      int tries_main=0;
      while(ticket<=0)
        {
         RefreshRates();

         if(GetSpread()> MaxSpread && MaxSpread !=0)
           {
            Print("Order not opened because spread ("+(string)(GetSpread())+") is higher than max allowed spread ("+(string)MaxSpread);
            return;
           }

         color arrowColor=clrLimeGreen;
         if(!ShowArrows)arrowColor=clrNONE;

         lot=GetLots();
         if(lot <= 0){Print("Calculated Lot Size <= 0");return;}   

            if(!AccountFreeMarginCheck(Symbol(),OP_SELL,lot)>0)
           {
            Print("Order not opened because there's not enough money to buy "+DoubleToStr(lot,2)+" lots, try to lower the volume, error: "+(string)GetLastError());
           return;
           }

            double price = pr - mp*_Point*5;

            if(StopLoss!=0)
              {
                sl = price + StopLoss*mp * Point();
                sl=NormalizeDouble (sl, Digits);

                if(sl < price+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point())
                sl = price+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point();
             }

             if(TakeProfit!=0)
               {
                  tp = price - TakeProfit*mp * Point(); 
                  tp=NormalizeDouble (tp, Digits); 
                  if(tp > price-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point())
                  tp = price-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point();
                }        

            ticket=OrderSend(Symbol(),OP_SELLSTOP,lot,price,(int)Slippage,sl,tp,comment,Magic,0,arrowColor);
            if(ticket<0)Print("Order Buy trade failed: ",err_msg(GetLastError()));

         tries_main++;
         if(tries_main>10)break;
        }

  }

double GetLots ()
{
  double lotSize=0;

         if (Lot_type == Risk_Percent) 
              { lotSize = AccountEquity() * EquityStop/100 / ( StopLoss * mp * MarketInfo( Symbol(), MODE_TICKVALUE ) );}

         else if (Lot_type == Fixed_Lot) {lotSize = LotSize;}

         double lotsStep = MarketInfo(Symbol(), MODE_LOTSTE

Показано первые 50% кода (символов: 12980)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 298₽ ≈ $15.86