3.2. Пример 2 "Защита капитала":
3.2.1. технический прием "Защита капитала" показан на примере AIS2 Trading Robot: Modification AIS20004;
3.2.2. назначение - гарантированное сохранение определенной части средств на счете инвестора;
3.2.3. код Примера 2 "Защита капитала":
//< Sample 2 "Capital defence" >
//< 3.1. Risk Management Preset 2 >```````````````````````````````````````````````````````````````````````````//< 32>
//< 33>
extern double aed.AccountReserve = 0.20 ; //< 34>
extern double aed.OrderReserve = 0.04 ; //< 35>
//< 36>
//</3.1. Risk Management Preset 2 >```````````````````````````````````````````````````````````````````````````//< 37>
...
//< 4.2. System Controls 28 >`````````````````````````````````````````````````````````````````````````````````//< 64>
...
int avi.SystemFlag ; //< 66>
...
double avd.Capital ; //< 86>
double avd.PeakTime ; //< 87>
double avd.PeakEquity ; //< 88>
double avd.InitialEquity ; //< 89>
double avd.InitialCapital ; //< 90>
double avd.EquityReserve ; //< 91>
...
//</4.2. System Controls 28 >`````````````````````````````````````````````````````````````````````````````````//< 99>
...
//< 4.7. Risk Management Data 9 >`````````````````````````````````````````````````````````````````````````````//< 178>
...
double avd.VARLimit ; //< 185>
...
//</4.7. Risk Management Data 9 >`````````````````````````````````````````````````````````````````````````````//< 190>
...
//< 5. Program Initialization 21 >============================================================================//< 194>
//< 195>
int init () //< 196>
{ //< 197>
...
avd.PeakTime = TimeLocal () ; //< 204>
avd.PeakEquity = AccountEquity () ; //< 205>
avd.InitialEquity = AccountEquity () ; //< 206>
avd.InitialCapital = avd.PeakEquity * ( 1 - aed.AccountReserve ) ; //< 207>
...
} //< 246>
//</5. Program Initialization 21 >============================================================================//< 247>
...
//< 7. Main Program 266 >=====================================================================================//< 276>
//< 277>
int start () //< 278>
{ //< 279>
...
//< 7.3. Equity Control 6 >```````````````````````````````````````````````````````````````````````````````````//< 382>
//< 383>
if ( AccountEquity () - avd.PeakEquity > 0 ) //< 384>
{ avd.PeakEquity = AccountEquity () ; //< 385>
avd.PeakTime = TimeLocal () ; } //< 386>
//< 387>
avd.Capital = avd.PeakEquity * ( 1 - aed.AccountReserve ) ; //< 388>
avd.EquityReserve = AccountEquity () - avd.Capital ; //< 389>
avd.VARLimit = AccountEquity () * aed.OrderReserve ; //< 390>
//< 391>
if ( avd.EquityReserve - avd.VARLimit < 0 ) //< 392>
{ avs.SystemMessage = "System stop" ; avi.SystemFlag = 0 ; } //< 393>
//< 394>
//</7.3. Equity Control 6 >```````````````````````````````````````````````````````````````````````````````````//< 395>
...
} //< 705>
//</7. Main Program 266 >=====================================================================================//< 706>
//</Sample 2 "Capital defence" >
3.2.4. пояснения к Примеру 2 "Защита капитала":
3.2.4.1. технический прием "Защита капитала" является воплощением принципа предельной управляемости;
3.2.4.2. данный прием представляет собой один из способов управления рисками;
3.2.4.3. сущность приема заключается в запрете работы системы при исчерпании резерва депозита:
3.2.4.3.1. задан размер резерва депозита "aed.AccountReserve = 0.20" согласно п.2.3.4.2.;
3.2.4.3.2. задан размер резерва на сделку "aed.OrderReserve = 0.04";
3.2.4.3.3. величина резерва депозита в денежных единицах равна значению "avd.EquityReserve";
3.2.4.3.4. в строках 388-390 производится вычисление текущей величины резерва депозита;
3.2.4.3.5. в строке 392 проверяется достаточность резерва депозита на совершение сделки;
3.2.4.3.6. в случае малого размера резерва депозита устанавливается "avi.SystemFlag = 0";
3.2.4.3.7. значение флага "avi.SystemFlag = 0" запрещает работу системы.
3.3. Примером воплощения принципа предельного знания является индикатор AIS1 Advanced Indicator, который:
3.3.1. отображает одновременно десятки различных показателей в графическом и символьном исполнении;
3.3.2. остается при этом надежным и удобным средством принятия торговых решений и мониторинга.
AIS1 Advanced Indicator
3.4. Другим примером воплощения принципа предельного знания является панель мониторинга AIS2 Trading Robot, которая:
3.4.1. также отображает в реальном времени одновременно десятки различных показателей торгового робота;
3.4.2. позволяет более обоснованно принимать решения о ручном вмешательстве в работу торгового робота.
AIS2 Trading Robot
4. Заключение
4.1. Рассмотренная концепция является одной из множества возможных.
4.2. Рассмотренные примеры внедрения постоянно развиваются и совершенствуются.
Концепция разработки программного обеспечения серии AIS для клиентского терминала MetaTrader 4
Содержание:
1. Введение
2. Определение и основные принципы
3. Примеры исполнения
4. Заключение
1. Введение
1.1. Автоматический трейдинг является быстро развивающимся направлением финансовой деятельности.
1.2. Спектр подходов, используемых при разработке торговых систем, в настоящее время очень широк.
1.3. Данная статья раскрывает концепцию разработки следующих MQL4 программ:
1.3.1. торговые роботы серии AIS;
1.3.2. индикаторы серии AIS.
1.4. Данная статья предназначена для разработчиков автоматических торговых систем.
1.5. Под торговыми системами понимаются системы маржинальной торговли для клиентского терминала MetaTrader 4.
2. Определение и основные принципы
2.1. Концепцией разработки программных продуктов серии AIS является "Концепция предельной обоснованности".
2.2. Предельная обоснованность представляет собой высшую степень подготовки к принятию и выполнению решения.
2.3. Предпосылки Концепции предельной обоснованности, называемой далее - Концепция:
2.3.1. использована следующая модель работы автоматической торговой системы:
2.3.1.1. получение данных,
2.3.1.2. обработка данных,
2.3.1.3. принятие решения,
2.3.1.4. выполнение решения;
2.3.2. использована следующая модель предметной области, то есть маржинальной торговли:
2.3.2.1. деятельность направлена на извлечение прибыли из колебаний стоимости предметов торговли,
2.3.2.2. деятельность ведется в условиях повышенных рыночных рисков, то есть:
2.3.2.2.1. колебания стоимости в сторону повышения и в сторону понижения равновероятны,
2.3.2.2.2. колебания стоимости происходят с высокой частотой,
2.3.2.2.3. амплитуда колебаний стоимости имеет высокую скорость нарастания;
2.3.2.3. прибыль является разностью суммы доходов от сделок и суммы убытков по сделкам;
2.3.2.4. убытки по сделкам, обусловленные рыночными рисками, являются управляемыми величинами;
2.3.3. использована следующая модель рыночных рисков, далее - рисков:
2.3.3.1. под риском понимается опасность возникновения убытка вследствие колебаний стоимости,
2.3.3.2. основной оценкой риска является денежная оценка,
2.3.3.3. для оценки рисков на сделку используется следующий упрощенный порядок:
2.3.3.3.1. риск на сделку = оценка вероятности убытка х оценка размера убытка,
2.3.3.3.2. оценка вероятности убытка = количество убыточных сделок / общее количество сделок,
2.3.3.3.3. оценка размера убытка = расстояние от цены сделки до стоп-уровня х размер сделки;
2.3.4. использована следующая модель управления рисками:
2.3.4.1. депозит, то есть средства на торговом счете, разделен на две части определенных размеров:
2.3.4.1.1. капитал,
2.3.4.1.2. резерв на возможные потери, называемый также резерв депозита;
2.3.4.2. размеры капитала и резерва на возможные потери устанавливаются в долях депозита:
2.3.4.3. капитал служит залогом при совершении маржинальных сделок;
2.3.4.4. резерв на возможные потери является источником покрытия рыночных рисков;
2.3.4.5. размер резерва на возможные потери устанавливает собственник депозита, то есть инвестор;
2.3.4.6. возможные убытки покрываются за счет резерва на возможные потери, уменьшая его;
2.3.4.7. в случае исчерпания резерва на возможные потери деятельность останавливается;
2.3.4.8. доходы от сделок пополняют резерва на возможные потери;
2.3.4.9. в случае наполнения резерва на возможные потери капитал и резерв увеличиваются;
2.3.4.10. на каждую сделку выделяется определенная часть резерва на возможные потери, резерв на сделку;
2.3.4.11. размер риска по сделке ограничивается размером резерва на сделку следующим образом:
2.3.4.11.1. задается предельный размер убытка по сделке путем создания резерва на сделку,
2.3.4.11.2. устанавливается предел просадки по сделке в единицах цены,
2.3.4.11.3. вычисляется предел размера сделки для заданных пределов просадки и размера убытка,
2.3.4.11.4. для полученного предела размера сделки вычисляется наибольший допустимый размер сделки;
2.3.4.12. таким образом, надежное управление рисками защищает капитал инвестора от возможного уменьшения.
2.4. Основными принципами Концепции являются:
2.4.1. принцип предельного знания;
2.4.2. принцип предельной управляемости.
2.5. Принцип предельного знания:
2.5.1. означает принятие торговых решений на основе наибольшего количества доступных данных;
2.5.2. направлен на повышение соотношения количества прибыльных сделок к количеству убыточных;
2.5.3. заключается в наборе алгоритмов сбора и обработки рыночных данных.
2.6. Принцип предельной управляемости:
2.6.1. означает требование наивысшей надежности исполнения принятых торговых решений;
2.6.2. направлен на совершенствование способов управления торговой системой;
2.6.3. заключается в наборе алгоритмов надежного взаимодействия:
2.6.3.1. торговой системы с человеком или внешней программой;
2.6.3.2. модулей торговой системы между собой.
3. Примеры исполнения
3.1. Пример 1 "Внешнее управление":
3.1.1. технический прием "Внешнее управление" показан на примере AIS2 Trading Robot: Modification AIS20004;
3.1.2. назначение - предоставление возможности управления торговой системой человеку или внешней программе;
3.1.3. код Примера 1 "Внешнее управление":
//< Sample 1 "External control" >
//< 1. Property 7 >===========================================================================================//< 1>
//< 2>
#property copyright "Copyright (C) 2009, MetaQuotes Software Corp." //< 3>
#property link "http://www.metaquotes.net" //< 4>
//< 5>
#define A.System.Series "AIS" //< 6>
#define A.System.Modification "20004" //< 7>
#define A.System.ReleaseDate "2009.03.22" //< 8>
#define A.System.Program "Trading Robot" //< 9>
#define A.System.Programmer "Airat Safin https://www.mql5.com/en/users/Ais" //< 10>
//< 11>
//</1. Property 7 >===========================================================================================//< 12>
...
//< 4.2. System Controls 28 >`````````````````````````````````````````````````````````````````````````````````//< 64>
...
int avi.SystemFlag ; //< 66>
int avi.TradingFlag ; //< 67>
int avi.MonitorFlag ; //< 68>
int avi.LiveModeFlag ; //< 69>
...
//</4.2. System Controls 28 >`````````````````````````````````````````````````````````````````````````````````//< 99>
...
//< 4.3.3. Trading Preset Setup 6 > //< 113>
string avs.SetupTrading ; //< 114>
...
//</4.3.3. Trading Preset Setup 6 > //< 120>
...
//< 5. Program Initialization 21 >============================================================================//< 194>
//< 195>
int init () //< 196>
{ //< 197>
...
afr.CreateSetup () ; //< 237>
...
} //< 246>
//</5. Program Initialization 21 >============================================================================//< 247>
...
//< A.System.Extra: Function 02 >`````````````````````````````````````````````````````````````````````````````//< 807>
int afr.CreateSetup () // 29 //< 808>
{ //< 809>
avs.SetupPrefix = A.System.Series + A.System.Modification + ".Setup." ; //< 810>
...
avs.SetupTrading = avs.SetupPrefix + "2.1." + "Trading" ; //< 815>
...
} //< 845>
//</A.System.Extra: Function 02 >`````````````````````````````````````````````````````````````````````````````//< 846>
...
//< 7. Main Program 266 >=====================================================================================//< 276>
//< 277>
int start () //< 278>
{ //< 279>
...
//< 7.1.3. All Modes Subroutine 8 > //< 313>
if ( GlobalVariableGet ( avs.SetupTrading ) == 1 ) //< 314>
{ avi.SystemFlag = 1 ; //< 315>
avi.TradingFlag = 1 ; //< 316>
avs.SystemMessage = "Trading is enabled" ; } //< 317>
else //< 318>
{ avi.SystemFlag = 0 ; //< 319>
avi.TradingFlag = 0 ; //< 320>
avs.SystemMessage = "Trading is disabled" ; } //< 321>
//</7.1.3. All Modes Subroutine 8 > //< 322>
...
} //< 705>
//</7. Main Program 266 >=====================================================================================//< 706>
//</Sample 1 "External control" >
3.1.4. пояснения к Примеру 1 "Внешнее управление":
3.1.4.1. технический прием "Внешнее управление" является воплощением принципа предельной управляемости;
3.1.4.2. сущность приема заключается в передаче управления через глобальные переменные терминала:
3.1.4.2.1. переменная "avi.TradingFlag" разрешает/запрещает работу торгового модуля,
3.1.4.2.2. переменная "avs.SetupTrading" является именем глобальной переменной,
3.1.4.2.3. в строках 316 и 320 устанавливается соответствующее ей значение "avi.TradingFlag",
3.1.4.2.4. глобальная переменная доступна как человеку, так и внешней программе,
3.1.4.2.5. следовательно, переменная "avs.SetupTrading" является интерфейсом управления системы;
3.1.5. демонстрация Примера 1 "Внешнее управление":
3.1.5.1. создайте файл "ACONTROL.MQ4" с нижеприведенным содержимым;
3.1.5.1. поместите файл "ACONTROL.MQ4" в папку ".../experts/indicators";
3.1.5.2. произведите компиляцию;
3.1.5.3. найдите полученную программу в списке "Пользовательские Индикаторы";
3.1.5.4. наложите ее на график с AIS2 Trading Robot: Modification AIS20004;
3.1.5.5. начнется изменение по определенному алгоритму следующих параметров торгового робота:
3.1.5.5.1. размер лимита резерва на сделку "Order Limit",
3.1.5.5.2. трейлинг-фактор "Preset Trail";
3.1.5.6. код внешней программы "ACONTROL.MQ4":
//< Content of ACONTROL.MQ4 >
#property indicator_chart_window //< 1>
//< 2>
#define acs.Control.TradingFlag "AIS20003.Setup.2.1.Trading" //< 3>
#define acs.Control.Parameter.1 "AIS20003.Setup.1.1.OrderReserve" //< 4>
#define acs.Control.Parameter.2 "AIS20003.Setup.2.6.TrailFactor" //< 5>
//< 6>
int start () //< 7>
{ //< 8>
double ald.Control.Parameter.1 = GlobalVariableGet ( acs.Control.Parameter.1 ) ; //< 9>
double ald.Control.Parameter.2 = GlobalVariableGet ( acs.Control.Parameter.2 ) ; //< 10>
//< 11>
static int ali.ControlFlag ; //< 12>
//< 13>
if ( ( High [ 1 ] - Low [ 1 ] ) - ( High [ 2 ] - Low [ 2 ] ) > 0 ) //< 14>
ali.ControlFlag = 1 ; //< 15>
else ali.ControlFlag = 0 ; //< 16>
//< 17>
if ( ali.ControlFlag > 0 ) //< 18>
{ //< 19>
ald.Control.Parameter.1 = ald.Control.Parameter.1 * 1.001 ; //< 20>
ald.Control.Parameter.2 = ald.Control.Parameter.2 * 0.99 ; //< 21>
} //< 22>
else //< 23>
{ //< 24>
ald.Control.Parameter.1 = ald.Control.Parameter.1 * 0.99 ; //< 25>
ald.Control.Parameter.2 = ald.Control.Parameter.2 * 1.001 ; //< 26>
} //< 27>
//< 28>
GlobalVariableSet ( acs.Control.TradingFlag , 0 ) ; //< 29>
GlobalVariableSet ( acs.Control.Parameter.1 , ald.Control.Parameter.1 ) ; //< 30>
GlobalVariableSet ( acs.Control.Parameter.2 , ald.Control.Parameter.2 ) ; //< 31>
} //< 32>
//</Content of ACONTROL.MQ4 >
Профессиональный подход. Респект и уважение.
У меня почему-то не торгует.
Все правильно, потому что это только заготовка.
Т.е. для внедрения торговой стратегии нужно по любому знать MQL. А так чтобы взять и к примеру скопировать код индикатора или индикаторов внутрь кода AIS3 и научить его входить и выходить по заданным сигналам - не получится. Я правильно понял?
Получится.
Вообще супер!!! Правда все равно для того чтобы знать куда копировать код индикатора - нужно хоть чуточку разбираться в MQL4. Эээххх.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
AIS3 Trading Robot Template:
Author: Airat Safin