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

robot_wti ea.mq4

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

the gold reaper v4.1 mt5.mq4MQL4 / MetaTrader 4 · 1 общих теговquantum queen x 4.3 (1).mq5MQL5 / MetaTrader 5 · 1 общих теговlizard_1.85.mq4MQL4 / MetaTrader 4 · 1 общих теговoverlaychart.mq4MQL4 / MetaTrader 4 · 1 общих теговmarket crusher ea guidlines.txtMQL · 1 общих теговshustrobotpro.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

Robot_WTI — торговый советник для MetaTrader 4, реализующий сеточную стратегию торговли. При отсутствии открытых ордеров советник размещает два встречных отложенных ордера (BUYLIMIT и SELLLIMIT) на заданном расстоянии от текущей цены, формируя начальные уровни сетки.

В ходе работы советник отслеживает суммарную прибыль по ордерам с заданным магическим номером. Если прибыль достигает порогового значения percent_close, все позиции закрываются и сетка сбрасывается. При недостижении порога запускается процедура Grid, которая добавляет новые отложенные ордера при движении цены вверх или вниз.

В качестве базового размера лота используется параметр lot, умножаемый на целую часть значения глобальной переменной баланса, делённую на 1000. Советник применяет глобальные переменные для хранения начальной цены, баланса и времени, а также использует магический номер для идентификации своих ордеров.

Настройки включают шаг сетки, отступы для калибровки уровней открытия и тейк-профита, а также погрешность по рынку. Советник работает с четырёх- и пятизначными брокерами, автоматически определяя количество знаков после запятой.

Настройки программы

НастройкаОписание
identifier Идентификатор для именования глобальных переменных советника
din Текстовый параметр-описание лота (текстовая метка)
lot Базовый размер лота, умножаемый на целую часть баланса, делённого на 1000
percent_close Процент прибыли от начального баланса, при достижении которого все позиции закрываются
_grid Группа настроек сетки (текстовая метка)
t1 Разделитель (текстовая метка)
step Шаг сетки в пунктах, определяющий расстояние между уровнями
indent_open Отступ для калибровки открытия сетки (в пунктах)
indent Отступ для калибровки тейк-профита (в пунктах)
pogr Погрешность по рынку (в пунктах)
t2 Разделитель (текстовая метка)
t13 Разделитель (текстовая метка)
_magic Текстовая метка группы уникального номера (текстовая метка)
magic Магический номер для идентификации ордеров советника
Получить полный код

Поиск по коду файла

#property version   "1.00"
#property strict

extern string identifier = "WTI";

extern string din = "Lot for 1000";
extern double lot   = 0.005;  
extern double percent_close = 1;

extern string _grid = "Grid settings";
extern string t1 ="--------------------------------------";
extern int    step = 100;
extern int    indent_open = 0;//отступ для калибровки открытия
extern int    indent = 0;//отступ для калибровки тейк-профита
extern int    pogr = 0;//погрешность по рынку
extern string t2 ="--------------------------------------";
/*
Сетку запускаем, когда цена Bid делится без остатка на step.
После этого открываем два встречных ордера по рынку и открываем уровни сетки.
Триггер на открытие доп уровня: бай!=селл.
Корректируем крайние графицы сетки и внутренние границы сетки, когда срабатывает триггер.
*/
extern string t13 ="--------------------------------------";
extern string _magic = "Unique number";
extern int    magic = 1;

double pp;
int    dd; 
int digits;
int kol;
int kol2;//для отложенных

int OnInit()
  {
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
  {

  }

double value_profit()
{
   double ld_0 = 0;
   int l_ord_total_8 = OrdersTotal();
   if (l_ord_total_8 > 0) 
   {
      for (int l_pos_12 = l_ord_total_8 - 1; l_pos_12 >= 0; l_pos_12--) 
      {
         if (OrderSelect(l_pos_12, SELECT_BY_POS, MODE_TRADES))
         {
          if (OrderMagicNumber() == magic)
          ld_0 += OrderProfit() + OrderSwap() + OrderCommission();
         } 
      }
   }
  return(ld_0);
}

void CloseAll()
{  
    bool b;
    int total = OrdersTotal() - 1;   
    for (int i = total; i >= 0; i--) 
    {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
        {
            if (OrderMagicNumber() == magic) 
            {        
                if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                {
                    b = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 20, Blue); // Закрытие рыночного ордера
                } else{
                     b = OrderDelete(OrderTicket()); // Удаление отложенного ордера
                }
            }    
        }    
    } 
} 

int check() {
    int kol_ = 0;
    kol2 = 0;
    int total = OrdersTotal(); // Получаем общее количество ордеров

    for (int i = 0; i < total; i++) {
        if (OrderSelect(i, SELECT_BY_POS)) {

            if (OrderMagicNumber() == magic) {
                if (OrderType() == OP_BUY || OrderType() == OP_SELL) {
                    kol_++; // Увеличиваем счетчик для открытых ордеров
                }
            }
        }
    }

    for (int i = 0; i < total; i++) {
        if (OrderSelect(i, SELECT_BY_POS)) {

            if (OrderMagicNumber() == magic) {
                if (OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT || 
                    OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) {
                    kol_++; // Увеличиваем счетчик для отложенных ордеров
                    kol2++;
                }
            }
        }
    }
    return(kol_);
}

double sum_lot()
{
   double balance_=GlobalVariableGet(identifier+"_balance");
   int roundedValue = (int)MathRound(balance_/1000);

   return(lot*roundedValue);
}

int start()
  {
      // код доступен только после оплаты
   }

      double profit, total_lot;
      int Ticket;
      double bid   =MarketInfo(Symbol(),MODE_BID);
      double ask   =MarketInfo(Symbol(),MODE_ASK);
      kol=check();

      if (kol==0)
      {
         GlobalVariableSet(identifier+"_balance",AccountBalance());
         GlobalVariableSet(identifier+"_itime",TimeCurrent());
         GlobalVariableSet(identifier+"_start_price",Bid);

         GlobalVariableSet(identifier+"_kol_pos2",0);

            total_lot=sum_lot();
            double takeProfit = NormalizeDouble(ask + step * pp + indent * pp, digits);

            Ticket=OrderSend(Symbol(), OP_BUYLIMIT, NormalizeDouble(total_lot,2), NormalizeDouble(ask,digits)- step/2 * pp, 30, 0, /*buyLimit+takeProfit_buy*/0, "", magic, 0, clrBlue);

            takeProfit = NormalizeDouble(bid - st

Показано первые 50% кода (символов: 6091)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
609,10₽ ≈ $7.45