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

renko_hunter

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

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

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

О программе

renko_hunter — это торговый советник для MetaTrader 4, использующий скользящие средние EMA(21) и EMA(50) по ценам закрытия для определения направления тренда. Советник открывает длинные позиции при восходящем пересечении EMA и короткие — при нисходящем, при условии подтверждения тремя последовательными свечами.

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

Советник работает на каждом тике, проверяя наличие ордеров, технические условия и выполняя торговые операции через стандартные функции MQL4. Внутренняя логика не раскрывает конкретные алгоритмы проверки и значения констант за пределами описанных функций.

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

НастройкаОписание
BuyLots27 Объём покупки — Объём лота для открытия длинных позиций.
BuyStoploss27 Стоп-лосс покупки — Стоп-лосс в пунктах для длинных позиций. При значении 0 стоп-лосс не устанавливается.
BuyTakeprofit27 Тейк-профит покупки — Тейк-профит в пунктах для длинных позиций. При значении 0 тейк-профит не устанавливается.
SellLots22 Объём продажи — Объём лота для открытия коротких позиций.
SellStoploss22 Стоп-лосс продажи — Стоп-лосс в пунктах для коротких позиций. При значении 0 стоп-лосс не устанавливается.
SellTakeprofit22 Тейк-профит продажи — Тейк-профит в пунктах для коротких позиций. При значении 0 тейк-профит не устанавливается.
Получить полный код

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

#include <stdlib.mqh>
#include <WinUser32.mqh>

extern double BuyLots27 = 0.2;
extern int BuyStoploss27 = 100;
extern int BuyTakeprofit27 = 100;
extern double SellLots22 = 0.2;
extern int SellStoploss22 = 100;
extern int SellTakeprofit22 = 100;

double PipValue=1;    // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n";  // use this in custom or utility blocks where you need line feeds
int NDigits = 4;   // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0;  // count of all objects created on the chart, allows creation of objects with unique names
int current = 0;

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

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

void OnEveryTick5()
{
    PipValue = 1;
    if (NDigits == 3 || NDigits == 5) PipValue = 10;

    IfOrderExists28();
    IfOrderExists39();
    CustomCode4();

}

void IfOrderExists28()
{
    bool exists = false;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 38)
        {
            exists = true;
        }
    }
    else
    {
        Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
    }

    if (exists)
    {
        TechnicalAnalysis2x31();

    }
}

void TechnicalAnalysis2x31()
{
    if ((Close[2] > Open[2]) && (Close[1] < Open[1]))
    {
        CloseOrder35();

    }
}

void CloseOrder35()
{
    int orderstotal = OrdersTotal();
    int orders = 0;
    int ordticket[90][2];
    for (int i = 0; i < orderstotal; i++)
    {
        bool sel = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
        if (OrderType() != OP_BUY || OrderSymbol() != Symbol() || OrderMagicNumber() != 38)
        {
            continue;
        }
        ordticket[orders][0] = OrderOpenTime();
        ordticket[orders][1] = OrderTicket();
        orders++;
    }
    if (orders > 1)
    {
        ArrayResize(ordticket,orders);
        ArraySort(ordticket);
    }
    for (i = 0; i < orders; i++)
    {
        if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET) == true)
        {
            bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Yellow);
            if (ret == false)
            Print("OrderClose() error - ", ErrorDescription(GetLastError()));
        }
    }

}

void IfOrderExists39()
{
    bool exists = false;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == 39)
        {
            exists = true;
        }
    }
    else
    {
        Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
    }

    if (exists)
    {
        TechnicalAnalysis2x34();

    }
}

void TechnicalAnalysis2x34()
{
    if ((Close[2] < Open[2]) && (Close[1] > Open[1]))
    {
        CloseOrder36();

    }
}

void CloseOrder36()
{
    int orderstotal = OrdersTotal();
    int orders = 0;
    int ordticket[90][2];
    for (int i = 0; i < orderstotal; i++)
    {
        bool sel = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
        if (OrderType() != OP_SELL || OrderSymbol() != Symbol() || OrderMagicNumber() != 39)
        {
            continue;
        }
        ordticket[orders][0] = OrderOpenTime();
        ordticket[orders][1] = OrderTicket();
        orders++;
    }
    if (orders > 1)
    {
        ArrayResize(ordticket,orders);
        ArraySort(ordticket);
    }
    for (i = 0; i < orders; i++)
    {
        if (OrderSelect(ordticket[i][1], SELECT_BY_TICKET) == true)
        {
            bool ret = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 4, Yellow);
            if (ret == false)
            Print("OrderClose() error - ", ErrorDescription(GetLastError()));
        }
    }

}

void CustomCode4()
{

    TechnicalAnalysis2x25();
    TechnicalAnalysis2x19();

}

void TechnicalAnalysis2x25()
{
    if ((iMA(NULL, NULL,21,0,MODE_EMA,PRICE_CLOSE,current) > iMA(NULL, NULL,50,0,MODE_EMA,PRICE_CLOSE,current)) && (Ask > iMA(NULL, NULL,21,0,MODE_EMA,PRICE_CLOSE,current)))
    {
        TechnicalAnalysis3x26();

    }
}

void TechnicalAnalysis3x26()
{
    if ((Close[3] > Open[3]) && (Close[2] > Open[2]) && (Close[1] > Open[1]))
    {
        IfOrderDoesNotExist16();

    }
}

void IfOrderDoesNotExist16()
{
    bool exists = false;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber() == 38)
        {
            exists = true;
        }
    }
    else
    {
        Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
    }

    if (exists == false)
    {
        BuyOrder27();
        IfOrderExists17();

    }
}

void BuyOrder27()
{
    double SL = Ask - BuyStoploss27*PipValue*Point;
    if (BuyStoploss27 == 0) SL = 0;
    double TP

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

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

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

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

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

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

Стоимость полного кода
743₽ ≈ $9.08