Перейти к содержимому

Theme© by Fisana
 

Фотография
* * * * * 4 Голосов

Советник PuriaM2


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 593

#391 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 20 April 2011 - 17:45

думаю общее расхождение в серверных временах не так критична, и при оптимизации на каждом из ДЦ сгладиться.


Меня пока больше смущает не расхождение времени ДЦ с GMT (хотя это позже нужно будет сделать), а то, что используется в вычислениях функция Hour(), которая, судя по описанию языка, является не текущим временем, а временем старта программы советники - и, как написано, константой со времени старта, не изменяющейся...

Вместо неё (функции Hour()), как мне кажется, во всех местах её использования, уместно заменить на что-то типа:

1. TimeHour( TimeCurrent( ) ) - это число часов текущего времени установленного на компьютере;
или
2. TimeHour( Time ) - это число часов серверного времени последнего пришедшего тика;
или
3. TimeHour( Time[ 0 ] ) - это число часов серверного времени открытия текущего бара;
_http://docs.mql4.com/ru/predefined/variables/time :

datetime Time[] Массив-таймсерия, содержащий время открытия каждого бара текущего графика. Данные типа datetime представляют собой время в секундах, прошедшее с 00:00 1 января 1970 года.


Это нужно бы обсудить и проверить, что лучше из ... - я пока пишу голословно ... из соображений ;)
  • Good_day это нравится

 
 

#392 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 20 April 2011 - 17:58

2. TimeHour( Time ) - это число часов серверного времени последнего пришедшего тика;
или
3. TimeHour( Time[ 0 ] ) - это число часов серверного времени открытия текущего бара;


Вот эти 2 трюка (2 и 3) пройдут только потому, что этот советник принимает решения и проделывает операции только по началу нового бора...
Можеьт быть лучшим решением было бы:
4. TimeHour( Time[ 1 ] - <число секунд в тайм-врейме, например 900 для M15>) - т.е. это время закрытия предыдущего бара (т.е. последнего закрытого).
  • Good_day и wasja это нравится

#393 git

git

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 34 сообщений

Отправлено 20 April 2011 - 18:34

Wargod

Olej

Спасибо! Уточню отпишусь.



#394 wasja

wasja

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 22 сообщений

Отправлено 20 April 2011 - 19:31

Вот эти 2 трюка (2 и 3) пройдут только потому, что этот советник принимает решения и проделывает операции только по началу нового бора...
Можеьт быть лучшим решением было бы:
4. TimeHour( Time[ 1 ] - <число секунд в тайм-врейме, например 900 для M15>) - т.е. это время закрытия предыдущего бара (т.е. последнего закрытого).


да согласен надо бы разобраться

просто когда тестил советника смотрел вот на это!


время открытия ордеров с 2 до 3 ..... я сейчас сверюсь с реальным графиком! (прикрепленный файлик смотреть)
там ли он открывал=) Сверился, вроде на реальном там. Вопрос стоит будет ли в РЕАЛЕ , поставлю на демо, все 24 сета и посмотрю во соклько что открылось и буду точно знать!

может когда советник будет в работе, временную функцию использовать другую.! А когда тестируем то эту?
Надеюсь на ваше "чутье"=) Олег=)

Прикрепленные файлы



#395 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 20 April 2011 - 23:32

Сверился, вроде на реальном там. Вопрос стоит будет ли в РЕАЛЕ , поставлю на демо, все 24 сета и посмотрю во соклько что открылось и буду точно знать!

Сделал такой маленький тест - отдельный советник (t1.mq4):
int nBars = 0, nBarN = 0;

int start() {
   if( nBars != Bars ) {                        	// начался новый бар ...
  	nBars = Bars;
  	nBarN++;
  	Alert( "#", nBarN,
     	       " время=", Hour(), ":", Minute(),
      	  	" локальное=", TimeHour( TimeCurrent( ) ), ":", TimeMinute( TimeCurrent( ) ),
       	     " начала бара=", TimeHour( Time[ 0 ] ), ":", TimeMinute( Time[ 0 ] ) );
   }
}
Результат:

2011.04.20 23:20:01 t1 EURUSD,M1: Alert: #3 время=22:20 локальное=22:20 начала бара=22:20
2011.04.20 23:19:04 t1 EURUSD,M1: Alert: #2 время=22:19 локальное=22:19 начала бара=22:19
2011.04.20 23:18:50 t1 EURUSD,M1: Alert: #1 время=22:18 локальное=22:18 начала бара=22:18

Результат странный ... все 3 времени совпадают + изменяются от бара к бару, т.е. фраза в документации по языку MQL4 о том, что

(в процессе выполнения программы это значение не меняется).


- относительно Hour() и Minute() - это бредень :rant:
И, таким образом, получается, что вы таки можете использовать Hour() - вопреки документации!!!

