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

Open Close Cross Strategy R5.1 revised by JustUncleL

open close cross strategy r5.1 revised by justunclel.mq4
Вы автор или правообладатель?

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

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

О программе

Open Close Cross Strategy R5.1 — это пользовательский индикатор для MetaTrader 4, который рассчитывает скользящие средние ценовых серий «открытие» и «закрытие» и определяет их пересечения для определения направления тренда. Индикатор отображает раскрашенные свечи вверх/вниз на графике в зависимости от соотношения значений close и open серий.

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

Доступна функция альтернативного разрешения — умножение текущего таймфрейма на заданный коэффициент для расчёта средних значений на другом временном интервале. Размер позиции можно задавать в контрактах, денежном эквиваленте или проценте от депозита.

Индикатор использует внешний индикатор «averages» для вычисления скользящих средних различных методов (SMA, EMA, SMMA и другие). Все торговые операции выполняются через стандартные API MetaTrader 4 с контролем проскальзывания и магическим номером.

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

НастройкаОписание
useRes Включает или отключает использование альтернативного разрешения (пересчёт на умноженный таймфрейм).
intRes Множитель для альтернативного разрешения — умножение текущего таймфрейма для расчёта средних значений.
basisType Метод расчёта скользящей средней (SMA, EMA, SMMA, LWMA и другие).
basisLen Период скользящей средней, используемой для расчёта.
scolor Включает или отключает отображение раскрашенных свечей на графике для индикации тренда.
UpCandleColor Цвет свечей, указывающих на восходящий тренд.
DownCandleColor Цвет свечей, указывающих на нисходящий тренд.
AllowTrading Включает или отключает автоматическую торговлю на основе сигнала индикатора.
TradeType Направление торговли: только покупка, только продажа или оба направления.
Lots Размер позиции в зависимости от выбранного типа размера.
LotsType Тип размера позиции: денежный эквивалент, контракты или процент от депозита.
Slippage Допустимое проскальзывание цены при исполнении ордеров.
close_on_opposite Включает или отключает закрытие позиций в противоположном направлении при появлении нового сигнала.
SetStop Включает или отключает установку стоп-лосса при открытии позиции.
Stop Значение стоп-лосса для торговых позиций.
StopType Тип измерения стоп-лосса: проценты, пункты или доллары.
SetLimit Включает или отключает установку тейк-профита при открытии позиции.
Limit Значение тейк-профита для торговых позиций.
LimitType Тип измерения тейк-профита: проценты, пункты или доллары.
MoveToBreakeven Включает или отключает автоматический перевод позиции в безубыток после выполнения условия.
BreakevenTrigger Значение триггера для перевода позиции в безубыток.
BreakevenTriggerType Тип измерения триггера безубытка: проценты, пункты или доллары.
MagicNumber Магический номер для идентификации ордеров, созданных индикатором.
LogicType Тип логики торговли: прямая (Direct) или обратная (Reversal).
Получить полный код

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

#property version "1.0.1"

#property description "Open Close Cross Strategy R5.1 revised by JustUncleL"
#property strict

#property indicator_buffers 14
#property indicator_chart_window

#property indicator_color3  clrGreen
#property indicator_width3  2

#property indicator_color4  clrRed
#property indicator_width4  2

#property indicator_color5  clrGreen
#property indicator_width5  2

#property indicator_color6  clrRed
#property indicator_width6  2

enum AveragesMethod
{
   SMA = MODE_SMA, // SMA
   EMA = MODE_EMA, // EMA
   SMMA = MODE_SMMA, // SMMA
   LWMA = MODE_LWMA, // LWMA
   WMA,
   SineWMA,
   TriMA,
   LSMA,
   HMA,
   ZeroLagEMA,
   DEMA,
   T3MA,
   ITrend,
   Median,
   GeoMean,
   REMA,
   ILRS,
   IE2,
   TriMAgen,
   JSmooth
};

enum TradingDirection
{
    Buy,
    Sell,
    Both
};

enum StopLimitType
{
    StopLimitPercent, // %
    StopLimitPips, // Pips
    StopLimitDollar // $
};

enum PositionSizeType
{
    PositionSizeAmount, // $
    PositionSizeContract, // In contracts
    PositionSizeEquity // % of equity
};

enum PositionDirection
{
    DirectLogic, // Direct
    ReversalLogic // Reversal
};

extern bool useRes = true; // Use Alternate Resolution?
extern int intRes = 3; // Multiplier for Alernate Resolution
extern AveragesMethod basisType = SMMA; // MA Type
extern int basisLen = 8; // MA Period

extern bool scolor = false; // Show coloured Bars to indicate Trend?
extern color UpCandleColor = clrGreen; // Up bars color
extern color DownCandleColor = clrRed; // Down bars color

