Пример настройки A System: Championship 2008 Final Edit для торгового символа "GOLD" Содержание Часть 1. Общие сведения Глава 1. Спецификация условий настройки Глава 2. Структура кода Глава 3. Торговая стратегия Глава 4. Подготовка к настройке Глава 5. Обзор исторических данных Глава 6. Общий порядок настройки системы Глава 7. Общие правила настройки системы Глава 8. Частные правила настройки системы Часть 2. Настройка первого торгового потока Глава 9. Первый шаг настройки: установка начальных значений входных параметров Глава 10. Второй шаг настройки: подбор пар значений "avd.InputParameter.1" и "avd.InputParameter.2" Глава 11. Третий шаг настройки: подбор пар значений "avd.avd.InputFallLimit" и "avd.InputFallFactor" Глава 12. Четвертый шаг настройки: подбор пар значений "avd.InputLockSize" и "avd.InputLockFactor" Глава 13. Пятый шаг настройки: подбор значения "avd.InputTimeFactor.1" Глава 14. Шестой шаг настройки: подбор значения "avd.InputTimeFactor.2" Глава 15. Седьмой шаг настройки: подбор значения "avd.InputRiskLimit" Глава 16. Восьмой шаг настройки: окончательный выбор потока настроек Глава 17. Девятый шаг настройки: сохранение потока настроек Часть 3. Продолжение настройки Глава 18. Настройка второго торгового потока Глава 19. Настройка третьего торгового потока Глава 20. Настройка четвертого торгового потока Часть 4. Завершение настройки Глава 21. Завершение режима оптимизации системы Глава 22. Настройка уровня риска Глава 23. Изменения кода, вызванные настройкой Часть 1. Общие сведения Глава 1. Спецификация условий настройки 1.1. Общие сведения о данном примере: 1.1.1. использованы исторические данные сервера MetaQuotes Software Corporation; 1.1.2. использован демо-счет сервера MetaQuotes Software Corporation со следующими параметрами: 1.1.2.1. "Account Currency = USD", 1.1.2.2. "Account Leverage = 100"; 1.1.3. настройка проведена на периоде с 01.01.2008 до 28.12.2008; 1.1.4. настройка проведена при отключенной Сети. 1.2. Спецификация контрактов для торгового символа "GOLD", действовавшая при настройке: 1.2.1. "Spread = 100", 1.2.2. "Digits = 2", 1.2.3. "Stops Level = 400", 1.2.4. "Contract size = 250", 1.2.5. "Margin hedge = 400", 1.2.6. "Margin calculation mode = CFD", 1.2.7. "Profit calculation mode = CFD", 1.2.8. "Swap long = -3.5%", 1.2.9. "Swap short = +1.5%", 1.2.10. "Lot step = 0.1", 1.2.11. "Minimum lot size = 0.1", 1.2.12. "Maximum lot size = 100000". Глава 2. Структура кода 2.1. Код имеет страничную структуру. 2.2. Структура кода приспособлена для окна MetaEditor размером 45 строк по 122 знака. 2.3. Для просмотра кода используются клавиши и . 2.4. Ярлыки //< ... > и // при просмотре должны сохранять свое положение на экране. 2.5. Таким образом, данный код состоит из 36 страниц, каждая из которых является единым целым. 2.6. Программа построена объектным способом. 2.7. Имеется только один объект - "A.System". 2.8. Объект "A.System" имеет: 2.8.1. внешний интерфейс, состоящий из 2 методов; 2.8.2. внутренний интерфейс, состоящий из 24 методов. 2.9. Свойства объекта "A.System" хранятся в субструктуре "A.Memory". 2.10. Общая структура объекта "A.System" приведена на странице 2 "//< A System: Structure >". 2.11. Вся программа полностью содержится на странице 1. 2.12. Строки "#define" содержат опознавательные сведения. 2.13. Строка "int init () { Alert ( "A System: Reloaded" ) ; }" сообщает о запуске программы. 2.14. Строка "int start () ..." содержит два интерфейсных вызова объекта "A.System": 2.14.1. "aib.System.IsOK ()" сообщает об итоге проверок, см. стр. "//< A System: Interface 1 >"; 2.14.2. "air.System.Run ()" выполняет вызовы внутренних функций, см. стр. "//< A System: Interface 2 >". 2.15. Таким образом, программа работает в обычном режиме: 2.15.1. без задержек завершает инициализацию; 2.15.2. в дальнейшем работает в режиме ожидания: 2.15.2.1. запускается на новом тика; 2.15.2.2. последовательно выполняет действия и завершается; 2.15.2.3. ожидает приход нового тика. Глава 3. Торговая стратегия 3.1. Основа торговой стратегии - функции "afr.System.ComputeStrategy ()" и "afi.System.SignalToOpen ()". 3.2. В расчет принимается только последний сформированный фрейм данных, также называемый "бар" или "свеча", с номером "1". 3.3. При текущих настройках размерность рабочего фрейма данных, он же таймфрейм, равен 1440. 3.4. Возможность менять рабочий таймфрейм после запуска программы отсутствует. 3.5. Основное правило для покупки: цена закрытия бара номер "1" больше его средней цены и текущая цена покупки выше наибольшей цены бара номер "1". 3.6. Основное правило для продажи: цена закрытия бара номер "1" меньше его средней цены и текущая цена продажи ниже наименьшей цены бара номер "1". 3.7. Цель - на расстоянии высоты бара номер "1", умноженной на "avd.TakeFactor", равный 0.8 в текущих настройках. 3.8. Стоп - наименьшая цена бара номер "1" при покупке и наибольшая цена бара номер "1" при продаже. 3.9. После совершения торговой операции применяются следующие способы управления открытой позицией: 3.9.1. трейлинг-стоп переменного размера, методы "afr.System.AttemptToTrail" и "afd.System.TrailAdjustment"; 3.9.2. принудительное закрытие позиции, методы "afr.System.AttemptToClose" и "afi.System.SignalToClose"; 3.9.3. частичное "локирование", методы "afr.System.LockPosition" и "afr.System.AttemptToLock". 3.10. Значения параметров торговой стратегии настраиваются с помощью тестера стратегий. Глава 4. Подготовка к настройке 4.1. Загружаем через меню "Tools/History Center" данные для "GOLD". 4.2. Открываем файл с кодом A System: Championship 2008 Final Edit. 4.3. На странице "//< A System: Parameters 1 >": 4.3.1. в массиве "ac.Symbol []" вводим название четвертого элемента: "GOLD"; 4.3.2. в массиве "ac.RiskFactor []" задаем значение четвертого элемента: "1.0"; 4.3.3. в массиве "ac.Parameter []" в первом столбце значений заменяем "1" на "0", для того чтобы запретить соответствующие торговые потоки; 4.3.4. в массиве "ac.Parameter []" заменяем заголовок четвертой части "// Reserved" на "// GOLD"; 4.3.5. устанавливаем значение переменной "avd.SystemStop = 0.0". 4.4. В зависимости от значения переменной "avb.IsOptimizing" в методе "afr.System.Reset" производится выбор набора параметров настроек - "//< A System: Parameters 1 >" или "//< A System: Parameters 2 >". 4.5. Устанавливаем значение "avb.IsOptimizing = 1 " для выбора "//< A System: Parameters 2 >". 4.6. Переходим на страницу "//< A System: Parameters 2 >". 4.7. Компилируем код с начальными значениями входных параметров, одинаковыми для всех торговых символов и потоков. 4.8. Переходим к вкладке "Settings" тестера стратегий и устанавливаем: 4.8.1. "Expert Advisor" - имя компилированного файла; 4.8.2. "Symbol" - "GOLD"; 4.8.3. "Mode" - "Every tick"; 4.8.4. "Use date" - "From: 2008.01.01 To: 2008.12.28" ; 4.8.5. "Period" - "any". 4.8.6. "Optimization" - "Off". 4.9. В окне "Expert Properties" на вкладке "Testing" устанавливаем: 4.9.1. "Initial deposit = 1000000 USD", 4.9.2. "Position = Long & Short". 4.10. Производим пробный запуск теста. 4.11. Переходим к вкладке "Results" тестера стратегий. 4.12. Проверяем, что все сделки: 4.12.1. имеют размеры существенно больше наименьшего разрешенного размера, 4.12.2. имеют размеры существенно меньше наибольшего разрешенного размера, 4.12.3. имеют залоговые требования существенно меньше размера депозита. 4.13. Переходим к вкладке "Report" тестера стратегий. 4.14. Проверяем значения итоговых показателей теста для начальных значений входных параметров: 4.14.1. "Total net profit = 324253.62", 4.14.2. "Relative return = 32.43%", 4.14.3. "Relative drawdown = 11.17%", 4.14.4. "Return on drawdown = 32.43%/11.17%=2.90", 4.14.5. "Profit factor = 1.41", 4.14.6. "Loss trades = 61", 4.14.7. "Total trades = 126". 4.15. Синтетический показатель "Return on drawdown = Relative return / Relative drawdown" является оценкой доходности торговой системы по отношению к риску. 4.16. Итоговые показатели теста в сокращенном виде: "Output:32.43%/11.17%=2.90/1.41/61/126". 4.17. Выводы: 4.17.1. исторические данные загружены успешно; 4.17.2. предварительная подготовка проведена успешно; 4.17.3. система к настройке готова. Глава 5. Обзор исторических данных 5.1. Выделяем на временном промежутке 01.01.2008 до 28.12.2008 области длительностью более 10% от общей длительности: 5.1.1. область "А", 2.5 месяца с 01.01.2008 до 18.03.2008 с доходностью +70% годовых и колебаниями +- 5%; 5.1.2. область "B", 4 месяца с 18.03.2008 до 15.07.2008 с доходностью 0% годовых и колебаниями +- 9%; 5.1.3. область "C", 2 месяца с 15.07.2008 до 17.09.2008 с доходностью -120% годовых и колебаниями +- 7%; 5.1.4. область "D", 3.5 месяца с 17.09.2008 до 28.12.2008 с доходностью 0% годовых и колебаниями +-15%. 5.2. Выводы; 5.2.1. период настройки с 01.01.2008 до 28.12.2008 содержит основные виды состояний рынка достаточной длительности; 5.2.2. выбранный период настройки соответствует целям своего использования. Глава 6. Общий порядок настройки 6.1. Открываем файл с кодом A System: Championship 2008 Final Edit. 6.2. Для лучшего понимания назначения входных параметров изучаем функции: 6.2.1. "afr.System.Reset", 6.2.2. "afr.System.LoadOptimization", 6.2.3. "afr.System.SelectParameters". 6.3. Переходим на страницу "//< A System: Parameters 2 >". 6.4. Настройка будет проведена для четырех пар значений переменных "avi.InputIndex.1" и "avi.InputIndex.2", каждая из которых составит основу одного из четырех возможных торговых потоков: 6.4.1. "avi.InputIndex.1 = 7 ;" и "avi.InputIndex.2 = 7 ;"; 6.4.2. "avi.InputIndex.1 = 7 ;" и "avi.InputIndex.2 = 6 ;"; 6.4.3. "avi.InputIndex.1 = 6 ;" и "avi.InputIndex.2 = 7 ;"; 6.4.4. "avi.InputIndex.1 = 6 ;" и "avi.InputIndex.2 = 6 ;". 6.5. Переменная "avi.InputIndex.1" определяет индекс основного таймфрейма в массиве "ac.Timeframe []". 6.6. Основной таймфрейм служит для расчетов начальных значений "тейк-профит" и "стоп-лосс". 6.7. Переменная "avi.InputIndex.2" определяет индекс вспомогательного таймфрейма в массиве "ac.Timeframe []". 6.8. Вспомогательный таймфрейм служит для расчетов "трейлинг-стоп". 6.9. Таймфреймы с индексами менее 6 требуют дополнительных исследований устойчивости данной торговой стратегии и из дальнейшего рассмотрения исключены. 6.10. Таймфреймы с индексами более 7 требуют дополнительных исследований доходности данной торговой стратегии и из дальнейшего рассмотрения также исключены. 6.11. Оставшиеся 9 входных параметров настраиваются путем поочередного их объявления внешними "extern" и подбора наилучшего набора итоговых показателей с использованием режима оптимизации тестера стратегий. 6.12. Переменные "avd.InputParameter.1" и "avd.InputParameter.2" настраиваются одновременно; данные переменные определяют значения множителей "avd.TakeFactor" и "avd.TrailFactor" в методе "afr.System.ComputeFactors" для расчета начальных значений цели и трейлинг-стопа соответственно. 6.13. Переменные "avd.InputFallLimit" и "avd.InputFallFactor" настраиваются одновременно; данные переменные определяют значения множителей "avd.FallLimit" и "avd.FallFactor" в методе "afi.System.SignalToClose" для принудительного закрытия ордеров. 6.14. Переменные "avd.InputLockSize" и "avd.InputLockFactor" настраиваются одновременно; данные переменные определяют значения множителей "avd.LockSize" и "avd.LockFactor" в методе "afr.System.AttemptToLock" для открытия встречных ордеров. 6.15. Переменная "avd.InputTimeFactor.1" настраивается отдельно; она в методе "afd.System.TrailAdjustment" сокращает размер трейлинг-стопа с течением времени. 6.16. Переменная "avd.InputTimeFactor.2" настраивается отдельно; она в методе "afd.System.RiskAdjustment" служит для изменения лимита рисков на сделку в соответствии с текущими показателями данного торгового потока; при этом текущие показатели "Loss trades" и "Total trades" сравниваются со значениями этих же показателей, полученными при настройке данного торгоаого потока, и хранящимися во вспомогательных переменных "avi.InputLE" и "avi.InputTE" соответственно. 6.17. Переменная "avd.InputRiskLimit" настраивается отдельно; она определяет лимит рисков на сделку и используется в методе "afr.System.ComputeOrderSize". Глава 7. Общие правила настройки 7.1. Показатель "Return on drawdown" является основной оценкой доходности торговой системы. 7.2. Показатель "Profit factor" является основной оценкой надежности торговой системы. 7.3. Показатель "Total trades" определяет достоверность оценок торговой системы. 7.4. Приемлемый уровень достоверности оценок торговой системы достигается при количестве сделок за период тестирования порядка 100 и более. 7.5. Количество убыточных сделок должно быть в пределах 1/2 от общего количества сделок. 7.6. Приемлемый уровень показателя "Profit factor" начинается от значений порядка 2.00 и более. 7.7. При одинаковых значениях итоговых показателей предпочтения имеют средние значения входных переменных, лежащие между крайними значениями, имеющими одинаковые итоговые показатели. 7.8. При сопоставимых итоговых показателях предпочтения имеют настройки с наиболее равномерным ростом графика баланса на всех 4 основных областях периода тестирования; изучение графиков баланса удобно проводить в сравнении с основным "Daily" графиком торгового символа. 7.9. Погрешность оценок в пределах 10-20% является приемлемой. Глава 8. Частные правила настройки 8.1. Переменные "avd.InputIndex.1" и "avd.InputIndex.2" определяют основные свойства торговой стратегии. 8.2. Переменные "avd.InputParameter.1" и "avd.InputParameter.2" являются основными параметрами настройки. 8.3. Для значения переменной "avd.InputIndex.1 = 7", то есть при использовании дневных таймфреймов для установки целей, наиболее устойчивое поведение торговой стратегии вне периода настройки задают значения переменной "avd.InputParameter.1", близкие к "1.0". Часть 2. Настройка первого торгового потока Глава 9. Первый шаг настройки: установка начальных значений входных параметров 9.1. Устанавливаем значения переменных, определяющих торговый поток: 9.1.1. "int avi.InputIndex.1 = 7 ;", 9.1.2. "int avi.InputIndex.2 = 7 ;". 9.2. Далее устанавливаем начальные значения основных переменных: 9.2.1. "double avd.InputParameter.1 = 1.0 ;", 9.2.2. "double avd.InputParameter.2 = 1.0 ;", 9.2.3. "double avd.InputFallLimit = 0.00 ;", 9.2.4. "double avd.InputFallFactor = 0.00 ;", 9.2.5. "double avd.InputLockSize = 0.00 ;", 9.2.6. "double avd.InputLockFactor = 0.00 ;", 9.2.7. "double avd.InputTimeFactor.1 = 0.00 ;", 9.2.8. "double avd.InputTimeFactor.2 = 0.00 ;", 9.2.9. "double avd.InputRiskLimit = 0.025 ;", 9.3. Далее устанавливаем начальные значения дополнительных переменных: 9.3.1. "int avi.InputLE = 1 ;", 9.3.2. "int avi.InputTE = 1 ;". 9.3. Сокращенная запись набора входных параметров "Input:7/7/1.0/1.0/0.00/0.00/0.00/0.00/0.00/0.00/0.025/1/1". 9.4. В промежуточных записях начальные значения будут отсутствовать, например "Input:7/7/1.8/0.5". 9.5. Далее каждый набор значений входных параметров будет также называться потоком настроек. 9.6. Первый шаг настройки - установка начальных значений входных параметров - завершен. Глава 10. Второй шаг настройки: подбор пар значений "avd.InputParameter.1" и "avd.InputParameter.2" 10.1. Объявляем переменные "avd.InputParameter.1" и "avd.InputParameter.2" внешними: 10.1.1. "extern double avd.InputParameter.1 = 1.0 ;"; 10.1.2. "extern double avd.InputParameter.2 = 1.0 ;". 10.2. Компилируем код. 10.3. Переходим к вкладке "Settings" тестера стратегий и устанавливаем "Optimization" - "On". 10.4. В окне "Expert Properties" устанавливаем: 10.4.1. на вкладке "Testing": 10.4.1.1. "Optimized parameter = Balance", 10.4.1.2. "Genetic algorithm = Off"; 10.4.2. на вкладке "Inputs": 10.4.2.1. "avd.InputParameter.1" - "Variable = On", "Value = 0", "Start = 0", "Step = 1", "Stop = 20"; 10.4.2.2. "avd.InputParameter.2" - "Variable = On", "Value = 0", "Start = 0", "Step = 1", "Stop = 20"; 10.4.3. на вкладке "Optimization" снимаем все галочки. 10.5. Запускаем оптимизацию. 10.6. После завершения вычиcлений переходим на вкладки "Optimization Results" и "Optimization Graph" в режиме "2D Surface". 10.7. Изучаем итоги и находим область группировки наилучших показателей согласно правилам настройки: "avd.InputParameter.1" от 1 до 20 и "avd.InputParameter.2" от 0 до 3. 10.8. Сокращаем область поиска и уменьшаем шаг перебора значений переменных, устанавливая на вкладке "Inputs": 10.8.1. "avd.InputParameter.1" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.2", "Stop = 10"; 10.8.2. "avd.InputParameter.2" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.2", "Stop = 4"; 10.9. Запускаем оптимизацию, после завершения вычиcлений изучаем итоги, и для дальнейшего подробного исследования окончательно выделяем следующую область значений переменных "avd.InputParameter.1" и "avd.InputParameter.2": 10.9.1. "avd.InputParameter.1" от 0.6 до 8.0; 10.9.2. "avd.InputParameter.2" от 0.6 до 2.4. 10.10. Для подробного исследования данной области: 10.10.1. на вкладке тестера стратегий "Expert Properties/Inputs" устанавливаем для "avd.InputParameter.1" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.1", "Stop = 10.0"; 10.10.2. снимаем объявление "extern" для переменной "avd.InputParameter.2"; 10.10.3. последовательно вручную присваиваем для переменной "avd.InputParameter.2" все возможные значения от 0.5 до 2.5 с шагом 0.1, всего 21 шаг; 10.10.4. для каждого шага значения переменной "avd.InputParameter.2": 10.10.4.1. компилируем код, 10.10.4.2. на вкладке "Settings" тестера стратегий устанавливаем "Optimization" - "On", 10.10.4.3. запускаем оптимизацию, 10.10.4.4. по окончании оптимизации выбираем значение "avd.InputParameter.1" с наилучшим набором показателей "ROD/PF/-/TT", 10.10.4.5. проверяем, что для ближайших соседних значений "avd.InputParameter.1" однозначно слабые наборы итоговых показателей "ROD/PF//TT" отсутствуют, иначе выбираем другое значение "avd.InputParameter.1", 10.10.4.6. для выбранного значения на вкладке "Optimization Results" запускаем команду "Set Input Parameters", 10.10.4.7. запускаем тестер стратегий, 10.10.4.8. на вкладке "Report" тестера стратегий находим полный итоговый набор показателей "ROD/PF/LT/TT", 10.10.4.9. на вкладке "Graph" тестера стратегий изучаем график баланса; 10.10.5. получаем следующий ряд потоков настроек, соответствующих отобранным парам значений "avd.InputParameter.1" и "avd.InputParameter.2": 10.10.5.1. "Input:7/7/1.8/0.5//Output:27.51%/12.67%=2.17/1.27/128/212", 10.10.5.2. "Input:7/7/3.0/0.6//Output:42.03%/12.04%=3.49/1.43/ 99/165", 10.10.5.3. "Input:7/7/4.0/0.7//Output:25.47%/12.06%=2.11/1.30/ 85/142", 10.10.5.4. "Input:7/7/4.2/0.8//Output:54.77%/ 9.57%=5.72/1.67/ 61/113", 10.10.5.5. "Input:7/7/3.6/0.9//Output:70.14%/ 9.40%=7.46/1.99/ 51/ 99", 10.10.5.6. "Input:7/7/3.4/1.0//Output:64.43%/10.23%=6.30/1.95/ 46/ 92", 10.10.5.7. "Input:7/7/3.4/1.1//Output:57.22%/ 9.12%=6.27/1.96/ 39/ 84", 10.10.5.8. "Input:7/7/3.4/1.2//Output:70.29%/ 8.95%=7.85/2.44/ 35/ 74", 10.10.5.9. "Input:7/7/3.4/1.3//Output:62.40%/ 9.54%=6.54/2.31/ 35/ 69", 10.10.5.10. "Input:7/7/1.7/1.4//Output:56.37%/ 8.93%=6.31/1.96/ 39/ 78", 10.10.5.11. "Input:7/7/1.1/1.5//Output:42.45%/ 9.54%=4.45/1.68/ 43/ 90", 10.10.5.12. "Input:7/7/1.5/1.6//Output:49.79%/ 9.46%=5.26/1.77/ 36/ 78", 10.10.5.13. "Input:7/7/1.4/1.7//Output:41.40%/ 9.30%=4.45/1.69/ 38/ 76", 10.10.5.14. "Input:7/7/1.4/1.8//Output:42.83%/ 8.73%=4.91/1.76/ 33/ 70", 10.10.5.15. "Input:7/7/1.4/1.9//Output:27.22%/12.81%=2.12/1.45/ 34/ 69", 10.10.5.16. "Input:7/7/4.5/2.0//Output:43.15%/11.93%=3.62/1.87/ 27/ 46", 10.10.5.17. "Input:7/7/2.2/2.1//Output:26.27%/13.28%=1.98/1.57/ 25/ 47", 10.10.5.18. "Input:7/7/3.6/2.2//Output:28.35%/15.80%=1.79/1.66/ 24/ 41", 10.10.5.19. "Input:7/7/3.8/2.3//Output:31.11%/14.14%=2.20/1.63/ 24/ 42", 10.10.5.20. "Input:7/7/3.6/2.4//Output:22.49%/15.04%=1.50/1.43/ 25/ 43", 10.10.5.21. "Input:7/7/1.3/2.5//Output:23.81%/ 8.45%=2.82/1.42/ 37/ 60", 10.11. В соответствии с правилами настройки отбираем следующие потоки настроек: 10.11.1. "Input:7/7/3.6/0.9//Output:70.14%/ 9.40%=7.46/1.99/ 51/ 99", 10.11.2. "Input:7/7/3.4/1.2//Output:70.29%/ 8.95%=7.85/2.44/ 35/ 74". 10.12. Удаляем все "extern" объявления переменных. 10.13. Второй шаг настройки - подбор пар значений "avd.InputParameter.1" и "avd.InputParameter.2" - завершен. Глава 11. Третий шаг настройки: подбор пар значений "avd.InputFallLimit" и "avd.InputFallFactor" 11.1. Объявляем переменные "avd.InputFallLimit" и "avd.InputFallFactor" внешними: 11.1.1. "extern double avd.InputFallLimit = 0.0 ;"; 11.1.2. "extern double avd.InputFallFactor = 0.0 ;". 11.2. Компилируем код. 11.3. Переходим к вкладке "Settings" тестера стратегий и устанавливаем "Optimization" - "On". 11.4. В окне "Expert Properties" устанавливаем: 11.4.1. на вкладке "Inputs": 11.4.1.1. "avd.InputFallLimit" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.05", "Stop = 1"; 11.4.1.2. "avd.InputFallFactor" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.05", "Stop = 1". 11.5. Для каждого потока п.10.11: 11.5.1. устанавливаем соответствующие значения переменных "avd.InputParameter.1" и "avd.InputParameter.2"; 11.5.2. компилируем код; 11.5.3. запускаем оптимизацию; 11.5.4. после завершения вычиcлений переходим на вкладки "Optimization Results" и "Optimization Graph"; 11.5.5. изучаем результаты и в соответствии с правилами настройки предварительно отбираем пары значений переменных "avd.InputFallLimit" и "avd.InputFallFactor"; 11.5.6. для каждой предварительно выбранной пары: 11.5.6.1. на вкладке Optimization Results" запускаем команду "Set Input Parameters", 11.5.6.2. запускаем тестер стратегий, 11.5.6.3. на вкладке "Report" тестера стратегий находим полный итоговый набор показателей "ROD/PF/LT/TT", 11.5.6.4. на вкладке "Graph" тестера стратегий изучаем график баланса. 11.6. В соответствии с правилами настройки отбираем следующие потоки настроек: 11.6.1. "Input:7/7/3.6/0.9/0.45/0.20//Output:73.04%/ 9.39%= 7.78/2.02/ 51/ 99", 11.6.2. "Input:7/7/3.6/0.9/0.50/0.10//Output:68.17%/ 8.53%= 7.99/1.73/ 59/122", 11.6.3. "Input:7/7/3.4/1.2/0.50/0.15//Output:83.35%/ 8.17%=10.20/2.40/ 37/ 84", 11.6.4. "Input:7/7/3.4/1.2/0.35/0.15//Output:81.41%/ 8.95%= 9.10/2.61/ 35/ 75". 11.7. Удаляем все "extern" объявления переменных. 11.8. Третий шаг настройки - подбор пар значений "avd.InputFallLimit" и "avd.InputFallFactor" - завершен. Глава 12. Четвертый шаг настройки: подбор пар значений "avd.InputLockSize" и "avd.InputLockFactor" 12.1. Объявляем переменные "avd.InputLockSize" и "avd.InputLockFactor" внешними: 12.1.1. "extern double avd.InputLockSize = 0.0 ;"; 12.1.2. "extern double avd.InputLockFactor = 0.0 ;". 12.2. Компилируем код. 12.3. Переходим к вкладке "Settings" тестера стратегий и устанавливаем "Optimization" - "On". 12.4. В окне "Expert Properties" устанавливаем: 12.4.1. на вкладке "Inputs": 12.4.1.1. "avd.InputLockSize" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.05", "Stop = 1"; 12.4.1.2. "avd.InputLockFactor" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.05", "Stop = 1". 12.5. Для каждого потока п.11.6: 12.5.1. устанавливаем соответствующие значения входных переменных; 12.5.2. компилируем код; 12.5.3. запускаем оптимизацию; 12.5.4. после завершения вычиcлений переходим на вкладки "Optimization Results" и "Optimization Graph"; 12.5.5. изучаем результаты и в соответствии с правилами настройки предварительно отбираем пары значений переменных "avd.InputLockSize" и "avd.InputLockFactor"; 12.5.6. для каждой предварительно выбранной пары: 12.5.6.1. на вкладке Optimization Results" запускаем команду "Set Input Parameters", 12.5.6.2. запускаем тестер стратегий, 12.5.6.3. на вкладке "Report" тестера стратегий находим полный итоговый набор показателей "ROD/PF/LT/TT", 12.5.6.4. на вкладке "Graph" тестера стратегий изучаем график баланса. 12.6. В соответствии с правилами настройки отбираем следующие потоки настроек: 12.6.1. "Input:7/7/3.6/0.9/0.45/0.20/0.35/0.35//Output:72.56%/ 9.23%= 7.86/2.00/ 56/118", 12.6.2. "Input:7/7/3.6/0.9/0.50/0.10/1.00/0.90//Output:68.82%/ 8.19%= 8.40/1.76/ 59/119", 12.6.3. "Input:7/7/3.4/1.2/0.50/0.15/1.00/0.90//Output:83.47%/ 8.17%=10.22/2.41/ 37/ 86", 12.6.4. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90//Output:81.96%/ 8.95%= 9.16/2.62/ 35/ 76". 12.7. Удаляем все "extern" объявления переменных. 12.8. Четвертый шаг настройки - подбор пар значений "avd.InputLockSize" и "avd.InputLockFactor" - завершен. Глава 13. Пятый шаг настройки: подбор значения "avd.InputTimeFactor.1" 13.1. Объявляем переменную "avd.InputTimeFactor.1" внешней: "extern double avd.InputTimeFactor.1 = 0.0 ;". 13.2. Компилируем код. 13.3. Переходим к вкладке "Settings" тестера стратегий и устанавливаем "Optimization" - "On". 13.4. В окне "Expert Properties" устанавливаем на вкладке "Inputs": 13.4.1. "avd.InputTimeFactor.1" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.1", "Stop = 20". 13.5. Для каждого потока п.12.6: 13.5.1. устанавливаем соответствующие значения входных переменных; 13.5.2. компилируем код; 13.5.3. запускаем оптимизацию; 13.5.4. после завершения вычиcлений переходим на вкладки "Optimization Results" и "Optimization Graph"; 13.5.5. изучаем результаты и в соответствии с правилами настройки предварительно отбираем значения переменной "avd.InputTimeFactor.1"; 13.5.6. для каждого предварительно выбранного значения: 13.5.6.1. на вкладке Optimization Results" запускаем команду "Set Input Parameters", 13.5.6.2. запускаем тестер стратегий, 13.5.6.3. на вкладке "Report" тестера стратегий находим полный итоговый набор показателей "ROD/PF/LT/TT", 13.5.6.4. на вкладке "Graph" тестера стратегий изучаем график баланса. 13.6. В соответствии с правилами настройки отбираем следующие потоки настроек: 13.6.1. "Input:7/7/3.6/0.9/0.45/0.20/0.35/0.35/ 4.6//Output:70.87%/ 7.00%=10.12/1.85/ 72/138", 13.6.2. "Input:7/7/3.6/0.9/0.50/0.10/1.00/0.90/ 0.0//Output:68.82%/ 8.19%= 8.40/1.76/ 59/119", 13.6.3. "Input:7/7/3.4/1.2/0.50/0.15/1.00/0.90/ 0.0//Output:83.47%/ 8.17%=10.22/2.41/ 37/ 86", 13.6.4. "Input:7/7/3.4/1.2/0.50/0.15/1.00/0.90/16.0//Output:86.72%/10.45%= 8.30/2.50/ 35/ 88", 13.6.5. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 0.0//Output:81.96%/ 8.95%= 9.16/2.62/ 35/ 76", 13.6.6. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 7.2//Output:97.32%/ 9.49%=10.26/2.51/ 38/ 87", 13.6.7. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 2.4//Output:89.71%/ 9.21%= 9.74/2.20/ 55/110". 13.7. Удаляем все "extern" объявления переменных. 13.8. Пятый шаг настройки - подбор значения "avd.InputTimeFactor.1" - завершен. Глава 14. Шестой шаг настройки: подбор значения "avd.InputTimeFactor.2" 14.1. Объявляем переменную "avd.InputTimeFactor.2" внешней: "extern double avd.InputTimeFactor.2 = 0.0 ;". 14.2. Компилируем код. 14.3. Переходим к вкладке "Settings" тестера стратегий и устанавливаем "Optimization" - "On". 14.4. В окне "Expert Properties" устанавливаем на вкладке "Inputs": 14.4.1. "avd.InputTimeFactor.2" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.05", "Stop = 20". 14.5. Для каждого потока п.13.6: 14.5.1. устанавливаем соответствующие значения основных входных переменных; 14.5.2. устанавливаем соответствующие значения дополнительных переменных "avi.InputLE" и "avi.InputTE", в частности, "int avi.InputLE = 72 ;" и "int avi.InputTE = 138 ;" для потока 13.6.1; 14.5.3. компилируем код; 14.5.4. запускаем оптимизацию; 14.5.5. после завершения вычиcлений переходим на вкладки "Optimization Results" и "Optimization Graph"; 14.5.5. изучаем результаты и в соответствии с правилами настройки предварительно отбираем значения переменной "avd.InputTimeFactor.2"; 14.5.6. для каждого предварительно выбранного значения: 14.5.6.1. на вкладке Optimization Results" запускаем команду "Set Input Parameters", 14.5.6.2. запускаем тестер стратегий, 14.5.6.3. на вкладке "Report" тестера стратегий находим полный итоговый набор показателей "ROD/PF/LT/TT", 14.5.6.4. на вкладке "Graph" тестера стратегий изучаем график баланса. 14.6. В соответствии с правилами настройки отбираем следующие потоки настроек: 14.6.1. "Input:7/7/3.6/0.9/0.45/0.20/0.35/0.35/ 4.6/0.45//Output:129.69%/ 9.78%=13.26/2.06/ 72/138", 14.6.2. "Input:7/7/3.6/0.9/0.50/0.10/1.00/0.90/ 0.0/0.30//Output:116.93%/10.06%=11.62/1.92/ 59/129", 14.6.3. "Input:7/7/3.4/1.2/0.50/0.15/1.00/0.90/ 0.0/0.30//Output:138.40%/11.33%=12.22/2.79/ 37/ 86", 14.6.4. "Input:7/7/3.4/1.2/0.50/0.15/1.00/0.90/16.0/0.30//Output:139.44%/13.84%=10.08/2.84/ 35/ 88", 14.6.5. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 0.0/0.25//Output:143.07%/13.63%=10.50/3.17/ 35/ 76", 14.6.6. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 7.2/0.30//Output:149.02%/12.76%=11.68/2.68/ 38/ 87", 14.6.7. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 2.4/0.50//Output:175.04%/11.01%=15.90/2.62/ 55/110". 14.7. Удаляем все "extern" объявления переменных. 14.8. Шестой шаг настройки - подбор значения "avd.InputTimeFactor.2" - завершен. Глава 15. Седьмой шаг настройки: подбор значения "avd.InputRiskLimit" 15.1. Целью данного шага настройки является ограничение для данного торгового потока относительной величины снижения размера депозита за период тестирования определенной величиной. 15.2. Пусть принято решение об ограничении относительной величины снижения размера депозита за период тестирования для всех торговых потоков настраиваемого символа величиной 10%. 15.3. Объявляем переменную "avd.InputRiskLimit" внешней: "extern double avd.InputRiskLimit = 0.025 ;". 15.4. Компилируем код. 15.5. Переходим к вкладке "Settings" тестера стратегий и устанавливаем "Optimization = On". 15.6. В окне "Expert Properties" устанавливаем на вкладке "Inputs": 15.6.1. "avd.InputRiskLimit" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.001", "Stop = 0.035". 15.7. Для каждого потока п.14.6: 15.7.1. устанавливаем соответствующие значения основных входных переменных; 15.7.2. устанавливаем соответствующие значения дополнительных переменных "avi.InputLE" и "avi.InputTE"; 15.7.3. компилируем код; 15.7.4. запускаем оптимизацию; 15.7.5. после завершения вычиcлений переходим на вкладку "Optimization Results"; 15.7.6. находим наибольшее из значений "Drawdown %", которое меньше 10%; 15.7.7. для соответствующего значения "avd.InputRiskLimit" запускаем команду "Set Input Parameters"; 15.7.8. запускаем тестер стратегий; 15.7.9. на вкладке "Report" тестера стратегий находим полный итоговый набор показателей "ROD/PF/LT/TT". 15.8. Получаем следующие потоки настроек: 15.8.1. "Input:7/7/3.6/0.9/0.45/0.20/0.35/0.35/ 4.6/0.45/0.025//Output:129.69%/ 9.78%=13.26/2.06/ 72/138", 15.8.2. "Input:7/7/3.6/0.9/0.50/0.10/1.00/0.90/ 0.0/0.30/0.024//Output:110.50%/ 9.65%=11.45/1.92/ 59/129", 15.8.3. "Input:7/7/3.4/1.2/0.50/0.15/1.00/0.90/ 0.0/0.30/0.021//Output:108.53%/ 9.60%=11.31/2.74/ 37/ 86", 15.8.4. "Input:7/7/3.4/1.2/0.50/0.15/1.00/0.90/16.0/0.30/0.017//Output: 82.84%/ 9.58%= 8.65/2.73/ 35/ 88", 15.8.5. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 0.0/0.25/0.018//Output: 91.74%/ 9.86%= 9.30/3.04/ 35/ 76", 15.8.6. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 7.2/0.30/0.019//Output:101.89%/ 9.75%=10.45/2.64/ 38/ 87", 15.8.7. "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 2.4/0.50/0.022//Output:144.42%/ 9.83%=14.69/2.59/ 55/110". 15.9. Удаляем все "extern" объявления переменных. 15.10. Седьмой шаг настройки - подбор значения "avd.InputRiskLimit" - завершен. Глава 16. Восьмой шаг настройки: окончательный выбор потока настроек 16.1. Присвоим каждому потоку п.15.8 номер от 1 до 7 согласно порядку их перечисления. 16.2. Находим, что поток номер 7 имеет наилучшее значение основной оценки доходности торговой системы - показателя "Return on drawdown". 16.3. Находим, что все остальные значения итоговых показателей потока номер 7 полностью удовлетворяют правилам настройки. 16.4. Находим, что потоки номер 1, 2 уступают потоку номер 7 по основным показателям. 16.5. Находим, что потоки номер 3, 4, 5, 6 при лучших значениях показателя "Profit factor" имеют худшие значения показателя "Total trades", при этом по основному показателю "Return on drawdown" все указанные потоки уступают потоку номер 7. 16.6. Итак, для первого торгового потока, определяемого парой значений переменных "avi.InputIndex.1 = 7" и "avi.InputIndex.2 = 7", поток настроек номер 7 "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 2.4/0.5/0.022/55/110" с тестовыми показателями "Output:144.42%/ 9.83%=14.69/2.59/ 55/110" признается наиболее обоснованным. 16.7. Восьмой шаг настройки - окончательный выбор потока настроек - завершен. Глава 17. Девятый шаг настройки: сохранение потока настроек 17.1. Переходим на страницу "//< A System: Parameters 1 >". 17.2. В массиве "ac.Parameter []" в первой строке четвертой части под заголовком "// GOLD" заносим значения отобранного потока настроек "Input:7/7/3.4/1.2/0.35/0.15/1.00/0.90/ 2.4/0.5/0.022/55/110": "1 , 7 , 7 , 3.4 , 1.2 , 0.35 , 0.15 , 1.00 , 0.90 , 2.40 , 0.50 , 0.022 , 55 , 110 ,". 17.3. Девятый шаг настройки - сохранение потока настроек - завершен. 17.4. Настройка первого торгового потока завершена. Часть 3. Продолжение настройки Глава 18. Настройка второго торгового потока 18.1. Устанавливаем значения переменных, определяющих второй торговый поток: 18.1.1. "int avi.InputIndex.1 = 7 ;", 18.1.2. "int avi.InputIndex.2 = 6 ;". 18.2. Далее действуем в соответствии с общим порядком настройки согласно Части 2 данного примера. 18.3. Исследование итогов предварительной оптимизации в области значений переменных "avd.InputParameter.1" и "avd.InputParameter.2" от 0 до 20 для каждой из них с шагом 1 показывает, что: 18.3.1. положительные итоги наблюдаются почти на всей указанной выше области; 18.3.2. у значений "avd.InputParameter.1" более 10 преимущества перед более низкими значениями отсутствуют; 18.3.3. с ростом значений "avd.InputParameter.2" более 5-10 количество сделок существенно сокращается. 18.4. Для дальнейшего исследования выбираем область значений переменных "avd.InputParameter.1" и "avd.InputParameter.2" от 0 до 10 для каждой из них с шагом 0.5 и снова запускаем оптимизацию. 18.5. Исследуем итоги и выделяем следующие три области значений "avd.InputParameter.1" и "avd.InputParameter.2": 18.5.1. "avd.InputParameter.1" от 0.0 до 4.0 при "avd.InputParameter.2 = 2.0"; 18.5.2. "avd.InputParameter.1" от 2.5 до 5.5 при "avd.InputParameter.2 = 3.5"; 18.5.3. "avd.InputParameter.1" от 0.0 до 8.0 и "avd.InputParameter.2" от 4.5 до 6.0. 18.6. Для первых двух областей проводим оптимизацию "avd.InputParameter.1" с шагом 0.1 и отбираем по одной паре значений переменных "avd.InputParameter.1" и "avd.InputParameter.2": 18.6.1. "Input:7/6/2.9/2.0//Output:57.78%/14.25%=4.05/1.68/ 92/171"; 18.6.2. "Input:7/6/3.5/3.5//Output:65.08%/14.82%=4.39/1.84/ 58/106". 18.7. Для области п.18.5.3: 18.7.1. проводим оптимизацию обеих переменных с шагом 0.2; 18.7.2. с учетом полученных итогов в следующих пяти областях проводим оптимизацию с шагом 0.1: 18.7.2.1. "avd.InputParameter.1" от 0.7 до 5.0 и "avd.InputParameter.2 = 5.0"; 18.7.2.2. "avd.InputParameter.1" от 0.7 до 5.0 и "avd.InputParameter.2 = 5.1"; 18.7.2.3. "avd.InputParameter.1 = 2.6" и "avd.InputParameter.2" от 4.0 до 7.0; 18.7.2.4. "avd.InputParameter.1 = 3.8" и "avd.InputParameter.2" от 4.0 до 7.0; 18.7.2.5. "avd.InputParameter.1 = 6.4" и "avd.InputParameter.2" от 4.0 до 7.0; 18.7.3. отбираем из каждой области п.18.7.2 по одной паре значений переменных "avd.InputParameter.1" и "avd.InputParameter.2": 18.7.3.1. "Input:7/6/1.9/5.0//Output: 64.65%/ 8.74%= 7.40/2.06/ 41/ 85"; 18.7.3.2. "Input:7/6/4.0/5.1//Output: 97.54%/ 8.18%=11.92/2.64/ 32/ 71"; 18.7.3.3. "Input:7/6/2.6/5.1//Output: 78.05%/ 8.17%= 9.55/2.29/ 36/ 77"; 18.7.3.4. "Input:7/6/3.8/5.1//Output: 93.87%/ 8.16%=11.50/2.70/ 31/ 70"; 18.7.3.5. "Input:7/6/6.4/5.0//Output:104.19%/ 8.74%=11.92/3.12/ 30/ 68"; 18.8. Итак, для дальнейшей настройки отобраны следущие семь потоков настроек: 18.8.1. "Input:7/6/1.9/5.0//Output: 64.65%/ 8.74%= 7.40/2.06/ 41/ 85"; 18.8.2. "Input:7/6/2.6/5.1//Output: 78.05%/ 8.17%= 9.55/2.29/ 36/ 77"; 18.8.3. "Input:7/6/2.9/2.0//Output: 57.78%/14.25%= 4.05/1.68/ 92/171"; 18.8.4. "Input:7/6/3.5/3.5//Output: 65.08%/14.82%= 4.39/1.84/ 58/106"; 18.8.5. "Input:7/6/3.8/5.1//Output: 93.87%/ 8.16%=11.50/2.70/ 31/ 70"; 18.8.6. "Input:7/6/4.0/5.1//Output: 97.54%/ 8.18%=11.92/2.64/ 32/ 71"; 18.8.7. "Input:7/6/6.4/5.0//Output:104.19%/ 8.74%=11.92/3.12/ 30/ 68". 18.9. Для каждого потока настроек п.18.8 подбираем наилучшие пары значений "avd.InputFallLimit" и "avd.InputFallFactor": 18.9.1. "Input:7/6/1.9/5.0/0.00/0.00//Output: 64.65%/ 8.74%= 7.40/2.06/ 41/ 85"; 18.9.2. "Input:7/6/2.6/5.1/0.00/0.00//Output: 78.05%/ 8.17%= 9.55/2.29/ 36/ 77"; 18.9.3. "Input:7/6/2.9/2.0/0.00/0.00//Output: 57.78%/14.25%= 4.05/1.68/ 92/171"; 18.9.4. "Input:7/6/3.5/3.5/0.00/0.00//Output: 65.08%/14.82%= 4.39/1.84/ 58/106"; 18.9.5. "Input:7/6/3.8/5.1/0.00/0.00//Output: 93.87%/ 8.16%=11.50/2.70/ 31/ 70"; 18.9.6. "Input:7/6/4.0/5.1/0.00/0.00//Output: 97.54%/ 8.18%=11.92/2.64/ 32/ 71"; 18.9.7. "Input:7/6/6.4/5.0/0.00/0.00//Output:104.19%/ 8.74%=11.92/3.12/ 30/ 68". 18.10. Отметим, что для данного торгового потока с параметрами "avd.InputParameter.1 = 7" и "avd.InputParameter.2 = 6" улучшение итоговых показателей вследствие такой меры управления позицией, как принудительное закрытие ордеров, отсутствует. 18.11. Для каждого потока настроек п.18.9 подбираем наилучшие пары значений "avd.InputLockSize" и "avd.InputLockFactor": 18.11.1. "Input:7/6/1.9/5.0/0.00/0.00/0.00/0.00//Output: 64.65%/ 8.74%= 7.40/2.06/ 41/ 85"; 18.11.2. "Input:7/6/2.6/5.1/0.00/0.00/0.35/0.40//Output: 76.01%/ 7.34%=10.36/2.17/ 49/ 98"; 18.11.3. "Input:7/6/2.9/2.0/0.00/0.00/0.00/0.00//Output: 57.78%/14.25%= 4.05/1.68/ 92/171"; 18.11.4. "Input:7/6/3.5/3.5/0.00/0.00/0.00/0.00//Output: 65.08%/14.82%= 4.39/1.84/ 58/106"; 18.11.5. "Input:7/6/3.8/5.1/0.00/0.00/0.35/0.30//Output: 92.17%/ 7.35%=12.54/2.57/ 43/ 89"; 18.11.6. "Input:7/6/4.0/5.1/0.00/0.00/0.35/0.35//Output: 95.39%/ 7.32%=13.03/2.51/ 46/ 92"; 18.11.7. "Input:7/6/6.4/5.0/0.00/0.00/0.00/0.00//Output:104.19%/ 8.74%=11.92/3.12/ 30/ 68". 18.12. Для каждого потока настроек п.18.11 подбираем наилучшее значение "avd.InputTimeFactor.1": 18.12.1. "Input:7/6/1.9/5.0/0.00/0.00/0.00/0.00/0.00//Output: 64.65%/ 8.74%= 7.40/2.06/ 41/ 85"; 18.12.2. "Input:7/6/2.6/5.1/0.00/0.00/0.35/0.40/0.00//Output: 76.01%/ 7.34%=10.36/2.17/ 49/ 98"; 18.12.3. "Input:7/6/2.9/2.0/0.00/0.00/0.00/0.00/10.8//Output: 66.82%/12.84%= 5.20/1.80/ 91/178"; 18.11.4. "Input:7/6/3.5/3.5/0.00/0.00/0.00/0.00/15.0//Output: 67.43%/12.50%= 5.39/1.86/ 57/112"; 18.11.5. "Input:7/6/3.8/5.1/0.00/0.00/0.35/0.30/0.00//Output: 92.17%/ 7.35%=12.54/2.57/ 43/ 89"; 18.12.6. "Input:7/6/4.0/5.1/0.00/0.00/0.35/0.35/0.00//Output: 95.39%/ 7.32%=13.03/2.51/ 46/ 92"; 18.12.7. "Input:7/6/6.4/5.0/0.00/0.00/0.00/0.00/0.00//Output:104.19%/ 8.74%=11.92/3.12/ 30/ 68". 18.13. Для каждого потока настроек п.18.12 подбираем наилучшее значение "avd.InputTimeFactor.2": 18.13.1. "Input:7/6/1.9/5.0/0.00/0.00/0.00/0.00/0.00/0.50//Output:102.80%/12.94%= 7.94/2.23/ 41/ 85"; 18.13.2. "Input:7/6/2.6/5.1/0.00/0.00/0.35/0.40/0.00/0.00//Output: 76.01%/ 7.34%=10.36/2.17/ 49/ 98"; 18.13.3. "Input:7/6/2.9/2.0/0.00/0.00/0.00/0.00/10.8/2.20//Output:104.59%/14.55%= 7.19/1.97/ 91/178"; 18.13.4. "Input:7/6/3.5/3.5/0.00/0.00/0.00/0.00/15.0/2.60//Output:114.22%/16.58%= 6.89/2.14/ 57/112"; 18.13.5. "Input:7/6/3.8/5.1/0.00/0.00/0.35/0.30/0.00/0.50//Output:156.94%/12.37%=12.69/2.91/ 43/ 89"; 18.13.6. "Input:7/6/4.0/5.1/0.00/0.00/0.35/0.35/0.00/0.50//Output:165.60%/12.54%=13.21/2.80/ 46/ 92"; 18.13.7. "Input:7/6/6.4/5.0/0.00/0.00/0.00/0.00/0.00/0.05//Output:174.02%/12.52%=13.90/3.48/ 30/ 68". 18.14. Для каждого потока настроек п.18.13 определяем "avd.InputRiskLimit", соответствующее наибольшему из значений "Drawdown %", которое меньше 10%: 18.14.1. "Input:7/6/1.9/5.0/0.00/0.00/0.00/0.00/0.00/0.50/0.018//Output: 67.32%/ 9.57%= 7.03/2.22/ 41/ 85"; 18.14.2. "Input:7/6/2.6/5.1/0.00/0.00/0.35/0.40/0.00/0.00/0.034//Output:130.30%/ 9.89%=13.17/2.16/ 49/ 98"; 18.14.3. "Input:7/6/2.9/2.0/0.00/0.00/0.00/0.00/10.8/2.20/0.016//Output: 59.44%/ 9.47%= 6.28/1.95/ 91/178"; 18.14.4. "Input:7/6/3.5/3.5/0.00/0.00/0.00/0.00/15.0/2.60/0.014//Output: 55.52%/ 9.47%= 5.86/2.04/ 57/112"; 18.14.5. "Input:7/6/3.8/5.1/0.00/0.00/0.35/0.30/0.00/0.50/0.020//Output:114.71%/ 9.97%=11.51/2.88/ 43/ 89"; 18.14.6. "Input:7/6/4.0/5.1/0.00/0.00/0.35/0.35/0.00/0.50/0.019//Output:111.89%/ 9.73%=11.50/2.76/ 46/ 92"; 18.14.7. "Input:7/6/6.4/5.0/0.00/0.00/0.00/0.00/0.00/0.05/0.019//Output:117.32%/ 9.59%=12.23/3.39/ 30/ 68". 18.15. Для второго торгового потока, определяемого парой значений переменных "avi.InputIndex.1 = 7" и "avi.InputIndex.2 = 6", поток настроек п.18.14.5 "Input:7/6/3.8/5.1/0.00/0.00/0.35/0.30/0.00/0.50/0.020/43/89" с тестовыми показателями "Output:114.71%/9.97%=11.51/2.88/43/89" признается наиболее обоснованным. 18.16. Переходим на страницу "//< A System: Parameters 1 >". 18.17. В массиве "ac.Parameter []" во второй строке четвертой части под заголовком "// GOLD" заносим значения отобранного потока настроек "Input:7/6/3.8/5.1/0.00/0.00/0.35/0.30/0.00/0.50/0.020/43/89": "1 , 7 , 6 , 3.8 , 5.1 , 0.00 , 0.00 , 0.35 , 0.30 , 0.00 , 0.50 , 0.020 , 43 , 89 ,". 18.18. Настройка второго торгового потока завершена. Глава 19. Настройка третьего торгового потока 19.1. Tретий торговый поток символа "GOLD" в данном примере остается отключенным. Глава 20. Настройка четвертого торгового потока 20.1. Четвертый торговый поток символа "GOLD" в данном примере остается отключенным. Часть 4. Завершение настройки Глава 21. Завершение режима оптимизации системы 21.1. Переходим на страницу "//< A System: Parameters 2 >". 21.2. Возвращаем значения входных параметров к исходным в соответствии с Главой 9 данного Примера. 21.3. Переходим на страницу "//< A System: Parameters 1 >". 21.4. Устанавливаем значение "avb.IsOptimizing = 0 " для завершения режима оптимизации системы, см. п.4.4. Глава 22. Настройка уровня риска 22.1. Целью данной ступени настройки является ограничение для данного торгового символа относительной величины снижения размера депозита за период тестирования определенной величиной. 22.2. Пусть эта величин будет равна 20%. 22.3. Проверяем, что все торговые потоки страницы "//< A System: Parameters 1 >" отключены, кроме торговых потоков символа "GOLD", то есть первые элементы всех строк всех частей массива "ac.Parameter []", кроме четаертой, равны "0". 22.4. Переходим на страницу "//< A System: Function 5 >", содержащую метод "afr.System.LoadSymbol". 22.5. В первой строке кода удаляем "//" для того, чтобы включить выражение "avd.RiskFactor = avd.InputRiskFactor ;". 22.6. Переходим на страницу "//< A System: Parameters 2 >". 22.7. Объявляем переменную "avd.InputRiskFactor" внешней: "extern double avd.InputRiskFactor = 1.00 ;". 22.8. Компилируем код. 22.9. Переходим к вкладке "Settings" тестера стратегий и устанавливаем "Optimization = On". 22.10. В окне "Expert Properties" устанавливаем на вкладке "Inputs": 22.10.1. "avd.InputRiskFactor" - "Variable = On", "Value = 0", "Start = 0", "Step = 0.01", "Stop = 2.00". 22.11. Запускаем оптимизацию. 22.12. После завершения вычиcлений переходим на вкладку "Optimization Results". 22.13. Находим, что наибольшее из значений "Drawdown %", которое меньше 20%, равно "19.94%". 22.14. Находим соответствующее значение "avd.InputRiskFactor", равное "1.26". 22.15. Переходим на страницу "//< A System: Function 5 >". 22.16. В первой строке кода восстанавливаеи "//" перед выражением "avd.RiskFactor = avd.InputRiskFactor ;". 22.17. Переходим на страницу "//< A System: Parameters 2 >". 22.18. Снимаем с переменной "avd.InputRiskFactor" объявление "extern". 22.19. Переходим на страницу "//< A System: Parameters 1 >". 22.20. В массиве "ac.RiskFactor []" задаем значение четвертого элемента, равное "1.26". 22.21. Компилируем код. 22.22. Запускаем тестер стратегий. 22.23. Запоминаем значения итоговых показателей: "Output:605.01%/19.94%=30.34/2.92/96/203". 22.24. Устанавливаем значение "avd.SystemStop = 0.80" или меньше. 22.25. Компилируем код. 22.26. Запускаем тестер стратегий. 22.27. Проверяем, что полученные значения итоговых показателей совпадают со значениями п.22.23. 22.28. Настройка уровня риска для торгового символа "GOLD" завершена. Глава 23. Изменения кода, вызванные настройкой 23.1. Содержание страницы кода "//< A System: Parameters 1 >" до настройки: " //< A System: Parameters 1 > bool avb.IsOptimizing = 0 ; double avd.SystemStop = 0.80 ; string ac.Symbol [] = { "" , "EURUSD" , "GBPUSD" , "" } ; double ac.RiskFactor [] = { 0 , 1.00 , 1.00 , 0 } ; double ac.Parameter [ ac.Symbols , ac.Threads , ac.Parameters ] = { // Reserved 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , // EURUSD 1 , 7 , 6 , 0.8 ,10.0 , 0.50 , 0.40 , 0.00 , 0.00 , 0.00 , 16.40 , 0.014 , 20 , 85 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , // GBPUSD 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , // Reserved 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , } ; // " 23.2. Содержание страницы кода "//< A System: Parameters 1 >" после настройки: " //< A System: Parameters 1 > bool avb.IsOptimizing = 0 ; double avd.SystemStop = 0.80 ; string ac.Symbol [] = { "" , "EURUSD" , "GBPUSD" , "GOLD" } ; double ac.RiskFactor [] = { 0 , 1.00 , 1.00 , 1.26 } ; double ac.Parameter [ ac.Symbols , ac.Threads , ac.Parameters ] = { // Reserved 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , // EURUSD 0 , 7 , 6 , 0.8 ,10.0 , 0.50 , 0.40 , 0.00 , 0.00 , 0.00 , 16.40 , 0.014 , 20 , 85 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , // GBPUSD 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , // GOLD 1 , 7 , 7 , 3.4 , 1.2 , 0.35 , 0.15 , 1.00 , 0.90 , 2.40 , 0.50 , 0.022 , 55 , 110 , 1 , 7 , 6 , 3.8 , 5.1 , 0.00 , 0.00 , 0.35 , 0.30 , 0.00 , 0.50 , 0.020 , 43 , 89 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , 0 , 7 , 7 , 1.0 , 1.0 , 0.00 , 1.00 , 0.00 , 0.00 , 0.00 , 0.00 , 0.000 , 1 , 1 , } ; // " 23.3. Другие изменения в коде системы должны отсутствовать. 23.4. Настройка системы завершена.