robot_wti ea @fxsignalspot.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «robot_wti ea @fxsignalspot.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торгового советника для платформы MetaTrader 4, работающего по принципу сеточной торговли. Он размещает отложенные ордера (Buy Limit и Sell Limit) на определённых уровнях цены относительно текущего рынка и управляет ими при движении цены.
Советник отслеживает совокупную прибыль по управляемым ордерам с помощью глобальных переменных и баланса счёта. Когда накопленная прибыль достигает заданного процентного порога, все открытые ордера закрываются и состояние сетки сбрасывается.
Основная логика управления сеткой реализована в отдельной функции: при движении цены добавляются новые отложенные ордера на вычисленных уровнях. Параметры шага и отступов позволяют настраивать расстояние между уровнями и калибровать условия открытия и фиксации прибыли.
Параметр magic number используется для изоляции ордеров, управляемых данным советником, от ордеров других торговых систем.
Настройки программы
| Настройка | Описание |
|---|---|
| identifier | Текстовый параметр, задающий префикс для глобальных переменных, используемых советником для хранения состояния. |
| din | Строковый параметр, содержащий описательную метку для настройки лота. |
| lot | Числовой параметр, определяющий базовый размер лота, используемый при расчёте объёма ордеров. |
| 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 и перейдите к оплате.