Generic
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «generic v13.20.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Generic v13.20 — торговый советник для MetaTrader 4, обрабатывающий события тиков (OnTick) и управляющий открытием и закрытием ордеров на покупку и продажу. Советник использует комбинацию технических индикаторов — Bollinger Bands, CCI, скользящую среднюю (MA) и Moving Average of Oscillator (OsMA), а также фильтры рывков, волатильности и тренда — для формирования торговых сигналов.
Советник поддерживает множество условий закрытия позиций: стоп-лосс, тейк-профит, закрытие по времени удержания, по границам Bollinger Bands, по сигналам CCI и OsMA, переход в безубыток и трейлинг-стоп. Два порядка могут открываться последовательно с заданным расстоянием между ними, при этом второй ордер открывается при достижении ценой определённого уровня.
Встроена система управления размером лота: фиксированный лот, автоматический расчёт по риску от депозита, а также множитель лота после серии убыточных сделок. Советник позволяет ограничивать торговлю по времени, по спреду, по волатильности и после серии убыточных ордеров. Доступна запись торговых событий в лог-файл.
Торговые операции выполняются через стандартные MQL4-функции OrderSend, OrderClose и OrderModify. Все ордера маркируются магическим числом для идентификации. Торговля может быть ограничена выходными днями и временными окнами, задаваемыми для каждого дня недели отдельно.
Настройки программы
| Настройка | Описание |
|---|---|
| Settings_10 | Группа настроек размера ордера. |
| Settings_11 | Подгруппа общих настроек лота. |
| SetName | Имя торгового счёта или стратегии для идентификации в логе. |
| Fixed_Lot | Переключатель: при включене используется фиксированный размер лота, при выключении — динамический расчёт на основе баланса. |
| Lots | Размер лота для открытия позиции (фиксированный или базовый при автоматическом расчёте). |
| Auto_Risk | Процент риска для автоматического расчёта размера лота. При значении больше нуля лот рассчитывается пропорционально риску от баланса или эквити. Если равно нулю, используется фиксированный лот. |
| MM_Depo | Размер депозита в долларах для автоматического расчёта лота при включённом авто-риске. При нулевом значении расчёт производится от баланса или эквити. |
| Lot_Multiple | Переключатель: включает или отключает автоматическое увеличение лота после серии убыточных сделок. |
| Max_Orders | Максимальное количество одновременно открытых ордеров одного типа (покупка или продажа). |
| Order_StepDistance | Расстояние в пунктах между первым и вторым ордерами серии. |
| Order_TotalProfit | Общая прибыль в пунктах, при достижении которой серия ордеров закрывается. |
| Settings_20 | Группа настроек условий закрытия ордера. |
| Settings_21 | Подгруппа настроек стоп-лосса и тейк-профита. |
| Stop_Loss | Размер стоп-лосса в пунктах для ордеров. |
| Take_Profit | Размер тейк-профита в пунктах для ордеров. |
| Settings_22 | Подгруппа настроек закрытия по времени удержания. |
| Close_by_TimeLimit | Переключатель: включает или отключает закрытие позиции при превышении времени удержания ордера. |
| TimeLimit | Время удержания ордера в минутах. При превышении этого времени и достижении минимальной прибыли позиция закрывается. |
| TimeLimit_MinProfit | Минимальная прибыль в пунктах, необходимая для закрытия позиции при превышении лимита времени удержания. |
| Settings_23 | Подгруппа настроек закрытия по Bollinger Bands. |
| Close_by_BB | Переключатель: включает или отключает автоматическое закрытие позиции при выходе цены за границы канала Bollinger Bands. |
| BB_MinProfit | Минимальная прибыль в пунктах, необходимая для закрытия позиции по сигналу Bollinger Bands. |
| Settings_24 | Подгруппа настроек закрытия по CCI. |
| Close_by_CCI | Переключатель: включает или отключает закрытие позиции по сигналу индикатора CCI. |
| Settings_25 | Подгруппа настроек закрытия по OsMA. |
| Close_by_OsMA | Переключатель: включает или отключает закрытие позиции по сигналу индикатора Moving Average of Oscillator. |
| OsMA_MinProfit | Минимальная прибыль в пунктах, необходимая для закрытия позиции по сигналу OsMA. |
| Settings_26 | Подгруппа настроек закрытия в безубыток. |
| Close_by_Breakeven | Переключатель: включает или отключает перевод ордера в безубыток после достижения определённого уровня прибыли. |
| BE_InitLevel | Уровень прибыли в пунктах, при достижении которого активируется перевод ордера в безубыток. |
| BE_Profit | Прибыль в пунктах, на которую устанавливается стоп-лосс при переводе ордера в безубыток. |
| Settings_27 | Подгруппа настроек закрытия по трейлинг-стопу. |
| Close_by_Trail | Переключатель: включает или отключает трейлинг-стоп для управления стоп-лоссом. |
| Trl_dist_1 | Начальное расстояние трейлинг-стопа в пунктах от цены открытия. |
| Trl_dist_2 | Расстояние трейлинг-стопа в пунктах после достижения первого уровня прибыли. |
| Trl_dist_3 | Финальное расстояние трейлинг-стопа в пунктах после достижения второго уровня прибыли. |
| Settings_30 | Группа настроек условий открытия ордера. |
| Settings_31 | Подгруппа настроек первого ордера — сигналы индикаторов. |
| Open_by_BB_1 | Переключатель: включает или отключает открытие первого ордера на покупку/продажу по сигналу Bollinger Bands. |
| Open_by_CCI_1 | Переключатель: включает или отключает открытие первого ордера по сигналу CCI. |
| Open_by_MA_1 | Переключатель: включает или отключает открытие первого ордера по сигналу скользящей средней. |
| Open_by_OsMA_1 | Переключатель: включает или отключает открытие первого ордера по сигналу OsMA. |
| Spike_Filter_1 | Переключатель: включает или отключает фильтр ценовых рывков для открытия первого ордера. |
| Volatility_Filter_1 | Переключатель: включает или отключает фильтр волатильности для открытия первого ордера. |
| Trend_Filter_1 | Переключатель: включает или отключает фильтр тренда для открытия первого ордера. |
| Settings_32 | Подгруппа настроек второго ордера — сигналы индикаторов. |
| Open_by_BB_2 | Переключатель: включает или отключает открытие второго ордера на покупку/продажу по сигналу Bollinger Bands. |
| Open_by_CCI_2 | Переключатель: включает или отключает открытие второго ордера по сигналу CCI. |
| Open_by_MA_2 | Переключатель: включает или отключает открытие второго ордера по сигналу скользящей средней. |
| Open_by_OsMA_2 | Переключатель: включает или отключает открытие второго ордера по сигналу OsMA. |
| Spike_Filter_2 | Переключатель: включает или отключает фильтр ценовых рывков для открытия второго ордера. |
| Volatility_Filter_2 | Переключатель: включает или отключает фильтр волатильности для открытия второго ордера. |
| Trend_Filter_2 | Переключатель: включает или отключает фильтр тренда для открытия второго ордера. |
| Settings_34 | Подгруппа настроек ограничения торговли последовательными убытками. |
| Restrict_Losses | Переключатель: включает или отключает ограничение открытия новых ордеров после серии убыточных сделок. |
| Restrict_TimeLimit | Время в минутах, в течение которого после убыточного ордера запрещено открытие новых ордеров того же типа при включённом ограничении. |
| Settings_40 | Группа настроек индикаторов. |
| Settings_41 | Подгруппа настроек Bollinger Bands. |
| BB_TimeFrame | Таймфрейм для расчёта индикатора Bollinger Bands. |
| BB_Period | Период расчёта индикатора Bollinger Bands. |
| BB_StDev | Стандартное отклонение для расчёта канала Bollinger Bands. |
| BB_Shift | Сдвиг индикатора Bollinger Bands в барах. |
| BB_Open_Level | Дополнительный уровень в пунктах за пределами канала Боллинджера для открытия позиции. Покупка открывается при цене ниже нижней границы минус уровень, продажа — выше верхней границы плюс уровень. |
| BB_Close_Level | Дополнительный уровень в пунктах за пределами канала Боллинджера для закрытия позиции. Закрытие происходит при достижении цены указанного уровня за верхней или нижней границей. |
| Settings_42 | Подгруппа настроек CCI. |
| CCI_TimeFrame | Таймфрейм для расчёта индикатора CCI. |
| CCI_Period | Период расчёта индикатора Commodity Channel Index. |
| CCI_Applied_Price | Тип цены, используемый для расчёта индикатора CCI (0 — Close, 1 — Open, 2 — High, 3 — Low, 4 — Median). |
| CCI_Shift | Сдвиг индикатора CCI в барах. |
| CCI_Signal_Level | Уровень сигнала CCI. Если CCI превышает это значение — сигнал на продажу, если ниже противоположного значения — сигнал на покупку. |
| Settings_43 | Подгруппа настроек скользящей средней. |
| MA_TimeFrame | Таймфрейм для расчёта скользящей средней Moving Average. |
| MA_Period | Период расчёта скользящей средней Moving Average. |
| MA_Price_Method | Метод расчёта скользящей средней (0 — Simple, 1 — Exponential, 2 — Smoothed, 3 — Linear Weighted). |
| MA_Applied_Price | Тип цены, используемый для расчёта скользящей средней (0 — Close, 1 — Open, 2 — High, 3 — Low, 4 — Median). |
| MA_Shift | Сдвиг скользящей средней в барах. |
| MA_Signal_Level | Уровень в пунктах от скользящей средней, при превышении которого формируется торговый сигнал. |
| Settings_44 | Подгруппа настроек идентификации ценовых рывков. |
| Bar_TimeFrame | Таймфрейм для определения уровня открытия бара при фильтрации ценовых рывков. |
| Bar_Shift | Сдвиг бара для определения уровня открытия при фильтрации ценовых рывков. |
| Min_PriceRange | Минимальный диапазон цены в пунктах для подтверждения сигнала о ценовом рывке. |
| Max_PriceRange | Максимальный диапазон цены в пунктах для фильтрации рывков. Если разрыв превышает это значение, формируется сигнал фильтра. |
| Settings_45 | Подгруппа настроек Moving Average of Oscillator. |
| OsMA_TimeFrame | Таймфрейм для расчёта индикатора Moving Average of Oscillator. |
| OsMA_FastEMA | Период быстрой экспоненциальной скользящей средней для расчёта OsMA. |
| OsMA_SlowEMA | Период медленной экспоненциальной скользящей средней для расчёта OsMA. |
| OsMA_SignalSMA | Период сигнальной скользящей средней для расчёта индикатора OsMA. |
| OsMA_Limit | Минимальное абсолютное значение OsMA в пунктах, необходимое для формирования торгового сигнала. |
| Settings_46 | Подгруппа настроек ограничения торговли по волатильности. |
| MinVolatility | Минимальная ширина канала Bollinger Bands в пунктах для допуска к торговле. Если ширина ниже этого значения, торговля ограничивается. |
| MaxDailyRange | Максимальный дневной диапазон цены в пунктах для фильтрации торговли по волатильности. |
| Settings_50 | Группа прочих настроек. |
| WriteLogFile | Переключатель: включает или отключает запись торговых событий в лог-файл. |
| Max_Spread | Максимально допустимый спред в пунктах. При превышении спреда новые ордера не открываются. |
| Slippage | Допустимое отклонение цены при исполнении ордера в пунктах. |
| Order_Comment | Текстовый комментарий, присваиваемый каждому открытому ордеру. |
| MagicNumber | Магическое число для идентификации ордеров, открытых данным советником. |
| Settings_60 | Группа настроек торгового времени. |
| Settings_61 | Подгруппа настроек закрытия сделок в пятницу. |
| Friday_Close | Переключатель: при включении все позиции закрываются в пятницу в заданное время. |
Поиск по коду файла
#property version "13.20"
#property strict
#include <stderror.mqh>
#include <stdlib.mqh>
/*-------------------------------------------------------------------------------------------------------------------+
| В Х О Д Н Ы Е П Е Р Е М Е Н Н Ы Е |
+-------------------------------------------------------------------------------------------------------------------*/
extern string Settings_10 = "1. O R D E R S I Z E S E T T I N G S";
extern string Settings_11 = " 1.1. General Lot Settings";
extern string SetName = "";
extern bool Fixed_Lot = True;
extern double Lots = 0.1;
extern double Auto_Risk = 0.0; //Auto Risk
input int MM_Depo = 0; //Depo per Lots
extern bool Lot_Multiple = True; // Увеличение лота после серии убыточных оредров
extern int Max_Orders = 2;
extern int Order_StepDistance = 350;
extern int Order_TotalProfit = 25;
extern string Settings_20 = "2. O R D E R C L O S E C O N D I T I O N S";
extern string Settings_21 = " 2.1. Stop Loss and Take Profit settings";
extern int Stop_Loss = 550;
extern int Take_Profit = 550;
extern string Settings_22 = " 2.2. Close by Order holding time limit";
extern bool Close_by_TimeLimit = True;
extern int TimeLimit = 15;
extern int TimeLimit_MinProfit = 100;
extern string Settings_23 = " 2.3. Close by Bollinger Bands";
extern bool Close_by_BB = True;
extern int BB_MinProfit = 75;
extern string Settings_24 = " 2.4. Close by Commodity Channel Index";
extern bool Close_by_CCI = False;
extern string Settings_25 = " 2.5. Close by Moving Average of Oscillator";
extern bool Close_by_OsMA = True;
extern int OsMA_MinProfit = 75;
extern string Settings_26 = " 2.6. Close by Breakeven";
extern bool Close_by_Breakeven = False;
extern int BE_InitLevel = 70;
extern int BE_Profit = 10;
extern string Settings_27 = " 2.7. Close by Trailling Stop";
extern bool Close_by_Trail = False;
extern int Trl_dist_1 = 180;
extern int Trl_dist_2 = 40;
extern int Trl_dist_3 = 25;
extern string Settings_30 = "3. O R D E R O P E N C O N D I T I O N S";
extern string Settings_31 = " 3.1. FIRST ORDER - Indicators' signals";
extern bool Open_by_BB_1 = True;
extern bool Open_by_CCI_1 = False;
extern bool Open_by_MA_1 = True;
extern bool Open_by_OsMA_1 = False;
extern bool Spike_Filter_1 = False;
extern bool Volatility_Filter_1 = False;
extern bool Trend_Filter_1 = False;
extern string Settings_32 = " 3.2. SECOND ORDER - Indicators' signals";
extern bool Open_by_BB_2 = True;
extern bool Open_by_CCI_2 = True;
extern bool Open_by_MA_2 = True;
extern bool Open_by_OsMA_2 = False;
extern bool Spike_Filter_2 = False;
extern bool Volatility_Filter_2 = False;
extern bool Trend_Filter_2 = True;
extern string Settings_34 = " 3.4. Trade Restriction - Consequitive losses";
extern bool Restrict_Losses = False;
extern int Restrict_TimeLimit = 30;
extern string Settings_40 = "4. I N D I C A T O R S S E T T I N G S";
extern string Settings_41 = " 4.1. Bollinger Bands";
extern int BB_TimeFrame = PERIOD_M15;
extern int BB_Period = 13;
extern int BB_StDev = 2;
extern int BB_Shift = 1;
extern int BB_Open_Level = 15;
extern int BB_Close_Level = 10;
extern string Settings_42 = " 4.2. Commodity Channel Index";
extern int CCI_TimeFrame = PERIOD_M15;
extern int CCI_Period = 9;
extern int CCI_Applied_Price = 0;
extern int CCI_Shift = 1;
extern int CCI_Signal_Level = 90;
extern string Settings_43 = " 4.3. Moving Average";
extern int MA_TimeFrame = PERIOD_M15;
extern int MA_Period = 9;
extern int MA_Price_Method = 0;
extern int MA_Applied_Price = 4;
extern int MA_Shift = 0;
extern int MA_Signal_Level = 125;
extern string Settings_44 = " 4.4. Price Spike Identification";
extern int Bar_TimeFrame = PERIOD_M5;
extern int Bar_Shift = 2;
extern int Min_PriceRange = 75;
extern int Max_PriceRange = 175;
extern string Settings_45 = " 4.5. Moving Average of Oscillator";
extern int OsMA_TimeFrame = PERIOD_M15;
extern int OsMA_FastEMA = 7;
extern int OsMA_SlowEMA = 15;
extern int OsMA_SignalSMA = 8;
extern int OsMA_Limit = 50;
extern string Settings_46 = " 4.6. Trade Restriction by Volatility";
extern int MinVolatility = 150;
extern int MaxDailyRange = 900;
extern string Settings_50 = "5. O T H E R S E T T I N G S";
extern bool WriteLogFile = False;
extern int Max_Spread = 45;
extern int Slippage = 20;
extern string Order_Comment = "Generic v13.20";
extern int MagicNumber = 3100037;
extern string Settings_60 = "6. T R A D I N G T I M E C O N D I T I O N S";
extern string Settings_61 = " 6.1. Close deals on Friday";
extern bool Friday_Close = False;
extern int End_Trade_Hour_Friday = 23;
extern int End_Trade_Minute_Friday = 55;
extern string Settings_62 = " 6.2 Trade Time Filter";
extern int GMT_Offset = 2; //GMT Offset
extern bool DST = true; //DaylightSavingsTime
extern bool TradeAllDaysInTheSameTime = false;
input int SkipDay = 0;
extern string Settings_63 = " 6.3. Set different trading time for each day";
extern bool MONDAY_Enabled = true; //Торговать в понедельник
extern int MONDAY_Start_Trade_Hour = 22; //Start Trade Hour
extern int MONDAY_Start_Trade_Minute = 0; //Start Trade Minute
extern int MONDAY_End_Trade_Hour = 1; //End Trade Hour
extern int MONDAY_End_Trade_Minute = 0; //End Trade Minute
extern string Settings_64 = "<== TUESDAY ==>"; // TUESDAY
extern bool TUESDAY_Enabled = true; //Торговать во вторник
extern int TUESDAY_Start_Trade_Hour = 22; //Start Trade Hour
extern int TUESDAY_Start_Trade_Minute = 0; //Start Trade Minute
extern int TUESDAY_End_Trade_Hour = 1; //End Trade Hour
extern int TUESDAY_End_Trade_Minute = 0; //End Trade Minute
extern string Settings_65 = "<== WEDNESDAY ==>"; // WEDNESDAY
extern bool WEDNESDAY_Enabled = true; //Торговать в среду
extern int WEDNESDAY_Start_Trade_Hour = 22; //Start Trade Hour
extern int WEDNESDAY_Start_Trade_Minute=0; //Start Trade Minute
extern int WEDNESDAY_End_Trade_Hour = 1; //End Trade Hour
extern int WEDNESDAY_End_Trade_Minute = 0; //End Trade Minute
extern string Settings_66 = "<== THURSDAY ==>"; // THURSDAY
extern bool THURSDAY_Enabled = true; //Торговать в четверг
extern int THURSDAY_Start_Trade_Hour = 22; //Start Trade Hour
extern int THURSDAY_Start_Trade_Minute= 0; //Start Trade Minute
extern int THURSDAY_End_Trade_Hour = 1; //End Trade Hour
extern int THURSDAY_End_Trade_Minute = 0; //End Trade Minute
extern string Settings_67 = "<== FRIDAY ==>"; // FRIDAY
extern bool FRIDAY_Enabled = true; //Торговать в пятницу
extern int FRIDAY_Start_Trade_Hour = 22; //Start Trade Hour
extern int FRIDAY_Start_Trade_Minute = 0; //Start Trade Minute
extern int FRIDAY_End_Trade_Hour = 1; //End Trade Hour
extern int FRIDAY_End_Trade_Minute = 0; //End Trade Minute
static datetime BB_prevtime=0;
static datetime CCI_prevtime=0;
static datetime MA_prevtime=0;
static datetime Bar_prevtime=0;
double minlot=0.0;
double maxlot=0.01;
int stoplevel=0;
int Count_Sell,Count_Buy;
double _Take_Profit,_Stop_Loss;
double takeprofit,stoploss;
double trailstart,trailsize,trailstep;
int slippage;
int ticksize;
double lots=0;
double BB_Low,BB_Up,BB_Main;
double CCI;
int CCI_Signal=0;
double MA_1,MA_2;
int MA_Signal=0;
double Bar_Open;
int Spike_Signal=0;
double OsMA_0,OsMA_1,OsMA_2;
int OsMA_Signal=0;
int Trend;
int last_buy_ticket,last_sell_ticket;
double last_buy_profit=-1,last_sell_profit=-1;
datetime last_sell_close,last_buy_close;
int Buy_Paramets,Sell_Paramets;
string InpFileName;
string fileName="EA_Generic";
string InpDirectoryName="LOGS";
string q;
int TimeShift;
int day_of_year_trade=0;
int Start_Trade_Hour[7], End_Trade_Hour[7], Start_Trade_Minute[7], End_Trade_Minute[7];
datetime StartTime, EndTime, PrevDayStartTime, PrevDayEndTime;
string First_StartTimeStr,First_EndTimeStr,Second_StartTimeStr,Second_EndTimeStr;
datetime DayStartTimeShift;
bool Day_Trade_Enabled[7];
int _DayOfWeek;
int _DayOfWeekShift;
bool _IsTime;
datetime _TimeCurrent;
string daystring[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
/*-------------------------------------------------------------------------------------------------------------------+
| С П Е Ц И А Л Ь Н А Я Ф У Н К Ц И Я И Н И Ц И А Л И З А Ц И И |
+-------------------------------------------------------------------------------------------------------------------*/
int OnInit()
{
// код доступен только после оплаты
}
/*-------------------------------------------------------------------------------------------------------------------+
| С П Е Ц И А Л Ь Н А Я Ф У Н К Ц И Я Д Е И Н И Ц И А Л И З А Ц И И |
+-------------------------------------------------------------------------------------------------------------------*/
void OnDeinit(const int reason)
{
}
/*-------------------------------------------------------------------------------------------------------------------+
| С П Е Ц И А Л Ь Н А Я Ф У Н К Ц И Я О Б Р А Б О Т К И С О Б Ы Т И Й |
+-------------------------------------------------------------------------------------------------------------------*/
void OnTick()
{
// код доступен только после оплаты
}
/*-------------------------------------------------------------------------------------------------------------------+
| П О Л Ь З О В А Т Е Л Ь С К И Е Ф У Н К Ц И И |
+-------------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------------+
| Функции ограничения торговли |
+---------------Показано первые 50% кода (символов: 46866)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.