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

ZoneHedge_i EA

zonehedge_i ea @fxsignalspot.mq4

Похожие материалы по тегам

ares_indicator.pineTradingView · 1 общих теговgold_trend_revers.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 1 общих тегов! cycle-identifier.mq5MQL5 / MetaTrader 5 · 1 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 1 общих теговprecisionflowea.mq5MQL5 / MetaTrader 5 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

ZoneHedge_i EA — торговый советник для MetaTrader 4, использующий индикатор RSI для генерации сигналов на покупку и продажу. Советник отслеживает значения RSI на заданном таймфрейме и открывает позиции при достижении уровней перекупленности и перепроданности.

В советнике реализованы функции управления позициями: трейлинг-стоп, стоп по эквити, таймаут закрытия сделок, защита от просадки (drawdown) с ограничением количества ордеров и целевой прибыли. Поддерживается автоматическое управление лотом с риском в процентах от депозита.

Советник отображает на графике информацию о счёте (баланс, эквити, прибыль, плечо, свободные средства) и данные о спреде. Работает с ордерами через стандартные торговые API MetaTrader 4, идентифицируя свои позиции по магическому числу.

Входные параметры позволяют настраивать стратегию, таймфрейм, уровни RSI, параметры стопов и тейков, начальный лот, лимит одновременных сделок и режимы управления рисками.

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

НастройкаОписание
strategy Стратегия — Выбор стратегии: strategy1 (ZoneHedge_i) — активная стратегия на основе RSI.
CHART_TIMEfRAME Таймфрейм графика — Таймфрейм графика, на котором работает советник (по умолчанию M5).
settings Настройки индикатора — Текстовый заголовок группы настроек индикатора.
RSI_PERIOD Период RSI — Период расчёта индикатора RSI.
LoopBack Количество баров проверки — Количество баров назад для проверки значений RSI при формировании сигнала.
RSI_PRICE Тип цены для RSI — Тип цены для расчёта RSI (Close, Open, High, Low и др.).
RsiBuyLevel Уровень покупки RSI — Уровень RSI, при достижении которого формируется сигнал на покупку (по умолчанию 30).
RsiSellLevel Уровень продажи RSI — Уровень RSI, при достижении которого формируется сигнал на продажу (по умолчанию 70).
IndiCatorShift Сдвиг индикатора — Сдвиг индикатора RSI при расчёте сигналов.
TrailTPLevels Корректировка уровней трейлинга — Включает или отключает корректировку уровней стопа и тейка при движении цены.
DDR_ENABLED Защита от просадки — Включает или отключает систему защиты от просадки с закрытием позиций при достижении целевой прибыли.
DDMaxOrders Максимум ордеров для DD-защиты — Максимальное количество одновременных ордеров для срабатывания защиты от просадки.
DDProfitTarget Целевая прибыль для DD-защиты — Целевая прибыль (в долларах) для срабатывания закрытия позиций при достижении лимита ордеров.
TFrame1 Таймфрейм индикатора — Таймфрейм, на котором рассчитывается индикатор RSI для определения сигналов.
settings_end Конец настроек индикатора — Текстовый маркер окончания группы настроек индикатора.
Stoploss Стоп-лосс — Уровень стоп-лосса в пунктах для открытых позиций.
TrailStart Начало трейлинга — Прибыль в пунктах, начиная с которой активируется трейлинг-стоп.
TrailStop Расстояние трейлинга — Расстояние в пунктах от цены до стоп-лосса при трейлинг-стопе.
StartingLots Начальный лот — Начальный размер лота для открытия первой позиции.
TakeProfit Тейк-профит — Уровень тейк-профита в пунктах для открытых позиций.
Layer_Multiplier Множитель лота — Множитель лота, определяющий коэффициент увеличения размера позиции (от x1 до x2).
PipStep Шаг в пунктах — Шаг в пунктах для условия открытия дополнительных позиций по текущей цене.
MagicNumber Магическое число — Магическое число для идентификации ордеров, открытых советником.
MaxTrades Максимум одновременных сделок — Максимальное количество одновременных сделок в одном направлении.
Identifier Идентификатор — Вариант идентификатора, определяющий множитель для наименования ордеров (от 1 до 4).
AutoMoneyManagement Автоматическое управление лотом — Включает или отключает автоматический расчёт размера лота на основе процента риска от депозита.
PercentToRisk Процент риска — Процент от депозита, используемый для расчёта размера лота при автоматическом управлении.
UseEquityStop Стоп по эквити — Включает или отключает стоп по эквити — принудительное закрытие позиций при достижении лимита убытка.
TotalEquityRisk Риск эквити — Процент эквити, при превышении убытка которого происходит принудительное закрытие всех позиций.
UseTrailingStop Трейлинг-стоп — Включает или отключает функцию трейлинг-стопа для открытых позиций.
UseTimeOut Таймаут — Включает или отключает таймаут — автоматическое закрытие всех позиций через заданное время.
Получить полный код

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

