SVS696 Опубликовано 9 ноября, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 9 ноября, 2017 (изменено) В чем проблема пока не выяснили? чуть позже хочу поизучать код Я вроде правил давненько, попробуйтеdouble MMCoeff() { if (OrdersHistoryTotal()==0) return(1); double Pips[]; int OrdersCount=0,i=0,j=1,k=0; for(i=OrdersHistoryTotal()-1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderMagicNumber()!=MAGIC||OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_BUY||OrderType()==OP_SELL)OrdersCount++; } ArrayResize(Pips,OrdersCount+1); for(i=0; i { if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderMagicNumber()!=MAGIC||OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_BUY) { //Print(__FUNCTION__ , ": OP_BUY j = ", j, ", Pips[j] = ",Pips[j]); Pips[j]=Pips[j-1]+(OrderClosePrice()-OrderOpenPrice())/_Point; } if (OrderType()==OP_SELL) { //Print(__FUNCTION__ , ": OP_SELL j = ", j, ", Pips[j] = ",Pips[j], ", ArraySize ", ArraySize(Pips)); Pips[j]=Pips[j-1]+(OrderOpenPrice()-OrderClosePrice())/_Point; } j++; } double BBUp=iBandsOnArray(Pips,0,MAMMPer,MADev,0,MODE_UPPER,0); double BBDn=iBandsOnArray(Pips,0,MAMMPer,MADev,0,MODE_LOWER,0); double BBCt=iBandsOnArray(Pips,0,MAMMPer,MADev,0,MODE_MAIN,0); double CCI0=iCCIOnArray(Pips,0,CCIMMPer,0); double CCI1=iCCIOnArray(Pips,0,CCIMMPer,1); if(UseMABalanceCorr) { if(Pips[OrdersCount-1]BBDn) { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } if(Pips[OrdersCount-1] { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } if(Pips[OrdersCount-1]>BBCt&&Pips[OrdersCount-1] { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } if(Pips[OrdersCount-1]>BBUp) { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } } if(!UseMABalanceCorr&&UseOSCBalanceCorr) { if(CCI0CCI1) return(Coeff1); if(CCI0 if(CCI0>-CCIMMLevel&&CCI0 if(CCI0>-CCIMMLevel&&CCI0>CCI1) return(Coeff4); } return(1); } Супер, спасибо) правда на микротесте пока слил больше с этой функцией..., но надо проверять и изучатьДобавлено: 09-11-2017 18:51:06А вот при увеличении времени теста уже всё гораздо приятнее :9>- Изменено 9 ноября, 2017 пользователем SVS696 Ссылка на сообщение Поделиться на другие сайты More sharing options...
RichLux Опубликовано 19 февраля, 2018 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 19 февраля, 2018 (изменено) extern double Coeff1 = 1.6; extern double Coeff2 = 1.4;extern double Coeff3 = 1.2;extern double Coeff4 = 0.8; extern double Coeff5 = 0.6;extern double Coeff6 = 0.4; Когда какой Кф применяется:-Если Используются Ленты Боллинжера (UseMABalanceCorr = true), И№1-кривая доходности CCI предыдущий и №2-кр. дох.нижней ВВ и ССІтек>ССІпред и №3-кр. дох.>средней ССІпред и №4-кр. дох.>средней №4-кр.дох.>верхней ВВ и ССІтек>ССІпред и №5-кр. дох.нижней ВВ И ССІтек№5-кр.дох.>верхней ВВ И ССІтек№6-кр. дох.-Если НЕ используются Ленты Боллинжера (UseMABalanceCorr = false), и№1 - ССІтекССІпред;№3 - ССІтек>отрицательного CCIMMLevel и ССІтек№4- ССІтек>отрицательного CCIMMLevel и ССІтек>ССІпред;№6 -ССІтекПрошу прокомментировать правильно ли я понял когда какой Кеф, применяется.Добавлено: 20-02-2018 09:40:21Получилось много букв и не очень то понятно.Попытался изобразить графически Изменено 20 февраля, 2018 пользователем RichLux Ссылка на сообщение Поделиться на другие сайты More sharing options...
djnet Опубликовано 27 сентября, 2018 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 27 сентября, 2018 (изменено) Цитата Доходность бралась абсолютная или как эффективность 1 лота (пункты) ? Доходность бралась с учетом мм совы. Брался сет и без изменений в настройках применялись разные варианты фильтра. Чуть позже выложу код, исследование пока не готово.ПыСы. Не понял вопрос. Сама кривая доходности, по которой строятся индикаторы, выстроена из пунктов. То есть:1 сделка -20 пунктов.2 +50 и -20 = +303. +70 и +30 = +1004 -40 и +100 = +60и так далее.Именно в пунктах, так как если привязаться к процентам по счету или деньгам, будут проблемы с расчетом из-за мм. А тут как бы абсолютные величины, ни к чему не привязанные, кроме способности бота обеспечить положительное матожидание.Буквально в течение часа выложу итог исследования и код, терпение:)Добавлено: 22-07-2016 14:07:34И вот он, финальный результат: Спойлер Отмечу, что кроме изменения расчетного лота, никакие параметры больше не модернизировались - это всего лишь волшебство манименеджмента!Для сравнения, что было изначально: Ну а теперь собсна сама функция и как ее запихнуть в сову: Спойлер [code=внешние настройки]extern string Settings076 = "====Настройки кривой баланса====";extern bool UseBalanceCorr = true;extern bool UseMABalanceCorr = true;extern int MAMMPer = 14;extern double MADev = 1.0;extern bool UseOSCBalanceCorr = true;extern int CCIMMPer = 7;extern double CCIMMLevel = 40;extern double Coeff1 = 1.6; extern double Coeff2 = 1.4;extern double Coeff3 = 1.2;extern double Coeff4 = 0.8; extern double Coeff5 = 0.6;extern double Coeff6 = 0.4;Добавим строчку в то место, где у нас высчитывается лот. Если UseBalanceCorr включена, лот, рассчитанный совой, просто модифицируется путем умножения на возвращаемое функцией MMCoeff() значение: if(UseBalanceCorr) Lot=Lot*MMCoeff(); [code=собсна сама функция]double MMCoeff() { if (OrdersHistoryTotal()==0) return(1); double Pips[]; int OrdersCount=0,i=0,j=0,k=0; for(i=OrdersHistoryTotal()-1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderMagicNumber()!=Magic||OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_BUY||OrderType()==OP_SELL)OrdersCount++; } ArrayResize(Pips,OrdersCount); for(i=0; i { if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderMagicNumber()!=Magic||OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_BUY) { Pips[j]=Pips[j-1]+(OrderClosePrice()-OrderOpenPrice())/PricePoint; } if (OrderType()==OP_SELL) { Pips[j]=Pips[j-1]+(OrderOpenPrice()-OrderClosePrice())/PricePoint; } j++; } double BBUp=iBandsOnArray(Pips,0,MAMMPer,MADev,0,MODE_UPPER,0); double BBDn=iBandsOnArray(Pips,0,MAMMPer,MADev,0,MODE_LOWER,0); double BBCt=iBandsOnArray(Pips,0,MAMMPer,MADev,0,MODE_MAIN,0); double CCI0=iCCIOnArray(Pips,0,CCIMMPer,0); double CCI1=iCCIOnArray(Pips,0,CCIMMPer,1); if(UseMABalanceCorr && OrdersCount>1) { if(Pips[OrdersCount-1]BBDn) { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } if(Pips[OrdersCount-1] { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } if(Pips[OrdersCount-1]>BBCt&&Pips[OrdersCount-1] { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } if(Pips[OrdersCount-1]>BBUp) { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } } if(!UseMABalanceCorr&&UseOSCBalanceCorr) { if(CCI0CCI1) return(Coeff1); if(CCI0 if(CCI0>-CCIMMLevel&&CCI0 if(CCI0>-CCIMMLevel&&CCI0>CCI1) return(Coeff4); } return(1); } Выводы: Результаты тестов показали, что данная функция действительно значительно улучшает базовые результаты советников, позволяя более гибко и грамотно использовать силу манименеджмента себе во благо. Следующим шагом для пытливого ума может стать перевод сделок с заниженного лота на виртуальную торговлю, чтобы в случае просадок не тратить и цента. Также возможно использование и еще более сложного и мудреного алгоритма.Лично я буду использовать данную функцию в своих советниках. Сайлент! Спасибо. Классный фильтр для ММ, все тесты с ним получаются профитнее. Прям не ожидал сам. Немного подправил код, иначе обращались к несуществующему элементу массива. UPDATE нашел еще один мелкий косячек в коде, исправил.double MMCoeff() { if (OrdersHistoryTotal()==0) return(1); double Pips[]; int OrdersCount=0,i=0,j=0,k=0; for(i=OrdersHistoryTotal()-1; i>=0; i--) { if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderMagicNumber()!=Magic || OrderSymbol()!=_Symbol) continue; if (OrderType()==OP_BUY || OrderType()==OP_SELL)OrdersCount++; } ArrayResize(Pips,OrdersCount); for(i=0; i { if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderMagicNumber()!=Magic||OrderSymbol()!=Symbol()) continue; if (OrderType()==OP_BUY) { if (j>0) Pips[j]=Pips[j-1]+(OrderClosePrice()-OrderOpenPrice())/_Point; else { Pips[j]=(OrderClosePrice()-OrderOpenPrice())/_Point; } } if (OrderType()==OP_SELL) { if (j>0) Pips[j]=Pips[j-1]+(OrderOpenPrice()-OrderClosePrice())/_Point; else { Pips[j]=(OrderOpenPrice()-OrderClosePrice())/_Point; } } j++; } double BBUp=iBandsOnArray(Pips,0,MAMMPer,MADev,0,MODE_UPPER,0); double BBDn=iBandsOnArray(Pips,0,MAMMPer,MADev,0,MODE_LOWER,0); double BBCt=iBandsOnArray(Pips,0,MAMMPer,MADev,0,MODE_MAIN,0); double CCI0=iCCIOnArray(Pips,0,CCIMMPer,0); double CCI1=iCCIOnArray(Pips,0,CCIMMPer,1); if(UseMABalanceCorr) { if(Pips[OrdersCount-1]BBDn) { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } if(Pips[OrdersCount-1] { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } if(Pips[OrdersCount-1]>BBCt&&Pips[OrdersCount-1] { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } if(Pips[OrdersCount-1]>BBUp) { if(UseOSCBalanceCorr&&CCI0>CCI1&&CCI0 if((UseOSCBalanceCorr&&CCI0 } } if(!UseMABalanceCorr&&UseOSCBalanceCorr) { if(CCI0CCI1) return(Coeff1); if(CCI0 if(CCI0>-CCIMMLevel&&CCI0 if(CCI0>-CCIMMLevel&&CCI0>CCI1) return(Coeff4); } return(1); } Изменено 17 октября, 2018 пользователем djnet 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти