grid strategy 14112024_5363996961055735982.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «grid strategy 14112024_5363996961055735982.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Советник (Expert Advisor) для платформы MetaTrader 4, реализующий сеточную торговлю с несколькими встроенными стратегиями генерации сигналов. При открытии позиций робот отслеживает среднюю цену и корректирует стоп-лоссы, переводя часть позиций в безубыточный режим. Если совокупный результат приводит к обнулению или отрицательному балансу, все позиции закрываются и стратегия отключается.
В качестве источников сигналов используются семь подходов: скользящие средние (MA), полосы Боллинджера (BB), паттерны свечей, стохастик, MACD и RSI. Каждая стратегия работает независимо с собственным магическим номером и может быть включена или отключена. Торговые операции выполняются на текущем символе с настройками лота, дистанции между позициями и профита.
Параметры лота поддерживают два режима: фиксированное значение или расчёт в процентах от свободного маржинального баланса. При повторном открытии позиций размер лота увеличивается по множителю. Все ордера подвергаются проверке допустимых объёмов минимального, максимального и шагового значения.
Настройки программы
| Настройка | Описание |
|---|---|
| iTakeProfit | Уровень фиксации прибыли в пунктах для каждой позиции при первоначальном открытии |
| iTypeLots | Способ расчёта размера лота: фиксированное значение (Lots) или процент от свободного маржинального баланса (Percent) |
| iStartLots | Начальный размер лота для первой позиции в сетке |
| iMultiplier | Множитель, на который умножается лот предыдущей позиции при открытии следующей сетки |
| iOrderStep | Ценовое расстояние между соседними позициями сетки в пунктах |
| iMinimalProfit | Минимальный уровень прибыли в пунктах, при котором позиция переводится в безубыточный режим со сдвигом стоп-лосса к средней цене |
| iSlippage | Допустимое проскальзывание цены при исполнении рыночных ордеров, в пунктах |
| iPeriodMA1 | Период скользящей средней, используемой в стратегии |
| iMethodMA1 | Метод расчёта скользящей средней (например, экспоненциальная или простая) |
| iPriceMA1 | Тип цены, применяемый при расчёте скользящей средней (Close, Open, High, Low и др.) |
Поиск по коду файла
#property version "24.010"
#property description "Разработка торговых роботов и автоматизация торговых процессов."
#property description "Уведомления о начале вебинара в телеграмм "
#property strict
/*
Название торгового робота?
*/
enum ENUM_TYPE_CALC_LOTS
{
Lots = 0, // Лоты
Percent = 1 // Процент
};
input int iTakeProfit = 300; // Тейк Профит
sinput ENUM_TYPE_CALC_LOTS iTypeLots = Lots; // Тип рассчета лота Процент или Значение
sinput double iStartLots = 0.01; // Начальный лот
input double iMultiplier = 2.0; // Множитель лота
input int iOrderStep = 290; // Дистанция между позициями
input int iMinimalProfit = 30; // Минимальный профит в пунктах
sinput int iSlippage = 30; // Проскальзывание
input int iPeriodMA1 = 14;
input double iMethodMA1 = 2;
input ENUM_APPLIED_PRICE iPriceMA1 = PRICE_CLOSE;
struct _str_
{
int magic;
string name;
double depo;
string rezult;
bool work; // Добавил переменную
datetime time_start;
datetime time_stop;
int deals;
void Print()
{
::Print(" =============================================== ");
::Print(" time_stop " + DoubleToString(time_stop ,8));
::Print(" Сделок в день " + DoubleToString(time_start,8));
::Print(" Сделок в день " + DoubleToString(((int)time_stop - (int)time_start),8));
::Print(" Сделок в день " + DoubleToString(((int)time_stop - (int)time_start)/(60*60*24)/(deals==0?1:deals),8));
::Print(" Позиций " + (string)deals);
::Print(" Результат " + rezult);
::Print(" Депозит " + DoubleToString(depo, 2));
::Print(" Magic " + (string)magic);
::Print(" Стратегия " + name);
::Print(" =============================================== ");
}
};
_str_ strategy[] =
{
{1, "MA", 500, "", true, NULL, NULL, 0},
{2, "BB", 500, "", true, NULL, NULL, 0},
{3, "Candle 1", 500, "", false, NULL, NULL, 0},
{4, "Candle 2", 500, "", false, NULL, NULL, 0},
{5, "Stochastic", 500, "", false, NULL, NULL, 0},
{6, "MACD", 500, "", false, NULL, NULL, 0},
{7, "RSI", 500, "", false, NULL, NULL, 0},
};
int OnInit()
{
// код доступен только после оплаты
}
void OnTick()
{
// код доступен только после оплаты
}
bool Strategy(int iIndex)
{
double
BuyPriceMax = 0, BuyPriceMin = 0, BuyPriceMaxLot = 0, BuyPriceMinLot = 0, BuyPriceSumm = 0, BuyLotsSumm = 0,
SelPriceMin = 0, SelPriceMax = 0, SelPriceMinLot = 0, SelPriceMaxLot = 0, SelPriceSumm = 0, SelLotsSumm = 0,
op = 0, lt = 0, sl = 0, tp = 0, profit = 0;
int b = 0, s = 0, ty = -1, tk = -1;
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(strategy[iIndex].work) // === Стратегии разрешено работать
if(OrderMagicNumber() == strategy[iIndex].magic)
if(OrderSymbol() == _Symbol)
{
op = OrderOpenPrice();
lt = OrderLots();
ty = OrderType();
if(ty == OP_BUY)
{
if(op > BuyPriceMax || BuyPriceMax == 0)
{
BuyPriceMax = op;
BuyPriceMaxLot = lt;
}
if(op < BuyPriceMin || BuyPriceMin == 0)
{
BuyPriceMin = op;
BuyPriceMinLot = lt;
}
b++;
BuyPriceSumm += op * lt;
BuyLotsSumm += lt;
}
if(ty == OP_SELL)
{
if(op > SelPriceMax || SelPriceMax == 0)
{
SelPriceMax = op;
SelPriceMaxLot = lt;
}
if(op < SelPriceMin || SelPriceMin == 0)
{
SelPriceMin = op;
SelPriceMinLot = lt;
}
s++;
SelPriceSumm += op * lt;
SelLotsSumm += lt;
}
}
double AwerageBuyPrice = 0, AwerageSelPrice = 0;
if(b >= 2 && BuyLotsSumm > 0)
AwerageBuyPrice = Nd((BuyPriceSumm / BuyLotsSumm) + iMinimalProfit * _Point);
if(s >= 2 && SelLotsSumm > 0)
AwerageSelPrice = Nd((SelPriceSumm / SelLotsSumm) + iMinimalProfit * _Point);
double BuyLot = 0, SelLot = 0;
if(b == 0)
BuyLot = iTypeLots == Percent ? LotPercent(iStartLots) : iStartLots;
else
BuyLot = BuyPriceMinLot * iMultiplier; // Добавить код пересчета с 0,01 * 1,5 =
if(s == 0)
SelLot = iTypeLots == Percent ? LotPercent(iStartLots) : iStartLots;
else
SelLot = SelPriceMaxLot * iMultiplier;
BuyLot = CheckVolumeValue(BuyLot);
SelLot = CheckVolumeValue(SelLot);
if(strategy[iIndex].work) // === Стратегии разрешено работать
{
if(Signal(strategy[iIndex].magic) == OP_BUY)
if((b == 0) || (b > 0 && (BuyPriceMin - Ask) >= (iOrderStep * _Point)))
if(OrderSend(_Symbol, OP_BUY, Nd(BuyLot, 2), Nd(Ask), iSlippage, 0, 0, "Grid", strategy[iIndex].magic, 0, clrGreen) < 0)
Print("OrderSend error OP_BUY #", GetLastError());
if(Signal(strategy[iIndex].magic) == OP_SELL)
if((s == 0) || (s > 0 && (Bid - SelPriceMax) >= (iOrderStep * _Point)))
if(OrderSend(_Symbol, OP_SELL, Nd(SelLot, 2), Nd(Bid), iSlippage, 0, 0, "Grid", strategy[iIndex].magic, 0, clrGreen) < 0)
Print("OrderSend error OP_SELL #", GetLastError());
}
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(strategy[iIndex].work) // === Стратегии разрешено работать
if(OrderMagicNumber() == strategy[iIndex].magic)
if(OrderSymbol() == _Symbol)
{
op = OrderOpenPrice();
lt = OrderLots();
ty = OrderType();
tk = OrderTicket();
sl = OrderStopLoss();
tp = OrderTakeProfit();
profit += OrderProfit() + OrderSwap() + OrderCommission();
if(ty == OP_BUY)
{
if(iTakeProfit > 0)
if(b == 1 && tp == 0)
Показано первые 50% кода (символов: 8536)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.