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