pairs_trading/ind_residuals.mq5

126 lines
7.5 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:15:29 +02:00
<EFBFBD><EFBFBD>#include "math_for_pairs_trading.mqh"
#property indicator_chart_window //<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:y
//#property indicator_separate_window //%R<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0h<EFBFBD>:y
#property indicator_buffers 1 //cj<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0pe
#property indicator_plots 1 //h<EFBFBD>:yU0[0<EFBFBD>0cj<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0pe
#property indicator_type1 DRAW_LINE //cjn0.z^<EFBFBD>
#property indicator_width1 1 //<EFBFBD>0<EFBFBD>0<EFBFBD>0n0*YU0
#property indicator_style1 STYLE_SOLID //<EFBFBD>0<EFBFBD>0<EFBFBD>0n0.z^<EFBFBD>
#property indicator_color1 clrWhite //<EFBFBD>0<EFBFBD>0<EFBFBD>0n0r<EFBFBD>
#property indicator_type2 DRAW_LINE //cjn0.z^<EFBFBD>
#property indicator_width2 1 //<EFBFBD>0<EFBFBD>0<EFBFBD>0n0*YU0
#property indicator_style2 STYLE_DASHDOTDOT //<EFBFBD>0<EFBFBD>0<EFBFBD>0n0.z^<EFBFBD>
#property indicator_color2 clrWhite //<EFBFBD>0<EFBFBD>0<EFBFBD>0n0r<EFBFBD>
//#property indicator_level1 50 //cjn0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//#property indicator_level2 70 //cjn0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//#property indicator_level3 30 //cjn0<EFBFBD>0<EFBFBD>0<EFBFBD>0
//#property indicator_levelcolor clrGray //<EFBFBD>0<EFBFBD>0<EFBFBD>0n0r<EFBFBD>
//#property indicator_levelwidth 1 //<EFBFBD>0<EFBFBD>0<EFBFBD>0n0*YU0
//#property indicator_levelstyle STYLE_DOT //<EFBFBD>0<EFBFBD>0<EFBFBD>0n0.z^<EFBFBD>
input int Prd = 20; // g<EFBFBD><EFBFBD>
double Buf0[], Buf1[]; //cj<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0(un0M<EFBFBD>Rn0<EFBFBD>[<EFBFBD>
//+------------------------------------------------------------------+
//|RgS
//+------------------------------------------------------------------+
int OnInit()
{
if(!SetIndexBuffer(0, Buf0) || !ArraySetAsSeries(Buf0, true)) { //M<EFBFBD>R<EFBFBD>0cj<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD><EFBFBD>#<EFBFBD><EFBFBD>NQ0<EFBFBD>0
Print("OnInit <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<1A>", GetLastError());
return(INIT_FAILED);
}
if(!SetIndexBuffer(1, Buf1) || !ArraySetAsSeries(Buf1, true)) { //M<EFBFBD>R<EFBFBD>0cj<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0k0<EFBFBD><EFBFBD>#<EFBFBD><EFBFBD>NQ0<EFBFBD>0
Print("OnInit <00>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0<1A>", GetLastError());
return(INIT_FAILED);
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//|RgS<EFBFBD><EFBFBD>d<EFBFBD>
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| <EFBFBD>0<EFBFBD>0<EFBFBD>0
//+------------------------------------------------------------------+
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 limit = CalculateBars(rates_total, prev_calculated); //<EFBFBD>0<EFBFBD>0<EFBFBD>0<EFBFBD>0Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0pe
ArraySetAsSeries(open, true);
ArraySetAsSeries(high, true);
ArraySetAsSeries(low, true);
ArraySetAsSeries(close, true);
for(int i = 0; i < limit - Prd; i++) {
}
return(rates_total);
}
//+------------------------------------------------------------------+
//| OnCalculate<EFBFBD><EFBFBD>peg0<EFBFBD><EFBFBD>{Y0<EFBFBD>0<EFBFBD>0<EFBFBD>0n0pe
//+------------------------------------------------------------------+
int CalculateBars(const int rates_total, const int prev_calculated)
{
int ret = 1;
//--- gRn0Tick<EFBFBD>NYo01<EFBFBD>0ԏY0
if(prev_calculated > 0)
return ret;
//--- <EFBFBD>e<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0
No0hQg<EFBFBD><EFBFBD>
if(_Period > PERIOD_D1)
{
ret = rates_total;
return ret;
}
//--- 4Bf<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0
No02003t^<EFBFBD>NM<EFBFBD>
if(_Period > PERIOD_H4)
{
ret = Bars(_Symbol, PERIOD_CURRENT, D'2003.01.01', TimeCurrent());
return ret;
}
//--- 1Bf<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0
No02010t^<EFBFBD>NM<EFBFBD>
if(_Period > PERIOD_H1)
{
ret = Bars(_Symbol, PERIOD_CURRENT, D'2010.01.01', TimeCurrent());
return ret;
}
//--- 15R<EFBFBD><EFBFBD><EFBFBD>0<EFBFBD>0
No02013t^<EFBFBD>NM<EFBFBD>
if(_Period > PERIOD_M15)
{
ret = Bars(_Symbol, PERIOD_CURRENT, D'2013.01.01', TimeCurrent());
return ret;
}
//--- ]0<EFBFBD>0<EFBFBD>N No02016t^<EFBFBD>NM<EFBFBD>
ret = Bars(_Symbol, PERIOD_CURRENT, D'2016.01.01', TimeCurrent());
return ret;
}
//+------------------------------------------------------------------+