//+------------------------------------------------------------------+ //| test_mtf_bands.mq5 | //| Copyright 2022,fxMeter | //| https://www.mql5.com/en/users/fxmeter | //+------------------------------------------------------------------+ #property copyright "Copyright 2022,fxMeter" #property link "https://www.mql5.com/en/users/fxmeter" #property version "1.00" #property indicator_chart_window #property indicator_buffers 3 #property indicator_plots 3 //--- plot BL_UP #property indicator_label1 "BL_UP" #property indicator_type1 DRAW_LINE #property indicator_color1 clrYellow #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot BL_MIDDLE #property indicator_label2 "BL_MIDDLE" #property indicator_type2 DRAW_LINE #property indicator_color2 clrWhite #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- plot BL_DOWN #property indicator_label3 "BL_DOWN" #property indicator_type3 DRAW_LINE #property indicator_color3 clrYellow #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- input parameters input ENUM_TIMEFRAMES 时间选择=PERIOD_H4; input int period=20; input double 标准差=2.0; input ENUM_APPLIED_PRICE price=PRICE_CLOSE; input int 显示根数=23; //--- indicator buffers double BL_UPBuffer[]; double BL_MIDDLEBuffer[]; double BL_DOWNBuffer[]; int bl_handle; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,BL_UPBuffer,INDICATOR_DATA); SetIndexBuffer(1,BL_MIDDLEBuffer,INDICATOR_DATA); SetIndexBuffer(2,BL_DOWNBuffer,INDICATOR_DATA); ArraySetAsSeries(BL_UPBuffer,true); ArraySetAsSeries(BL_MIDDLEBuffer,true); ArraySetAsSeries(BL_DOWNBuffer,true); bl_handle=iBands(Symbol(),时间选择,period,0,标准差,price); if(bl_handle==-1)return(INIT_FAILED); for(int i=0; i<3; i++) PlotIndexSetDouble(i,PLOT_EMPTY_VALUE,0.0); //--- 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[]) { //--- double bl1[]; ArraySetAsSeries(bl1,true); double bl2[]; ArraySetAsSeries(bl2,true); double bl3[]; ArraySetAsSeries(bl3,true); if(CopyBuffer(bl_handle,0,0,显示根数,bl1)!=显示根数)return(0); if(CopyBuffer(bl_handle,1,0,显示根数,bl2)!=显示根数)return(0); if(CopyBuffer(bl_handle,2,0,显示根数,bl3)!=显示根数)return(0); datetime time_bl[]; ArraySetAsSeries(time_bl,true); int copied = CopyTime(NULL,时间选择,0,显示根数,time_bl); if(copied!=显示根数) return(0); ArraySetAsSeries(time,true); if(prev_calculated<=0) { ArrayInitialize(BL_DOWNBuffer,0.0); ArrayInitialize(BL_MIDDLEBuffer,0.0); ArrayInitialize(BL_UPBuffer,0.0); } int i,y=0; for(i=0; i<显示根数; i++) { if(time[i]<time_bl[y]) y++; BL_UPBuffer[i]=bl2[y]; BL_MIDDLEBuffer[i]=bl1[y]; BL_DOWNBuffer[i]=bl3[y]; if(y>=copied) break; } BL_UPBuffer[i]=0.0; BL_MIDDLEBuffer[i]=0.0; BL_DOWNBuffer[i]=0.0; return(rates_total); } //+------------------------------------------------------------------+
附加的文件:
test_mtf_bands.mq5
8 kb
目的:想在本时段图上显示其他级别的布林线,但只要规定K线内的数据,且循环中当产生新的K线时,旧的非“显示根数”内的被清除掉。(显示根数见代码的参数)
有附件:截图(后面的不要的数据如何才能清除掉?)
出现的问题:只想要“显示根数”的布林线显示在一小时的图上,后面的一大截非“显示根数”内的数据都不显示,请问可以做到么?
#property copyright "Copyright 2022, MetaQuotes Ltd."
}