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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.