Перейти к содержанию

Ударим умным мани-менеджментом по бездорожью рынков!


Рекомендуемые сообщения

Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано (изменено)


В чем проблема пока не выяснили? чуть позже хочу поизучать код


Я вроде правил давненько, попробуйте
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>- Изменено пользователем SVS696
Ссылка на сообщение
Поделиться на другие сайты

  • 3 months later...
  • Ответов 52
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

По тематике мани менеджмента написана куча книг и статей. Есть десятки различных способов расчета лота, выставление стопов и тейков, ведения сделки и так далее. И тем не менее трейдеры относятся к это

Перейти

Мне очень понравилась статья про теханализ графиков доходности памм счетов После ее прочтения у меня родилась идея применить теханализ к графику доходности в советнике. Сначала немного теории:

Перейти

И в заключение тем об управлении капиталом представляю вашему вниманию программу для анализа и моделирования торговой стратегии, подбора к ней оптимального метода управления капиталом и его последующе

Перейти
Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано (изменено)

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

Получилось много букв и не очень то понятно.
Попытался изобразить графически
Изменено пользователем RichLux
Ссылка на сообщение
Поделиться на другие сайты

  • 7 months later...
Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано (изменено)


Цитата

Доходность бралась абсолютная или как эффективность 1 лота (пункты) ?


Доходность бралась с учетом мм совы. Брался сет и без изменений в настройках применялись разные варианты фильтра. Чуть позже выложу код, исследование пока не готово.
ПыСы. Не понял вопрос. Сама кривая доходности, по которой строятся индикаторы, выстроена из пунктов. То есть:
1 сделка -20 пунктов.
2 +50 и -20 = +30
3. +70 и +30 = +100
4 -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);
}

Изменено пользователем djnet
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

  • Pavel888 changed the title to Ударим умным мани-менеджментом по бездорожью рынков!

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...