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

ilan_mql5_trail.mq5

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

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

Получить полный код

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

#property version   "1.00"

input     double  TakeProfit       = 10;          // TakeProfit ? ???????
input     double  PipStep          = 30;          // ?????? ???? ???????? ?????
input     double  Lots             = 0.10;        // ????????? ????? ????
input     int     LotDecimal       = 1;           // ?????????? ?????? ????? ??????? ? ?????? ????
input     double  LotExponent      = 1.70;        // ?????????? ?????????? ?????? ????
input     int     MagicNumber      = 70707;       // ?????????? ????? ?????????
input     int     MaxTrades        = 8;           // ???????????? ?????????? ???????? ?????
input     int     Slip             = 3;           // ???????????????

input     bool    UseTrailingStop  = false;       // ???????????? TrailingStop
input     int     TrailStart       = 10;          // ??????? ? ???????, ??????????? ??? ?????? ?????
input     int     TrailStop        = 10;          // StopLoss ? ???????, ???????????? ??? ?????

/*input*/ bool    UseEquityStop    = false;       // ???????????? ??????????? ?? ??????
/*input*/ double  TotalEquityRisk  = 50.0;        // ???????????? ?????? ? ????????? ?? ????????

/*input*/ bool    UseTimeOut       = false;       // ???????????? ??????????? ?? ????? ????? ???????
/*input*/ double  MaxTradeOpenHours = 48;         // ???????????? ????? ????? ??????? ? ?????

double     Spread;
string     ExpertName = "Ilan_mql5";
datetime   Expiration;
double     LotSize;
int        i = 0, Total;
bool       TradeNow = false, LongTrade = false, ShortTrade = false;
int        Ticket = 0;
bool       NewOrdersPlaced = false;
double     LastBuyPrice, LastSellPrice;
double     iTakeProfit, iPipStep;
int        iTrailStart, iTrailStop;
long       PositionID = 0;     // ????????????? ???????? ???????

bool       Position = false;   // true - ???? ???????? ???????, false - ???
double     OpenPrice;          // ???? ???????? ???????

double     OldOpenPrice = 0;   // ????????? ???? ???????? ???????

MqlTick          LastPrices;   // ????????? ??? ????????? ????????? ??????? ??????
MqlTradeRequest  Request;      // ????????? ??? ???????? ?????? ???????? OrderSend()
MqlTradeResult   Result;       // ????????? ? ??????????? ???????? ???????? ??????

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