С другой стороны, на моём локальном времени компьютера в это время было 23:18 - 23:19 ... и это время синхронизировано по серверу точного времени, т.е. точное - GMT + 2 - украинское время...
Значит GMT - 21:18...
ДЦ (сервер) - Альпари ... значит он даёт отметки времени в шкале GMT + 1 ... это где такое время? Германия?

В любом случае - временные метки должны быть сведены к GMT!
  • Good_day и wasja это нравится

#396 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 20 April 2011 - 23:39

Только вот это место - нехорошо! :

if( ma1 > ma2 && ma1 > ma3&& timecontrol() )


Добавлять условие в этом месте нельзя - эти условия проверяются для выяснения пересечений кривых MA (ушла кривая вниз или ушла вверх - для определения дальнейшего перехода)...

Добавить условие запрещения открывать ордера по времени нужно непосредственно в том уже месте, где они открываются ... например вот в этих условиях (их 2 - для Buy и для Sell):
    	if( macd < 0 && SellOne ) {

  • Good_day и wasja это нравится

#397 marker1

marker1

    В бою

  • Свой человек
  • PipPipPipPipPipPipPip
  • 152 сообщений

Отправлено 21 April 2011 - 07:57

Что то я никак не пойму, что вы хотите к нему прикрутить насчет времени:))) Можно кратко и доступно?:))

#398 Wargod

Wargod

    Первый выстрел

  • Новички
  • PipPip
  • 6 сообщений

Отправлено 21 April 2011 - 09:44

ДЦ (сервер) - Альпари ... значит он даёт отметки времени в шкале GMT + 1 ... это где такое время? Германия?

В любом случае - временные метки должны быть сведены к GMT!


ЖМТ+1 это СЕТ - европейское время. По опыту работы с временными совами, могу добавить, что наибольшее влияние оказывает время начала торговых сессий. К примеру для евры активные движения начинаются в 8 и 9 часов (СЕТ) начало сессий Лондона и Европы (Франкфурт по-моему). Смена тренда или его усиление с 11 до 15 - выход евро новостей. Как правило смена тренда в 16-17 - включение америкосов. На японо-сессии как правило штиль до 8 часов. (Все время в СЕТ)

Мая ИМХА такова, что пускать трендовик по евре лучше всего с 8 до 20 (СЕТ), наиболее надежные сигналы с 9 до 13. Но если решили прикручивать время - нужны правила выхода (независимо от времени) ну и ессесено защита сделки - стопы, тралы, безубытки и тд.

PS: Для мелких депо рекомендую предусмотреть выход в безубыток через 25-30 пунктов для евры - этот маневр уменьшает абсолютную просадку, при этом уменьшение прибыли незначительное. Для других валют надо тестить...

#399 wasja

wasja

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 22 сообщений

Отправлено 21 April 2011 - 11:20

Не успел Олег вчера отписать=)
Тоже самое сделал , на пипсовочном советнике.

- относительно Hour() и Minute() - это бредень :rant:
И, таким образом, получается, что вы таки можете использовать Hour() - вопреки документации!!!


именно так и есть. Я это видел (процедуру) в журнале фортрейдер в который Вы статью про пурию писали.

Значит с временем мы решили Hour() и Minute() подходют=), я правильно понял. Корректировка для GMT ( ну если для четкости эксперемента и использование советника в привязок открытия международных бирж).


про то то куда "пихать время" СОГЛАСЕН, ложанулся не вник=)
исправлю!...


Хотя теперь это не так важно. Есть время открытия баров, было бы супер пурию перемодифицировать , как я писал раньше. Только красиво не получается, языковой барьер.
Попробую прооптить и выдать 4 наиболее прибыльных периода=)
сеты и тело выкину позже.




з.ы. Олег , надеюсь Вы немного времени найдете и добьем все =) Оптиму Ф еще бы к этому всему и будет !!!=)

#400 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 21 April 2011 - 13:46

Что то я никак не пойму, что вы хотите к нему прикрутить насчет времени:))) Можно кратко и доступно?:))


Чтобы определить советнику интервал времени суток когда он может торговать, например: с 9:00 по 10:00 ;)
  • Good_day это нравится

#401 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 21 April 2011 - 13:50

ЖМТ+1 это СЕТ - европейское время.


Даже от того, что это среднеевропейское время ;) - оно не может быть нам указ ;)...
Хотя бы просто потому, что некоторые ДЦ дают метки времени по этому времени GMT+1, другие совсем по другому ... и в принципе могут давать по-любому.

Поэтому, считаю, что единственно нормальной шкалой веремени может быть только GMT! :
Осетрина может быть только одной свежести - первой.

Во всём остальном, раскладка по временам приведенная - очень интересно, пригодится.
  • Good_day это нравится

#402 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 21 April 2011 - 13:56

