この屋内は、チャートに添付すると完全に機能します。
しかし、私は
ゼロ除算
Expert Advisor で使用するとエラーが発生します。
この行を回避して EA で動作させるにはどうすればよいですか?
_PipsRatio = (_CurRangeHigh - _CurRangeLow)(_SubRangeHigh - _SubRangeLow)
ありがとうございました!
挿入コード/ --------------------------------------------- ---------------------- /| OverlayChart.mq5 |/|著作権 2014、EarnForex.com |/| http://www.earnforex.com |/| http://www.irxfx.com | MT4版から変換 |/ ------------------------------------------------------------- ------------------- #property copyright Copyright 2014, EarnForex.com #property link http://www.earnforex.com #property version 1.00 #property 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/Indior パラメータ入力文字列 SubSymbol = CHFJPY; input bool ミラーリング = false; input ENUM_DRAW_TYPE DrawType = DRAW_COLOR_BARS; extern color GridColor = 黒;/Indior Buffers double O#91;#93;;ダブル H#91;#93;;ダブル L#91;#93;;ダブル C#91;#93;; double Color#91;#93;;/グローバル変数 double SubOpen#91;#93;; double SubHigh#91;#93;; double SubLow#91;#93;; double SubClose#91;#93;;文字列プレフィックス。/Indior Prefix int Grid = 10;/グリッド線 int SnapPips = 10;/グリッド ラインのスナップ ピップ/ ---------------------------------------- -------------------------- /|カスタム屋内初期化関数 |/ ------------------------------------------------------------- ------------------- int OnInit() { IndiorSetString(INDICATOR_SHORTNAME, OverLay Chart ( SubSymbol )); SetIndexBuffer(0, O, INDICATOR_DATA); SetIndexBuffer(1, H, INDICATOR_DATA); SetIndexBuffer(2, L, INDICATOR_DATA); SetIndexBuffer(3, C, INDICATOR_DATA); SetIndexBuffer(4, 色, INDICATOR_COLOR_INDEX); ArraySetAsSeries(O, true); ArraySetAsSeries(H、真); ArraySetAsSeries(L、真); ArraySetAsSeries(C、真); ArraySetAsSeries(色、真); 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) { for (int _i = 1; _i lt;= Grid; _i ) { ObjectDelete(0,プレフィックス グリッド _i ); ObjectDelete(0, プレフィックス 価格 _i ); } }/ ------------------------------------------------- ---------------------- /|カスタム屋内反復関数 |/ ------------------------------------------------------------- ------------------- int OnCalculate(const int rates_total, const int prev_calculated, const datetime Time#91;#93;, const double Open#91;#93; 、const doubleHigh#91;#93;、const double Low#91;#93;、const double Close#91;#93;、const long tick_volume#91;#93;、const long volume#91;#93;、const intスプレッド #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(オープン、真); ArraySetAsSeries(高、真); ArraySetAsSeries(低、真); ArraySetAsSeries(クローズ、真); ArraySetAsSeries(時間、真); ArrayInitialize(O, 0); ArrayInitialize(H, 0); ArrayInitialize(L, 0); ArrayInitialize(C, 0);/可視バーを計算します _BarsCount = ChartGetInteger(0, CHART_VISIBLE_BARS) 1; int _FirstBar = 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; CopyOpen(SubSymbol, 0, _LastBar, _BarsCount, SubOpen); CopyHigh(SubSymbol, 0, _LastBar, _BarsCount, SubHigh); CopyLow(SubSymbol, 0, _LastBar, _BarsCount, SubLow); CopyClose(SubSymbol, 0, _LastBar, _BarsCount, SubClose); double SubMax = SubHigh#91;ArrayMaximum(SubHigh)#93;; double SubMin = SubLow#91;ArrayMinimum(SubLow)#93;; if (ミラーリング) { _SubRangeHigh = SubMin; _SubRangeLow = サブマックス; } else { _SubRangeHigh = SubMax; _SubRangeLow = サブ最小; } _SubRangeCenter = (_SubRangeHigh _SubRangeLow)2; _SubPoint = SymbolInfoDouble(SubSymbol, SYMBOL_POINT); _SubDigit = SymbolInfoInteger(SubSymbol, SYMBOL_DIGITS); _PipsRatio = (_CurRangeHigh - _CurRangeLow)(_SubRangeHigh - _SubRangeLow); _GridPips = (_SubRangeHigh - _SubRangeLow)グリッド; _GridPips = MathRound((_SubRangeHigh - _SubRangeLow)グリッド(_SubPoint * SnapPips)) * (_SubPoint * SnapPips);/ローソク足を描画します for (_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 (ミラーリング) { if (_SubOpen lt; _SubClose) { H#91;_i#93; = _CurRangeCenter _SubHigh * _PipsRatio; L#91;_i#93; = _CurRangeCenter _SubLow * _PipsRatio;色#91;_i#93; = 0; } そうでなければ { L#91;_i#93; = _CurRangeCenter _SubLow * _PipsRatio; H#91;_i#93; = _CurRangeCenter _SubHigh * _PipsRatio;色#91;_i#93;= 1; } C#91;_i#93; = _CurRangeCenter _SubClose * _PipsRatio; O#91;_i#93; = _CurRangeCenter _SubOpen * _PipsRatio; } else { if (_SubOpen lt; _SubClose) { H#91;_i#93; = _CurRangeCenter _SubHigh * _PipsRatio; L#91;_i#93; = _CurRangeCenter _SubLow * _PipsRatio;色#91;_i#93; = 0; } そうでなければ { L#91;_i#93; = _CurRangeCenter _SubLow * _PipsRatio; H#91;_i#93; = _CurRangeCenter _SubHigh * _PipsRatio;色#91;_i#93; = 1; } C#91;_i#93; = _CurRangeCenter _SubClose * _PipsRatio; O#91;_i#93; = _CurRangeCenter _SubOpen * _PipsRatio; } } for (_i = 1; _i lt;= Grid; _i ) { _GridPrice = MathRound(_SubRangeCenter(_SubPoint * SnapPips)) * (_SubPoint * SnapPips); _GridPrice = ((_GridPrice _GridPips2) _GridPips * (グリッド2 - 1)) - (_GridPips * (_i - 1)); ObjectCreate(0, プレフィックス グリッド _i, OBJ_TREND, 0, 0, 0); ObjectSetInteger(0, Prefix Grid _i, OBJPROP_TIME, 0, Time#91;_FirstBar#93;); ObjectSetDouble(0, プレフィックス グリッド _i, OBJPROP_PRICE, 0, _CurRangeCenter (_GridPrice - _SubRangeCenter) * _PipsRatio); ObjectSetInteger(0, Prefix Grid _i, OBJPROP_TIME, 1, Time#91;_LastBar#93;); ObjectSetDouble(0, プレフィックス グリッド _i, OBJPROP_PRICE, 1, _CurRangeCenter (_GridPrice - _SubRangeCenter) * _PipsRatio); ObjectSetInteger(0, プレフィックス グリッド _i, OBJPROP_COLOR, GridColor); ObjectSetInteger(0、プレフィックス グリッド _i、OBJPROP_STYLE、STYLE_DOT); ObjectSetInteger(0, プレフィックス グリッド _i, OBJPROP_WIDTH, 1); ObjectSetInteger(0, プレフィックス グリッド _i, OBJPROP_RAY_RIGHT, true); ObjectCreate(0, プレフィックス 価格 _i, OBJ_TEXT, 0, 0, 0); ObjectSetInteger(0, Prefix Price _i, OBJPROP_TIME, 0, Time#91;_FirstBar - _BarsCount10#93;); ObjectSetDouble(0, プレフィックス 価格 _i, OBJPROP_PRICE, 0, _CurRangeCenter (_GridPrice - _SubRangeCenter) * _PipsRatio); ObjectSetInteger(0, プレフィックス 価格 _i, OBJPROP_COLOR, GridColor); ObjectSetString(0, プレフィックス 価格 _i, OBJPROP_TEXT, DoubleToString(_GridPrice, _SubDigit));戻り値 (rates_total); }/ -------------------------------------------------- --------------------