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

grid strategy 14112024_5363996961055735982.mq4

Похожие материалы по тегам

pro +.pineTradingView · 3 общих теговofada_gold_trader_v230.mq5MQL5 / MetaTrader 5 · 3 общих теговmulti strategy algo combined by enigma mode.pineTradingView · 3 общих теговmelona ob strategy 6th update (by 3dots).pineTradingView · 3 общих теговsmc+ict+indicators+scalping master.pineTradingView · 3 общих теговpremium_super_scalping killer algo.pineTradingView · 3 общих тегов
Вы автор или правообладатель?

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

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

О программе

Советник (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 и перейдите к оплате.

Стоимость полного кода
853,60₽ ≈ $10.43