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

grid strategy 14112024.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 общих тегов
Вы автор или правообладатель?

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

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

О программе

Данный код представляет собой торгового робота (советник) для платформы 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 и перейдите к оплате.

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