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

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


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

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


В процессе написания модуля тейков и стопов по ходу дела смастерил интересный индикатор для выставления начальных ТП и СЛ. В основе расчетов лежит критерий VAR.
http://tlap.com/forum/indikatory/7/informator-indikator-dlya-ustanovki-stopov-po-kriteriyu-var/7115
Если кому-то интересно, могу смастерить индикатор для отображения уровней тп и сл для остальных вариантов.


Добавлено: 27-06-2014 11:56:44

Я так понял, помощи в разработке я не дождусь.
Придется всю эту махину писать самому. Работаю уже две недели, часа по четыре в день.
Двигается медленно, а времени уходит куча.
Поэтому чтобы мне не было обидно я выложу тут версию советника для ручной торговли (не для встраивания в советники) со слегка облегченным функционалом. Так сказать лайт версию. Про версию и версию для встраивания в советники найдете на маркете mql.


Уважаемый, Версия про готова? Я бы приобрел.
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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

Как разработка? Будет продолжение?

Есть несколько интересных моментов относительно управления капиталом. По идеологии Ральфа Винса.
Путем нахождения оптимального F, составления портфеля этих систем с добавлением каждой из них весов. Правда там нужно будет сделать советник для управления позицией для тех советников у которых отсутствует ММ.

Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет!
Может будет кому интересен следующий скрипт для сопровождения ордеров в части их частичного закрытия.
Суть скрипта проста. При открытии ордера и движении его в положительную сторону он частично закрывается с заданными в скрипте параметрами стартового лота и шага закрытия. В прикреплённом первом изображении показан пример ордера SELL. В точке 1 ордер открывается. В точках 2 происходит частичное закрытие. В точке 3 - закрытие по безубытку. В изображении 2 - пример с BUY ордером.

blog1.jpg
blog2.jpg
MyTraderMM.mq4

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

Сначала немного теории:

Спойлер







И это простые стратегии, которые пришли мне на ум. Можно придумать и намного более сложное управление.

Сначала я протестировал новую функцию на удачном сете.
Спойлер

Базовый результат:


С применением фильтра:



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

Спойлер

Базовый результат:

Выглядит довольно плачевно.

Фильтрация только по машке:

Если кривая упала ниже машки, лот уменьшается до 40% от расчетного. Просадка упала с 25% до 15%, профит-фактор подрос, но упала прибыль, и прилично - чуть ли не в два раза. Кривая доходности стала поплавнее, но результат по прежнему совсем не радует.

Фильтрация по машке и осциллятору (CCI):

Результаты уже получше.

Фильтрация по осциллятору (CCI):

Если осциллятор находится ниже определенного уровня (-20 в данном случае) и растет, расчетный лот умножается на 1,8.
Если осциллятор находится ниже определенного уровня и продолжает падать, расчетный лот умножается на 0,4.
Если осциллятор находится выше определенного уровня (-20 в данном случае) и продолжает расти, расчетный лот умножается на 1,2.
Если осциллятор находится выше определенного уровня и падает, расчетный лот умножается на 0,8.
В данном варианте прибыль ненамного меньше базового результата, при этом просадка все равно существенно ниже (хоть и повыше немного, чем в предыдущих вариантах). Профит фактор при этом самый высокий. Пусть из говна и не получилось сделать конфетку (понятно, что чудес не бывает), но все же считаю это результатом - сет реально вытянут в более менее приемлемые параметры. Кривая доходности в этом примере самая плавная и выглядит более стабильно.



Вывод: моя идея была отчасти верна, подход действительно работает и наталкивает на дальнейшие исследования. Попробую применить более сложные стратегии, использовать другие индикаторы из доступных в МТ4.
Для начала вместо iCCIOnArray попробую использовать iRSIOnArray
Затем вместо машки, которая себя не показала, испытаю iBandsOnArray: при падении ниже средней линии уменьшение лота, при падении ниже нижней границы еще большее уменьшение, затем при росте осциллятора (того, который окажется лучше - рси или сси) увеличение лота, при воврате в нижнюю границу ББ более слабое увеличение лота. При нахождении внутри верхней зоны ББ и росте индикатора увеличение лота, при падении осла внутри верхней зоны ББ небольшое снижение, при росте осла выше верхней границе бб базовый лот, при падении осла выше границы снижение лота. Как то так. Ну и буду играться параметрами, может где то увеличение лота сменить на снижение и так далее.
По крайней мере у меня есть определенная база, которая кажется мне работоспособной, осталось только найти оптимальное решение.