именно так и есть. Я это видел (процедуру) в журнале фортрейдер в который Вы статью про пурию писали.

Значит с временем мы решили Hour() и Minute() подходют=), я правильно понял.


Можно.
Но я буду использовать TimeHour( Time[ 0 ] ) - что (пока?) то же самое по значению, но точно соответствует и документации по смыслу.

Корректировка для GMT ( ну если для четкости эксперемента и использование советника в привязок открытия международных бирж).


Это нужно доделать, но там уже всё, в основном, ясно... из другой темы обсуждений ;)

Есть время открытия баров, было бы супер пурию перемодифицировать , как я писал раньше. Только красиво не получается, языковой барьер.
Попробую прооптить и выдать 4 наиболее прибыльных периода=)
сеты и тело выкину позже.

з.ы. Олег , надеюсь Вы немного времени найдете и добьем все =) Оптиму Ф еще бы к этому всему и будет !!!=)


Сделаю я вам ... "красиво" ;)...
В скором времени - версия 11 будет...
  • Good_day и wasja это нравится

#403 wasja

wasja

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 22 сообщений

Отправлено 21 April 2011 - 15:52

Сделаю я вам ... "красиво" ;)...
В скором времени - версия 11 будет...


не сомневаюсь!
у меня какие то потуги!

хотел вот так

   //<=== Сюда доходим только на начальном тике нового бара!
    
   // разбивка на времна и кривые.!
   if( (Hour()>=0) && (Hour()<7)) {
      MovingPeriod1 = 3;
      MovingPeriod2 = 5;
      MovingPeriod3 = 333;}
  if( (Hour()>=7) && (Hour()<8)) {
      MovingPeriod1 = 9;
      MovingPeriod2 = 23;
      MovingPeriod3 = 253;}
   if( (Hour()>=8) && (Hour()<11)) {
      MovingPeriod1 = 18;
      MovingPeriod2 = 11;
      MovingPeriod3 = 320;}
      if( (Hour()>=11) && (Hour()<12)) {
      MovingPeriod1 = 17;
      MovingPeriod2 = 22;
      MovingPeriod3 = 257;}   
   if( (Hour()>=12) && (Hour()<22)) {
      MovingPeriod1 = 9;
      MovingPeriod2 = 5;
      MovingPeriod3 = 350;}
     if( (Hour()>=22) && (Hour()<1)) {
      MovingPeriod1 = 17;
      MovingPeriod2 = 3;
      MovingPeriod3 = 209;}  
   
   double ma1, ma2, ma3, macd;
   ma1  = iMA( NULL, 0, MovingPeriod1, 0, MODE_EMA, PRICE_CLOSE, 1 );
   ma2  = iMA( NULL, 0, MovingPeriod2, 0, MODE_LWMA, PRICE_LOW, 1 );
   ma3  = iMA( NULL, 0, MovingPeriod3, 0, MODE_LWMA, PRICE_LOW, 1 );
   macd = iMACD( NULL, 0, 15, 26, 1, PRICE_CLOSE, MODE_MAIN, 1 );


где периоды по времени рассчитал в отдельности с максимальной маржой.
не работает чета.
Понимаю, что не туда поместил, а куда не найду...(сложности пока с языком)

#404 wasja

wasja

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 22 сообщений

Отправлено 21 April 2011 - 16:05

вот 4 оптимизации
0-7
7-15
15-22
22-1

перенес
if( macd > 0 && BuyOne && timecontrol()) {


выше вот хотел все собрать вместе не пошло!

Прикрепленные изображения

  • TesterGraph4.gif
  • TesterGraph3.gif
  • TesterGraph2.gif
  • TesterGraph1.gif


#405 Olej

Olej

    Почётный житель форума

  • Свой человек
  • PipPipPipPipPipPipPipPipPipPip
  • 411 сообщений

Отправлено 21 April 2011 - 16:25

перенес

if( macd > 0 && BuyOne && timecontrol()) {


Может и так...
Только вы не спешите + хорошо разберитесь что выхотите ;)

Если у вас в 13:00 фиксируется пересечение МА, а торговля в 13:00 запрещена ... до 20:00 - то в 20:00 (время разрешения) нужно ли открывать ордер на основании сигнала на открытие, наступившего в 13:00 ???
(это, скорее всего, то что у вас сейчас работает)

... или ...

Если у вас торговля разрешена только после 20:00, то вы будете руководствоваться только сигналами, сформированными после 20:00 ???
И это совсем другой случай, и в той ситуации, которая тут же описана абзацем выше - открытия ордера не должно быть.
Этот вариант может и чище, корректнее, но в нём вы будете ещё меньше (в разы!) ловить ордеров ... что ещё уменьшит профитность.
  • Good_day это нравится



Copyright © 2024 Your Company Name