Maks1981 Опубликовано 20 сентября, 2014 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 20 сентября, 2014 В процессе написания модуля тейков и стопов по ходу дела смастерил интересный индикатор для выставления начальных ТП и СЛ. В основе расчетов лежит критерий VAR.http://tlap.com/forum/indikatory/7/informator-indikator-dlya-ustanovki-stopov-po-kriteriyu-var/7115Если кому-то интересно, могу смастерить индикатор для отображения уровней тп и сл для остальных вариантов. Добавлено: 27-06-2014 11:56:44Я так понял, помощи в разработке я не дождусь.Придется всю эту махину писать самому. Работаю уже две недели, часа по четыре в день.Двигается медленно, а времени уходит куча.Поэтому чтобы мне не было обидно я выложу тут версию советника для ручной торговли (не для встраивания в советники) со слегка облегченным функционалом. Так сказать лайт версию. Про версию и версию для встраивания в советники найдете на маркете mql. Уважаемый, Версия про готова? Я бы приобрел. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 20 сентября, 2014 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 20 сентября, 2014 В разработке 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
galaxy07 Опубликовано 14 марта, 2015 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 14 марта, 2015 Как разработка? Будет продолжение?Есть несколько интересных моментов относительно управления капиталом. По идеологии Ральфа Винса. Путем нахождения оптимального F, составления портфеля этих систем с добавлением каждой из них весов. Правда там нужно будет сделать советник для управления позицией для тех советников у которых отсутствует ММ. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Dusterovod Опубликовано 9 января, 2016 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 9 января, 2016 Всем привет!Может будет кому интересен следующий скрипт для сопровождения ордеров в части их частичного закрытия.Суть скрипта проста. При открытии ордера и движении его в положительную сторону он частично закрывается с заданными в скрипте параметрами стартового лота и шага закрытия. В прикреплённом первом изображении показан пример ордера SELL. В точке 1 ордер открывается. В точках 2 происходит частичное закрытие. В точке 3 - закрытие по безубытку. В изображении 2 - пример с BUY ордером. blog1.jpgblog2.jpgMyTraderMM.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 22 июля, 2016 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 22 июля, 2016 (изменено) Мне очень понравилась статья про теханализ графиков доходности памм счетовПосле ее прочтения у меня родилась идея применить теханализ к графику доходности в советнике. Сначала немного теории: Спойлер И это простые стратегии, которые пришли мне на ум. Можно придумать и намного более сложное управление.Сначала я протестировал новую функцию на удачном сете. Спойлер Базовый результат:С применением фильтра: Результаты отличаются не сильно, хоть и в лучшую сторону. Поэтому я выбрал самый хреновый сет того же советника и провел тесты на нем. Спойлер Базовый результат:Выглядит довольно плачевно.Фильтрация только по машке:Если кривая упала ниже машки, лот уменьшается до 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 Изменено 22 июля, 2016 пользователем Silentspec 25 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexander.Yar Опубликовано 22 июля, 2016 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 22 июля, 2016 Вот это хлебные крошки >000Доходность бралась абсолютная или как эффективность 1 лота (пункты) ? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 22 июля, 2016 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 22 июля, 2016 (изменено) Цитата Доходность бралась абсолютная или как эффективность 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) { 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); } Выводы: Результаты тестов показали, что данная функция действительно значительно улучшает базовые результаты советников, позволяя более гибко и грамотно использовать силу манименеджмента себе во благо. Следующим шагом для пытливого ума может стать перевод сделок с заниженного лота на виртуальную торговлю, чтобы в случае просадок не тратить и цента. Также возможно использование и еще более сложного и мудреного алгоритма.Лично я буду использовать данную функцию в своих советниках. Изменено 22 июля, 2016 пользователем Silentspec 7 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Doveman Опубликовано 22 июля, 2016 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 22 июля, 2016 Пару лет назад в какой-то программулине (возможно СтратеджиКвантс) я встречал реализацию этой функции, но не для торговли, а для анализа. Там же было написано, что на текущий момент не существует советников, где бы она была в полной мере реализована. Что-то похожее по результату было в изиволкере (но там просто мартин с коэффициентом меньше 1, называлось "умный мм"). А так да, тема очень крутая, позволяет улучшить результаты торговли за счет уменьшения глубины просадок и, самое главное, сохранить депозит, если сет или советник окончательно "сломаются". 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 22 июля, 2016 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 22 июля, 2016 Эта фишечка именно для уменьшения глубины просадки и более быстрого выхода из нее. Цитата сохранить депозит, если сет или советник окончательно "сломаются" На это есть другие мыслишки.Торговая стратегия, не приносящая ни прибыли, ни убытков отвечает следующему требованию (после учета комиссии):%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 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexander.Yar Опубликовано 22 июля, 2016 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 22 июля, 2016 а какой период выбирал для вычисления средней кривой ? (если вопрос в данном алгоритме уместен)например Если брать 200 последних сделок, сумма по ним окажется +20Если брать 100 последних сделок, то сумма доходности по ним окажется 0Если брать 50 последних сделок то сумма по ним окажется, -20Это описание того места когда стратегия начала терять свою "прибыльности"Ведь если мы возьмем слишком длинный период сглаживания, мы потеряем приличную часть депозита до того момента как стратегия перейдет в "красную" зону 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 22 июля, 2016 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 22 июля, 2016 Там не средняя, а боллинджер с периодом 16 и отклонением 1.0.И CCI с периодом 6.Как видно, периоды достаточно короткие, поэтому функция достаточно чувствительна к изменению кривой прибыли.По поводу кривой нулевой доходности и кривой безопасной торговли - это будет следующее мое исследование. Цель такая:- при торговле выше кривой безопасности увеличивать расчетный лот, скажем, в 1,2 раза. Это даст возможность получения дополнительной прибыли, когда рынок располагает к дополнительному риску.- при торговле между КБ и КНД применять расчетный лот без модификаторов. Штатная работа системы.- при торговле ниже кривой нулевой доходности сбрасывать лот до минимального (0,01), пока система не выйдет в зону между КБ и КНД. Также можно применить такой фильтр - если определенное количество сделок, попавшее под кривую нулевой доходности, превышает заданное, советник останавливает работу - стратегия перестала работать. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alexander.Yar Опубликовано 22 июля, 2016 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 22 июля, 2016 Примите за ваше исследование 5 Ссылка на сообщение Поделиться на другие сайты More sharing options...
chww Опубликовано 24 января, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 24 января, 2017 Здравствуйте! Для трендового советника подобрал функции для расчета лота исходя из процента риска и стоп лосса. ставящемся на локальный максимум или минимум. Функцию для определения количества пунктов (стоп лосс) написал сам. я из начинающих. Расчет лота происходит не правильно.компилятор выдает предупреждения.Помогите пожалуйста разобраться.//--------------------------------------------------------------------//функция находит минимальный экстремум по заданному кол-ву баров//--------------------------------------------------------------------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); }//-------------------------------------------------------------------- Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 25 января, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 25 января, 2017 Здравствуйте!По-моему перемудрили Вы с функцией расчета лота. Вот так точно будет все правильно работать: 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); } Укажите в каких именно строках компилятор выдает предупреждения. А вообще, скорее всего, просто где-то путаница с типом данных. Ссылка на сообщение Поделиться на другие сайты More sharing options...
chww Опубликовано 25 января, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 25 января, 2017 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); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 26 января, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 26 января, 2017 Ну я же говорю, что с типом данных у Вас путаница. Функция 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. Ссылка на сообщение Поделиться на другие сайты More sharing options...
chww Опубликовано 26 января, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 26 января, 2017 Понял, исправил. Большое спасибо!! Ссылка на сообщение Поделиться на другие сайты More sharing options...
drewnya Опубликовано 7 апреля, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 7 апреля, 2017 Добрый день!!! Хотел попробовать добавить эту фишечку!!! но не могу идентифицировать переменную "PricePoint". Компилятор ругается: 'PricePoint' - undeclared identifier...прошу не судить строго, так как не так давно в программировании Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 7 апреля, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 7 апреля, 2017 PricePoint это просто значение пункта Ссылка на сообщение Поделиться на другие сайты More sharing options...
dipladog Опубликовано 4 мая, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 4 мая, 2017 Интересная фишка, а как это всё хозяйство применимить к ручной торговле? Допустим в виде индикатора или советника помощника.С визуализацией кривой ну типо как RSI Ссылка на сообщение Поделиться на другие сайты More sharing options...
Silentspec Опубликовано 4 мая, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 4 мая, 2017 Придется писать индикатор Ссылка на сообщение Поделиться на другие сайты More sharing options...
dipladog Опубликовано 4 мая, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 4 мая, 2017 Так может напишите такой индикатор? Мне кажется что есть люди которые уже нашли свой грааль и хотели-бы применить данный метод в своей торговле. Ссылка на сообщение Поделиться на другие сайты More sharing options...
dimakTR Опубликовано 26 мая, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 26 мая, 2017 (изменено) Код выдает ошибку - array out of range in (840,22)Линия Pips[j]=Pips[j-1]+(OrderOpenPrice()-OrderClosePrice())/PricePoint; Ошибка возникает после первого закрытого ордера. Что то не так с индексом j-1. Изменено 26 мая, 2017 пользователем dimakTR 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SVS696 Опубликовано 7 ноября, 2017 Поделиться Ударим умным мани-менеджментом по бездорожью рынков! Опубликовано 7 ноября, 2017 В чем проблема пока не выяснили? чуть позже хочу поизучать код Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 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); } 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти