Добрый день.
Обратил внимание, что иногда CopyBuffer получает в массив buffer данные указанного буфера указанного индикатора в другом направлении.
Иногда в [0] элементе находится последняя свеча. Иногда последняя свеча находится в [N] элементе. Команд для смены ориентации не было.
В чем может быть дело?
на всякий случай, направление точно стоит перед копированием?
Добрый день.
Обратил внимание, что иногда CopyBuffer получает в массив buffer данные указанного буфера указанного индикатора в другом направлении.
Иногда в [0] элементе находится последняя свеча. Иногда последняя свеча находится в [N] элементе. Команд для смены ориентации не было.
В чем может быть дело?
хинт, овеянный в документации - если не уверены в какую сторону индексируется массив, выставьте принудительно,
что в перевод с менеджерского на прикладной- до вызова стандартных функций 5-ки ,ткни ArraySetAsSeries(x,false), а потом как тебе надо
хинт, овеянный в документации - если не уверены в какую сторону индексируется массив, выставьте принудительно,
что в перевод с менеджерского на прикладной- до вызова стандартных функций 5-ки ,ткни ArraySetAsSeries(x,false), а потом как тебе надо
Добрый день.
Обратил внимание, что иногда CopyBuffer получает в массив buffer данные указанного буфера указанного индикатора в другом направлении.
Иногда в [0] элементе находится последняя свеча. Иногда последняя свеча находится в [N] элементе. Команд для смены ориентации не было.
В чем может быть дело?
Дело в вашей невнимательности. Просто так само по себе направление не может меняться.
хинт, овеянный в документации - если не уверены в какую сторону индексируется массив, выставьте принудительно,
что в перевод с менеджерского на прикладной- до вызова стандартных функций 5-ки ,ткни ArraySetAsSeries(x,false), а потом как тебе надо
Очередная глупость. Это же каким надо быть великим программистом, чтобы быть неуверенным в какую, сторону индексируется массив?
По всей документации, эти предложения идут вместе. Не пренебрегайте этим
MqlRates rates[]; ArraySetAsSeries(rates,true); // последние сначала
Исходный код и скрины с дебагера
К вопросу, что у настоящих кодеров "все всегда хорошо".
Код
//+------------------------------------------------------------------+ //| sov_test.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| MACD | //+------------------------------------------------------------------+ input int fast_ema_period=12; // MACD период быстрой средней input int slow_ema_period=26; // MACD период медленной средней input int signal_period=9; // MACD период усреднения разности input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; // MACD тип цены //--- индикаторные буферы double MACDBufferWork[]; double MACDSignalBufferWork[]; //--- переменная для хранения хэндла индикатора iMACD int MACD_handleWork; //+------------------------------------------------------------------+ //| MA | //+------------------------------------------------------------------+ input int ma_period=9; // MA период средней. //************** Можно поподбирать оптимальное значение input int ma_shift=0; // MA смещение input ENUM_MA_METHOD ma_method=MODE_SMA; // MA тип сглаживания //--- индикаторный буфер double MABufferWork[]; //--- переменная для хранения хэндла индикатора iMA int MA_handleWork; string symbol; ENUM_TIMEFRAMES periodWork; //----------------------------- Буферы для чтения данных по индикаторам //--- MACD double MACDWork[3]; //--- MA double MAWork[3]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { periodWork=PERIOD_M15; symbol="GBPUSD"; //----------------------------------------------------------------------------------------------------------------------- //******************************************** MACD **************************************************| //----------------------------------------------------------------------------------------------------------------------- SetIndexBuffer(0,MACDBufferWork,INDICATOR_CALCULATIONS); SetIndexBuffer(1,MACDSignalBufferWork,INDICATOR_CALCULATIONS); MACD_handleWork=iMACD(symbol,periodWork,fast_ema_period,slow_ema_period,signal_period,applied_price); if(MACD_handleWork==INVALID_HANDLE) { PrintFormat("Не удалось создать хэндл индикатора iMACD для пары %s/%s, код ошибки %d", symbol, EnumToString(periodWork), GetLastError()); return(INIT_FAILED); } //----------------------------------------------------------------------------------------------------------------------- //******************************************** MA ****************************************************| //----------------------------------------------------------------------------------------------------------------------- SetIndexBuffer(2,MABufferWork,INDICATOR_DATA); MA_handleWork=iMA(symbol,periodWork,ma_period,ma_shift,ma_method,applied_price); if (MA_handleWork==INVALID_HANDLE) { PrintFormat("Не удалось создать хэндл индикатора iMA для пары %s/%s, код ошибки %d", symbol, EnumToString(periodWork), GetLastError()); return(INIT_FAILED); } CopyBuffer(MA_handleWork,0,0,3,MAWork); CopyBuffer(MACD_handleWork,0,0,3,MACDWork); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { CopyBuffer(MA_handleWork,0,0,3,MAWork); CopyBuffer(MACD_handleWork,0,0,3,MACDWork); }
Скрины
MA
MACD
Как несложно убедиться, после CopyBuffer в [0] совсем не значение с текущей свечи.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Обратил внимание, что иногда CopyBuffer получает в массив buffer данные указанного буфера указанного индикатора в другом направлении.
Иногда в [0] элементе находится последняя свеча. Иногда последняя свеча находится в [N] элементе. Команд для смены ориентации не было.
В чем может быть дело?