Здравствуйте, гость ( Вход | Регистрация )
| leonid553 |
6.10.2007, 12:21
Сообщение
#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.11.2007, 19:32
Сообщение
#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; } } } } Эскизы прикрепленных изображений Прикрепленные файлы
Plastic_v04.mq4 ( 6.16 килобайт )
Кол-во скачиваний: 584 |
| Plastик |
2.11.2007, 22:21
Сообщение
#3
|
|
Группа: Активный участник Сообщений: 15 Регистрация: 25.10.2007 Пользователь №: 1 527 Спасибо сказали: 0 раз(а) |
Ты, похоже, сам запутался! Как же я могу считать текущий бар от LOW до HIGHT, если он у нас еще не закрылся! У нас на текущем баре есть цена открытия и один из экстремумов! - или ЛОУ или ХАЙ ! - больше пока ничего нет. Как это только открытие и один из экстремумов?? Я не согласен. Сначало есть открытие - потом например цена пошла вниз - до какого то момента у нас есть только опен и лоу(оно же равно клоуз и текущей цене). Потом цена остановилась и пошла вверх - в этот момент у нас есть опен, лоу и клоуз(текущая цена). Когда цена поднимется выше опен - сделает хай и откатит назад, то у нас будет и ЛОУ и ХАЙ и опен и слоуз(текущая цена). Вот нужна длина от хай до лоу |
leonid553 Определение тренда 6.10.2007, 12:21
leonid553 Прежде всего (как я уже говорил), возьмем простейш... 6.10.2007, 12:54
leonid553 С внешними параметрами и глобальными переменными м... 6.10.2007, 13:27
leonid553 Далее вне функции int start() вставляем начало фун... 6.10.2007, 18:40
Dimi Привет! Эта переменная походу нигде не участву... 7.10.2007, 13:57
leonid553 Да действительно! Эта переменная не задействов... 7.10.2007, 14:49
leonid553 Начинаем вникать в определение тренда по индикатор... 7.10.2007, 15:29
leonid553 Продолжаем....
// ================ начинаем пои... 7.10.2007, 16:21
Moriarty
Продолжаем....
Действительно, этот алгоритм опред... 7.10.2007, 17:54
leonid553
Имхо всё черезчур усложнено. Все три последних фу... 8.10.2007, 19:19
leonid553 Далее, - отображаем найденные экстремумы на график... 7.10.2007, 17:02
leonid553 Здесь немного остановимся! Вот сейчас обнаружи... 7.10.2007, 17:58
Moriarty
Хитрый Rosh вызывает его в эксперте, как "NR... 7.10.2007, 18:07
Moriarty Вот что у меня получилось с определением пиков/дон... 8.10.2007, 12:40
leonid553 А у Роша действительно много лишнего.
Например, и... 8.10.2007, 19:33
Moriarty Вот сейчас наблюдаю за Вашим, Moriarty, индикаторо... 9.10.2007, 21:43
leonid553 В визуальном режиме видно, что советник ProtoType... 9.10.2007, 11:59
leonid553 Ок!
Вот ещё идея подошла! По граалям... Из... 10.10.2007, 6:15
Dm_35 Привет.
Очень интересная тема.
Чуть переделал код,... 27.10.2007, 12:22
Dimi
Привет.
Очень интересная тема.
Чуть переделал код... 28.10.2007, 13:55
Dm_35 Привет.
В советник надо скопировать этот индикатор... 28.10.2007, 17:37
Dimi Если я правильно понимаю код, то на каждом ТФ ищут... 28.10.2007, 19:16
Dm_35 Привет.
Если поставить индикатор на М15 а потом по... 28.10.2007, 23:27
leonid553
Привет.
Если поставить индикатор на М15 а потом п... 29.10.2007, 17:16
leonid553 Всем привет! У меня вот проблемы с инетом. Про... 29.10.2007, 11:02
Dm_35 Привет.
Я на пред. станице выложил свою версию Ваш... 29.10.2007, 11:55
Dm_35 Привет.
Это Вам спасибо за огромную работу, у меня... 29.10.2007, 23:29
Plastик double vol_long= (iClose(NULL,0,1)- iOpen(NULL,0,1... 2.11.2007, 13:50
leonid553 Умножение как раз необходимо! Вот смотри :
Что... 2.11.2007, 14:14
Plastик
Умножение как раз необходимо! Вот смотри :
Чт... 2.11.2007, 14:14
leonid553 Понял. Тогда надо определиться с моментом входа.
... 2.11.2007, 14:54
Plastик
Понял. Тогда надо определиться с моментом входа. ... 2.11.2007, 19:07
leonid553 Вот вроде - то что надо. Но коэф.=10000 пока остав... 2.11.2007, 17:36
leonid553 Похоже ещё надо добавить "блокировку". Ч... 2.11.2007, 18:04
Plastик А вот еще вариантец
2007.11.02 22:24:45 TestGenera... 2.11.2007, 19:26
leonid553
А вот еще вариантец
2007.11.02 22:24:45 TestGener... 2.11.2007, 19:55
leonid553 У тебя, видимо, нет котировок с разных тф на истор... 2.11.2007, 20:20
Plastик
У тебя, видимо, нет котировок с разных тф на исто... 2.11.2007, 22:55
Plastик Символ GBPUSD (Great Britan vs US Dollar)
Период ... 3.11.2007, 11:06
leonid553 Такой результат не проходит!
"Ошибки рас... 3.11.2007, 15:59
leonid553 Поймать тренд .... :)
B) 18.11.2007, 22:14
Dimi Привет всем! Тут вот интересный скрипт, не пом... 24.11.2007, 16:02
Dimi Вот мое первое творение, если можно так сказать ;... 2.12.2007, 11:32
Dimi Привет, всем!!! Вот индикатор для МТ4 ... 6.12.2007, 18:55![]() ![]() |
|
Текстовая версия | Сейчас: 13.3.2026, 5:23 |