![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
NoName |
![]()
Сообщение
#81
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
Приведу, пожалуй, основной код: ShortOnly
Код #property copyright "NoName" #property link "http://www.tradersforum.net.ru/forum/" //---- input parameters--------- extern double x1=88; extern double x2=123; extern double x3=20; extern double x4=107; //----------- extern int iPeriod=10; extern int StopLoss=60; //-------- extern string _Parameters_Trailing = "----- Параметры Трейлинга -----"; extern bool UseTrailing = false; // Использовать трейлинг extern bool ProfitTrailing = false; // Включать трейлинг когда получен профит extern int TrailingStop = 30; // Фиксированный размер трала extern int TrailingStep = 2; // Шаг трейлинга //======================================================================== //-- Подключаемые модули -- #include <b-Lots.mqh> //======================================================================== int Prefix=1; //для Sell //------------------------------ color clModifyBuy = Green; color clModifySell = Blue; //------------------------------ int Magic; int ExpertBars; int Slippage=2; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Magic=GetMagic()*10+Prefix; ExpertBars=Bars; //при запуске советника записываем кол-во баров в терминале //---- //в переменную ExpertBars return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ double perceptron() { double w1 = x1 - 100; double w2 = x2 - 100; double w3 = x3 - 100; double w4 = x4 - 100; double a1 = iStochastic(NULL, 0, iPeriod, 3, 2, MODE_SMA, 0, MODE_MAIN, 0)-50; double a2 = iStochastic(NULL, 0, iPeriod, 3, 2, MODE_SMA, 0, MODE_MAIN, 7)-50; double a3 = iStochastic(NULL, 0, iPeriod, 3, 2, MODE_SMA, 0, MODE_MAIN, 14)-50; double a4 = iStochastic(NULL, 0, iPeriod, 3, 2, MODE_SMA, 0, MODE_MAIN, 21)-50; return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //--------------------- //| здесь проверяется появление нового бара. bool isNewBar=false; //| когда появится новый бар значения ExpertBars if (ExpertBars !=Bars) //| и Bars не совпадут. isNewBar станет true { ExpertBars=Bars; isNewBar=true; } //--------------------- if (isNewBar) { //если появился новый бар bool isExpertSellOrder=false; int spread= MarketInfo(Symbol(),MODE_SPREAD); int _OrdersTotal=OrdersTotal(); for (int i=0; i<_OrdersTotal; i++) { //пробегаем по открытым ордерам if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { //если ордер успешно выбран if (OrderSymbol()==Symbol()) { //если ордер на данном инструменте if (OrderMagicNumber()==Magic) { //если ордер принадлежит данному эксперту if (OrderType()==OP_SELL) { //если ордер на продажу isExpertSellOrder=true; // говорим что ордер эксперта присутсвует if (Ask < (OrderStopLoss() - (StopLoss * 2 + spread)* Point)) { //если мы имеем прибыль превышающую величину 2-х стоплоссов от уровня текущего стоплосса if (perceptron() > 0) { //если перцептрон больше 0 ClosePosition(1); // закрываем Sell //закрываем позицию } } } } } } } if (!isExpertSellOrder) { // если ордера эксперта не нашлись if (perceptron() < 0) Sell(); // если перцептрон меньше 0 - продаём } } // здесь трал по алгоритму Игоря Кима return(0); } P.S. Советники заменил на подправленные. Перекачайте. |
leonid553 |
![]()
Сообщение
#82
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Тоже исправил шкалу.
Но у меня ещё до исправления - и после исправления при компиляции есть: 0 error(s), 1 warning(s) Function "Sell" is not referenced and will be removed from exp-file в обеих версиях - одно и тож |
NoName |
![]()
Сообщение
#83
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
это не ошибка а предупреждение о том что функция Sell не используется и она не будет включена в exp-файл. На работе это не сказывается. В тех советниках, что выложил выше, лишние функции убрал.
|
leonid553 |
![]()
Сообщение
#84
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
никак не могу добиться в шорте профитных результатов!
Тестирую с 2004г. Или стохастик здесь принципиально не годится для этого режима? Или против тренда молотит. Или в конце треда - в лучшем случае вход! |
NoName |
![]()
Сообщение
#85
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
С двухполярным стохастиком результат однозначно хуже. Так Long так и Short.
|
leonid553 |
![]()
Сообщение
#86
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Андрей!
По вопросу защиты текущей прибыли в момент подтягивания стоплосса. Назовем идею - ОТСЕЧКОЙ Я всё-таки думаю, - что проще будет сделать так: Самая Первая сделка советника - пусть идет так, как заложено в алгоритме советника. А уже далее пусть советник начинает реализовывать ОТСЕЧКУ - причем не двумя сделками - как мы вчера планировали, - а лотами ! Вот смотри : ---------------------------------------------------------------------------------------------------------------- /* long position is opened -длинная позиция открылась далее проверяется условие - ЕСЛИ НА МОМЕНТ ОТКРЫТИЯ НОВОГО БАРА ПОЛУЧЕННЫЙ ПРОФИТ БОЛЬШЕ РАЗМЕРА СТОПЛОССА И ЗНАЧЕНИЕ ПЕРЦЕПТРОНА <0 - ПЕРЕВОРАЧИВАЕМСЯ */ // check profit if(Bid > (OrderStopLoss() + (sl * 2 + spread) * Point)) { if(perceptron() < 0) { // reverse ticket = OrderSend(Symbol(), OP_SELL, lots * 2, Bid, 3, Ask + sl * Point, 0, "F1", MagicNumber, 0, Red); ------------------------------------------------------------------------------------------------------------------ Обрати внимание, - что переворот здесь реализуется удвоенным лотом (lots * 2)- в результате чего -текущая длинная позиция закрывается а встречная короткая открывается! Так зачем нам вводить лишнюю сделку, - когда мы можем реализовать ОТСЕЧКУ здесь же, - если заменим (lots * 2) на (lots * 3) ! Далее вводим дополнительное условие - ЕСЛИ НА МОМЕНТ ОТКРЫТИЯ НОВОГО БАРА ПОЛУЧЕННЫЙ ПРОФИТ БОЛЬШЕ РАЗМЕРА подтянувшегося СТОПЛОССА - закрываем один лот из текущих двух! Но лучше конечно закрыть его ,по тейку. Причем предусмотреть ТП во внешних параметрах! - Для экспериментов по оптимизации. Так возможно будет проще... Ещё есть мысль использовать трехступеньчатую систему выходов Виктора, - описанную и реализованную в советнике Игоря Кима, - но это в перспективе.... |
leonid553 |
![]()
Сообщение
#87
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Ещё вот сейчас посмотрел. Кроме стохастика для реализации Отсечки оч. хор. подходит версия с индикаторм Фишера. Версия в открытом доступе есть на стр. 3 в этой ветке - с результатами теста.
Символ GBPUSD (Great Britan vs US Dollar) Период 1 Час (H1) 2004.06.16 - 2007.03.27 Начальный капитал 1000.00 Чистая прибыль 6222.84 Максимальная просадка 1315.32 (19.24%) Относительная просадка 26.64% (356.44) Всего сделок 767 Прибыльные сделки (% от всех) 458 (59.71%) Убыточные сделки (% от всех) 309 (40.29% Это при стоплосс=67. 458-309=149 ![]() |
leonid553 |
![]()
Сообщение
#88
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Поставил версию с Отсечкой.
Но работает некорректно. С трудом вникаю в код. Позиция в Селл открывается - но реагирует только на свой собственный стоплосс. И больше ни на что! Профит игнорирует! Навскидку, - вот такое обьяснение: Видимо, надо ставить уровень отсечки не на линии (sl * 2 + spread) а чуть ближе - на пару пипсов хотя-бы! Тогда программа не будет путаться, - одновременно вычисляя и закрытие лота , и условия на подтяжку стлосса, или переворот! |
leonid553 |
![]()
Сообщение
#89
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
to NoName:
Прогнал исправленную версию с отсечкой. Работает удовлетворительно, но прибыль показалась мне меньше расчетной, - предполагаемой! Стал разбираться. Так и есть! Число сделок не соответствует пропорции с контрольной версией! - без отсечки. Вот, например, евроиена: ------дата----поз---№---лот--цена 0ткр--ст/лосс--прибыль 09.27 14:00 buy ---11-- 0.10-- 136.05-- 135.34 .09.27 14:00 buy ---12 --0.10-- 136.05-- 135.34 .10.06 02:00 close --11 -0.10--- 137.05 --135.34 +93.39 .10.06 03:00 modify-12- 0.10--- 136.05--- 136.22 .10.06 17:00 sell---- 13-- 0.20--- 137.71--- 138.42 .10.06 17:00 sell ----14-- 0.10--- 137.71--- 138.42 .10.06 17:00 close by-13--0.10---136.05--138.42--- +149.01 В 14-00 открыты два ордера в бай №12 и №11 Затем 10.06 в 2-00 ордер №11 закрылся +93.39 Но он должен был закрыться раньше!!!!! Ведь стлосс здесь по этой паре = 67 пипсов И значит примерно с таким же профитом ордер №11 и должен был закрыться - но никак не +93 !!! Далее смотрим! 10.06 в 17-00 фиксация прибыли оставшегося ордера (+149) - переворотом поз 13-14-13 Вот где нестыковка! По первому ордеру - стоплосс работает вроде бы как надо, - а по второму - отсечка запаздывает! Символ EURJPY (Euro vs Japanese Yen) Период 1 Час (H1) 2005.09.09 05:00 - 2007.04.20 22:59 Параметры Stochastic_period=8; slowing=3; x1=175; x2=89; x3=17; x4=68; sl=67; lots=0.1; MagicNumber=888; Начальный депозит 1000.00 Чистая прибыль 4195.17 Матожидание выигрыша 9.78 Абсолютная просадка 806.04 Всего сделок 429 Короткие позиции (% выигравших) 222 (52.70%) Длинные позиции (% выигравших) 207 (64.73%) Прибыльные сделки (% от всех) 251 (58.51%) Убыточные сделки (% от всех) 178 (41.4 Т.е. шаг трала в коде для отсечки заложен с ощибкой! Пож. напиши в коде комментарии, - по всем строкам ,- где ты вносил дополнения и изменения. Иначе трудновато вникать... |
NoName |
![]()
Сообщение
#90
|
![]() Группа: Активный участник Сообщений: 514 Регистрация: 1.5.2006 Из: Украина, Кременчуг Пользователь №: 146 Спасибо сказали: 0 раз(а) ![]() |
Цитата В 14-00 открыты два ордера в бай №12 и №11 Затем 10.06 в 2-00 ордер №11 закрылся +93.39 Но он должен был закрыться раньше!!!!! Ведь стлосс здесь по этой паре = 67 пипсов И значит примерно с таким же профитом ордер №11 и должен был закрыться - но никак не +93 !!! Это объясняется просто. В советнике все действия проводятся при появления бара. На момент появления бара прибыль у нас может быть больше заданного значения стоп-лосса. Это логика заложенная Решетовым - я тут от себя ничего не добавлял. |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 11.5.2025, 21:45 |