h1.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «h1.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Торговый советник для платформы MetaTrader 4, работающий на основе анализа индикатора MACD на нескольких таймфреймах. Советник обрабатывает рыночные события в OnTick, открывает позиции в соответствии с заданными правилами и модифицирует открытые ордера, переводя стоп-лосс в безубыток и двигая его по тренду. Поддерживается как рыночное исполнение, так и работа с отложенными ордерами.
Настройки программы
| Настройка | Описание |
|---|---|
| EA | Название советника — Текстовый идентификатор или заголовок группы общих настроек советника. |
| Lot | Объём сделки — Задаёт объём торговой позиции в лотах для открытия новых ордеров. |
| One_order_per_direction | Одна позиция на направление — При включении позволяет держать только одну открытую позицию в каждом направлении. |
| Max_orders_per_direction | Максимум позиций на направление — Ограничивает количество одновременно открытых позиций в одном направлении, когда разрешено несколько ордеров. |
| New_order_after_profit_buy | Новый ордер при прибыли покупки — Разрешает открытие новой покупки, если текущая покупочная позиция уже в прибыли. |
| New_order_after_profit_sell | Новый ордер при прибыли продажи — Разрешает открытие новой продажи, если текущая продажная позиция уже в прибыли. |
| TP | Тейк-профит — Уровень фиксации прибыли в пунктах для новых ордеров. |
| SL | Стоп-лосс — Уровень ограничения убытков в пунктах для новых ордеров. |
| Breakeven | Безубыток (в пунктах) — Расстояние в пунктах от цены открытия, при достижении которого стоп-лосс переводится в безубыток. |
| Breakeven_distance | Отступ безубытка — Дополнительное расстояние в пунктах от цены открытия для установки стоп-лосса при активации безубытка. |
| TS | Трейлинг-стоп (в пунктах) — Расстояние в пунктах от текущей цены, при достижении которого активируется модификация стоп-лосса в сторону трейлинга. |
| TS_step | Шаг трейлинг-стопа — Шаг сдвига стоп-лосса при активации трейлинг-стопа в пунктах. |
| ID | Идентификатор ордеров — Числовой идентификатор, присваиваемый всем ордерам советника для их последующей фильтрации и управления. |
| MACD | Настройки MACD — Заголовок группы параметров базового MACD, используемого для генерации сигналов. |
| MACD_fast_ema_period | Период быстрой EMA MACD — Период быстрой экспоненциальной скользящей средней для расчёта MACD. |
| MACD_slow_ema_period | Период медленной EMA MACD — Период медленной экспоненциальной скользящей средней для расчёта MACD. |
| MACD_signal_period | Период сигнальной линии MACD — Период сигнальной линии MACD. |
| MACD_applied_price | Применяемая цена MACD — Тип цены или данных, используемых для расчёта MACD на основном таймфрейме. |
| MACD_UP | Настройки MACD старшего таймфрейма — Заголовок группы параметров MACD для анализа на более высоком таймфрейме. |
| Use_MACD_on_upper_tf | Использовать MACD старшего таймфрейма — Включает или отключает дополнительную фильтрацию сигналов по MACD на выбранном старшем таймфрейме. |
| MACD_upper_tf | Таймфрейм MACD старшего уровня — Таймфрейм, на котором рассчитывается MACD для дополнительной фильтрации сигналов. |
| MACD_fast_ema_period (MACD_fast_ema_period_2) | Период быстрой EMA MACD старшего TF — Период быстрой EMA для MACD на старшем таймфрейме. |
| MACD_slow_ema_period (MACD_slow_ema_period_2) | Период медленной EMA MACD старшего TF — Период медленной EMA для MACD на старшем таймфрейме. |
| MACD_signal_period (MACD_signal_period_2) | Период сигнальной линии MACD старшего TF — Период сигнальной линии MACD на старшем таймфрейме. |
| MACD_applied_price (MACD_applied_price_2) | Применяемая цена MACD старшего TF — Тип цены или данных, используемых для расчёта MACD на старшем таймфрейме. |
| MACD_TREND | Настройки MACD тренда — Заголовок группы параметров MACD, используемого для определения направления тренда. |
| Use_MACD_for_trend | Использовать MACD для определения тренда — Включает или отключает фильтрацию сигналов по направлению тренда на основе MACD. |
| MACD_trend_tf | Таймфрейм MACD тренда — Таймфрейм, на котором определяется текущее направление тренда с помощью MACD. |
| MACD_fast_ema_period (MACD_fast_ema_period_3) | Период быстрой EMA MACD тренда — Период быстрой EMA для MACD, используемого при определении тренда. |
| MACD_slow_ema_period (MACD_slow_ema_period_3) | Период медленной EMA MACD тренда — Период медленной EMA для MACD, используемого при определении тренда. |
| MACD_signal_period (MACD_signal_period_3) | Период сигнальной линии MACD тренда — Период сигнальной линии MACD, используемого при определении тренда. |
| MACD_applied_price (MACD_applied_price_3) | Применяемая цена MACD тренда — Тип цены или данных, используемых для расчёта MACD при определении тренда. |
| ORD | Настройки открытия ордеров — Заголовок группы параметров, связанных с порядком и условиями открытия ордеров. |
| requote | Количество повторных попыток при реквоте — Максимальное количество повторных попыток отправки ордера при возникновении реквота. |
| number_try | Максимум попыток открытия/модификации — Общее максимальное количество попыток для выполнения операций открытия или модификации ордеров. |
| time_period_try | Пауза между попытками (секунды) — Время ожидания в секундах между повторными попытками выполнения торговых операций. |
Поиск по коду файла
input string EA = "Общие настройки советника";
input double Lot = 0.2;
input bool One_order_per_direction = true;
input int Max_orders_per_direction = 50;
input bool New_order_after_profit_buy = false;
input bool New_order_after_profit_sell = false;
input double TP = 600;
input double SL = 250;
input int Breakeven = 0;
input int Breakeven_distance = 0;
input int TS = 0;
input int TS_step = 0;
input int ID = 6060;
input string MACD = "Настройки MACD";
input int MACD_fast_ema_period = 5;
input int MACD_slow_ema_period = 10;
input int MACD_signal_period = 3;
input ENUM_APPLIED_PRICE MACD_applied_price = PRICE_CLOSE;
input string MACD_UP = "Настройки MACD на старшем таймфрейме";
input bool Use_MACD_on_upper_tf = false;
input ENUM_TIMEFRAMES MACD_upper_tf = PERIOD_M30;
input int MACD_fast_ema_period_2 = 34; //MACD_fast_ema_period
input int MACD_slow_ema_period_2 = 35; //MACD_slow_ema_period
input int MACD_signal_period_2 = 5; //MACD_signal_period
input ENUM_APPLIED_PRICE MACD_applied_price_2 = PRICE_CLOSE; //MACD_applied_price
input string MACD_TREND = "Настройки MACD для определения тренда";
input bool Use_MACD_for_trend = true;
input ENUM_TIMEFRAMES MACD_trend_tf = PERIOD_H4;
input int MACD_fast_ema_period_3 = 5; //MACD_fast_ema_period
input int MACD_slow_ema_period_3 = 10; //MACD_slow_ema_period
input int MACD_signal_period_3 = 3; //MACD_signal_period
input ENUM_APPLIED_PRICE MACD_applied_price_3 = PRICE_CLOSE; //MACD_applied_price
input string ORD = "Настройки открытия ордеров";
bool MarketExecution = true;
input int requote = 50;
input int number_try = 20;
input int time_period_try = 1;
string main_id;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
if(UninitializeReason() == REASON_CHARTCLOSE || UninitializeReason() == REASON_REMOVE)
GlobalVariablesDeleteAll(main_id);
}
void OnTick()
{
// код доступен только после оплаты
}
bool filter_by_trend(int type, string command)
{
bool res = false;
if(!Use_MACD_for_trend)
return(true);
string now_direction = "";
double macd_main_1 = iMACD(NULL,MACD_upper_tf,MACD_fast_ema_period_3,MACD_slow_ema_period_3,MACD_signal_period_3,MACD_applied_price_3,MODE_MAIN,1);
double macd_main_2 = iMACD(NULL,MACD_upper_tf,MACD_fast_ema_period_3,MACD_slow_ema_period_3,MACD_signal_period_3,MACD_applied_price_3,MODE_MAIN,2);
double macd_signal_1 = iMACD(NULL,MACD_upper_tf,MACD_fast_ema_period_3,MACD_slow_ema_period_3,MACD_signal_period_3,MACD_applied_price_3,MODE_SIGNAL,1);
double macd_signal_2 = iMACD(NULL,MACD_upper_tf,MACD_fast_ema_period_3,MACD_slow_ema_period_3,MACD_signal_period_3,MACD_applied_price_3,MODE_SIGNAL,2);
if(macd_signal_1 > 0 && macd_main_1 > macd_signal_1)
now_direction = "trend";
if(macd_signal_1 < 0 && macd_main_1 < macd_signal_1)
now_direction = "trend";
if(macd_signal_1 > 0 && macd_main_1 > 0 && macd_main_1 < macd_signal_1)
now_direction = "correction";
if(macd_signal_1 < 0 && macd_main_1 < 0 && macd_main_1 > macd_signal_1)
now_direction = "correction";
if(now_direction == command)
res = true;
return(res);
}
bool signal_by_upper_tf(int type)
{
bool res = false;
if(!Use_MACD_on_upper_tf)
return(true);
double macd_main_1 = iMACD(NULL,MACD_upper_tf,MACD_fast_ema_period_2,MACD_slow_ema_period_2,MACD_signal_period_2,MACD_applied_price_2,MODE_MAIN,1);
double macd_main_2 = iMACD(NULL,MACD_upper_tf,MACD_fast_ema_period_2,MACD_slow_ema_period_2,MACD_signal_period_2,MACD_applied_price_2,MODE_MAIN,2);
double macd_signal_1 = iMACD(NULL,MACD_upper_tf,MACD_fast_ema_period_2,MACD_slow_ema_period_2,MACD_signal_period_2,MACD_applied_price_2,MODE_SIGNAL,1);
double macd_signal_2 = iMACD(NULL,MACD_upper_tf,MACD_fast_ema_period_2,MACD_slow_ema_period_2,MACD_signal_period_2,MACD_applied_price_2,MODE_SIGNAL,2);
if(type == OP_BUY)
{
if(macd_signal_1 > 0 && macd_main_1 < macd_signal_1)
res = true;
}
if(type == OP_SELL)
{
if(macd_signal_1 < 0 && macd_main_1 > macd_signal_1)
res = true;
}
return(res);
}
bool rules_by_open(int type)
{
bool res = false;
if(One_order_per_direction)
res = order_total(type) == 0?true:false;
else
{
if(order_total(type) < Max_orders_per_direction)
res = true;
if(type == OP_BUY && New_order_after_profit_buy && order_profit(type) >= 0)
res = true;
if(type == OP_SELL && New_order_after_profit_sell && order_profit(type) >= 0)
res = true;
}
return (res);
}
double order_profit(int type_1 = -1, int type_2 = -1)
{
int i;
double kol = 0;
for(i = OrdersTotal() - 1; i >= 0; i --)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderMagicNumber() == ID && (OrderType() == type_1 || OrderType() == type_2))
kol+= OrderProfit() + OrderSwap() + OrderCommission();
if(OrderMagicNumber() == ID && type_1 == -1 && type_2 == -1)
kol+= OrderProfit() + OrderSwap() + OrderCommission();
}
return(kol);
}
int order_total(int type_1 = -1, int type_2 = -1)
{
int i;
int kol = 0;
for(i = OrdersTotal() - 1; i >= 0; i --)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderMagicNumber() == ID && (OrderType() == type_1 || OrderType() == type_2))
kol++;
if(OrderMagicNumber() == ID && type_1 == -1 && type_2 == -1)
kol++;
}
return(kol);
}
bool isNewBar()
{
static datetime BarTime;
bool res = false;
if(BarTime != Time[0])
{
BarTime = Time[0];
res = true;
}
return(res);
}
double check_lot(double &lo)
{
double l = MarketInfo(Symbol(),MODE_LOTSTEP);
int ok = 0;
while(l < 1)
{
l*=10;
ok++;
}
if(lo < MarketInfo(Symbol(),MODE_MINLOT))
lo = MarketInfo(Symbol(),MODE_MINLOT);
if(lo > MarketInfo(Symbol(),MODE_MAXLOT))
lo = MarketInfo(Symbol(),MODE_MAXLOT);
return(NormalizeDoПоказано первые 50% кода (символов: 10594)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.