Применение iRSIOnArray вместо iCCIOnArray не оправдало себя:
Спойлер



И вот он, финальный результат:

Спойлер


Отмечу, что кроме изменения расчетного лота, никакие параметры больше не модернизировались - это всего лишь волшебство манименеджмента!
Для сравнения, что было изначально:



Ну а теперь собсна сама функция и как ее запихнуть в сову:
Спойлер


[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)
{
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);
}




Выводы: Результаты тестов показали, что данная функция действительно значительно улучшает базовые результаты советников, позволяя более гибко и грамотно использовать силу манименеджмента себе во благо. Следующим шагом для пытливого ума может стать перевод сделок с заниженного лота на виртуальную торговлю, чтобы в случае просадок не тратить и цента. Также возможно использование и еще более сложного и мудреного алгоритма.

Спасибо. Мне :d Изменено пользователем Silentspec
  • Лайк 25
  • Спасибо 1
Ссылка на сообщение
Поделиться на другие сайты

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

Вот это хлебные крошки >000

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

Ссылка на сообщение
Поделиться на другие сайты

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

Доходность бралась абсолютная или как эффективность 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)
{
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);
}




Выводы: Результаты тестов показали, что данная функция действительно значительно улучшает базовые результаты советников, позволяя более гибко и грамотно использовать силу манименеджмента себе во благо. Следующим шагом для пытливого ума может стать перевод сделок с заниженного лота на виртуальную торговлю, чтобы в случае просадок не тратить и цента. Также возможно использование и еще более сложного и мудреного алгоритма.
Лично я буду использовать данную функцию в своих советниках. Изменено пользователем Silentspec
  • Лайк 7
Ссылка на сообщение
Поделиться на другие сайты

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

Пару лет назад в какой-то программулине (возможно СтратеджиКвантс) я встречал реализацию этой функции, но не для торговли, а для анализа. Там же было написано, что на текущий момент не существует советников, где бы она была в полной мере реализована. Что-то похожее по результату было в изиволкере (но там просто мартин с коэффициентом меньше 1, называлось "умный мм"). А так да, тема очень крутая, позволяет улучшить результаты торговли за счет уменьшения глубины просадок и, самое главное, сохранить депозит, если сет или советник окончательно "сломаются".

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Эта фишечка именно для уменьшения глубины просадки и более быстрого выхода из нее.

Цитата

сохранить депозит, если сет или советник окончательно "сломаются"


На это есть другие мыслишки.
Торговая стратегия, не приносящая ни прибыли, ни убытков отвечает следующему требованию (после учета комиссии):
%Win * Avg. Win = %Loss * Avg. Loss
где
%Win - процент прибыльных сделок
Avg. Win - средняя величина прибыльной сделки
%Loss - процент убыточных сделок
Avg. Loss - средняя величина убыточной сделки.
Поскольку:
% Loss = 100% - %Win
то выражение можно переписать следующим образом:
Avg.Win / Avg.Loss = (100% - %Win) / %Win
Решив это уравнение для различных значений %Win и нанеся решение на график, мы получим кривую нулевой доходности, область под которой будет соответствовать множеству убыточных торговых стратегий, а над кривой - множеству прибыльных торговых стратегий.
Очевидны два соображения: во-первых, чем выше отстоят результаты тестирования торговой системы от этой кривой, тем лучше. Во-вторых, если взять результаты торговой стратегии в неком скользящем временном окне, то они будут «мигрировать», смещаясь то в одну, то в другую сторону, иногда опускаясь и под кривую нулевой доходности. Эта «миграция» отражает степень изменяющегося соответствия системы рынку - в периоды хорошего соответствия рынку результаты будут располагаться высоко над кривой, когда же система «проваливается», то результаты будут «нырять» под кривую.
При выборе торговой системы для реальной торговли хочется, чтобы ее показатели (Avg.Win/Avg.Loss и %Win) находились на некотором безопасном расстоянии от кривой нулевой доходности, так, чтобы случайные флюктуации доходности не вывели эти показатели в убыточную зону. Однако какое расстояние можно принять за относительно безопасное? Выбор этой величины, в общем-то, носит субъективный характер. Вот что говорит Райан Джонс (Ryan Jones) в книге «Торговая игра» (The Trading Game):
Цитата

