← К каталогу
Исходный код · ID 154

Generic

generic v13.20.mq4

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

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 и перейдите к оплате.

Стоимость полного кода
4 686,60₽ ≈ $57.28