//+------------------------------------------------------------------+ //| FlameChart.mq5 | //| Copyright 2000-2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2000-2025, MetaQuotes Ltd." #property link "https://www.mql5.com" #include //+------------------------------------------------------------------+ //| Indicator properties | //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 0 #property indicator_plots 0 //+------------------------------------------------------------------+ //| Input parameters | //+------------------------------------------------------------------+ input int InpFuturefBars =50; //+------------------------------------------------------------------+ //| global variables | //+------------------------------------------------------------------+ CFlameCanvas ExtCanvas; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { if(!ExtCanvas.FlameCreate("FlameChart",TimeCurrent(),InpFuturefBars,0)) return(INIT_FAILED); //--- succeed return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| 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[]) { datetime xb1=time[rates_total-1]; double yb1=high[rates_total-1]; datetime xe1=xb1+InpFuturefBars*PeriodSeconds(); double ye1=ChartGetDouble(0,CHART_PRICE_MAX); datetime xb2=xb1; double yb2=low[rates_total-1]; datetime xe2=xe1; double ye2=ChartGetDouble(0,CHART_PRICE_MIN); //--- "nozzle" is defined using two lines: ((xb1,yb1),(xe1,ye1)) and ((xb2,yb2),(xe2,ye2)) ExtCanvas.FlameSet(xb1,yb1,xe1,ye1,xb2,yb2,xe2,ye2); //--- result return(rates_total); } //+------------------------------------------------------------------+ //| Custom indicator chart's event handler | //+------------------------------------------------------------------+ void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam) { ExtCanvas.ChartEventHandler(id,lparam,dparam,sparam); } //+------------------------------------------------------------------+