73 lines
3.4 KiB
MQL5
73 lines
3.4 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| 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 <Canvas\FlameCanvas.mqh>
|
|
//+------------------------------------------------------------------+
|
|
//| 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);
|
|
}
|
|
//+------------------------------------------------------------------+
|