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

 
ryzhak.vladimir:

Здравствуйте! Есть массив цен закрытия 30ти минутных баров пары EURUSD за период от 01.01.2012 до 31.12.2012. Получаю его с помощью функции CopyClose. НО CopyClose[0] не равняется цене закрытия на последний бар 31.12.2012 в самом терминале, если открыть график. Подскажите что я не так делаю. Почему цены из CopyClose и по факту на графике не совпадают

Перед вызовом Close_buf[0] нужно использовать ArraySetAsSeries. Один раз, на все протяжении работы кода советника/скрипта/индикатора.

ArraySetAsSeries(Close_buf,true);
 
fyords:

Перед вызовом Close_buf[0] нужно использовать ArraySetAsSeries. Один раз, на все протяжении работы кода советника/скрипта/индикатора.

 

Все равно не совпадает, выводит 1.32308 вместо 1.31964(цена закрытия последнего бара в 2012 году)

//+------------------------------------------------------------------+
//|                                                    simpleBet.mq5 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
double Close_buf[];//динамический массив для хранения значений закрытия баров
string my_symbol = "EURUSD";//валютная пара
ENUM_TIMEFRAMES my_timeframe = PERIOD_M30;//таймфрейм
datetime testTimeStart = D'2012.01.01';
datetime testTimeEnd = D'2012.12.31';
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---    
     CopyClose(my_symbol,my_timeframe,testTimeStart,testTimeEnd,Close_buf); 
     ArraySetAsSeries(Close_buf,true);
     Print(Close_buf[0]);
  }
//+------------------------------------------------------------------+
 
ryzhak.vladimir:

Все равно не совпадает, выводит 1.32308 вместо 1.31964(цена закрытия последнего бара в 2012 году)

Вы указываете
datetime testTimeEnd = D'2012.12.31';
А если указать
datetime testTimeEnd = D'2012.12.31 23:59:59';
 
Да сработало, спасибо! Хотя все равно не понятно почему цены совпали только при указании точной даты вплоть до секунд
 
ryzhak.vladimir:
Да сработало, спасибо! Хотя все равно не понятно почему цены совпали только при указании точной даты вплоть до секунд

Наверное потому, что 2012.12.31 это по умолчанию 2012.12.31 00:00:00, а не 2012.12.31 24:00:00 

 
Цитата из документации о функции CopyBuffer: "Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара)." Но на практике для того, чтобы в 0м элементе был текущий бар приходится применять ArraySetAsSeries(Close_buf,true). Хотя в документации написано что по дефолту копируется так, что в 0м элементе самый последний бар. Почему такое различие?
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ryzhak.vladimir: Цитата из документации о функции CopyBuffer: "Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара)." Но на практике для того, чтобы в 0м элементе был текущий бар приходится применять ArraySetAsSeries(Close_buf,true). Хотя в документации написано что по дефолту копируется так, что в 0м элементе самый последний бар. Почему такое различие?
 А Вы внимательнее рисунок посмотрите. Куда копируется элемент 'start_pos'?
 
Столкнулся с проблемой психологического направления.
Написал трендовый советник и вроде как успешно. Сейчас пишу флэтовый советник и... уже в 5-ый раз этот советник сводится к предыдущему, словно я зациклился на одном только алгоритме. Все начинается вроде как "новое", но после структуризации алгоритма начинаю писать советник, который всячески начинает подстраивается под первый (удачный).

Если кто сталкивался с подобной фигней - сообщите как "избавится" от навящего алгоритма, который во флэте лишь спускает депозит.
 
Lester: Если кто сталкивался с подобной фигней - сообщите как "избавится" от навящего алгоритма, который во флэте лишь спускает депозит.
C такой фигней не сталкивался, но для общего переключения внимания попробуйте поизучать чужие алгоритмы.
 
Lester:

Столкнулся с проблемой психологического направления.
Написал трендовый советник и вроде как успешно. Сейчас пишу флэтовый советник и... уже в 5-ый раз этот советник сводится к предыдущему, словно я зациклился на одном только алгоритме. Все начинается вроде как "новое", но после структуризации алгоритма начинаю писать советник, который всячески начинает подстраивается под первый (удачный).

Если кто сталкивался с подобной фигней - сообщите как "избавится" от навящего алгоритма, который во флэте лишь спускает депозит.
У Вас не психологическая проблема, а проблема системного характера - отсутствие точных признаков различия тренда от флэта. Как только Вы определитесь с этим моментом, у  Вас все получится.