???//+------------------------------------------------------------------+

#property description      ""
#property description "ZoneHedge_i EA"
#property description "+254733408173 "
#property version   "2.00"
#property strict

#define  EAName    "ZoneHedge_i EA"

#define ENABLE_SPREAD_METER true

#define ENABLE_STATUS true

#define ENABLE_TEST_INDICATORS true

#define POINT_FORMAT_RULES "0.001=0.01,0.00001=0.0001,0.000001=0.0001" // this is deserialized in a special function later

bool FXD_DRAW_SPREAD_INFO   = false;

bool FXD_CHART_IS_OFFLINE   = false;

int FXD_TICKS_FROM_START    = 0;

bool CalMain=false;
string NEA;
enum Strategy {strategy0=0/*select now*/,strategy1=1/*ZoneHedge_i*/};
input  Strategy strategy = strategy1;
input ENUM_TIMEFRAMES CHART_TIMEfRAME = PERIOD_M5;
/***********************************************/
input string settings = "Indicator Settings";

extern int RSI_PERIOD=14;
extern int LoopBack = 2;
input ENUM_APPLIED_PRICE RSI_PRICE = PRICE_CLOSE;

extern double RsiBuyLevel= 30.0;/*RsiBuyLevel*/
extern double RsiSellLevel =70.0;/*RsiSellLevel*/
extern int IndiCatorShift = 2;

extern bool TrailTPLevels = false;
 bool CLOSE_BY_OPP = false;/*Close Orders By Opposite Signal*/
extern bool DDR_ENABLED = true;
extern int DDMaxOrders = 5;
extern double DDProfitTarget = 0.35;

extern ENUM_TIMEFRAMES TFrame1 = PERIOD_H1; /*Indicator Timeframe*/

input string settings_end = "$Indicator Settings End";
static string symbl;

string Default   = "Default set All Pair";
string Timeframe = "TimeFrame any";
string created   = "j*******s*@aol.com";

enum M
  {
   a, //x2
   b, //x1.9
   c, //x1.8
   d, //x1.7
   e, //x1.6
   f, //x1.5
   g, //x1.4
   h, //x1.3
   i, //x1.2(Default)
   j, //x1.1
   k  //x1
  };
enum N
  {
   l, //1
   m, //2
   n, //3
   o, //4
  };

extern double Stoploss = 5000.0;
extern double TrailStart = 100.0;
extern double TrailStop = 100.0;
datetime objTime[];

extern double StartingLots = 0.01;
extern double TakeProfit = 58.0;
double Multiplier;
input M Layer_Multiplier = j;
extern double PipStep = 48.0;
bool AutoCompound = False;
extern int MagicNumber = 3491;
double slip = 30.0;
extern int MaxTrades = 50;
int identifier = 2;
input N Identifier = l;
extern bool         AccountProfitTarget             =false;
extern double       AccountProfitValue             =1000.0;