Стандартом очень хорошей торговой системы является сохранение ею способности приносить прибыль даже в том случае, если вы одновременно уменьшите процент выигрышных сделок на 10 процентов, а соотношение прибыльной сделки к убыточной на единицу. Если это возможно для вашей системы, то вы подошли к Святому Граалю трейдинга настолько близко, насколько это вообще возможно


Переложим этот критерий безопасности на язык формул:
Avg.Win/Avg.Loss = (100% -( %Win-10%)) / (%Win-10%) + 1
Решим это уравнение и нанесем значения полученной таким образом кривой безопасности на график:
Спойлер


На рисунке две кривые создают в соответствии с принятым критерием три зоны: находящуюся над кривой безопасности зону относительно безопасной торговли, между двумя кривыми - зону прибыльной, но потенциально опасной торговли, и находящуюся под кривой нулевой доходности зону убыточной торговли.
Итак, при попадении под кривую нулевой доходности думаю стоит остановить торговлю.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

а какой период выбирал для вычисления средней кривой ? (если вопрос в данном алгоритме уместен)
например
Если брать 200 последних сделок, сумма по ним окажется +20
Если брать 100 последних сделок, то сумма доходности по ним окажется 0
Если брать 50 последних сделок то сумма по ним окажется, -20


Это описание того места когда стратегия начала терять свою "прибыльности"
Ведь если мы возьмем слишком длинный период сглаживания, мы потеряем приличную часть депозита до того момента как стратегия перейдет в "красную" зону

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Там не средняя, а боллинджер с периодом 16 и отклонением 1.0.
И CCI с периодом 6.
Как видно, периоды достаточно короткие, поэтому функция достаточно чувствительна к изменению кривой прибыли.