void OnDeinit(const int reason)
  {
    return;
  }

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

    if (UseTrailingStop)
      TrailPosition(iTrailStart, iTrailStop);

    if (UseTimeOut && TimeCurrent() >= Expiration)
      {
        Print("????? ????? ??????? ???????, ?????????????? ???????? ???????");
        ClosePosition();  // ????????? ???????
      }

    long TickVolume[1];  // ?????? ??? ???????? ?????? ?????????? ????

    if (CopyTickVolume(_Symbol, _Period, 0, 1, TickVolume) != 1)
      {
        Print("?? ??????? ???????? ?????????? ????? ?? ??????? ????");
        return;
      }

    if (TickVolume[0] > 1) return;

    if (UseEquityStop)
      {

        double AccountEquity = AccountInfoDouble(ACCOUNT_EQUITY);
        double AccountBalance = AccountInfoDouble(ACCOUNT_BALANCE);

        if (AccountEquity <= AccountBalance * (1 - TotalEquityRisk / 100))
          {
            Print("???????? ", TotalEquityRisk, "% ????????, ?????????????? ???????? ???????");
            ClosePosition();
          }
      }

    if (!PositionSelect(_Symbol))    // ??? ????? ???????
      {
        Position = false;
      }
    else  // ???? ???? ???????
      {
        Position = true;
        PositionID = PositionGetInteger(POSITION_IDENTIFIER); // ????????????? ???????
      }

    if (Position)  // ???? ???? ???????? ???????
      {
        if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)  // ??????? Buy
          {
            LongTrade = true;
            ShortTrade = false;
          }
        if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)  // ??????? Sell
          {
            LongTrade = false;
            ShortTrade = true;
          }
      }

    if (Position) Total = CountTrades(PositionID);
    else Total = 0;

    if (Position && (Total > 0 && Total <= MaxTrades))
      {

        LastBuyPrice = FindLastBuyPrice(PositionID);
        LastSellPrice = FindLastSellPrice(PositionID);

        if (SymbolInfoTick(_Symbol, LastPrices))  // ??????? ? LastPrices ????????? ????
          {
            if (LongTrade && LastBuyPrice - LastPrices.ask >= iPipStep * _Point)  // ???? ???? ????
              TradeNow = true;

            if (ShortTrade && LastPrices.bid - LastSellPrice >= iPipStep * _Point) // ???? ???? ?????
              TradeNow = true;
          }
      }  // if (Total > 0 && Total <= MaxTrades)

    if (!Position)
      {
        ShortTrade = false;
        LongTrade = false;
        TradeNow = true;

      }

    if (Position && TradeNow)
      {

        LotSize = NormalizeDouble(Lots * MathPow(LotExponent, Total), LotDecimal);

        Request.action       = TRADE_ACTION_DEAL;  // ??????????? ?????????? ??????
        Request.symbol       = _Symbol;            // ???????? ??????????
        Request.volume       = LotSize;            // ????? ????
        Request.sl           = 0;                  // StopLoss
        Request.tp           = 0;                  // TakeProfit
        Request.deviation    = Slip;               // ???????????????
        Request.type_filling = ORDER_FILLING_AON;  // ??? ?????? ?? ??????????
        Request.magic        = MagicNumber;        // ?????????? ?????

        if (!SymbolInfoTick(_Symbol, LastPrices))
          {
            Print("?? ??????? ???????? ????????? ??????? ??????");
            return;
          }

        if (ShortTrade)  // Sell - ?????
          {
            Request.price = ND(LastPrices.bid);      // ???? ???????
            Request.type = ORDER_TYPE_SELL;          // ??? ??????

            if (!OrderSend(Request, Result))
              {
                Print("?? ??????? ??????? ????? Sell, ??? ?????? ", Result.retcode);
                return;
              }

            TradeNow = false;
            NewOrdersPlaced = true;  // ????? ????? ??????
          }
        else if (LongTrade)  // Buy - ?????
          {
            Request.price = ND(LastPrices.ask);     // ???? ???????
            Request.type = ORDER_TYPE_BUY;          // ??? ??????

            if (!OrderSend(Request, Result))
              {
                Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcode);
                return;
              }

            TradeNow = false;
            NewOrdersPlaced = true;  // ????? ????? ??????
          }
      }  // if (TradeNow)

   if (!Position && TradeNow)  // ???? ??? ???????? ???????
      {

        MqlRates Rates[1];

        if (CopyRates(_Symbol, _Period, 1, 1, Rates) != 1)
          {
            Print("?? ??????? ???????? ??????? ?????? ??? ?????????? ?????");
            return;
          }

        if (!ShortTrade && !LongTrade)
          {

            LotSize = NormalizeDouble(Lots * MathPow(LotExponent, Total), LotDecimal);

            Request.action       = TRADE_ACTION_DEAL;  // ??????????? ?????????? ??????
            Request.symbol       = _Symbol;            // ???????? ??????????
            Request.volume       = LotSize;            // ????? ????
            Request.sl           = 0;                  // StopLoss
            Request.tp           = 0;                  // TakeProfit
            Request.deviation    = Slip;               // ???????????????
            Request.type_filling = ORDER_FILLING_AON;  // ??? ?????? ?? ??????????
            Request.magic        = MagicNumber;        // ?????????? ?????

            if (!SymbolInfoTick(_Symbol, LastPrices))
              {
                Print("?? ??????? ???????? ????????? ??????? ??????");
                return;
              }

            if (Rates[0].open > Rates[0].close)  // ???? ????????? ????? ?????? - ???????
              {

                Request.price = ND(LastPrices.bid);      // ???? ???????
                Request.type = ORDER_TYPE_SELL;          // ??? ??????

                if (!OrderSend(Request, Result))
                  {
                    Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcode);
                    return;
                  }

                NewOrdersPlaced = true;  // ????? ????? ??????
              }
            else  // ???? ????????? ????? ????? - ????????
              {

                Request.price = ND(LastPrices.ask);     // ???? ???????
                Request.type = ORDER_TYPE_BUY;          // ??? ??????

                if (!OrderSend(Request, Result))
                  {
                    Print("?? ??????? ??????? ?????, ??? ?????? ", Result.retcode);
                    return;
                  }

                NewOrdersPlaced = true;  // ????? ????? ??????
              }
          }  // if (!ShortTrade && !LongTrade)

        if (NewOrdersPlaced)
          Expiration = (datetime)(TimeCurrent() + PeriodSeconds(PERIOD_H1) * MaxTradeOpenHours);

        TradeNow = false;
      }  // if (!Position && TradeNow)

    if (NewOrdersPlaced)
      {

        if (!PositionSelect(_Symbol)) return;  // ??? ????? ???????

        double CurrStopLoss = PositionGetDouble(POSITION_SL); // StopLoss ???????

        OpenPrice = Positi

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

Что вы получите после оплаты

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

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

Стоимость полного кода: 1 280 ₽