string MoneyManagement = "AutoLot";
extern bool AutoMoneyManagement = FALSE;
extern double PercentToRisk = 0.02;
 double TahananModal = 10000.0;

extern bool UseEquityStop = FALSE;
extern double TotalEquityRisk = 20.0;
extern bool UseTrailingStop = FALSE;
extern bool UseTimeOut = FALSE;
 double MaxTradeOpenHours = 48.0;

double PriceTargetBuy,PriceTargetSell, StartEquity, BuyTarget, SellTarget ;
double AveragePriceSell,AveragePriceBuy, SellLimit, BuyLimit ;
double LastBuyPrice, LastSellPrice, Spread;
bool flagbuy,flagsell;

datetime timeprev,ddBarCurrent;int  expiration;
int NumOfTradesBuy = 0,NumOfTradesSell = 0;
double iLots;
int cnt = 0, totalbuy,totalsell;
double StopperBuy = 0.0,StopperSell = 0.0;
bool TradeNowBuy = FALSE,TradeNowSell = FALSE, LongTrade = FALSE, ShortTrade = FALSE;
int ticket;
bool NewOrdersPlacedBuy = FALSE,NewOrdersPlacedSell = FALSE;
double AccountEquityHighAmt, PrevEquity;
int myDigits;
string xend="Xend";
string d_exit = "DDExit";
string exB,exS;

static int masterAcc = 12345;
static int legalAcc = 10048141;
static int legalAcc2 = 1900032863;
static datetime legal= D' 2022.05.30.00:00';

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

void OnDeinit(const int reason)
  {
GlobalVariableDel(exB);
GlobalVariableDel(exS);
kill();ResetLastError();
ObjectDelete("dbigx");ResetLastError();
Comment(" ");
   if(ENABLE_STATUS)
      DrawStatus("expert removed");

   if(ENABLE_SPREAD_METER)
      DrawSpreadInfo();
   ResetLastError();
   EventKillTimer();
   return;
  }

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

void OnTimer()
  {
   if(CalMain==true)
     {
      MainFunc();
     }
  }

