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

ilan_stoch_0.01.mq5

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

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

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

О программе

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

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

НастройкаОписание
TakeProfit ? ??????? (TakeProfit) TakeProfit — Уровень фиксации прибыли в пунктах от цены открытия позиции.
?????? ???? ???????? ????? (PipStep) PipStep — Шаг в пунктах для открытия дополнительных сделок при расширении позиции.
????????? ????? ???? (Lots) Lots — Базовый размер лота для первой сделки.
?????????? ?????? ????? ??????? ? ?????? ???? (LotDecimal) LotDecimal — Количество знаков после запятой для округления рассчитанного размера лота.
?????????? ?????????? ?????? ???? (LotExponent) LotExponent — Множитель, используемый для увеличения лота при каждой следующей сделке в позиции.
?????????? ????? ????????? (MagicNumber) MagicNumber — Магический номер для идентификации ордеров и позиций советника.
???????????? ?????????? ???????? ????? (MaxTrades) MaxTrades — Максимальное количество сделок, разрешённых в рамках одной позиции.
??????????????? (Slip) Slip — Допустимое отклонение цены исполнения в пунктах.
???????????? TrailingStop (UseTrailingStop) UseTrailingStop — Включает или отключает трейлинг-стоп для текущей позиции.
??????? ? ???????, ??????????? ??? ?????? ????? (TrailStart) TrailStart — Уровень прибыли в пунктах, начиная с которого трейлинг-стоп начинает двигаться.
StopLoss ? ???????, ???????????? ??? ????? (TrailStop) TrailStop — Расстояние стоп-лосса в пунктах от текущей цены при активном трейлинге.
???????????? ??????????? ?? ?????? (UseEquityStop) UseEquityStop — Включает или отключает остановку торговли при снижении средств ниже заданного порога.
???????????? ?????? ? ????????? ?? ???????? (TotalEquityRisk) TotalEquityRisk — Процент снижения средств от баланса, при достижении которого происходит принудительное закрытие позиции.
???????????? ??????????? ?? ????? ????? ??????? (UseTimeOut) UseTimeOut — Включает или отключает тайм-аут сделки по времени.
???????????? ????? ????? ??????? ? ????? (MaxTradeOpenHours) MaxTradeOpenHours — Максимальное время удержания сделки в часах до принудительного закрытия.
tx4 tx4 — Текстовый параметр для пользовательской метки или описания.
StartHour StartHour — Час начала торгового окна для проверки допустимого времени торговли.
EndHour EndHour — Час окончания торгового окна для проверки допустимого времени торговли.
s1 s1 — Текстовый параметр строкового типа для пользовательских целей.
??? ??????? (type) type — Выбор метода создания индикатора стохастика: через встроенную функцию iStochastic или через IndicatorCreate.
StochTime StochTime — Таймфрейм, на котором рассчитывается осциллятор стохастика.
per_K per_K — Период %K линии стохастика.
per_D per_D — Период %D линии стохастика (сглаживание).
slow slow — Замедление (период сглаживания) %D линии стохастика.
S_Mode S_Mode — Метод сглаживания, используемый при расчёте стохастика.
S_Price S_Price — Тип цены, используемый для расчёта осциллятора стохастика.
zoneBUY zoneBUY — Значение зоны перепроданности, при пересечении которого формируется сигнал на покупку.
zoneSELL zoneSELL — Значение зоны перекупленности, при пересечении которого формируется сигнал на продажу.
?????? (symbol) symbol — Символ инструмента для анализа и торговли.
Получить полный код

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

#property version   "0.01"

input     double  TakeProfit       = 10;          // TakeProfit ? ???????
input     double  PipStep          = 30;          // ?????? ???? ???????? ?????
input     double  Lots             = 0.10;        // ????????? ????? ????
input     int     LotDecimal       = 1;           // ?????????? ?????? ????? ??????? ? ?????? ????
input     double  LotExponent      = 2;        // ?????????? ?????????? ?????? ????
input     int     MagicNumber      = 150611;       // ?????????? ????? ?????????
input     int     MaxTrades        = 5;           // ???????????? ?????????? ???????? ?????
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;         // ???????????? ????? ????? ??????? ? ?????

input     string  tx4="????? ?????? ?????????";
input     int     StartHour=21;
input     int     EndHour=4;

enum Creation
  {
   Call_iStochastic,       // ???????????? iStochastic
   Call_IndicatorCreate    // ???????????? IndicatorCreate
  };

input     string  s1="????????? ?????????? Stochastic";
input Creation             type=Call_iStochastic;     // ??? ??????? 
input     ENUM_TIMEFRAMES     StochTime=5;
input     int     per_K=10;
input     int     per_D=3;
input     int     slow=3;
input     ENUM_MA_METHOD     S_Mode=MODE_SMA;
input     ENUM_STO_PRICE     S_Price=STO_LOWHIGH;
input     int     zoneBUY=15;
input     int     zoneSELL=85;
input     string  symbol="GBPUSD";                // ?????? 

string short_name;

double     Spread;
string     ExpertName = "Ilan_stoch";
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 (Stochastic("sell") && time())  
              {

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

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

                NewOrdersPlaced = true;  // ????? ????? ??????
              }
            if(Stochastic("buy") && time())  
              {

                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 = PositionGetDouble(POSITION_PRICE_OPEN);   // ???? ???????? ???????

        if (OpenPrice == OldOpenPrice) return;

        Request.symbol    = _Symbol;            // ??????? ??????????
        Request.action    = TRADE_ACTION_SLTP;  // ????? ??????????????
        Request.sl        = CurrStopLoss;       // StopLoss ??????? ??? ?????????
        Request.deviation = Slip;               // ???????????????

        if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)  // ???? ??????? Buy
          Request.tp = ND(OpenPrice + iTakeProfit * _Point);  // ????? ??????? TakeProfit

        if (PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)  // ???? ??????? Sell
          Request.tp = ND(OpenPrice - iTakeProfit * _Point);

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

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

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

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

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

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

Стоимость полного кода
1 485,30₽ ≈ $18.15