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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.