Voila ce que j'essaie de faire :
Si vous souhaitez des explications n'hésiter pas à venir sur Skype pendant que j'y suis.
Code : Tout sélectionner
//+------------------------------------------------------------------+
//| idSemiAutomatic.mq5 |
//| Copyright 2018, Pierre Rougier |
//| www.apprendre-mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Pierre Rougier"
#property link "www.apprendre-mql5.com"
#property version "1.00"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_plots 1
#property indicator_type1 DRAW_CANDLES
//--- wicks and outlines are green, bullish candle body is white, while bearish candle body is red
#property indicator_color1 clrLime,clrBlack,clrWhite
input datetime input_datetime=D'2019.06.12 00:00';
//--- Indicator buffers
double OpenBuffer1[];
double HighBuffer2[];
double LowBuffer3[];
double CloseBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
SetIndexBuffer(0,OpenBuffer1,INDICATOR_DATA);
SetIndexBuffer(1,HighBuffer2,INDICATOR_DATA);
SetIndexBuffer(2,LowBuffer3,INDICATOR_DATA);
SetIndexBuffer(3,CloseBuffer4,INDICATOR_DATA);
PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
ArrayInitialize(OpenBuffer1,0);
ArrayInitialize(HighBuffer2,0);
ArrayInitialize(LowBuffer3,0);
ArrayInitialize(CloseBuffer4,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[])
{
//---
//
int to_date=iBarShift(Symbol(),Period(),input_datetime,false);
int start_bar;
int scan_bar;
if(prev_calculated==0)
{start_bar=0;}
else
{start_bar=prev_calculated-1;}
for(scan_bar=start_bar;scan_bar<rates_total;scan_bar++)
{
if(scan_bar<Bars(Symbol(),Period())-to_date)
{
OpenBuffer1[scan_bar]=open[scan_bar];
HighBuffer2[scan_bar]=high[scan_bar];
LowBuffer3[scan_bar]=low[scan_bar];
CloseBuffer4[scan_bar]=close[scan_bar];
}
else
{
OpenBuffer1[scan_bar]=0;
HighBuffer2[scan_bar]=0;
LowBuffer3[scan_bar]=0;
CloseBuffer4[scan_bar]=0;
}
}
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+