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

ArbitrageReverse

arbitragereverse_1_1.mq4
Вы автор или правообладатель?

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

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

О программе

ArbitrageReverse — торговый советник для платформы MetaTrader 4, написанный на языке MQL4. Автор — Yury V. Reshetov (2007). Советник предназначен для управления открытыми торговыми позициями на основе расчёта текущего профита и доступной маржи.

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

Логика работы включает расчёт параметра dt, который зависит от соотношения средств, цены входа и параметра experts. При определённых условиях советник закрывает пары позиций с помощью OrderCloseBy, а при необходимости — открывает новые ордера через OrderSend. Объём лота рассчитывается с учётом свободной маржи аккаунта.

В качестве ключевых торговых функций используются OrderSend, OrderClose и OrderCloseBy. Советник проверяет возможность торговли через IsTradeAllowed перед каждой операцией и использует параметр magicnumber для идентификации своих ордеров.

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

НастройкаОписание
experts Множитель, влияющий на расчёт объёма открываемой позиции. По умолчанию 1.
beginPrice Начальная цена, используемая для расчёта начального значения средств. По умолчанию 1.8014.
magicnumber Магический номер для идентификации ордеров, управляемых данным советником. По умолчанию 777.
Получить полный код

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

extern double experts = 1;
extern double beginPrice = 1.8014;
extern int    magicnumber = 777;
static int    prevtime = 0;
static double bl = 1000;

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

int deinit()
  {

   return(0);
  }

int start()
  {
      // код доступен только после оплаты
   }
   if(Time[0] == prevtime) 
       return(0);
   prevtime = Time[0];
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }

   int total = OrdersHistoryTotal();
   double money = bl * beginPrice;
   int i = 0;
   for (i = 0; i < total; i++) 
     {
       OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicnumber) 
         {
           if(OrderType() == OP_BUY) 
             {
               money = money + (OrderClosePrice() - 
                       OrderOpenPrice()) * 10 * OrderLots();
             } 
           else 
             {
               money = money - (OrderClosePrice() - 
                       OrderOpenPrice()) * 10 * OrderLots();
             }
         }
     }
   total = OrdersTotal();   
   double com =  bl;
   int tickbuy = -1;
   double buyprofit = 0;
   double buyvolume = 0;
   int ticksell = -1;
   double sellprofit = 0;
   double sellvolume = 0;
   for(i = 0; i < total; i++) 
     {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
           if(OrderType() == OP_BUY) 
             {
               if(OrderSymbol() == Symbol()) 
                 {
                   buyvolume = OrderLots();
                   money = money - 10 * buyvolume * OrderOpenPrice();
                   tickbuy = OrderTicket();
                   buyprofit = OrderProfit();
                 }
               com = com + 10 * OrderLots(); 
             } 
           else 
             {
               if(OrderSymbol() == Symbol()) 
                 {
                   sellvolume = OrderLots();
                   money = money + 10 * sellvolume * OrderOpenPrice();
                   ticksell = OrderTicket();
                   sellprofit = OrderProfit();
                 }
               com = com - 10 * OrderLots(); 
             }
         }
     }
   if(! IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }
   closeby(ticksell, tickbuy);
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }
   double lots = 0;
   double price = 0;
   double dt = (money / Ask - com) * experts / (experts + 1);
   if(dt < 0) 
     {
       if(buyprofit < 0) 
           return(0);

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

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

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

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

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

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

Стоимость полного кода
276,90₽ ≈ $3.38