Здравствуйте, гость ( Вход | Регистрация )

> Определение тренда, Определяем тренд по эксперту ProtoType-IX
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 килобайт ) Кол-во скачиваний: 582
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
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, 19:32
Plastик   Ты, похоже, сам запутался! Как же я могу счит...   2.11.2007, 22:21
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.2025, 14:35