extern bool AllowTrading = true; // Allow trading?
extern TradingDirection TradeType = Both; // What trades should be taken
extern double Lots            = 0.1; // Position size
extern PositionSizeType LotsType = PositionSizeContract; // Position size type
extern int Slippage           = 3;
extern bool close_on_opposite = true; // Close on opposite
extern bool SetStop           = true; // Set stop loss?
extern double Stop            = 10; // Stop loss value
extern StopLimitType StopType = StopLimitPips; // Stop loss type
extern bool SetLimit          = true; // Set take profit?
extern double Limit           = 10; // Take profit value
extern StopLimitType LimitType = StopLimitPips; // Take profit type
extern bool MoveToBreakeven = false; // Move to breakeven
extern double BreakevenTrigger = 10; // Trigger for the breakeven
extern StopLimitType BreakevenTriggerType = StopLimitPips; // Trigger type for the breakeven
extern int MagicNumber        = 42; // Magic number
extern PositionDirection LogicType = DirectLogic; // Logic type

class CandleStreams
{
public:
   double OpenStream[];
   double CloseStream[];
   double HighStream[];
   double LowStream[];

   void Clear(const int index)
   {
      OpenStream[index] = EMPTY_VALUE;
      CloseStream[index] = EMPTY_VALUE;
      HighStream[index] = EMPTY_VALUE;
      LowStream[index] = EMPTY_VALUE;
   }

   int RegisterStreams(const int id, const color clr)
   {
      SetIndexStyle(id + 0, DRAW_HISTOGRAM, STYLE_SOLID, 3, clr);
      SetIndexBuffer(id + 0, OpenStream);
      SetIndexStyle(id + 1, DRAW_HISTOGRAM, STYLE_SOLID, 3, clr);
      SetIndexBuffer(id + 1, CloseStream);
      SetIndexStyle(id + 2, DRAW_HISTOGRAM, STYLE_SOLID, 1, clr);
      SetIndexBuffer(id + 2, HighStream);
      SetIndexStyle(id + 3, DRAW_HISTOGRAM, STYLE_SOLID, 3, clr);
      SetIndexBuffer(id + 3, LowStream);
      return id + 4;
   }

   void Set(const int index, const double open, const double high, const double low, const double close)
   {
      OpenStream[index] = open;
      HighStream[index] = high;
      LowStream[index] = low;
      CloseStream[index] = close;
   }
};

CandleStreams upCandles;
CandleStreams downCandles;

double closeSeries[], openSeries[];
double closeSeriesUp[], closeSeriesDown[];
double openSeriesUp[], openSeriesDown[];
ENUM_TIMEFRAMES btf = PERIOD_CURRENT;

ENUM_TIMEFRAMES RoundPeriod(const int period)
{
   if (period < PERIOD_M5)
      return PERIOD_M1;
   if (period < PERIOD_M15)
      return PERIOD_M5;
   if (period < PERIOD_M30)
      return PERIOD_M15;
   if (period < PERIOD_H1)
      return PERIOD_M30;
   if (period < PERIOD_H4)
      return PERIOD_H1;
   if (period < PERIOD_D1)
      return PERIOD_H4;
   if (period < PERIOD_W1)
      return PERIOD_D1;
   if (period < PERIOD_MN1)
      return PERIOD_W1;
   return PERIOD_MN1;
}

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

void OnDeinit(const int reason)
{
   delete tradingLogic;
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
      // код доступен только после оплаты
   }

class BreakevenController
{
    int _order;
    bool _finished;
    double _trigger;
    double _target;
public:
    BreakevenController()
    {
        _finished = false;
    }

    bool SetOrder(const int order, const double trigger, const double target)
    {
        if (!_finished)
        {
            return false;
        }
        _finished = false;
        _trigger = trigger;
        _target = target;
        _order = order;
        return true;
    }

    void DoLogic()
    {
        if (_finished || !OrderSelect(_order, SELECT_BY_TICKET, MODE_TRADES))
        {
            _finished = true;
            return;
        }

        int type = OrderType();
        if (type == OP_BUY)
        {
            if (Ask >= _trigger)
            {
                int res = OrderModify(OrderTicket(), OrderOpenPrice(), _target, OrderTakeProfit(), 0, CLR_NONE);
                _finished = true;
            }
        } 
        else if (type == OP_SELL) 
        {
            if (Bid < _trigger) 
            {
                int res = OrderModify(OrderTicket(), OrderOpenPrice(), _target, OrderTakeProfit(), 0, CLR_NONE);
                _finished = true;
            }
        } 
    }
};

bool crossOver(const double &left[], const double &right[], const int period)
{
   return left[period] > right[period] && left[period + 1] < right[period + 1];
}

bool crossUnder(const double &left[], const double &right[], const int period)
{
   return left[period] < right[period] && left[period + 1] > right[period + 1];
}

class TradeController
{
   bool IsBuyCondition()
   {
      if ((TradeType == Sell && LogicType == DirectLogic)
         || (TradeType == Buy && LogicType == ReversalLogic))
      {
         return false;
      }
      return crossOver(closeSeries, openSeries, 0);
   }

  

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

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

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

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

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

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

Стоимость полного кода
1 268,70₽ ≈ $15.51