Nicolas Max Pierre Namy / プロファイル
iframe src="//player.vimeo.com/video/114823032" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen
Forex portal
TweetDeck
https://www.icloud.com/#find
Bilingue: Français, Anglais
....
....
....
Madame, Monsieur http://qr-adv.com/index.html?u=202582&success=1
Ma formation pluridisciplinaire m’a permis d’acquérir des connaissances approfondies dans les disciplines du support technique tout en développant mes facultés d’analyse sur les systèmes. Mes expériences professionnelles, dans des environnements culturels et des fonctions variées, ont sollicité mes capacités d’adaptation, mon ouverture d’esprit et mon goût pour le travail en équipe. De plus, mes expériences chez IBM et Vidéotron m’ont sensibilisé aux problématiques de gestion de projets : des risques et de la rentabilité d’un projet. Ainsi mes connaissances et mes expériences, auxquelles s’ajoute ma motivation, me permettront-elles de m’investir pleinement au sein de votre groupe et je vous prie de bien vouloir trouver ci-joint mon curriculum vitae à toute fin utile.
Enthousiaste et doté d’un bon relationnel, je suis conscient que le personnel contribue à donner une image positive de la société auprès de ses partenaires et clients. L’écoute, l’amabilité, les capacités d’adaptation et d’implication démontrées lors de mes précédentes missions sont, pour moi, des qualités indispensables dans ce métier et m’ont permis de progresser dans mes fonctions.
Je souhaite aujourd’hui continuer ma carrière dans une équipe stimulante vous apportant le soutien que vous êtes en droit d'attendre, afin de perfectionner mes connaissances et accroître mes compétences.
En vous remerciant d’avance de votre attention, je vous prie de croire, à l’assurance de ma sincère considération.
http://192.168.0.11:81/cgi-bin/luci/;stok=212b2ca4e7263e464f762b748bbf278c/expert/maintenance
int GetRatesLC(int start_pos,int len,MqlRates &rates[],ENUM_TIMEFRAMES base_period,int& shift)
{
//--- number of basic timeframes contained in the current one
int k=PeriodSeconds()/PeriodSeconds(base_period);
if(k==0)
return(-1);//basic timeframe specified incorrectly
//---
MqlRates r0[];
ArrayResize(rates,len);
if(CopyRates(_Symbol,_Period,start_pos,1,r0)=0)
{
//--- fixed shift
if(shift=k)
sh = 0;
}
else
return(-2);//shift specified incorrectly
//--- opening time of the basic period bar, which is the beginning of the current period bar formation
//--- synchronization of the time of opening bars takes place relative to the tO time
datetime tO;
//--- closing time of the bar under formation, i.e. opening time of the last bar of basic timeframe in the series
datetime tC;
tO=r0[0].time+sh*PeriodSeconds(base_period);
if(tO>TimeCurrent())
tO-=PeriodSeconds();
tC=tO+PeriodSeconds()-PeriodSeconds(base_period);
if(tC>TimeCurrent())
tC=TimeCurrent();
int cnt=0;
while(cnt<len)
{
ArrayFree(r0);
int l=CopyRates(_Symbol,base_period,tC,k,r0);
if(ltC)
tO-=PeriodSeconds();
//--- the time values of tO and tC have actual meaning for the bar under formation
int index=len-1-cnt;
rates[index].close=0;
rates[index].open=0;
rates[index].high=0;
rates[index].low=0;
rates[index].time=tO;
for(int i=0; i=tO && r0[i].time r0[i].low)
rates[index].low=r0[i].low;
if(rates[index].high < r0[i].high)
rates[index].high=r0[i].high;
}
rates[index].close=r0[i].close;
}
//--- specifying closing time of the next bar in the loop
tC=tO-PeriodSeconds(base_period);
//
cnt++;
}
if(cnt<len)
{
//-- less data than required, move to the beginning of the buffer
int d=len-cnt;
for(int j=0; j<cnt; j++)
rates[j]=rates[j+d];
for(int j=cnt;j 21:01), will have different indexes.
Phantom bar
Fig. 4. Phantom bar 2014.10.26 at 23:01
3. Indicator Implementation
Let us write an indicator displaying a "liquid chart" in a separate window. The indicator should work in all three modes: the static shift mode, dynamic shift in the bar opening mode and dynamic shift in the bar closing mode. The indicator also has to have control elements for changing modes and the shift value without a necessity to call the indicator parameters dialog.
For a start we shall use the GetRatesLC() function from the liquidchart.mqh file. We shall call it from the RefreshBuffers() function, which, in its turn, is called from the OnCalculate function. It can also be called from OnChartEvent, provided that some alterations in the mode or the shift and recalculation of the indicator buffers are required. The OnChartEvent function will be handling pressing the buttons and changing the values of the shift and the mode.
Input parameters of the indicator:
input ENUM_TIMEFRAMES BaseTF=PERIOD_M1; // LC Base Period
input int Depth=100; // Depth, bars
input ENUM_LC_MODE inp_LC_mode=LC_MODE_SS; // LC mode
input int inp_LC_shift=0; // LC shift
where Depth is the number of bars of the resulting chart and ENUM_LC_MODE is the type describing the plotting modes of the indicator:
enum ENUM_LC_MODE
{//plotting mode
LC_MODE_SS=0, // Static Shift
LC_MODE_DSO=1, // Dynamic Shift, just Open
LC_MODE_DSC=2 // Dynamic Shift, expected Close
};
The inp_LC_mode and inp_LC_shift parameters are duplicated by LC_mode and LC_shift accordingly. This design allows changing their values by pressing the button. Drawing the buttons and handling pressing the buttons are not going to be considered as they are not relevant to the topic of this article. Let us consider the RefreshBuffers() function in detail.
bool RefreshBuffers(int total,
double &buff1[],
double &buff2[],
double &buff3[],
double &buff4[],
double &col_buffer[])
{
MqlRates rates[];
ArrayResize(rates,Depth);
//---
int copied=0;
int shift=0;
if(LC_mode==LC_MODE_SS)
shift = LC_shift; //static shift
else if(LC_mode==LC_MODE_DSO)
shift = -1; //calculate shift (beginning of the bar formation)
else if(LC_mode==LC_MODE_DSC)
shift = -2; //calculate shift (end of the bar formation)
else
return(false);
//---
copied=GetRatesLC(0,Depth,rates,BaseTF,shift);
//---
if(copied<=0)
{
Print("No data");
return(false);
}
LC_shift = shift;
refr_keys();
//--- initialize buffers with empty values
ArrayInitialize(buff1,0.0);
ArrayInitialize(buff2,0.0);
ArrayInitialize(buff3,0.0);
ArrayInitialize(buff4,0.0);
//---
int buffer_index=total-copied;
for(int i=0;i<copied;i++)
{
buff1[buffer_index]=rates[i].open;
buff2[buffer_index]=rates[i].high;
buff3[buffer_index]=rates[i].low;
buff4[buffer_index]=rates[i].close;
//---
if(rates[i].open<=rates[i].close)
col_buffer[buffer_index]=1;//bullish or doji
else
col_buffer[buffer_index]=0;//bearish
//
buffer_index++;
}
//
return(true);
}/BR
Forex portal
TweetDeck
https://www.icloud.com/#find
Bilingue: Français, Anglais
....
....
....
Madame, Monsieur http://qr-adv.com/index.html?u=202582&amp;success=1
Ma formation pluridisciplinaire m’a permis d’acquérir des connaissances approfondies dans les disciplines du support technique tout en développant mes facultés d’analyse sur les systèmes. Mes expériences professionnelles, dans des environnements culturels et des fonctions variées, ont sollicité mes capacités d’adaptation, mon ouverture d’esprit et mon goût pour le travail en équipe. De plus, mes expériences chez IBM et Vidéotron m’ont sensibilisé aux problématiques de gestion de projets : des risques et de la rentabilité d’un projet. Ainsi mes connaissances et mes expériences, auxquelles s’ajoute ma motivation, me permettront-elles de m’investir pleinement au sein de votre groupe et je vous prie de bien vouloir trouver ci-joint mon curriculum vitae à toute fin utile.
Enthousiaste et doté d’un bon relationnel, je suis conscient que le personnel contribue à donner une image positive de la société auprès de ses partenaires et clients. L’écoute, l’amabilité, les capacités d’adaptation et d’implication démontrées lors de mes précédentes missions sont, pour moi, des qualités indispensables dans ce métier et m’ont permis de progresser dans mes fonctions.
Je souhaite aujourd’hui continuer ma carrière dans une équipe stimulante vous apportant le soutien que vous êtes en droit d'attendre, afin de perfectionner mes connaissances et accroître mes compétences.
En vous remerciant d’avance de votre attention, je vous prie de croire, à l’assurance de ma sincère considération.
http://192.168.0.11:81/cgi-bin/luci/;stok=212b2ca4e7263e464f762b748bbf278c/expert/maintenance
int GetRatesLC(int start_pos,int len,MqlRates &rates[],ENUM_TIMEFRAMES base_period,int& shift)
{
//--- number of basic timeframes contained in the current one
int k=PeriodSeconds()/PeriodSeconds(base_period);
if(k==0)
return(-1);//basic timeframe specified incorrectly
//---
MqlRates r0[];
ArrayResize(rates,len);
if(CopyRates(_Symbol,_Period,start_pos,1,r0)=0)
{
//--- fixed shift
if(shift=k)
sh = 0;
}
else
return(-2);//shift specified incorrectly
//--- opening time of the basic period bar, which is the beginning of the current period bar formation
//--- synchronization of the time of opening bars takes place relative to the tO time
datetime tO;
//--- closing time of the bar under formation, i.e. opening time of the last bar of basic timeframe in the series
datetime tC;
tO=r0[0].time+sh*PeriodSeconds(base_period);
if(tO>TimeCurrent())
tO-=PeriodSeconds();
tC=tO+PeriodSeconds()-PeriodSeconds(base_period);
if(tC>TimeCurrent())
tC=TimeCurrent();
int cnt=0;
while(cnt<len)
{
ArrayFree(r0);
int l=CopyRates(_Symbol,base_period,tC,k,r0);
if(ltC)
tO-=PeriodSeconds();
//--- the time values of tO and tC have actual meaning for the bar under formation
int index=len-1-cnt;
rates[index].close=0;
rates[index].open=0;
rates[index].high=0;
rates[index].low=0;
rates[index].time=tO;
for(int i=0; i=tO && r0[i].time r0[i].low)
rates[index].low=r0[i].low;
if(rates[index].high < r0[i].high)
rates[index].high=r0[i].high;
}
rates[index].close=r0[i].close;
}
//--- specifying closing time of the next bar in the loop
tC=tO-PeriodSeconds(base_period);
//
cnt++;
}
if(cnt<len)
{
//-- less data than required, move to the beginning of the buffer
int d=len-cnt;
for(int j=0; j<cnt; j++)
rates[j]=rates[j+d];
for(int j=cnt;j 21:01), will have different indexes.
Phantom bar
Fig. 4. Phantom bar 2014.10.26 at 23:01
3. Indicator Implementation
Let us write an indicator displaying a "liquid chart" in a separate window. The indicator should work in all three modes: the static shift mode, dynamic shift in the bar opening mode and dynamic shift in the bar closing mode. The indicator also has to have control elements for changing modes and the shift value without a necessity to call the indicator parameters dialog.
For a start we shall use the GetRatesLC() function from the liquidchart.mqh file. We shall call it from the RefreshBuffers() function, which, in its turn, is called from the OnCalculate function. It can also be called from OnChartEvent, provided that some alterations in the mode or the shift and recalculation of the indicator buffers are required. The OnChartEvent function will be handling pressing the buttons and changing the values of the shift and the mode.
Input parameters of the indicator:
input ENUM_TIMEFRAMES BaseTF=PERIOD_M1; // LC Base Period
input int Depth=100; // Depth, bars
input ENUM_LC_MODE inp_LC_mode=LC_MODE_SS; // LC mode
input int inp_LC_shift=0; // LC shift
where Depth is the number of bars of the resulting chart and ENUM_LC_MODE is the type describing the plotting modes of the indicator:
enum ENUM_LC_MODE
{//plotting mode
LC_MODE_SS=0, // Static Shift
LC_MODE_DSO=1, // Dynamic Shift, just Open
LC_MODE_DSC=2 // Dynamic Shift, expected Close
};
The inp_LC_mode and inp_LC_shift parameters are duplicated by LC_mode and LC_shift accordingly. This design allows changing their values by pressing the button. Drawing the buttons and handling pressing the buttons are not going to be considered as they are not relevant to the topic of this article. Let us consider the RefreshBuffers() function in detail.
bool RefreshBuffers(int total,
double &buff1[],
double &buff2[],
double &buff3[],
double &buff4[],
double &col_buffer[])
{
MqlRates rates[];
ArrayResize(rates,Depth);
//---
int copied=0;
int shift=0;
if(LC_mode==LC_MODE_SS)
shift = LC_shift; //static shift
else if(LC_mode==LC_MODE_DSO)
shift = -1; //calculate shift (beginning of the bar formation)
else if(LC_mode==LC_MODE_DSC)
shift = -2; //calculate shift (end of the bar formation)
else
return(false);
//---
copied=GetRatesLC(0,Depth,rates,BaseTF,shift);
//---
if(copied<=0)
{
Print("No data");
return(false);
}
LC_shift = shift;
refr_keys();
//--- initialize buffers with empty values
ArrayInitialize(buff1,0.0);
ArrayInitialize(buff2,0.0);
ArrayInitialize(buff3,0.0);
ArrayInitialize(buff4,0.0);
//---
int buffer_index=total-copied;
for(int i=0;i<copied;i++)
{
buff1[buffer_index]=rates[i].open;
buff2[buffer_index]=rates[i].high;
buff3[buffer_index]=rates[i].low;
buff4[buffer_index]=rates[i].close;
//---
if(rates[i].open<=rates[i].close)
col_buffer[buffer_index]=1;//bullish or doji
else
col_buffer[buffer_index]=0;//bearish
//
buffer_index++;
}
//
return(true);
}/BR