Советники: AIS3 Trading Robot Template

 

AIS3 Trading Robot Template:

100% готовый для внедрения торговой стратегии шаблон торгового робота

Author: Airat Safin

 
 
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. Эээххх.

Причина обращения: