![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
leonid553 |
![]()
Сообщение
#1
|
![]() Группа: Активный участник Сообщений: 2 002 Регистрация: 14.4.2006 Из: г.Самара Пользователь №: 28 Спасибо сказали: 11 раз(а) ![]() |
В мультивалютном советнике Rosh-a "ProtoType-IX" приведен пример определения тренда по четырем последним экстремумам. http://codebase.mql4.com/ru/1256
В аннотации указано: "Данный советник торговал без алгоритмических ошибок на чемпионате по автотрейдингу 2006 года. Требует для работы индикатор NRTR GATOR. Может являться примером мультивалютного эксперта и, надеюсь, облегчит написание такового новичкам в MQL4." Похоже пришла пора разобраться с ТРЕНДОМ, - как это делается. Хотя бы "методом тыка". Для примера можно взять любой простейший эксперт и использовать приемы определения тренда из советника "ProtoType-IX". (см. пост №2) Возьмем оттуда всё, что касается тренда и вставим в любой простейший советник. В результате получим: Function "GetSymbolString" is not referenced and will be removed from exp-file Function "PeriodNumber" is not referenced and will be removed from exp-file Function "TrendByWPR" is not referenced and will be removed from exp-file Function "SetArrow" is not referenced and will be removed from exp-file Function "SetUpArrows" is not referenced and will be removed from exp-file Function "TrendExist" is not referenced and will be removed from exp-file Мы получили шесть функций, которые вычисляются, но пока не принимают участия в торговле нашего эксперта. Поскольку, наш эксперт пусть будет НЕ МУЛЬТИВАЛЮТНЫЙ, то первая функция нам неинтересна. Вторая функция, - пожалуй, тоже, т.к. она задает таймфрейм. Но оставим пока всё как есть. Начнем с самого начала. Во внешних нашего эксперта параметрах мы добавляем: Код extern int PeriodWPR=8; extern double CriteriaWPR=25; extern int ATRPeriod=40;// период ATR для индикатора extern double kATR=0.5; extern int ZeroBar=8; // выход в безубыток через ZeroBar баров extern double MinTargetinSpread=5.0; extern double TP_SL_Criteria=2.0; extern int MaxOpenedOrders=3; extern double MaxOrderSize=5.0; Понятно что пока чего-то не хватает а что-то будет лишним. Надеюсь разберемся... Далее (после внешних параметров) задаем по аналогии глобальные переменные: Код int LastUpArray[13,7]; int PreLastUpArray[13,7]; int LastDownArray[13,7]; int PreLastDownArray[13,7]; double Complextrend[13,7];// собираем все тренды (Z,A и N тренды) в одно значение. double TPvsSL[13,7];// отношение TakeProfit к StopLoss на данном символе и таймфрейме int BestTPvsSLSymbol[20]; // лучшие символы по соотношению TP/SL int BestTPvsSLPeriod[20]; // лучшие таймфреймы по соотношению TP/SL //-------------------------------------------- string SymbolsArray[13]={"","USDCHF","GBPUSD","EURUSD","USDJPY","AUDUSD", "USDCAD","EURGBP","EURAUD","EURCHF","EURJPY","GBPJPY","GBPCHF"}; int TrendOnSymbol[13,7]; // тренд по символу и таймфрейму int MyBarsArrays[13,7];// храним количество баров по инструменту и таймфрейму int TimeNullArrays[13,7];// храним время Time[0] по инструменту и таймфрейму Не будем пока особо вникать. Посмотрим дальше... |
![]() ![]() |
leonid553 |
![]()
Сообщение
#2
|
![]() Группа: Активный участник Сообщений: 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; } } } } Эскизы прикрепленных изображений Прикрепленные файлы ![]() |
Plastик |
![]()
Сообщение
#3
|
Группа: Активный участник Сообщений: 15 Регистрация: 25.10.2007 Пользователь №: 1 527 Спасибо сказали: 0 раз(а) ![]() |
Ты, похоже, сам запутался! Как же я могу считать текущий бар от LOW до HIGHT, если он у нас еще не закрылся! У нас на текущем баре есть цена открытия и один из экстремумов! - или ЛОУ или ХАЙ ! - больше пока ничего нет. Как это только открытие и один из экстремумов?? Я не согласен. Сначало есть открытие - потом например цена пошла вниз - до какого то момента у нас есть только опен и лоу(оно же равно клоуз и текущей цене). Потом цена остановилась и пошла вверх - в этот момент у нас есть опен, лоу и клоуз(текущая цена). Когда цена поднимется выше опен - сделает хай и откатит назад, то у нас будет и ЛОУ и ХАЙ и опен и слоуз(текущая цена). Вот нужна длина от хай до лоу |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 13.3.2025, 14:19 |