int MainFunc()
  {

   NEA = EAName;
   if(NEA != EAName)
     {
      Comment(" \nEXPERT NAME WAS RENAMED/CHANGED! \nTRADE IS STOPED/NOT ALLOWED!");
      Print("Trade STOPED! RENAMED NAME EA, WITHOUT PERMIT! update your license to owner...");
      return (0);
     }
   /*CODE FOR
   AUTHENTICATION*/
   while(!IsStopped())
     {
ResetLastError();
     /**/
     if(!IsTesting()){
      FXD_TICKS_FROM_START++;

      if(ENABLE_STATUS && FXD_TICKS_FROM_START == 1)
         DrawStatus(StringConcatenate("on trade" +" St: " +strategy+ " "+ EAName));

      if(FXD_DRAW_SPREAD_INFO)
         DrawSpreadInfo();
     }
      ddBarCurrent=(datetime) SeriesInfoInteger(_Symbol,CHART_TIMEfRAME,SERIES_LASTBAR_DATE);
     if(AccountProfitTarget &&

            (MathCeil(AccountProfit())>=AccountProfitValue))
           {
            if(!GlobalVariableCheck(xend))
              {

               GlobalVariableSet(xend,0.01);

               ResetLastError();

              }
            ResetLastError();

           }

         if(GlobalVariableCheck(xend))
           {
            while(OrdersTotal()>0)
              {
               CloseThisSymbolBuy();
               CloseThisSymbolSell();

              }
              if(OrdersTotal()<1){
              GlobalVariableDel(xend);ResetLastError();
              }
              }

     /**/

      displayAdaptor();
      if(DDR_ENABLED){

      bool Klsl=false; bool Klsf=false;
       if((CountTrades(OP_BUY)>DDMaxOrders) && (DDMaxOrders>1) ){
         if((LastProfit(OP_BUY)+FirstProfit(OP_BUY))>DDProfitTarget ){
          Klsl=CloseByTicket(LastOrder(OP_BUY)); 
          Klsf=CloseByTicket(FirstOrder(OP_BUY)); 
          ResetLastError();
          if(Klsf==true && Klsl==true){
          NewOrdersPlacedBuy = TRUE;
          Klsf=false;
          Klsl=false;
          }

         }
      }////

       Klsl=false;  Klsf=false;
       if((CountTrades(OP_SELL)>DDMaxOrders) && (DDMaxOrders>1) ){
         if((LastProfit(OP_SELL)+FirstProfit(OP_SELL))>DDProfitTarget ){
          Klsl=CloseByTicket(LastOrder(OP_SELL)); 
          Klsf=CloseByTicket(FirstOrder(OP_SELL)); 
          ResetLastError();
          if(Klsf==true && Klsl==true){
          NewOrdersPlacedSell = TRUE;
          Klsf=false;
          Klsl=false;
          }

         }
      }

      }//DDR

        if(TrailTPLevels){
      trailTpSL();
      }
      double Lots = MarketInfo(Symbol(),MODE_MINLOT);
      switch(Layer_Multiplier)
        {
         case a:
            Multiplier = 2;
            break;
         case b:
            Multiplier = 1.9;
            break;
         case c:
            Multiplier = 1.8;
            break;
         case d:
            Multiplier = 1.7;
            break;
         case e:
            Multiplier = 1.6;
            break;
         case f:
            Multiplier = 1.5;
            break;
         case g:
            Multiplier = 1.4;
            break;
         case h:
            Multiplier = 1.3;
            break;
         case i:
            Multiplier = 1.2;
            break;
         case j:
            Multiplier = 1.1;
            break;
         case k:
            Multiplier = 1;
            break;
        }

      switch(identifier)
        {
         case l:
            identifier = 1;
            break;
         case m:
            identifier = 2;
            break;
         case n:
            identifier = 3;
            break;
         case o:
            identifier = 4;
            break;
        }
      double Ld_40 = PercentToRisk / TahananModal;
      if(AutoCompound==true)
         StartingLots = NormalizeDouble(AccountBalance() * Ld_40 / MarketInfo(Symbol(), MODE_TICKVALUE), 2);

      double PrevCl;
      double CurrCl;

      if(UseTimeOut)
        {
         if(TimeCurrent() >= expiration)
           {
            CloseThisSymbolAll();
            Print("Closed All due to TimeOut");
           }
        }
      if(timeprev == ddBarCurrent)
         return (0);
      timeprev = ddBarCurrent;
      double CurrentPairProfitBuy = CalculateProfit(OP_BUY);
      double CurrentPairProfitSell = CalculateProfit(OP_SELL);
      double CurrentPairProfit = CurrentPairProfitBuy+CurrentPairProfitSell;
      if(UseEquityStop)
        {
         if(CurrentPairProfit < 0.0 && MathAbs(CurrentPairProfit) > TotalEquityRisk / 100.0 * AccountEquityHigh())
           {
            CloseThisSymbolAll();
            Print("Closed All due to Stop Out");
            NewOrdersPlacedBuy = FALSE;
            NewOrdersPlacedSell = FALSE;
           }
        }
      totalbuy = CountTrades(OP_BUY);
      totalsell = CountTrades(OP_SELL);
      if(totalbuy == 0)
         flagbuy = FALSE;
         if(totalsell == 0)
         flagsell = FALSE;
      for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
            continue;
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
           {
            if(OrderType() == OP_BUY)
              {
               LongTrade = TRUE;
               ShortTrade = FALSE;//////////////////////////////////////////////////////////////////////////////////////
               break;
              }
           }
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
           {
            if(OrderType() == OP_SELL)
              {
               LongTrade = FALSE;///////////////////////////////////////////////////////////////////////////////////////////////
               ShortTrade = TRUE;
               break;
              }
           }
        }
      if( (totalbuy > 0 && totalbuy <= MaxTrades) )
        {
         RefreshRates();ResetLastError();
         LastBuyPrice = FindLastBuyPrice();

         if(LongTrade && LastBuyPrice - Ask >= PipStep * Point)
            TradeNowBuy = TRUE;

        }

        if( (totalsell > 0 && totalsell <= MaxTrades))
        {
         RefreshRates();ResetLastError();

         LastSellPrice = FindLastSellPrice();

         if(ShortTrade && Bid - LastSellPrice >= PipStep * Point)
            TradeNowSell = TRUE;
        }

      if(totalbuy < 1)
        {
         ShortTrade = FALSE;
         LongTrade = FALSE;
         TradeNowBuy = TRUE;
         StartEquity = AccountEquity();
        }
        if(totalsell < 1)
        {
         ShortTrade = FALSE;
         LongTrade = FALSE;
         TradeNowSell = TRUE;
         StartEquity = AccountEquity();
        }////

      if(TradeNowBuy || TradeNowSell)
        {
         LastBuyPrice = FindLastBuyPrice();
         LastSellPrice = FindLastSellPrice();
         if(ShortTrade)
           {
            NumOfTradesSell = totalsell;
            iLots = NormalizeDouble(StartingLots * MathPow(Multiplier, NumOfTradesSell), identifier);
            RefreshRates();
            ticket = OpenPendingOrder(1, iLots, Bid, slip, Ask, 0, 0, EAName + "-" + NumOfTradesSell, MagicNumber, 0, clrHotPink);
            if(ticket < 0)
              {
               Print("Error: ", GetLastError());
               return (0);
              }
            LastSellPrice = FindLastSellPrice();
            TradeNowSell = FALSE;
            NewOrdersPlacedSell = TRUE;
           }
         else
           {
            if(LongTrade)
              {
               NumOfTradesBuy = totalbuy;
               iLots = NormalizeDouble(StartingLots * MathPow(Multiplier, NumOfTradesBuy), identifier);
               ticket = OpenPendingOrder(0, iLots, Ask, slip, Bid, 0, 0, EAName + "-" + NumOfTradesBuy, MagicNumber, 0, clrLime);
               if(ticket < 0)
                 {
                  Print("Error: ", GetLastError());
                  return (0);
                 }
               LastBuyPrice = FindLastBuyPrice();
               TradeNowBuy = FALSE;
               NewOrdersPlacedBuy = TRUE;
              }
           }
        }

      if((TradeNowBuy && totalbuy < 1) || (TradeNowSell && totalsell < 1) )
        {
         PrevCl = iClose(Symbol(), 0, 2);
         CurrCl = iClose(Symbol(), 0, 1);
         SellLimit = Bid;
         BuyLimit = Ask;
         if(!ShortTrade && !LongTrade)
           {
            NumOfTradesBuy = totalbuy;
             NumOfTradesSell = totalsell;

            if(PrevCl > CurrCl)
              {
               if(CheckEntrySignal()==1 || CheckEntrySignal()==2)    //??????  >
                 { 
                 iLots = NormalizeDouble(StartingLots * MathPow(Multiplier, NumOfTradesSell), identifier);
                  ticket = OpenPendingOrder(1, iLots, SellLimit, slip, SellLimit, 0, 0, EAName + "-" + NumOfTradesSell, MagicNumber, 0, clrHotPink);
                  if(ticket < 0)
                    {
                     Print("Error: ", GetLastError());ResetLastError();
                     return (0);
                    }
                  LastSellPrice = FindLastSellPrice();
                  NewOrdersPlacedSell = TRUE;
                  iLots = NormalizeDouble(StartingLots * MathPow(Multiplier, NumOfTradesBuy), identifier);
                  ticket = OpenPendingOrder(0, iLots, BuyLimit, slip, BuyLimit, 0, 0, EAName + "-" + NumOfTradesBuy, MagicNumber, 0, clrLime);
                  if(ticket < 0)
                    {
                     Print("Error: ", GetLastError());ResetLastError();
                     return (0);
                    }
                  LastBuyPrice = FindLastBuyPrice();
                  NewOrdersPlacedBuy = TRUE;
                 }
              }
            if(ticket > 0)
               expiration = TimeCurrent() + 60.0 * (60.0 * MaxTradeOpenHours);
            TradeNowBuy = FALSE;
            TradeNowSell = FALSE;
           }
        }
      totalbuy = CountTrades(OP_BUY);
      totalsell = CountTrades(OP_SELL);
      AveragePriceBuy = 0;
      AveragePriceSell = 0;
      double CountBuy = 0;
      double CountSell = 0;
      for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
            continue;
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
           {
            if(OrderType() == OP_BUY )
              {
               AveragePriceBuy += OrderOpenPrice() * OrderLots();
               CountBuy += OrderLots();
              }
           }
        }//for

        for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
         if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
            continue;
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
           {
            if(OrderType() == OP_SELL )
              {
               AveragePriceSell += OrderOpenPrice() * OrderLots();
               CountSell += OrderLots();
              }
           }
        }//for
      if(totalbuy > 0)
         AveragePriceBuy = NormalizeDouble(AveragePriceBuy / CountBuy, Digits);
         if(totalsell > 0)
         AveragePriceSell = NormalizeDouble(AveragePriceSell / CountSell, Digits);

      if(NewOrdersPlacedBuy || NewOrdersPlacedSell)
        {
         for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
           {
            OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
            if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
               continue;
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
              {
               if(OrderType() == OP_BUY)
                 {
                  PriceTargetBuy = AveragePriceBuy + TakeProfit * Point;
                  BuyTarget = PriceTargetBuy;
                  StopperBuy = AveragePriceBuy - Stoploss * Point;
                  flagbuy = TRUE;
                 }
              }
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
              {
               if(OrderType() == OP_SELL)
                 {
                  PriceTargetSell = AveragePriceSell - TakeProfit * Point;
                  SellTarget = PriceTargetSell;
                  StopperSell = AveragePriceSell + Stoploss * Point;
                  flagsell = TRUE;
                 }
              }
           }
        }
      if(NewOrdersPlacedBuy || NewOrdersPlacedSell)
        {
         if(flagbuy == TRUE)
           {
            for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
              {
               OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
               if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
                  continue;
                  if(OrderType()!=OP_BUY)
                  continue;
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
                  OrderModify(OrderTicket(), AveragePriceBuy, OrderStopLoss(), PriceTargetBuy, 0, clrYellow);
               NewOrdersPlacedBuy = FALSE;
              }
           }//flagbuy

           if(flagsell == TRUE)
           {
            for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
              {
               OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
               if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
                  continue;
                  if(OrderType()!=OP_SELL)
                  continue;
               if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
                  OrderModify(OrderTicket(), AveragePriceSell, OrderStopLoss(), PriceTargetSell, 0, clrYellow);
               NewOrdersPlacedSell = FALSE;
              }
           }//flagsell
        }
      Sleep(20);
     }
   return(0);
  }

