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

fx pro expert v3

fx pro expert v3.mq4
Вы автор или правообладатель?

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

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

О программе

fx pro expert v3 — торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Советник автоматизирует управление торговыми позициями, включая открытие, закрытие и корректировку ордеров на текущем инструменте.

В основе работы лежит система управления размером лота с несколькими режимами расчёта, включая экспоненциальное увеличение. Советник размещает отложенные ордера при достижении заданного ценового шага PipStep и способен усреднять цену открытия позиций.

Продукт включает средства защиты капитала: стоп по эквити, трейлинг-стоп и таймаут открытых сделок. Также поддерживается принудительное закрытие всех позиций на символе при определённых условиях.

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

НастройкаОписание
MMType Метод расчёта размера лота: 0 — фиксированный, 1 — экспоненциальное увеличение, 2 — корректировка по результатам закрытых позиций.
UseClose Переключатель режима закрытия позиций с корректировкой размера лота.
UseAdd Переключатель режима добавления позиций с увеличением размера лота.
LotExponent Коэффициент для экспоненциального расчёта размера лота при добавлении позиций.
slip Допустимое проскальзывание цены в пунктах при размещении торговых ордеров.
Lots Начальный (базовый) размер лота для торговых операций.
LotsDigits Количество знаков после запятой для округления размера лота (2 — 0.01, 1 — 0.1, 0 — 1.0).
TakeProfit Расстояние до тейк-профита в пунктах от средней цены открытия позиции.
PipStep Ценовой шаг в пунктах, при достижении которого открываются дополнительные позиции.
MaxTrades Максимальное количество одновременно открытых позиций на символе.
UseEquityStop Включает автоматическое закрытие всех позиций при превышении допустимого риска эквити.
TotalEquityRisk Процент эквити, при превышении которого убытком срабатывает принудительное закрытие всех позиций.
UseTrailingStop Включает трейлинг-стоп для защиты прибыли по открытым позициям.
UseTimeOut Включает автоматическое закрытие всех позиций на символе по истечении заданного времени.
MaxTradeOpenHours Максимальное время удержания открытых позиций в часах, после истечения которого все позиции закрываются.
Получить полный код

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

extern int     MMType=1;       /// LotExponent
extern bool    UseClose=false; ///  PipStep = false 
extern bool    UseAdd=true;    /// LotExponent  MMType  = true
extern double  LotExponent=1.777; /// 0.1, 0.16, 0.26, 0.43 
extern double  slip=3;   
extern double  Lots=0.1; /// 0.01 0.1 0.16
extern double  LotsDigits=2;  /// 2 - 0.01, 1 - 0.1, 0 - 1.0
extern double  TakeProfit=10; 
double  Stoploss=0.0; 
double  TrailStart=0;
double  TrailStop=0;
extern double  PipStep=7; 
extern int     MaxTrades=2;
extern bool    UseEquityStop=false;
extern double  TotalEquityRisk=0.10;
extern bool    UseTrailingStop=false;
extern bool    UseTimeOut=false;
extern double  MaxTradeOpenHours=0;

int MagicNumber=12324;
double PriceTarget, StartEquity, BuyTarget, SellTarget;
int sav;
double AveragePrice, SellLimit, BuyLimit;
double LastBuyPrice, LastSellPrice, ClosePrice, Spread;
int flag;
string EAName="fx pro expert v3";
int vee;
datetime timeprev=0, expiration;
int NumOfTrades=0;
int wbf;
double iLots;
int cnt=0, total;
double Stopper=0;
bool TradeNow=true, LongTrade=true, ShortTrade=true;
int ticket;
bool NewOrdersPlaced=true;

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

int deinit()
  {
   return(0);
  }

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

double ND(double v){return(NormalizeDouble(v,Digits));}

  int fOrderCloseMarket(bool aCloseBuy=true,bool aCloseSell=true)
  {
   int tErr=0;
     for(int i=OrdersTotal()-1;i>=0;i--)
     {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
           if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
           {
              if(OrderType()==OP_BUY && aCloseBuy)
              {
               RefreshRates();
                 if(!IsTradeContextBusy())
                 {
                    if(!OrderClose(OrderTicket(),OrderLots(),ND(Bid),5,CLR_NONE))
                    {
                     Print("Error close BUY "+OrderTicket());//+" "+fMyErDesc(GetLastError())); 
                     tErr=-1;
                    }
                 }
                 else
                 {
                  static int lt1=0;
                    if(lt1!=iTime(NULL,0,0))
                    {
                     lt1=iTime(NULL,0,0);
                     Print("Need close BUY "+OrderTicket()+". Trade Context Busy");
                    }
                  return(-2);
                 }
              }
              if(OrderType()==OP_SELL && aCloseSell)
              {
               RefreshRates();
                 if(!IsTradeContextBusy())
                 {
                    if(!OrderClose(OrderTicket(),OrderLots(),ND(Ask),5,CLR_NONE))
                    {
                     Print("Error close SELL "+OrderTicket());//+" "+fMyErDesc(GetLastError())); 
                     tErr=-1;
                    }
                 }
                 else
                 {
                  static int lt2=0;
                    if(lt2!=iTime(NULL,0,0))
                    {
                     lt2=iTime(NULL,0,0);
                     Print("Need close SELL "+OrderTicket()+". Trade Context Busy");
                    }
                  return(-2);
                 }
              }
           }
        }
     }
   return(tErr);
  }

  double fGetLots(int aTradeType)
  {
   double tLots;
     switch(MMType)
     {
         case 0:
            tLots=Lots;
            break;
         case 1:
            tLots=NormalizeDouble(Lots*MathPow(LotExponent,NumOfTrades),LotsDigits);
            break;
         case 2:
            int LastClosedTime=0;
            tLots=Lots;
              for(int i=OrdersHistoryTotal()-1;i>=0;i--)
              {
                 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
                 {
                    if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
                    {
                       if(LastClosedTime<OrderCloseTime())
                       {
                        LastClosedTime=OrderCloseTime();
                          if(OrderProfit()<0)
                          {
                           tLots=NormalizeDouble(OrderLots()*LotExponent,LotsDigits);
                          }
                          else
                          {
                           tLots=Lots;
                          }
                       }
                    }
                 }
                 else
                 {
                  return(-3);
                 }
              }
            break;
        }
        if(AccountFreeMarginCheck(Symbol(),aTradeType,tLots)<=0)
        {
         return(-1);
        }
        if(GetLastError()==134)
        {
         return(-2);
        }
      return(tLots);
     }

         int CountTrades()
           {
            int count=0;
            int trade;
            for(trade=OrdersTotal()-1;trade>=0;trade--)
              {
      

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

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

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

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

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

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

Стоимость полного кода
1 306,40₽ ≈ $15.97