grid strategy 14112024.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «grid strategy 14112024.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный код представляет собой торгового робота (советник) для платформы MetaTrader 4 на языке MQL4. Робот реализует сеточную торговую систему с управлением несколькими позициями одновременно, используя различные технические индикаторы для генерации торговых сигналов.
Робот поддерживает семь торговых стратегий-сигналов: скрещивание скользящих средних (MA), касание линий полос Боллинджера (BB), паттерны свечей, стохастик, MACD и RSI. Каждая стратегия работает независимо с собственным магическим номером и может быть включена или отключена.
Система управления позициями включает расчёт лотов фиксированным значением или процентом от свободного маржинала, увеличение лота по множителю, установку тейк-профита и модификацию ордеров по средней цене. При убытке, превышающем начальный депозит, стратегия автоматически отключается и закрывает все позиции.
Важное замечание: несмотря на метаданные, указывающие на Pine Script и TradingView, исходный код написан на MQL4 для MetaTrader 4 и не является индикатором TradingView.
Настройки программы
| Настройка | Описание |
|---|---|
| Тейк Профит (iTakeProfit) | Тейк Профит — Уровень тейк-профита в пунктах для фиксации прибыли |
| Тип рассчета лота Процент или Значение (iTypeLots) | Тип рассчета лота Процент или Значение — Тип расчёта лота: фиксированное значение (Lots) или процент от свободного маржинала (Percent) |
| Начальный лот (iStartLots) | Начальный лот — Начальный размер лота для открытия позиции |
| Множитель лота (iMultiplier) | Множитель лота — Множитель лота при увеличении размера позиции |
| Дистанция между позициями (iOrderStep) | Дистанция между позициями — Дистанция между позициями в сетке, в пунктах |
| Минимальный профит в пунктах (iMinimalProfit) | Минимальный профит в пунктах — Минимальный профит в пунктах для пересчёта средней цены |
| Проскальзывание (iSlippage) | Проскальзывание — Допустимое проскальзывание при исполнении ордеров, в пунктах |
| iPeriodMA1 | Период MA1 — Период скользящей средней (целое число) |
| iMethodMA1 | Метод MA1 — Метод расчёта скользящей средней (числовое значение) |
| iPriceMA1 | Тип цены MA1 — Тип цены для расчёта скользящей средней (вариант настройки) |
Поиск по коду файла
#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 и перейдите к оплате.