Está en la página 1de 6

_SECTION_BEGIN("Pankaj Parimal - Pairs Trade");

//Time Frame to be used is 'Daily'.


// Enter the Variables Here
Mkt= ParamStr("High Priced Scrip", "Enter High Priced Scrip Here");//Enter the H
igh Priced Scrip of the Pair as per the NSE Nomenclature or the nomenclature set
by the Data Provider, by right clicking the mouse and selecting 'Parameters'.
Period=Param("Period - Correlation, Spread and Std Dev", 5, 2, 1000, 1);//Enter
the required Period for the calculation of Correlation & Spread and also for Sta
ndard Deviation of Spread to calculate Z-Score by selecting 'Parameters'. Defaul
t CZPeriod=5
Observations=Param("Observations - Alpha", 50, 2, 1000, 1);//Enter the No. of Ob
servations for the calculation of Alpha by selecting 'Parameters'. Default Obser
vations=50
StdDev=Param("Standard Deviation", 0.02, 0.005, 0.1, 0.001);//Enter the required
Standard Deviation by selecting 'Parameters'. Default StdDev=0.02;
//[Currently the Standard Deviation is taken as 2%, which will reduce the number
of recommendations received as the distance between the Mean Spread AND Upper /
Lower Spread will increase.
//With this method, one will notice that the 95% of Current Spread is enveloped
by the Upper & Lower Spread.]
//Std=0.5;//Enter the required Standard Deviation
//***Base Market************/
P=Foreign(Mkt,"C",1);//Closing Price of High Priced Scrip (A) Entered Above
PH=Foreign(Mkt,"H",1);//High Price of High Priced Scrip (A) Entered Above
PL=Foreign(Mkt,"L",1);//Low Price of High Priced Scrip (A) Entered Above
//Description Calculation of R-Squared :
//R-Squared, which is an indicator for the validity of the Beta and Alpha measur
es.
//This is because the R-Squared value measures just how closely the Scrip tracks
the Index with which it is being compared.
//An R-Squared value of 1.0 indicates a perfect match. In that case, one can tru
st that the Beta and Alpha measures are valid.
//But, the lower the R-Squared is, the less reliable the Beta and the Alpha meas
ures are.
//The Beta and Alphas of a Scrip with an R-Squared value of below 0.50 are compl
etely meaningless and hence should be ignored.
//Assuming the R-Squared is, say, 0.75 OR higher, one can move on to the Beta.
/***Spread****************/
AvgC=Sum(C,Period)/Period;//Average of Scrip B over a Set Period
AvgP=Sum(P,Period)/Period;//Average of Scrip A
Spr=P-C;//Spread of Scrip A & Scrip B (Difference of Closing Price of Scrip A &
Scrip B)
Mspread=Sum(Spr,Period)/Period;//Average or Mean Spread of Scrip A & Scrip B
//Finding Max. & Min. Spread in the Last 10 Days, 20 Days & 30 Days
MaxSpr01=Max(Spr,Ref(Spr,-1));
MaxSpr23=Max(Ref(Spr,-2),Ref(Spr,-3));
MaxSpr45=Max(Ref(Spr,-4),Ref(Spr,-5));
MaxSpr67=Max(Ref(Spr,-6),Ref(Spr,-7));
MaxSpr89=Max(Ref(Spr,-8),Ref(Spr,-9));
MaxSpr10=Max(MaxSpr01,MaxSpr23);
MaxSpr20=Max(MaxSpr45,MaxSpr67);
MaxSpr30=Max(MaxSpr10,MaxSpr20);
MaxSpr10D=Max(MaxSpr30,MaxSpr89);//Max. Spread in the Last 10 Days
MaxSpr1011=Max(Ref(Spr,-10),Ref(Spr,-11));
MaxSpr1213=Max(Ref(Spr,-12),Ref(Spr,-13));
MaxSpr1415=Max(Ref(Spr,-14),Ref(Spr,-15));
MaxSpr1617=Max(Ref(Spr,-16),Ref(Spr,-17));
MaxSpr1819=Max(Ref(Spr,-18),Ref(Spr,-19));
MaxSpr11=Max(MaxSpr1011,MaxSpr1213);
MaxSpr21=Max(MaxSpr1415,MaxSpr1617);
MaxSpr31=Max(MaxSpr11,MaxSpr21);
MaxSpr41=Max(MaxSpr31,MaxSpr1819);
MaxSpr20D=Max(MaxSpr10D,MaxSpr41);//Max. Spread in the Last 20 Days
MaxSpr2021=Max(Ref(Spr,-20),Ref(Spr,-21));
MaxSpr2223=Max(Ref(Spr,-22),Ref(Spr,-23));
MaxSpr2425=Max(Ref(Spr,-24),Ref(Spr,-25));
MaxSpr2627=Max(Ref(Spr,-26),Ref(Spr,-27));
MaxSpr2829=Max(Ref(Spr,-28),Ref(Spr,-29));
MaxSpr12=Max(MaxSpr2021,MaxSpr2223);
MaxSpr22=Max(MaxSpr2425,MaxSpr2627);
MaxSpr32=Max(MaxSpr12,MaxSpr22);
MaxSpr42=Max(MaxSpr32,MaxSpr2829);
MaxSpr30D=Max(MaxSpr20D,MaxSpr42);//Max. Spread in the Last 30 Days
MinSpr01=Min(Spr,Ref(Spr,-1));
MinSpr23=Min(Ref(Spr,-2),Ref(Spr,-3));
MinSpr45=Min(Ref(Spr,-4),Ref(Spr,-5));
MinSpr67=Min(Ref(Spr,-6),Ref(Spr,-7));
MinSpr89=Min(Ref(Spr,-8),Ref(Spr,-9));
MinSpr1=Min(MinSpr01,MinSpr23);
MinSpr2=Min(MinSpr45,MinSpr67);
MinSpr3=Min(MinSpr1,MinSpr2);
MinSpr10D=Min(MinSpr3,MinSpr89);//Min. Spread in the Last 10 Days
MinSpr1011=Min(Ref(Spr,-10),Ref(Spr,-11));
MinSpr1213=Min(Ref(Spr,-12),Ref(Spr,-13));
MinSpr1415=Min(Ref(Spr,-14),Ref(Spr,-15));
MinSpr1617=Min(Ref(Spr,-16),Ref(Spr,-17));
MinSpr1819=Min(Ref(Spr,-18),Ref(Spr,-19));
MinSpr11=Min(MinSpr1011,MinSpr1213);
MinSpr21=Min(MinSpr1415,MinSpr1617);
MinSpr31=Min(MinSpr11,MinSpr21);
MinSpr41=Min(MinSpr31,MinSpr1819);
MinSpr20D=Min(MinSpr10D,MinSpr41);//Min. Spread in the Last 20 Days
MinSpr2021=Min(Ref(Spr,-20),Ref(Spr,-21));
MinSpr2223=Min(Ref(Spr,-22),Ref(Spr,-23));
MinSpr2425=Min(Ref(Spr,-24),Ref(Spr,-25));
MinSpr2627=Min(Ref(Spr,-26),Ref(Spr,-27));
MinSpr2829=Min(Ref(Spr,-28),Ref(Spr,-29));
MinSpr12=Min(MinSpr2021,MinSpr2223);
MinSpr22=Min(MinSpr2425,MinSpr2627);
MinSpr32=Min(MinSpr12,MinSpr22);
MinSpr42=Min(MinSpr32,MinSpr2829);
MinSpr30D=Min(MinSpr20D,MinSpr42);//Min. Spread in the Last 30 Days
RanC=H-L;//Range of Scrip B for the day
RangeC=Sum(RanC,Period)/Period;//Average Range of Scrip B over a Set Period
RanP=PH-PL;//Range of Scrip A for the day
RangeP=Sum(RanP,Period)/Period;//Average Range of Scrip A over a Set Period
//Deviation=(RangeC+RangeP)/2*Std;//Sum of Average range of Scrip A and Scrip B
Divided by 2 and then Multiplied by the Standard Deviation
//UpperSpr=Mspread+Deviation;
//LowerSpr=Mspread-Deviation;
UpperSpr=IIf(Mspread>=0,(Mspread+(Mspread*StdDev)),(Mspread-(Mspread*StdDev)));
LowerSpr=IIf(Mspread>=0,(Mspread-(Mspread*StdDev)),(Mspread+(Mspread*StdDev)));
Cspread=P-C;//Current Spread using (positive or negative) Difference between Scr
ip A & Scrip B
Corr5=Correlation(Max(P,C),Min(P,C),5);//5 D Correlation
Corr3=Correlation(Max(P,C),Min(P,C),3);//3 D Correlation
Corr30=Correlation(Max(P,C),Min(P,C),30);//30 D Correlation
Corr1Y=Correlation(Max(P,C),Min(P,C),365);//1 Year Correlation
Corr2Y=Correlation(Max(P,C),Min(P,C),730);//2 Year Correlation
Corr3Y=Correlation(Max(P,C),Min(P,C),1095);//3 Year Correlation
/***R-Squared*************/
R2=Corr5^2;
blsh=Cspread>UpperSpr;
bhsl=Cspread<LowerSpr;
Buy=bhsl;
Sell=blsh;
Plot(Cspread,"Current Spread",ParamColor("Color - Current Spread",colorBlack),st
yleNoTitle | ParamStyle("Style - Current Spread"));
Plot(Mspread,"Mean Spread",colorBlue,styleDashed);
Plot(UpperSpr,"Upper Spread",colorGreen,styleLine);
Plot(LowerSpr,"Lower Spread",colorRed,styleLine);
//Plot(MaxSpr,"Max. Spread",colorViolet,styleLine);
//Plot(MinSpr,"Min. Spread",colorCustom12,styleLine);
Title=EncodeColor(colorCustom12)+
WriteIf(P>C,"High Priced Scrip is " +EncodeColor(colorBlue)+"'"+StrFormat(Mkt)+"
'"+EncodeColor(colorBlack) +" AND "+
EncodeColor(colorCustom12)+"Low Priced Scrip is " +EncodeColor(colorBlue)+"'"+Na
me()+"'.",
"High Priced Scrip is " +EncodeColor(colorBlue)+Name()+EncodeColor(colorBlack) +
" AND "+
EncodeColor(colorCustom12)+"Low Priced Scrip is " +EncodeColor(colorBlue)+"'"+St
rFormat(Mkt)+"'.")
+" "+
EncodeColor(colorOrange)+"[Key in the 'High Priced' Scrip by right-clicking the
mouse & Selecting 'Parameters'.]"+"\n"+
EncodeColor(colorBlue)+
WriteIf(P>C,StrFormat(Mkt)+" (LTP) : "+EncodeColor(colorGreen)+WriteVal(Max(P,C)
,format=1.2)+EncodeColor(colorBlack) +" | "+
EncodeColor(colorBrown)+Name()+" (LTP) : "+EncodeColor(colorRed)+WriteVal(Min(C,
P),format=1.2),
Name()+" (LTP) : "+EncodeColor(colorGreen)+WriteVal(Max(P,C),format=1.2)+EncodeC
olor(colorBlack) +" | "+
EncodeColor(colorBrown)+StrFormat(Mkt)+" (LTP) : "+EncodeColor(colorRed)+WriteVa
l(Min(C,P),format=1.2))+"\n"+
EncodeColor(colorViolet) +"Correlation ["+int(Period)+" Day] : "+ WriteVal(Corr5
,format=1.2)+EncodeColor(colorBlack) +" | "+EncodeColor(colorBlue) +"R-Squared [
"+int(Period)+" Day] : "+WriteVal(R2,format=1.2)+"\n"+
EncodeColor(colorCustom12) +"Correlation [30 Day] : "+ WriteVal(Corr30,format=1.
2)+EncodeColor(colorBlack) +" | "+EncodeColor(colorBlue) +"Correlation [1 Year]
: "+ WriteVal(Corr1Y,format=1.2)+"\n"+
EncodeColor(colorBrown) +"Correlation [2 Year] : "+ WriteVal(Corr2Y,format=1.2)+
EncodeColor(colorBlack) +" | "+EncodeColor(colorGreen) +"Correlation [3 Year] :
"+ WriteVal(Corr3Y,format=1.2)+"\n"+"\n"+
EncodeColor(colorCustom12) +
WriteIf(Cspread>=0,
WriteIf(Cspread>UpperSpr,"Recommendation as per Spread : "+EncodeColor(colorRed)
+"[CS > US] - "+EncodeColor(colorBlue) +"Buy "+Name()+" & Sell "+StrFormat(Mkt)
,
WriteIf(Cspread<LowerSpr,"Recommendation as per Spread : "+EncodeColor(colorGree
n) +"[CS < LS] - "+EncodeColor(colorBlue) +"Buy "+StrFormat(Mkt)+" & Sell "+Name
(),
"Recommendation as per Spread : "+EncodeColor(colorBlue) +"Wait - Do Not Trade")
),
WriteIf(Cspread>UpperSpr,"Recommendation as per Spread : "+EncodeColor(colorRed)
+"[CS > US] - "+EncodeColor(colorBlue) +"Buy "+StrFormat(Mkt)+" & Sell "+Name()
,
WriteIf(Cspread<LowerSpr,"Recommendation as per Spread : "+EncodeColor(colorGree
n) +"[CS < LS] - "+EncodeColor(colorBlue) +"Buy "+Name()+" & Sell "+StrFormat(Mk
t),
"Recommendation as per Spread : "+EncodeColor(colorBlue) +"Wait - Do Not Trade")
))+" "+"\n"+"\n"+
EncodeColor(colorBlack) +"Current Spread : "+WriteVal(Cspread,format=1.2)+Encode
Color(colorBlack) +" | "+ EncodeColor(colorBlue) +"Mean Spread : "+WriteVal(Mspr
ead,format=1.2)+"\n"+
EncodeColor(colorGreen) +"Upper Spread : "+WriteVal(UpperSpr,format=1.2)+EncodeC
olor(colorBlack) +" | "+ EncodeColor(colorRed) +"Lower Spread : "+WriteVal(Lower
Spr,format=1.2)+"\n"+
EncodeColor(colorViolet) +"Max. Spread [10 Day] : "+WriteVal(MaxSpr10D,format=1.
2)+EncodeColor(colorBlack) +" | "+ EncodeColor(colorCustom12) +"Min. Spread [10
Day] : "+WriteVal(MinSpr10D,format=1.2)+"\n"+
EncodeColor(colorViolet) +"Max. Spread [20 Day] : "+WriteVal(MaxSpr20D,format=1.
2)+EncodeColor(colorBlack) +" | "+ EncodeColor(colorCustom12) +"Min. Spread [20
Day] : "+WriteVal(MinSpr20D,format=1.2)+"\n"+
EncodeColor(colorViolet) +"Max. Spread [30 Day] : "+WriteVal(MaxSpr30D,format=1.
2)+EncodeColor(colorBlack) +" | "+ EncodeColor(colorCustom12) +"Min. Spread [30
Day] : "+WriteVal(MinSpr30D,format=1.2);
Filter=1;//Corr>= 0.6018;
AddColumn( P, "Scrip A", 1.2 );
AddColumn( C, "Scrip B", 1.2 );
AddColumn( Corr5, "Correlation [5 Day]", 1.2 );
AddColumn( Corr3, "Correlation [3 Day]", 1.2 );
AddColumn( Corr30, "Correlation [30 Day]", 1.2 );
AddColumn( Corr1Y, "Correlation [1 Year]", 1.2 );
AddColumn( Corr2Y, "Correlation [2 Year]", 1.2 );
AddColumn( Corr3Y, "Correlation [3 Year]", 1.2 );
AddColumn( bhsl, "Buy High Sell Low"); //Buy High Priced Scrip and Sell Low Pric
ed Scrip
AddColumn( blsh, "Buy Low Sell High"); // Buy Low Priced Scrip and Sell High Pri
ced Scrip
PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorGreen, 0, LowerSpr, Offset=-100
);
PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorLime, 0, LowerSpr, Offset=-110)
;
PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorWhite, 0, LowerSpr, Offset=-10
5);
PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorRed, 0, UpperSpr, Offset=100);
PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorOrange, 0, UpperSpr, Offset=11
0);
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone),colorWhite, 0, UpperSpr, Offset=
-105);
_SECTION_END();

También podría gustarte