int CountTrades(ENUM_ORDER_TYPE OP)
  {
   int count = 0;
   for(int trade = OrdersTotal() - 1; trade >= 0; trade--)
     {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
         continue;
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if(OrderType() == OP)
            count++;
     }
   return (count);
  }

void CloseThisSymbolAll()
  {
   for(int trade = OrdersTotal() - 1; trade >= 0; trade--)
     {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() == Symbol())
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
           {
            if(OrderType() == OP_BUY)
               OrderClose(OrderTicket(), OrderLots(), Bid, slip, Blue);
            if(OrderType() == OP_SELL)
               OrderClose(OrderTicket(), OrderLots(), Ask, slip, Red);
           }
         Sleep(7000);
        }
     }
  }

void CloseThisSymbolBuy()
  {
   for(int trade = OrdersTotal() - 1; trade >= 0; trade--)
     {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if(IsMyOrder())
        {

            if(OrderType() == OP_BUY)
              {
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slip, Blue);

              }

        }
     }
  }

void CloseThisSymbolSell()
  {
   for(int trade = OrdersTotal() - 1; trade >= 0; trade--)
     {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if(IsMyOrder())
        {

            if(OrderType() == OP_SELL)
              {
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slip, Red);
              }

        }
     }
  }

int OpenPendingOrder(int pType, double pLots, double pPrice, int pSlippage, double ad_24, int ai_32, int ai_36, string a_comment_40, int a_magic_48, int a_datetime_52, color a_color_56)
  {
   int l_ticket_60 = 0;
   int l_error_64 = 0;
   int l_count_68 = 0;
   int li_72 = 100;
   switch(pType)
     {
      case 2:
         for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
           {
            l_ticket_60 = OrderSend(Symbol(), OP_BUYLIMIT, pLots, pPrice, pSlippage, StopLong(ad_24, ai_32), TakeLong(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
            l_error_64 = GetLastError();
            if(l_error_64 == 0/* NO_ERROR */)
               break;
            if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
               break;
            Sleep(5000);
           }
         break;
      case 4:
         for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
           {
            l_ticket_60 = OrderSend(Symbol(), OP_BUYSTOP, pLots, pPrice, pSlippage, StopLong(ad_24, ai_32), TakeLong(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
            l_error_64 = GetLastError();
            if(l_error_64 == 0/* NO_ERROR */)
               break;
            if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
               break;
            Sleep(5000);
           }
         break;
      case 0:
         for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
           {
            RefreshRates();
            l_ticket_60 = OrderSend(Symbol(), OP_BUY, pLots, Ask, pSlippage, StopLong(Bid, ai_32), TakeLong(Ask, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
            l_error_64 = GetLastError();
            if(l_error_64 == 0/* NO_ERROR */)
               break;
            if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
               break;
            Sleep(5000);
           }
         break;
      case 3:
         for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
           {
            l_ticket_60 = OrderSend(Symbol(), OP_SELLLIMIT, pLots, pPrice, pSlippage, StopShort(ad_24, ai_32), TakeShort(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
            l_error_64 = GetLastError();
            if(l_error_64 == 0/* NO_ERROR */)
               break;
            if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
               break;
            Sleep(5000);
           }
         break;
      case 5:
         for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
           {
            l_ticket_60 = OrderSend(Symbol(), OP_SELLSTOP, pLots, pPrice, pSlippage, StopShort(ad_24, ai_32), TakeShort(pPrice, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
            l_error_64 = GetLastError();
            if(l_error_64 == 0/* NO_ERROR */)
               break;
            if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
               break;
            Sleep(5000);
           }
         break;
      case 1:
         for(l_count_68 = 0; l_count_68 < li_72; l_count_68++)
           {
            l_ticket_60 = OrderSend(Symbol(), OP_SELL, pLots, Bid, pSlippage, StopShort(Ask, ai_32), TakeShort(Bid, ai_36), a_comment_40, a_magic_48, a_datetime_52, a_color_56);
            l_error_64 = GetLastError();
            if(l_error_64 == 0/* NO_ERROR */)
               break;
            if(!(l_error_64 == 4/* SERVER_BUSY */ || l_error_64 == 137/* BROKER_BUSY */ || l_error_64 == 146/* TRADE_CONTEXT_BUSY */ || l_error_64 == 136/* OFF_QUOTES */))
               break;
            Sleep(5000);
           }
     }
   return (l_ticket_60);
  }

double StopLong(double ad_0, int ai_8)
  {
   if(ai_8 == 0)
      return (0);
   else
      return (ad_0 - ai_8 * Point);
  }

double StopShort(double ad_0, int ai_8)
  {
   if(ai_8 == 0)
      return (0);
   else
      return (ad_0 + ai_8 * Point);
  }

double TakeLong(double ad_0, int ai_8)
  {
   if(ai_8 == 0)
      return (0);
   else
      return (ad_0 + ai_8 * Point);
  }

double TakeShort(double ad_0, int ai_8)
  {
   if(ai_8 == 0)
      return (0);
   else
      return (ad_0 - ai_8 * Point);
  }

double CalculateProfit(ENUM_ORDER_TYPE OP)
  {
   double ld_ret_0 = 0;
   for(cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
         continue;
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         if(OrderType() == OP)
            ld_ret_0 += OrderProfit()+OrderSwap()+OrderCommission();
     }
   return (ld_ret_0);
  }

void TrailingAlls(int pType, int ai_4, double a_price_8)
  {
   int l_ticket_16;
   double l_ord_stoploss_20;
   double l_price_28;
   if(ai_4 != 0)
     {
      for(int l_pos_36 = OrdersTotal() - 1; l_pos_36 >= 0; l_pos_36--)
        {
         if(OrderSelect(l_pos_36, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
               continue;
            if(OrderSymbol() == Symbol() || OrderMagicNumber() == MagicNumber)
              {
               if(OrderType() == OP_BUY)
                 {
                  l_ticket_16 = NormalizeDouble((Bid - a_price_8) / Point, 0);
                  if(l_ticket_16 < pType)
                     continue;
                  l_ord_stoploss_20 = OrderStopLoss();
                  l_price_28 = Bid - ai_4 * Point;
                  if(l_ord_stoploss_20 == 0.0 || (l_ord_stoploss_20 != 0.0 && l_price_28 > l_ord_stoploss_20))
                     OrderModify(OrderTicket(), a_price_8, l_price_28, OrderTakeProfit(), 0, Aqua);
                 }
               if(OrderType() == OP_SELL)
                 {
                  l_ticket_16 = NormalizeDouble((a_price_8 - Ask) / Point, 0);
                  if(l_ticket_16 < pType)
                     continue;
                  l_ord_stoploss_20 = OrderStopLoss();
                  l_price_28 = Ask + ai_4 * Point;
                  if(l_ord_stoploss_20 == 0.0 || (l_ord_stoploss_20 != 0.0 && l_price_28 < l_ord_stoploss_20))
                     OrderModify(OrderTicket(), a_price_8, l_price_28, OrderTakeProfit(), 0, Red);
                 }
              }
            Sleep(7000);
           }
        }
     }
  }

double AccountEquityHigh()
  {
   if(ChartPos() == 0)
      AccountEquityHighAmt = AccountEquity();
   if(AccountEquityHighAmt < PrevEquity)
      AccountEquityHighAmt = PrevEquity;
   else
      AccountEquityHighAmt = AccountEquity();
   PrevEquity = AccountEquity();
   return (AccountEquityHighAmt);
  }

double FindLastBuyPrice()
  {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for(int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--)
     {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
         continue;
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY)
        {
         l_ticket_24 = OrderTicket();
         if(l_ticket_24 > l_ticket_20)
           {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
           }
        }
     }
   return (l_ord_open_price_8);
  }

double FindLastSellPrice()
  {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for(int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--)
     {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber)
         continue;
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL)
        {
         l_ticket_24 = OrderTicket();
         if(l_ticket_24 > l_ticket_20)
           {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
           }
        }
     }
   return (l_ord_open_price_8);
  }

void Info()
  {

   Comment("",
           "\n Copyright ? 2021, ",EAName,
           "\n EA", EAName,":j*******s*@aol.com ",
           "\n Equity     = ", AccountEquity(),
           "\n Starting Lot =", StartingLots
          );
  }

double ND(double val)
  {
   return(NormalizeDouble(val, myDigits));
  }

double lotvol_buy()
  {
   double lotv=0;
   for(int cnt = OrdersTotal(); cnt >=0; cnt--)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(!IsMyOrder())
         continue;
      if(IsMyOrder()&& OrderType()==OP_BUY)

         lotv+=OrderLots();

     }
   return(lotv);

  }

double lotvol_sell()
  {
   double lotv=0

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

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

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

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

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

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

Стоимость полного кода
4 308,40₽ ≈ $52.66