Приветствую Вас Гость
Пт
03.05.2024
00:48
03.05.2024
00:48
USD/CAD
Форма входа |
Категории раздела | ||||||||||
|
Поиск |
Друзья сайта |
|
Статистика |
Главная » Статьи » Советники |
NeuroMACDwithMM
Strategy Tester Report
NeuroMACDwithMM
MIG-Demo (Build 208)
Входные параметры советника:
Матожидание - ничто, управление капиталом и риском - все!
Существует идиотское утверждение о том, что якобы для управления капиталом и риском необходима торговая система с положительным математическим ожиданием. Вот что пишет об этом Ральф Винс в своей книжонке "Математика управления капиталом":
"В отношении управления капиталом очень важно понимать, что при игре с отрицательным ожиданием нет схемы управления деньгами, которая может сделать вас победителем. Если вы продолжаете играть, то независимо от способа управления деньгами вы проиграете весь ваш счет, каким бы большим он ни был в начале." Многие также настаивают на том, что на сей счет якобы существует "доказанная" Дубом теорема. Но Дуб, он и есть - дуб дубом. Попробуем взять примитивную тактику, которая открывает позиции, последовательно чередуя длинные и короткие позиции. Т.е. открывает позицию в каком либо направлении, потом, после того, как ордер закроется по тейпрофиту или стоплоссу, следующая позиция открывается в направлении противоположном предыдущей. И т.д. и т.п. Математическое ожидание такой тактики на нескольких сотнях сделок окажется убыточным, если по ней торговать постоянным лотом. (Математическое ожидание всегда считается только для флетбета, т.е. либо постоянной ставки для игр или постоянного лота для торговых стратегий и тактик. В торговом терминале MetaTrader4 (c) MetaQuotes Corp. математическое ожидание вычисляется неправильно, т.к. оно не нормированно под флетбет). Проще говоря, если мы пересчитаем результаты использования вышеописанной тактики в пипсах, то они окажутся отрицательными. А теперь приделаем к этой заведомо убыточной тактике управление капиталом и риском, а именно возьмем примитивную нейронную сеть типа Перцептрон и начнем с ее помощью определять размер лота для открываемых торговых позиций. Некоторых наверное удивит, но в этом случае результат гораздо лучше, чем если бы мы взяли прибыльную торговую стратегию на той же самой нейронной сети, как это сделано в AI и попытались к ней присобачить управление капиталом и риском. Приведу рабочий код МТС для MetaTrader4, который работает по вышеизложенному принципу: //+-----------------------------------------------------------------------------+ //| NeuroMoneyManagement.mq4 | //| Copyright c 2006, Yury V. Reshetov | //| http://bigforex.biz/| //+-----------------------------------------------------------------------------+ #property copyright "Copyright c 2006, Yury V. Reshetov http://forum.reshetov.biz/thread/?thread__mid=882064974 #property link "http://bigforex.biz" //---- input parameters extern int x1 = 61; extern int x2 = 184; extern int x3 = 92; extern int x4 = 7; extern double MaximumRisk = 0.82; // StopLoss level extern double sl = 50; extern int MagicNumber = 888; static int prevtime = 0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- check new bar if (Time[0] == prevtime) return(0); prevtime = Time[0]; //---- check allowed for trade if (IsTradeAllowed()) { RefreshRates(); } else { prevtime = Time[1]; return(0); } // --- indexed variable int i = 0; // check for opened position int total = OrdersTotal(); for (i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); // check for symbol & magic number if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { // found opened position - exit return(0); } } //--- check for type last position total = OrdersHistoryTotal(); int op = OP_BUY; for (i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); // check for symbol & magic number if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { // change type if (OrderType() == OP_BUY) { op = OP_SELL; } else { op = OP_BUY; } } } // default lots size is allowed minimum double lt = MarketInfo(Symbol(), MODE_MINLOT); // refresh RefreshRates(); int ticket = -1; // check for long or short position possibility if (op == OP_BUY) { //long if (perceptron() > 0) lt = getLots(); ticket = OrderSend(Symbol(), OP_BUY, lt, Ask, 3, Bid - sl * Point, Bid + sl * Point, "NeuroMM", MagicNumber, 0, Blue); if (ticket < 0) { Sleep(30000); prevtime = Time[1]; } } else { // short if (perceptron() < 0) lt = getLots(); ticket = OrderSend(Symbol(), OP_SELL, lt, Bid, 3, Ask + sl * Point, Ask - sl * Point, "NeuroMM", MagicNumber, 0, Red); if (ticket < 0) { Sleep(30000); prevtime = Time[1]; } } //--- exit return(0); } //+--- The PERCEPRRON ---+ // a perceiving and recognizing function double perceptron() { double w1 = x1 - 100.0; double w2 = x2 - 100.0; double w3 = x3 - 100.0; double w4 = x4 - 100.0; double a1 = iAC(Symbol(), 0, 0); double a2 = iAC(Symbol(), 0, 7); double a3 = iAC(Symbol(), 0, 14); double a4 = iAC(Symbol(), 0, 21); return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4); } //+--------------Calculate optimal lot size -------------------------+ double getLots() { double minlot = MarketInfo(Symbol(), MODE_MINLOT); int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5; double lot = minlot; //---- select lot size lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / 1000.0, round); if (AccountFreeMargin() < lot * MarketInfo(Symbol(), MODE_MARGINREQUIRED)) { lot = NormalizeDouble(AccountFreeMargin() / MarketInfo(Symbol(), MODE_MARGINREQUIRED), round); } if(lot < minlot) lot = minlot; double maxlot = MarketInfo(Symbol(), MODE_MAXLOT); if(lot > maxlot) lot = maxlot; //---- return lot size return(lot); } Принципы оптимизации МТС такие же, как и у его предшественника - AI: Входные параметры: x1, x2, x3, x4 - от 0 до 200 с шагом 1 MaximumRisk - от 0.01 до 1 с шагом 0.01 sl - от 10 до 70 с шагом 5 Скачать исходники советника можно ЗДЕСЬ Посмотреть результаты бектеста можно ЗДЕСЬ. Оптимизация и тестирование проводилось на котировках взятых по OnDemand с реального счета ДЦ "SystemForex". Если тактика применения нейронных сетей в качестве регулятора для управления капиталом и риском способна дать профит даже на заведомо убыточной торговой стратегии и даже вообще без всякой стратегии, то появляется резон ее прикладного применения к стратегиям профитным. Вот пример такого советника: МТС "NeuroMACDwithMM"
Источник: http://bigforex.biz | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Просмотров: 8579 | Комментарии: 13 | Рейтинг: 5.0/1 |
Всего комментариев: 13 | 1 2 » | ||||||||||
| |||||||||||
1-10 11-13 | |||||||||||