Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 877

 

друзья, в MQL5 я новичок, поэтому, если проблемы, о которых я здесь пишу, являются моими косяками, прошу сильно не пинать.

Хотел сделать мультивалютный сов., но столкнулся с некоторыми странностями работы тестера стратегий, проявляющимися исключительно при тестировании мультивалютников. Происходит непонятный сдвиг таймсерий символов, отличных от символа основного графика. Сделал простейший сов., который в начале каждого бара получает время открытия нулевого и первого бара по двум символам. Почему-то через 1 бар начинается сдвиг таймсерии второго символа. Проявляется на любом символе и любом таймфрейме. Я тестировал на EURUSD, вторым символом был GBPUSD. Пробовал также наоборот, пробовал на других парах-ошибка проявляется всегда. Картинка из журнала после тестирования на М15:

Картинка из журнала после тестирования на Н1:

Настройки тестера стратегий:

Собственно, код для проверки:

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
input string SecondSymbol="GBPUSD";

int OnInit()
  {
   SymbolSelect(SecondSymbol,true);//выбираем второй символ в MarketWatch(для тестера)
//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
//---

  }

void OnTick()
  {
   static datetime BarTime;//время начала бара
   int per=PeriodSeconds(PERIOD_CURRENT);

   datetime time_curr=TimeCurrent()/per*per;
   if(time_curr!=BarTime)
     {
      BarTime=time_curr;

      datetime Time_One[],Time_Two[];
      bool yes=ArraySetAsSeries(Time_One,true);
      yes=ArraySetAsSeries(Time_Two,true);

      int i=CopyTime(NULL,PERIOD_CURRENT,0,2,Time_One);    //текущий символ
      i=CopyTime(SecondSymbol,PERIOD_CURRENT,0,2,Time_Two);//второй символ
      
      Print("ВремяНачалаБара по ",Symbol(),":",Time_One[0]," ВремяНачалаБара по ",SecondSymbol,":",Time_Two[0]);
     }
  }

Буду признателен за любую помощь.

 
stroganow:

друзья, в MQL5 я новичок, поэтому, если проблемы, о которых я здесь пишу, являются моими косяками, прошу сильно не пинать.

Хотел сделать мультивалютный сов., но столкнулся с некоторыми странностями работы тестера стратегий, проявляющимися исключительно при тестировании мультивалютников. Происходит непонятный сдвиг таймсерий символов, отличных от символа основного графика. Сделал простейший сов., который в начале каждого бара получает время открытия нулевого и первого бара по двум символам. Почему-то через 1 бар начинается сдвиг таймсерии второго символа. Проявляется на любом символе и любом таймфрейме. Я тестировал на EURUSD, вторым символом был GBPUSD. Пробовал также наоборот, пробовал на других парах-ошибка проявляется всегда. Картинка из журнала после тестирования на М15:

Картинка из журнала после тестирования на Н1:

Настройки тестера стратегий:

Собственно, код для проверки:

Буду признателен за любую помощь.

Тестер работает правильно. Ошибка в логике работы программы: два символа - это как две жизни разных людей (здесь "человек" - это аналог "символ"). А второй человек не обязан просыпаться в тоже время, что и первый ("просыпаться" - это аналог "появление нового бара").

То есть нужно ждать появления нового бара И на первом символе И на втором.


Добавлено: статья Обработчик события "новый бар"

 

Подскажите, вот рисунок бычьего пин-бара, как должен выглядеть принципиальный код условия его распознавания?

if(low[i] <= open[i] && high[i] > close[i] && open[i] >= close[i] && close[i] <= Base[i]) // верно ли это утверждение?
 
clickaider:

Подскажите, вот рисунок бычьего пин-бара, как должен выглядеть принципиальный код условия его распознавания?

Это медвежий пин-бар. Направление свечи не принципиально. ВажнО расположение длинной тени: вверх - медвежий, вниз - бычий. И требуется подтверждение от уровневых индикаторов.
 
Artyom Trishkin:
Это медвежий пин-бар. Направление свечи не принципиально. ВажнО расположение длинной тени: вверх - медвежий, вниз - бычий. И требуется подтверждение от уровневых индикаторов.
А можно это показать кодовой конструкцией? Просто не совсем понятно, как код правильно должен выглядеть
 
clickaider:
А можно это показать кодовой конструкцией? Просто не совсем понятно, как код правильно должен выглядеть
С мобильного не смогу вам код написать. Навскидку:
Вам нужен размер свечи от Хай ло Лоу, размер тела свечи, процентное отношение тела к размеру всей свечи, размер короткой тени должен не превышать некий порог (чтобы она отсутствовала, либо была относительно маленькой к телу), ну и расположение верха/низа тела относительно полного размера свечи.
Как-то так...
 
Artyom Trishkin:
С мобильного не смогу вам код написать. Навскидку:
Вам нужен размер свечи от Хай ло Лоу, размер тела свечи, процентное отношение тела к размеру всей свечи, размер короткой тени должен не превышать некий порог (чтобы она отсутствовала, либо была относительно маленькой к телу), ну и расположение верха/низа тела относительно полного размера свечи.
Как-то так...

Графически это выглядит вот так:

 
clickaider:

Графически это выглядит вот так:

А теперь опишите словами то, что описали графически. Используйте high, low, open, close.
Как только опишете словами - считайте, что ТЗ для себя уже написали :)
Останется заменить словесные конструкции кодом.
 
Artyom Trishkin:
А теперь опишите словами то, что описали графически. Используйте high, low, open, close.
Как только опишете словами - считайте, что ТЗ для себя уже написали :)
Останется заменить словесные конструкции кодом.
Хорошо, сейчас сделаю)
 

Размер свечи = high[i] - low[i]

Верхняя тень = high[i] - open[i]

Тело свечи = open[i] - close[i]

Нижняя тень = close[i] - low[i]

Соотношение тела свечи к ее размеру - (high[i] - low[i]) / (open[i] - close[i])

Размер короткой тени должен не превышать некий порог - (close[i] - low[i]) <= close[i]

Ориентация свечи - high[i] > open[i] > close[i] > low[i]