По поводу кривой нулевой доходности и кривой безопасной торговли - это будет следующее мое исследование. Цель такая:
- при торговле выше кривой безопасности увеличивать расчетный лот, скажем, в 1,2 раза. Это даст возможность получения дополнительной прибыли, когда рынок располагает к дополнительному риску.
- при торговле между КБ и КНД применять расчетный лот без модификаторов. Штатная работа системы.
- при торговле ниже кривой нулевой доходности сбрасывать лот до минимального (0,01), пока система не выйдет в зону между КБ и КНД. Также можно применить такой фильтр - если определенное количество сделок, попавшее под кривую нулевой доходности, превышает заданное, советник останавливает работу - стратегия перестала работать.

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте! Для трендового советника подобрал функции для расчета лота исходя из процента риска и стоп лосса. ставящемся на локальный максимум или минимум. Функцию для определения количества пунктов (стоп лосс) написал сам. я из начинающих. Расчет лота происходит не правильно.компилятор выдает предупреждения.
Помогите пожалуйста разобраться.
//--------------------------------------------------------------------
//функция находит минимальный экстремум по заданному кол-ву баров
//--------------------------------------------------------------------
double GetMinPrice()
{
double minprice=9999999;
for( int i=0; i {
mp= iLow(Symbol(),PERIOD_CURRENT, i);
if( mp minprice=mp;
}
return(minprice);
}
//+------------------------------------------------------------------+
//функция находит максимальный экстремум по заданному кол-ву баров
//--------------------------------------------------------------------
double GetMaxPrice()
{
double maxprice=-999999;
for(int i=0; i {
mp=iHigh(Symbol(),PERIOD_CURRENT, i);
if( mp> maxprice)
maxprice=mp;
}
return(maxprice);
}
//+------------------------------------------------------------------+
//функция расчитывает лот, исходя из размера стоплосса и риска
//--------------------------------------------------------------------
double Lot_Calculate()
{
double minlot = MarketInfo(Symbol(),MODE_MINLOT);
double maxlot = MarketInfo(Symbol(),MODE_MAXLOT);
double steplot = MarketInfo(Symbol(),MODE_LOTSTEP);
double money_risk = NormalizeDouble(AccountEquity()*Risk/100,2);
double calc_pip_cost = NormalizeDouble(money_risk/Pips(),2);
double lot_pip_cost = MarketInfo(Symbol(),MODE_TICKVALUE);
while(!MathIsValidNumber(lot_pip_cost)|| lot_pip_cost ==0)
{
lot_pip_cost=MarketInfo(Symbol(),MODE_TICKVALUE);
}
double lot= calc_pip_cost / lot_pip_cost;
if(lot else if(lot>=maxlot)lot=maxlot;
else if(lot>minlot &&lot {
int k= int((lot-minlot)/steplot);
lot= NormalizeDouble( minlot+k*steplot,2);
}
return(lot);
}
//+------------------------------------------------------------------+
//функция считающая кол-во пунктов для стоплосса
//--------------------------------------------------------------------
int Pips()
{
double cci1=iCCI(Symbol(),0,Period_cci1,Price_cci1,1);//ССИ используется как трендовый
GetMaxPrice();
GetMinPrice();
if (cci1>0)kp= Open[0]- GetMinPrice();
if (cci1
if (Digits==3)sl=NormalizeDouble(kp*100,0);
if (Digits==5)sl=NormalizeDouble(kp*10000,0);
return(sl);
}
//--------------------------------------------------------------------

Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте!
По-моему перемудрили Вы с функцией расчета лота. Вот так точно будет все правильно работать:

double Lot_Calculate()
{
double minlot = MarketInfo(Symbol(),MODE_MINLOT);
double maxlot = MarketInfo(Symbol(),MODE_MAXLOT);
double money_risk = NormalizeDouble(AccountEquity()*Risk/100,2);
double calc_pip_cost = NormalizeDouble(MarketInfo(Symbol(),MODE_TICKVALUE)*10,2);
int sl_pips = Pips();
double lot = minlot;
if(sl_pips>0)
lot=NormalizeDouble(money_risk/sl_pips/calc_pip_cost,2);
if(lot if(lot>maxlot)lot=maxlot;

return(lot);
}


Укажите в каких именно строках компилятор выдает предупреждения. А вообще, скорее всего, просто где-то путаница с типом данных.



Ссылка на сообщение
Поделиться на другие сайты

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

DreamWorks спасибо за функцию!
Компилятор выдает "возможная потеря данных из-за преобразования типов " в строках
int Pips()
{
double cci1=iCCI(Symbol(),0,Period_cci1,Price_cci1,1);//ССИ используется как трендовый
GetMaxPrice();
GetMinPrice();
if (cci1>0)kp= Open[0]- GetMinPrice();
if (cci1
if (Digits==3)sl=NormalizeDouble(kp*100,0); _______ В ЭТИХ ДВУХ СТРОКАХ перед равно
if (Digits==5)sl=NormalizeDouble(kp*10000,0);_______
return(sl);
}

Ссылка на сообщение
Поделиться на другие сайты

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

Ну я же говорю, что с типом данных у Вас путаница. Функция int Pips() имеет тип данных int. Соответственно возвращать она должна данные такого-же типа что и сама, то есть int. А у Вас она возвращает return(sl). А переменной sl вот в этих строках присваивается значение типа double:

if (Digits==3)sl=NormalizeDouble(kp*100,0);  
if (Digits==5)sl=NormalizeDouble(kp*10000,0);


Либо приведите sl к int. Либо объявите функцию как double.
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день!!! Хотел попробовать добавить эту фишечку!!! но не могу идентифицировать переменную "PricePoint". Компилятор ругается: 'PricePoint' - undeclared identifier...прошу не судить строго, так как не так давно в программировании

Ссылка на сообщение
Поделиться на другие сайты

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

Интересная фишка, а как это всё хозяйство применимить к ручной торговле? Допустим в виде индикатора или советника помощника.С визуализацией кривой ну типо как RSI

Ссылка на сообщение
Поделиться на другие сайты

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

Так может напишите такой индикатор? Мне кажется что есть люди которые уже нашли свой грааль и хотели-бы применить данный метод в своей торговле.

Ссылка на сообщение
Поделиться на другие сайты

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

Код выдает ошибку - array out of range in (840,22)

Линия

Pips[j]=Pips[j-1]+(OrderOpenPrice()-OrderClosePrice())/PricePoint;


Ошибка возникает после первого закрытого ордера. Что то не так с индексом j-1. Изменено пользователем dimakTR
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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


Я вроде правил давненько, попробуйте
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); }
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

Войти

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

Войти

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


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

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