如何解决MQL 4/5找到蜡烛中心的25%和75%
我希望在蜡烛上以25%,50%和75%的水平绘制一个点。在蜡烛长度的50%处绘制点的代码如下。如何在25%和75%处添加点。
以下代码适用于MT5。我试图通过除以(high [i] + low [i])/ 4来更改逻辑,但是根本没有显示点。
#property copyright "copyright 2018,MetaQuotes Software Corp."
#property link "https://mql5.com"
#property version "1.00"
#property description "Colored Middle Point of candles"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots 1
//--- plot ColorMidPoint
#property indicator_label1 "Color Middle Point"
#property indicator_type1 DRAW_COLOR_ARROW
#property indicator_color1 clrDodgerBlue,clrDarkOrange,clrDarkGray
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//--- enums
enum ENUM_CANDLE_TYPE
{
TYPE_CANDLE_HL,// Candle
TYPE_CANDLE_OC // Body
};
//---
enum ENUM_ARROW_TYPE
{
TYPE_ARROW_DOT0 = 158,// Smallest Dot
TYPE_ARROW_DOT1 = 159,// Small Dot
TYPE_ARROW_DOT2 = 108,// Big Dot
TYPE_ARROW_SQUARE1 = 167,// Small Square
TYPE_ARROW_SQUARE2 = 110,// Big Square
TYPE_ARROW_DIAMOND1 = 115,// Small Diamond
TYPE_ARROW_DIAMOND2 = 116,// Big Diamond
TYPE_ARROW_CROSS = 251 // Cross
};
//--- input parameters
input ENUM_CANDLE_TYPE InpTypeCandle = TYPE_CANDLE_HL; // Middle point for
input ENUM_ARROW_TYPE InpTypeArrow = TYPE_ARROW_DOT1; // Dots type
//--- indicator buffers
double BufferCMP[];
double BufferColors[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,BufferCMP,INDICATOR_DATA);
SetIndexBuffer(1,BufferColors,INDICATOR_COLOR_INDEX);
//--- setting a code from the Wingdings charset as the property of PLOT_ARROW
PlotIndexSetInteger(0,PLOT_ARROW,(int)InpTypeArrow);
//--- setting indicator parameters
IndicatorSetString(INDICATOR_SHORTNAME,"CandleMidPoint");
IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//--- setting buffer arrays as timeseries
ArraySetAsSeries(BufferCMP,true);
ArraySetAsSeries(BufferColors,true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 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[])
{
ArraySetAsSeries(open,true);
ArraySetAsSeries(high,true);
ArraySetAsSeries(low,true);
ArraySetAsSeries(close,true);
int limit=rates_total-prev_calculated;
if(limit>1)
{
limit=rates_total-1;
ArrayInitialize(BufferCMP,EMPTY_VALUE);
ArrayInitialize(BufferColors,2);
}
/
for(int i=limit; i>=0 && !Isstopped(); i--)
{
BufferCMP[i]=(InpTypeCandle==TYPE_CANDLE_OC ? (open[i]+close[i])/2.0 : (high[i]+low[i])/2.0);
BufferColors[i]=(open[i]<close[i] ? 0 : open[i]>close[i] ? 1 : 2);
}
//--- return value of prev_calculated for next call
return(rates_total);
}
解决方法
如果要为每个蜡烛添加3个不同的点,则将需要3个不同的指标缓冲区,但只有一个:
double BufferCMP[];
如果创建3,则可以为每个缓冲区分配不同的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。