fury_flipper_bot_v2.60 @lifeindreamsworld
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «fury_flipper_bot_v2.60 @lifeindreamsworld.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Это торговый советник для MetaTrader 5, написанный на языке MQL5. Он работает на одном символе текущего графика и использует две скользящие средние (EMA) для определения направления торговли. Направление задаётся пересечением быстрой и медленной EMA на выбранном таймфрейме: при пересечении снизу вверх направление становится покупательским, при пересечении сверху вниз — продающим. Если направление ещё не определено, оно устанавливается по текущему соотношению значений EMA.
Советник открывает позиции в направлении сигнала, увеличивая их количество до заданного максимума, что формирует сетку. Для каждой открытой позиции контролируется прибыль: при достижении заданного порога прибыли позиция закрывается. Также предусмотрен трейлинг-стоп, который активируется при достижении прибылью заданного уровня и подтягивает стоп-лосс с указанным шагом.
Открытие новых позиций ограничено временным интервалом (кулдаун), чтобы избежать слишком частых сделок. Все операции выполняются через торговый класс CTrade с использованием заданного магического номера и комментария к сделкам. Советник не использует внешние библиотеки, кроме стандартной Trade/Trade.mqh.
Настройки программы
| Настройка | Описание |
|---|---|
| Lots | Объём каждой открываемой позиции в лотах. Значение автоматически приводится к допустимому диапазону и шагу объёма для текущего символа. |
| MaxTrades | Максимальное количество одновременно открытых позиций сетки в одном направлении. |
| TP_Min_USD | Нижний порог прибыли в долларах для закрытия позиции. При достижении этого значения позиция закрывается. |
| TP_Max_USD | Верхний порог прибыли в долларах для закрытия позиции. При достижении этого значения позиция закрывается. |
| Trail_Start_USD | Уровень прибыли в долларах, при достижении которого активируется трейлинг-стоп для позиции. |
| TrailStepPips | Шаг трейлинга в пунктах. Определяет, на каком расстоянии от текущей цены будет устанавливаться стоп-лосс при активации трейлинга. |
| FastEMA | Период быстрой экспоненциальной скользящей средней, используемой для определения направления тренда. |
| SlowEMA | Период медленной экспоненциальной скользящей средней, используемой для определения направления тренда. |
| TrendTF | Таймфрейм, на котором рассчитываются скользящие средние для определения направления. Если выбран PERIOD_M1, фактически используется PERIOD_M5. |
| MagicNumber | Уникальный идентификатор (магический номер) для сделок советника. Используется для фильтрации позиций, принадлежащих советнику. |
| TradeComment | Текстовый комментарий, добавляемый к каждой сделке советника. |
| CooldownSeconds | Минимальный интервал в секундах между открытием новых позиций сетки. Если значение больше нуля, новые позиции не открываются чаще, чем раз в указанное число секунд. |
Поиск по коду файла
#property description ""
#property version "2.60"
#property strict
#include <Trade/Trade.mqh>
CTrade g_trade;
input double Lots = 0.02;
input int MaxTrades = 10; // max grid legs
input double TP_Min_USD = 1.4; // per-leg take profit
input double TP_Max_USD = 5.0;
input double Trail_Start_USD = 3.0;
input int TrailStepPips = 10;
input int FastEMA = 10;
input int SlowEMA = 20;
input ENUM_TIMEFRAMES TrendTF = PERIOD_M1;
input long MagicNumber = 20260720;
input string TradeComment = "@LifeInDreamsWorld";
input int CooldownSeconds = 5; // grid time step
datetime g_lastGridBeat = 0;
datetime g_lastBar = 0;
int g_dir = 0;
int g_fastHandle = INVALID_HANDLE;
int g_slowHandle = INVALID_HANDLE;
ENUM_TIMEFRAMES g_emaTF = PERIOD_M5;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
if(g_fastHandle != INVALID_HANDLE) IndicatorRelease(g_fastHandle);
if(g_slowHandle != INVALID_HANDLE) IndicatorRelease(g_slowHandle);
}
bool IsOurs()
{
return((long)PositionGetInteger(POSITION_MAGIC) == MagicNumber &&
PositionGetString(POSITION_SYMBOL) == _Symbol);
}
int CountOurs()
{
int n = 0;
for(int i = PositionsTotal() - 1; i >= 0; --i)
{
ulong ticket = PositionGetTicket(i);
if(ticket != 0 && PositionSelectByTicket(ticket) && IsOurs())
++n;
}
return n;
}
int CountOpposite(const int dir)
{
int n = 0;
for(int i = PositionsTotal() - 1; i >= 0; --i)
{
ulong ticket = PositionGetTicket(i);
if(ticket == 0 || !PositionSelectByTicket(ticket) || !IsOurs())
continue;
long type = PositionGetInteger(POSITION_TYPE);
if(dir > 0 && type == POSITION_TYPE_SELL) ++n;
if(dir < 0 && type == POSITION_TYPE_BUY) ++n;
}
return n;
}
int GridDirection()
{
double fast[], slow[];
ArraySetAsSeries(fast, true);
ArraySetAsSeries(slow, true);
if(CopyBuffer(g_fastHandle, 0, 0, 3, fast) < 3)
return g_dir;
if(CopyBuffer(g_slowHandle, 0, 0, 3, slow) < 3)
return g_dir;
datetime bar = iTime(_Symbol, g_emaTF, 0);
if(bar != 0 && bar != g_lastBar)
{
g_lastBar = bar;
if(fast[1] > slow[1] && fast[2] <= slow[2])
g_dir = 1;
else if(fast[1] < slow[1] && fast[2] >= slow[2])
g_dir = -1;
}
if(g_dir == 0)
{
if(fast[0] > slow[0]) g_dir = 1;
else if(fast[0]Показано первые 50% кода (символов: 4510)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.