Могу ли я получить любое рассчитанное значение из индикатора?
Results 1 to 2 of 2

Thread: Могу ли я получить любое рассчитанное значение из индикатора?

  1. #1
    Как я могу получить значение O [_i] от этого индикатора к советнику.
    O [_] - цена открытия наложенного графика внутри помещения.

    Вставленный код/ --------------------------------------------- --------------------- /| OverlayChart.mq5 |/| Copyright 2014-2016, EarnForex.com |/| http://www.earnforex.com |/| Конвертировано из версии MT4 http://www.irxfx.com |/ ----------------------------------------------- ------------------- # свойство copyright Copyright 2014-2016, EarnForex.com # ссылка на свойство http://www.earnforex.com #property версия 1.01 # свойство indior_chart_window #property indior_buffers 5 #property indior_plots 1 #property indior_type1 DRAW_COLOR_BARS #property indior_color1 clrMediumSeaGreen, clrOrange #property indior_width1 1/Входная строка внутренних параметров SubSymbol = GBPUS входное значение bool Mirroring = false; input ENUM_DRAW_TYPE DrawType = DRAW_COLOR_BARS; цвет ввода GridColor = clrBlack;/Внутренние буферы double O # 91; # 93 ;; двойной H # 91; # 93 ;; двойной L # 91; # 93 ;; двойной C # 91; # 93 ;; двойной цвет # 91; # 93 ;;/Глобальные переменные double SubOpen # 91; # 93 ;; двойной SubHigh # 91; # 93 ;; двойной SubLow # 91; # 93 ;; двойной SubClose # 91; # 93 ;; префикс строки = OverlayChart;/Indior Prefix int Grid = 10;/Линии сетки int SnapPips = 10;/Привязка пипсов для линий сетки/ ---------------------------------------- -------------------------- /| Пользовательская функция инициализации indior |/ ----------------------------------------------- ------------------- int OnInit () {IndiorSetString (INDICATOR_SHORTNAME, диаграмма оверлея ( SubSymbol )); SetIndexBuffer (0, O, INDICATOR_DATA); SetIndexBuffer (1, H, INDICATOR_DATA); SetIndexBuffer (2, L, INDICATOR_DATA); SetIndexBuffer (3, C, INDICATOR_DATA); SetIndexBuffer (4, Color, INDICATOR_COLOR_INDEX); ArraySetAsSeries (O, правда); ArraySetAsSeries (H, true); ArraySetAsSeries (L, правда); ArraySetAsSeries (C, true); ArraySetAsSeries (Color, true); PlotIndexSetDouble (0, PLOT_EMPTY_VALUE, 0); PlotIndexSetInteger (0, PLOT_DRAW_TYPE, DrawType); ArraySetAsSeries (SubOpen, true); ArraySetAsSeries (SubHigh, true); ArraySetAsSeries (SubLow, true); ArraySetAsSeries (SubClose, true); возвращать (INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /| Пользовательская функция индикации деинициализации |/ ----------------------------------------------- ------------------- void OnDeinit (const int reason) {ObjectsDeleteAll (0, Префикс);* for (int _i = 1; _i lt; = Grid; _i ) {ObjectDelete (0, Префикс Grid IntegerToString (_i)); ObjectDelete (0, Префикс Цена IntegerToString (_i)); } *}/ ------------------------------------------- ----------------------- /| Пользовательская функция итерации indior |/ ----------------------------------------------- ------------------- int OnCalculate (const int rate_total, const int prev_calculated, constdatetime Время # 91; # 93 ;, const double Открыть # 91; # 93 ;, const double High # 91; # 93 ;, const double Low # 91; # 93 ;, const double Закрыть # 91; # 93 ;, const long tick_volume # 91; # 93 ;, const long volume # 91; # 93 ;, const int spread # 91; # 93;) {int _BarsCount; double _CurRangeHigh, _CurRangeLow, _CurRangeCenter; double _SubRangeHigh, _SubRangeLow, _SubRangeCenter; double _SubPoint; int _SubDigit; double _SubOpen, _SubHigh, _SubLow, _SubClose; double _PipsRatio; double _GridPips, _GridPrice; int _i; ArraySetAsSeries (Open, true); ArraySetAsSeries (High, true); ArraySetAsSeries (Low, true); ArraySetAsSeries (Close, true); ArraySetAsSeries (Time, true); ArrayInitialize (O, 0); ArrayInitialize (H, 0); ArrayInitialize (L, 0); ArrayInitialize (C, 0);/Рассчитать видимые бары _BarsCount = (int) ChartGetInteger (0, CHART_VISIBLE_BARS) 1; int _FirstBar = (int) ChartGetInteger (0, CHART_FIRST_VISIBLE_BAR); int _LastBar = _FirstBar - _BarsCount 1; if (_LastBar lt; 0) {_LastBar = 0; _BarsCount = _FirstBar 1; }/Рассчитать коэффициент диаграммы _CurRangeHigh = High # 91; ArrayMaximum (High, _LastBar, _BarsCount) # 93 ;; _CurRangeLow = Low # 91; ArrayMinimum (Low, _LastBar, _BarsCount) # 93 ;; _CurRangeCenter = (_CurRangeHigh _CurRangeLow)2; int n; n = CopyOpen (SubSymbol, 0, _LastBar, _BarsCount, SubOpen); if (! CheckData (n, _BarsCount)) return (0); n = CopyHigh (SubSymbol, 0, _LastBar, _BarsCount, SubHigh); if (! CheckData (n, _BarsCount)) return (0); n = CopyLow (SubSymbol, 0, _LastBar, _BarsCount, SubLow); if (! CheckData (n, _BarsCount)) return (0); n = CopyClose (SubSymbol, 0, _LastBar, _BarsCount, SubClose); if (! CheckData (n, _BarsCount)) return (0); двойной SubMax = SubHigh # 91; ArrayMaximum (SubHigh) # 93 ;; double SubMin = SubLow # 91; ArrayMinimum (SubLow) # 93 ;; if (Mirroring) {_SubRangeHigh = SubMin; _SubRangeLow = SubMax; } else {_SubRangeHigh = SubMax; _SubRangeLow = SubMin; } _SubRangeCenter = (_SubRangeHigh _SubRangeLow)2; _SubPoint = SymbolInfoDouble (SubSymbol, SYMBOL_POINT); _SubDigit = (int) SymbolInfoInteger (SubSymbol, SYMBOL_DIGITS); if (_SubRangeHigh - _SubRangeLow == 0) return (0); _PipsRatio = (_CurRangeHigh - _CurRangeLow)(_SubRangeHigh - _SubRangeLow); _GridPips = (_SubRangeHigh - _SubRangeLow)Grid; _GridPips = MathRound ((_ SubRangeHigh - _SubRangeLow)Grid(_SubPoint * SnapPips)) * (_SubPoint * SnapPips);/Рисуем подсвечники для (_i = _LastBar; _i lt; _LastBar _BarsCount; _i ) {int i = _i - _LastBar; _SubOpen = SubOpen # 91; i # 93; - _SubRangeCenter; _SubHigh = SubHigh # 91; i # 93; - _SubRangeCenter; _SubLow = SubLow # 91; i # 93; - _SubRangeCenter; _SubClose = SubClose # 91; i # 93; - _SubRangeCenter; if (Mirroring) {if (_SubOpen lt; _SubClose){H # 91; _i # 93; = _CurRangeCenter _SubHigh * _PipsRatio; L # 91; # 93-i; = _CurRangeCenter _SubLow * _PipsRatio; Цвет # 91; _i # 93; = 0; } else {L # 91; _i # 93; = _CurRangeCenter _SubLow * _PipsRatio; Н # 91; # 93-i; = _CurRangeCenter _SubHigh * _PipsRatio; Цвет # 91; _i # 93; = 1; } C # 91; _i # 93; = _CurRangeCenter _SubClose * _PipsRatio; O # 91; # 93-i; = _CurRangeCenter _SubOpen * _PipsRatio; } else {if (_SubOpen lt; _SubClose) {H # 91; _i # 93; = _CurRangeCenter _SubHigh * _PipsRatio; L # 91; # 93-i; = _CurRangeCenter _SubLow * _PipsRatio; Цвет # 91; _i # 93; = 0; } else {L # 91; _i # 93; = _CurRangeCenter _SubLow * _PipsRatio; Н # 91; # 93-i; = _CurRangeCenter _SubHigh * _PipsRatio; Цвет # 91; _i # 93; = 1; } C # 91; _i # 93; = _CurRangeCenter _SubClose * _PipsRatio; O # 91; # 93-i; = _CurRangeCenter _SubOpen * _PipsRatio; }} для (_i = 1; _i lt; = Grid; _i ) {_GridPrice = MathRound (_SubRangeCenter(_SubPoint * SnapPips)) * * (_SubPoint * SnapPips); _GridPrice = ((_GridPrice _GridPips2) _GridPips * (Grid2 - 1)) - (_GridPips * (_i - 1)); строка grid_string = префикс Grid IntegerToString (_i); ObjectCreate (0, grid_string, OBJ_TREND, 0, 0, 0); ObjectSetInteger (0, grid_string, OBJPROP_TIME, 0, время # 91; _FirstBar # 93;); ObjectSetDouble (0, grid_string, OBJPROP_PRICE, 0, _CurRangeCenter (_GridPrice - _SubRangeCenter) * _PipsRatio); ObjectSetInteger (0, grid_string, OBJPROP_TIME, 1, Time # 91; _LastBar # 93;); ObjectSetDouble (0, grid_string, OBJPROP_PRICE, 1, _CurRangeCenter (_GridPrice - _SubRangeCenter) * _PipsRatio); ObjectSetInteger (0, grid_string, OBJPROP_COLOR, GridColor); ObjectSetInteger (0, grid_string, OBJPROP_STYLE, STYLE_DOT); ObjectSetInteger (0, grid_string, OBJPROP_WIDTH, 1); ObjectSetInteger (0, grid_string, OBJPROP_RAY_RIGHT, true); grid_string = Префикс Цена IntegerToString (_i); ObjectCreate (0, grid_string, OBJ_TEXT, 0, 0, 0); ObjectSetInteger (0, grid_string, OBJPROP_TIME, 0, время # 91; _FirstBar - _BarsCount10 # 93;); ObjectSetDouble (0, grid_string, OBJPROP_PRICE, 0, _CurRangeCenter (_GridPrice - _SubRangeCenter) * _PipsRatio); ObjectSetInteger (0, grid_string, OBJPROP_COLOR, GridColor); ObjectSetString (0, grid_string, OBJPROP_TEXT, DoubleToString (_GridPrice, _SubDigit)); } return (rate_total); }/Проверяет количество баров временных рядов и возвращает либо true (ОК), либо false (Ошибка). bool CheckData (int n, int _BarsCount) {if (n == -1) {Print (данные диаграммы недоступны:, SubSymbol); возвращать (ложь); } if (n! = _BarsCount) {Print (данные диаграммы все еще загружаются для:, SubSymbol); возвращать (ложь); } return (true); }/ ---------------------------------------------- --------------------

  2. #2
    Вы должны использовать в своем советнике функцию iCustom (), вызывающую правильный буфер. В вашем примере, если вам нужно значение O [], буфер для iCustom () будет 0 (ноль).

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.