imho значения копируются не с картинки в буфер, а таки из буфера в буфер и на это копирование сдвиг никак не должен влиять.
Для того, чтобы получить у нижнего индикатора такую же картинку как у верхнего, нужно скопировать со сдвигом не 10, не -10, а -20.
Эт как-то не правильно.
Что-то писал со сдвигом, подробностей не помню, давно дело было, но тоже какая-то беда была :)
с servicedesk уже ругались?)
...
с servicedesk уже ругались?)
Пока нет.
Если в МТ4 iМА с параметром Shift (не тот, который последний), последним праметром передать 0, то получаем значение которое на баре 0 у сдвинутой у МА. За координаты приняты бары цены. И это правильно, потому-что интересуют значения на каком-то конкретном баре. Заморочки с вычислениями в индикаторе, когда у буфера установлен сдвиг через SetIndexShift(), но это не страшно, потому, что располагаем параметром сдвига, на сколько сдвинули в SetIndexShift(), на столько же смещаемся при обращении к буферу.
Здесь... Если попытаться скопировать значение с бара 0, вообще ничего не получим.
1. Нет аналогии с МТ4.
2. Странно выглядит то, чтобы получить значения соответствующие барам, надо выполнять копирование с удвоенным сдвигом.
3. Если надо действительно делать так, как написано в п.2, то это большая проблема, потому что с каждым индикатором надо разбираться, есть ли у него параметр сдвига, а просто хэнладми пользоваться становится нереальным. Прежде, чем включать индикатор в эксперта, его нужно досконально исследовать, нет ли у него параметра сдвига.
Скромно надеюсь, что это все-таки ошибка в терминале, где то перепутан "+" с "-" или "-" с "+", потому-что очень странный п.2.
...
Скромно надеюсь, что это все-таки ошибка в терминале, где то перепутан "+" с "-" или "-" с "+", потому-что очень странный п.2.
Вышло экстренное обновление (build 772). Проблема осталась?
Или что-то не понято?

- www.mql5.com
Для того, чтобы получить у нижнего индикатора такую же картинку как у верхнего, нужно скопировать со сдвигом не 10, не -10, а -20.
Не совсем так:
//+------------------------------------------------------------------+ //| Test.mq5 | //| Copyright 2012, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrYellow #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- indicator buffers double MABuffer[]; //--- int Handle; int shift=10; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,MABuffer,INDICATOR_DATA); PlotIndexSetInteger(0,PLOT_SHIFT,shift); Handle=iMA(Symbol(),Period(),2,shift,MODE_SMA,PRICE_CLOSE); ChartIndicatorAdd(0,0,Handle); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[]) { //--- ArrayInitialize(MABuffer,EMPTY_VALUE); CopyBuffer(Handle,0,-shift,rates_total,MABuffer); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Не совсем так:
В вашем примере сначала буферу ставится смещение:
PlotIndexSetInteger(0,PLOT_SHIFT,shift);
Потом копирование выполняется со смещением:
CopyBuffer(Handle,0,-shift,rates_total,MABuffer);
По одному значению shift, но два раза, итого смещение удвоенное.
Если буферу смещение не ставить, то необходимо выполнять копирование с удвоенным смещением.
#property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrYellow #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- indicator buffers double MABuffer[]; //--- int Handle; int shift=10; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,MABuffer,INDICATOR_DATA); //PlotIndexSetInteger(0,PLOT_SHIFT,shift); Handle=iMA(Symbol(),Period(),2,shift,MODE_SMA,PRICE_CLOSE); ChartIndicatorAdd(0,0,Handle); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],const double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[]) { //--- ArrayInitialize(MABuffer,EMPTY_VALUE); CopyBuffer(Handle,0,-shift*2,rates_total,MABuffer); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
,
Да, такое поведение заложено и меняться не будет. Сдвиг индикатора влияет только на отображение.
#property copyright "Copyright 2011, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- indicator buffers double Label1Buffer[]; int h; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { h=iMA(NULL,0,10,10,MODE_SMA,PRICE_CLOSE); //--- indicator buffers mapping SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA); //--- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- CopyBuffer(h,0,0,rates_total,Label1Buffer); return(rates_total); }
От такого кода имеем такую. картинку:
Представим, что это в эксперте выполняется копирование... значит нужно вычислять смещение с которым выполнять копирование. Т.е. нужно знать параметр индикатора отвечающий за смещение, а в индикаторе может незвестно что и как смещаться, может и не быть параметра напрямую соответствуещего смещению, смещение может как-нибудь вычисляться. Даже может не быть исходника индикатора.
Если располагаем только хэндлом?
В общем, эта фича (которая, оказывается не баг) значительно снижает функциональные возможности терминала.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Или что-то не понято?
Сверху МА 10, simple, close со сдвигом 10.
Снизу - индикатор находит хэндл верхнего индикатора, копирует его буфер:
Для того, чтобы получить у нижнего индикатора такую же картинку как у верхнего, нужно скопировать со сдвигом не 10, не -10, а -20.