![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
leonid553 |
![]()
Сообщение
#31
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Понял. Тогда надо определиться с моментом входа.
Я то думал, что мы оцениваем уже сформировавшийся бар. И по результатам оценки принимаем решение, - открыть позицию или нет. Получается алгоритм должен быть такой: Вот открылся бар (в 0:00ч.). Далее советник пассивно ждет, когда (и если) этот бар вырастет до заданного нами значения (в твоем примере BarSize_long(short)- до 100 пипсов). Если такое случилось, - то мы входим в рынок, - по направлению движения бара. Если бар не достиг этого значения, - отслеживаем следующий... ? |
leonid553 |
![]()
Сообщение
#32
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Вот вроде - то что надо. Но коэф.=10000 пока оставил. Для Фуя задавать размер с учетом этого!
Работает в рЕжиме по ВСЕМ ТИКАМ Код double vol_long = (iHigh(NULL,1440,0)- iOpen(NULL,1440,0))*10000; double vol_short= (iOpen(NULL,1440,0)- iLow(NULL,1440,0))*10000; Comment (vol_long); Comment (vol_short); //===== Ищем возможность войти в рынок ========================================== int Orders=OrdersTotal (); //получаем кол-во открытых ордеров if (Orders==0) //если нет открытых ордеров { //---------проверяем условие на покупку---------------------------- if ( (vol_long>BarSize_long ) ) { ... } //--------проверяем условие на продажу------------------------------ if ( (vol_short>BarSize_short)) Прикрепленные файлы ![]() |
leonid553 |
![]()
Сообщение
#33
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Похоже ещё надо добавить "блокировку". Чтобы на одном баре - не более одной сделки было....
Эскизы прикрепленных изображений |
Plastик |
![]()
Сообщение
#34
|
Группа: Активный участник Сообщений: 15 Регистрация: 25.10.2007 Пользователь №: 1 527 Спасибо сказали: 0 раз(а) ![]() |
Понял. Тогда надо определиться с моментом входа. Я то думал, что мы оцениваем уже сформировавшийся бар. И по результатам оценки принимаем решение, - открыть позицию или нет. Получается алгоритм должен быть такой: Вот открылся бар (в 0:00ч.). Далее советник пассивно ждет, когда (и если) этот бар вырастет до заданного нами значения (в твоем примере BarSize_long(short)- до 100 пипсов). Если такое случилось, - то мы входим в рынок, - по направлению движения бара. Если бар не достиг этого значения, - отслеживаем следующий... ? Абсолютно верно! Только не забываем что бары у нас дневные! И если я правильно понял ты теперь считаешь длину бара от оупена, а надо как в предыдущей версии от лоя до хая(предыдущя яверсия хорошо, тока на брала данные из предыдущей свечи, а надо из текущей! И проверку на один открытый ордер в день тоже надо! Почему то у меня пишет вот чего: 2007.11.02 22:19:42 TestGenerator: unmatched data error (volume limit 518 at 2007.06.29 20:00 exceeded) Сообщение отредактировал Plastик - 2.11.2007, 19:20 |
Plastик |
![]()
Сообщение
#35
|
Группа: Активный участник Сообщений: 15 Регистрация: 25.10.2007 Пользователь №: 1 527 Спасибо сказали: 0 раз(а) ![]() |
А вот еще вариантец
2007.11.02 22:24:45 TestGenerator: unmatched data error (high value 1.9782 at 2007.06.08 06:15 and price 1.9783 mismatched 2007.11.02 22:24:45 TestGenerator: unmatched data error (volume limit 12 at 2007.06.05 20:30 exceeded) 2007.11.02 22:24:45 TestGenerator: unmatched data error, rest errors will not be logged |
leonid553 |
![]()
Сообщение
#36
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
Ты, похоже, сам запутался! Как же я могу считать текущий бар от LOW до HIGHT, если он у нас еще не закрылся! У нас на текущем баре есть цена открытия и один из экстремумов! - или ЛОУ или ХАЙ ! - больше пока ничего нет.
Вот я и вычисляю величину бара от цены открытия до экстремума! В закачке - версия строго для иеновых пар . Дневные свечи. По всем тикам. С ЯНВ. 2007г. GBPJPY, D Качество моделирования 90.00% Начальный депозит 10000.00 Чистая прибыль 356.55 Общая прибыль 4329.64 Общий убыток -3973.09 Прибыльность 1.09 Матожидание выигрыша 2.49 Абсолютная просадка 517.82 Максимальная просадка 825.09 (8.00%) Относительная просадка 8.00% (825.09) Всего сделок 143 Короткие позиции (% выигравших) 73 (69.86%) Длинные позиции (% выигравших) 70 (68.57%) Прибыльные сделки (% от всех) 99 (69.23%) Убыточные сделки (% от всех) 44 (30.77%) Самая большая прибыльная сделка 51.54 убыточная сделка -96.59 Средняя прибыльная сделка 43.73 убыточная сделка -90.30 Максимальное количество непрерывных выигрышей (прибыль) 12 (516.73) непрерывных проигрышей (убыток) 5 (-453.33) Максимальная непрерывная прибыль (число выигрышей) 516.73 (12) непрерывный убыток (число проигрышей) -453.33 (5) Средний непрерывный выигрыш 3 непрерывный проигрыш 1 ---------------------------------------------------------------------------- Надо оптимизировать параметры. И попробовать с тралом погонять. Код //+------------------------------------------------------------------+ //|Stochastic_Env.mq4.mq4 //| leonid553 //| http://www.tradersforum.net.ru/ //+------------------------------------------------------------------+ #property copyright "leonid553 & co" #property link "http://www.tradersforum.net.ru/" //---- input parameters--------- extern int MagicNum =6784; extern int BarSize_long =100; extern int TP_long =50; extern int SL_long =100; extern int BarSize_short =100; extern int TP_short =50; extern int SL_short =100; //------------------------------ extern bool UseTrailing = false; extern int lMinProfit = 30; extern int sMinProfit = 30; extern int lTrailingStop = 30; extern int sTrailingStop = 30; extern int lTrailingStep = 5; extern int sTrailingStep = 5; extern double Lot=0.1; extern int Slippage=3; //-- Подключаемые модули -- #include <stdlib.mqh> //------------------- int ticket; int ExpertBars; static bool ZeroBarOrd; //********************************************************************* //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { ExpertBars = Bars; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { bool isNewBar=false; if (ExpertBars !=Bars) {ExpertBars=Bars; isNewBar=true; } int _Order=isExpertOrder(); if (isNewBar) { if (_Order!=0) ZeroBarOrd=true; //есть ордер else ZeroBarOrd=false; //нет ордера } if (UseTrailing) TrailPositions(); //********************************************************************* double vol_long = (iHigh(NULL,1440,0)- iOpen(NULL,1440,0))*100; double vol_short= (iOpen(NULL,1440,0)- iLow(NULL,1440,0))*100; Comment (vol_long); Comment (vol_short); //===== Ищем возможность войти в рынок ========================================== int Orders=OrdersTotal (); //получаем кол-во открытых ордеров if (Orders==0) //если нет открытых ордеров { if (!ZeroBarOrd) { //---------проверяем условие на покупку---------------------------- if ( //(vol_>0) && (vol_long>BarSize_long ) ) { ticket=OrderSend(Symbol(),0,Lot,Ask,Slippage,Bid-SL_long *Point, Ask+TP_long *Point,NULL,MagicNum ,0,Green); if (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); } else ZeroBarOrd=true; } //--------проверяем условие на продажу------------------------------ if ( //(vol_<0) && (vol_short>BarSize_short)) { ticket=OrderSend(Symbol(),1,Lot,Bid,Slippage,Bid+SL_short*Point, Bid-TP_short *Point,NULL,MagicNum ,0,Blue); if (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); } else ZeroBarOrd=true; } //------------------------------------------------------------------ } } return(0); } //**************************************************************** void TrailPositions() { int Orders = OrdersTotal(); for (int i=0; i<Orders; i++) { if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue; if (OrderSymbol() != Symbol()) continue; if (OrderType() == OP_BUY) { if (Bid-OrderOpenPrice() > lMinProfit*Point) { if (OrderStopLoss() < Bid-(lTrailingStop+lTrailingStep-1)*Point) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid-lTrailingStop*Point, OrderTakeProfit(), 0, Blue); }}} if (OrderType() == OP_SELL) { if (OrderOpenPrice()-Ask > sMinProfit*Point) { if (OrderStopLoss() > Ask+(sTrailingStop+sTrailingStep-1)*Point || OrderStopLoss() == 0) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask+sTrailingStop*Point, OrderTakeProfit(), 0, Blue); }}}}} //-------------------------------------------------------------------+ //======================================================================================= //| Функция проверки наличия ордеров эксперта |========================================== //| 0 - ордеров нет |========================================== //| 1 - есть ордер Buy |========================================== //| 2 - есть ордер Sell |========================================== //======================================================================================= int isExpertOrder() { int _OrdersTotal=OrdersTotal(); //---------- При тестировании проводим упрощённую проверку ордеров. if (IsTesting()) { if (_OrdersTotal==0) return (0); for (int i=0; i<_OrdersTotal; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType()==OP_BUY) {return(1); break; } if (OrderType()==OP_SELL) {return(2); break; } } } } Эскизы прикрепленных изображений Прикрепленные файлы ![]() |
leonid553 |
![]()
Сообщение
#37
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
А вот еще вариантец 2007.11.02 22:24:45 TestGenerator: unmatched data error (high value 1.9782 at 2007.06.08 06:15 and price 1.9783 mismatched 2007.11.02 22:24:45 TestGenerator: unmatched data error (volume limit 12 at 2007.06.05 20:30 exceeded) 2007.11.02 22:24:45 TestGenerator: unmatched data error, rest errors will not be logged А это не советник виноват. А твоя невнимательность! ![]() ![]() |
leonid553 |
![]()
Сообщение
#38
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
У тебя, видимо, нет котировок с разных тф на истории. Нужно подкачать по всем тф. Советник-то по всем тикам работает. Попробуй поставить дату в тестере с 1 окт. 2007 по " сегодня" ...
|
Plastик |
![]()
Сообщение
#39
|
Группа: Активный участник Сообщений: 15 Регистрация: 25.10.2007 Пользователь №: 1 527 Спасибо сказали: 0 раз(а) ![]() |
Ты, похоже, сам запутался! Как же я могу считать текущий бар от LOW до HIGHT, если он у нас еще не закрылся! У нас на текущем баре есть цена открытия и один из экстремумов! - или ЛОУ или ХАЙ ! - больше пока ничего нет. Как это только открытие и один из экстремумов?? Я не согласен. Сначало есть открытие - потом например цена пошла вниз - до какого то момента у нас есть только опен и лоу(оно же равно клоуз и текущей цене). Потом цена остановилась и пошла вверх - в этот момент у нас есть опен, лоу и клоуз(текущая цена). Когда цена поднимется выше опен - сделает хай и откатит назад, то у нас будет и ЛОУ и ХАЙ и опен и слоуз(текущая цена). Вот нужна длина от хай до лоу |
Plastик |
![]()
Сообщение
#40
|
Группа: Активный участник Сообщений: 15 Регистрация: 25.10.2007 Пользователь №: 1 527 Спасибо сказали: 0 раз(а) ![]() |
У тебя, видимо, нет котировок с разных тф на истории. Нужно подкачать по всем тф. Советник-то по всем тикам работает. Попробуй поставить дату в тестере с 1 окт. 2007 по " сегодня" ... парадокс заключается в том, что это гадство происходит если стоит галочка у визуализации. Без нее все работает. |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 13.3.2025, 14:17 |