Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

// Downloaded From https://www.WiseStockTrader.

com
// ORB Based Trading system with Stoploss and Target

_SECTION_BEGIN("ORB ");

SetPositionSize(1*RoundLotSize,spsShares);

newday = Day() != Ref(Day(),-1);

mins = Param("Breakout(mins)",15,1,60,1);

starttime = ParamTime("Start Time","09:30");


endtime = ParamTime("End Time","14:30");
sqofftime = ParamTime("Sqoff Time","15:15");

mode = ParamList("Risk Control(Stop/Target)","DISABLED|POINTS|PERCENTAGE");


buffer = Param("Buffer",0,0.05,1000,0.01);
stop = Param("Stoploss",20,0.05,1000,0.01);
target = Param("Target",50,0.05,1000,0.01);

TickSz = Param("Tick Size",0.05,0.0001,1,0.0001);

TradeLimit = Param("Trade Limit Per Day",2,1,10,1);

orbh = ValueWhen(newday,TimeFrameGetPrice("H",in1Minute*mins,0))+buffer;
orbl = ValueWhen(newday,TimeFrameGetPrice("L",in1Minute*mins,0))-buffer;

//removing the values of ORBH and ORBL until the breakoutmeasuretime is reached
orbh = IIf(TimeNum()<starttime,Null,orbh); //redefining the ORBH value
orbl = IIf(TimeNum()<starttime,Null,orbl); //redefining the ORBL value

Plot(orbh,"ORBH",colorYellow,styleThick);
Plot(orbl,"ORBL",colorYellow,styleThick);

//Initialization

Buy =0;
Sell = 0;
Short = 0;
Cover = 0;

longstoplevel = Null;
longtargetlevel = Null;

shortstoplevel = Null;
shorttargetlevel = Null;

//Trading Logic without Stop and Target

orbcondlong = IsNull(Ref(orbh,-1)) AND orbh>0 AND Open < orbh AND High > orbh;
orbcondshort = IsNull(Ref(orbl,-1)) AND orbl>0 AND Open > orbl AND low < orbl;

if(mode=="DISABLED")
{
//Entry Logic
Buy = (Cross(High,orbh) OR orbcondlong) AND TimeNum()>=starttime AND
TimeNum()<=endtime;
Sell = Cross(orbl,Low) OR TimeNum()>=sqofftime;
Short = (Cross(orbl,Low) OR orbcondshort) AND TimeNum()>=starttime AND
TimeNum()<=endtime;
Cover = Cross(High,orbh) OR TimeNum()>=sqofftime;

//Removing Excessive Signals only for Entry


Buy = ExRem(Buy,Sell);
Short = ExRem(Short,Cover);

//removing excessive signals for the day


Buy = Buy AND Sum(Buy OR Short,BarsSince(newday)+1)<=TradeLimit;
short = short AND Sum(Buy OR Short,BarsSince(newday)+1)<=TradeLimit;

//Remove Excessive Entry and Exit Signals


Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);
Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);

BuyPrice = ValueWhen(Buy,orbh);
SellPrice = ValueWhen(Sell,IIf(Cross(orbl,Low),orbl,Close));

ShortPrice = ValueWhen(Short,orbl);
CoverPrice = ValueWhen(Cover,IIf(Cross(High,orbh),orbh,Close));

buycontinue = Flip(Buy,Sell);
shortcontinue = Flip(Short,Cover);

if(mode=="POINTS")
{
//Trading Logic with Stop and Target (points)

//Entry Logic
Buy = (Cross(High,orbh) OR orbcondlong) AND TimeNum()>=starttime AND
TimeNum()<=endtime;
iSell = Cross(orbl,Low) OR TimeNum()>=sqofftime;
Short = (Cross(orbl,Low) OR orbcondshort) AND TimeNum()>=starttime AND
TimeNum()<=endtime;
iCover = Cross(High,orbh) OR TimeNum()>=sqofftime;

//Removing Excessive Signals only for Entry


Buy = ExRem(Buy,iSell);
Short = ExRem(Short,iCover);

//removing excessive signals for the day


Buy = Buy AND Sum(Buy OR Short,BarsSince(newday)+1)<=TradeLimit;
short = short AND Sum(Buy OR Short,BarsSince(newday)+1)<=TradeLimit;

//Calculate the Entry Price


BuyPrice = ValueWhen(Buy,orbh);
ShortPrice = ValueWhen(Short,orbl);

longstoplevel = BuyPrice - stop;


longtargetlevel = BuyPrice + target;
shortstoplevel = shortPrice + stop;
shorttargetlevel = shortPrice - target;

//Exit signal can happen due to 1)Negative Crossover 2)Stophit 3)Targethit


Sell = isell OR Cross(longstoplevel,Low) OR Cross(High,longtargetlevel);
Cover = icover OR Cross(High,shortstoplevel) OR Cross(shorttargetlevel,Low);

//Remove Excessive Entry and Exit Signals


Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);

Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);

//Long Exit Price


SellPrice = IIf(isell,ValueWhen(isell,orbl),
IIf(Cross(longstoplevel,Low),longstoplevel,

IIf(Cross(High,longtargetlevel),longtargetlevel,null)));

//Short Exit Price


CoverPrice = IIf(icover,ValueWhen(icover,orbh),
IIf(Cross(High,shortstoplevel),shortstoplevel,

IIf(Cross(shorttargetlevel,Low),shorttargetlevel,null)));

buycontinue = Flip(Buy,Sell);
shortcontinue = Flip(Short,Cover);

Plot(IIf(buycontinue,longstoplevel,Null),"BuyStop Level",colorRed,styleDashed);
Plot(IIf(buycontinue,longtargetlevel,Null),"BuyTarget
Level",colorgreen,styleDashed);

Plot(IIf(shortcontinue,shortstoplevel,Null),"ShortStop
Level",colorRed,styleDashed);
Plot(IIf(shortcontinue,shorttargetlevel,Null),"ShortTarget
Level",colorgreen,styleDashed);

if(mode=="PERCENTAGE")
{
//Trading Logic with Stop and Target (Percentage)

//Trading Logic with Stop and Target (points)

//Entry Logic
Buy = (Cross(High,orbh) OR orbcondlong) AND TimeNum()>=starttime AND
TimeNum()<=endtime;
iSell = Cross(orbl,Low) OR TimeNum()>=sqofftime;
Short = (Cross(orbl,Low) OR orbcondshort) AND TimeNum()>=starttime AND
TimeNum()<=endtime;
iCover = Cross(High,orbh) OR TimeNum()>=sqofftime;

//Removing Excessive Signals only for Entry


Buy = ExRem(Buy,iSell);
Short = ExRem(Short,iCover);
//removing excessive signals for the day
Buy = Buy AND Sum(Buy OR Short,BarsSince(newday)+1)<=TradeLimit;
short = short AND Sum(Buy OR Short,BarsSince(newday)+1)<=TradeLimit;

//Calculate the Entry Price


BuyPrice = ValueWhen(Buy,orbh);
ShortPrice = ValueWhen(Short,orbl);

longstoplevel = BuyPrice*(1 - stop/100);


longtargetlevel = BuyPrice * (1+target/100);

//Round it of to nearest Tick Size


longstoplevel = TickSz * round(longstoplevel/TickSz);
longtargetlevel = TickSz * round(longtargetlevel/TickSz);

shortstoplevel = shortPrice * (1 + stop/100);


shorttargetlevel = shortPrice * (1-target/100);

//Round it of to nearest Tick Size


shortstoplevel = TickSz * round(shortstoplevel/TickSz);
shorttargetlevel = TickSz * round(shorttargetlevel/TickSz);

//Exit signal can happen due to 1)Negative Crossover 2)Stophit 3)Targethit


Sell = isell OR Cross(longstoplevel,Low) OR Cross(High,longtargetlevel);
Cover = icover OR Cross(High,shortstoplevel) OR Cross(shorttargetlevel,Low);

//Remove Excessive Entry and Exit Signals


Buy = ExRem(Buy,Sell);
Sell = ExRem(Sell,Buy);

Short = ExRem(Short,Cover);
Cover = ExRem(Cover,Short);

//Long Exit Price


SellPrice = IIf(isell,ValueWhen(isell,orbl),
IIf(Cross(longstoplevel,Low),longstoplevel,

IIf(Cross(High,longtargetlevel),longtargetlevel,null)));

//Short Exit Price


CoverPrice = IIf(icover,ValueWhen(icover,orbh),
IIf(Cross(High,shortstoplevel),shortstoplevel,

IIf(Cross(shorttargetlevel,Low),shorttargetlevel,null)));

buycontinue = Flip(Buy,Sell);
shortcontinue = Flip(Short,Cover);

Plot(IIf(buycontinue,longstoplevel,Null),"BuyStop Level",colorRed,styleDashed);
Plot(IIf(buycontinue,longtargetlevel,Null),"BuyTarget
Level",colorgreen,styleDashed);

Plot(IIf(shortcontinue,shortstoplevel,Null),"ShortStop
Level",colorRed,styleDashed);
Plot(IIf(shortcontinue,shorttargetlevel,Null),"ShortTarget
Level",colorgreen,styleDashed);
}

_SECTION_END();

_SECTION_BEGIN("Trading Signal");

PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorGreen, 0, L, Offset=-40);


PlotShapes(IIf(Buy, shapeSquare, shapeNone),colorLime, 0,L, Offset=-50);

PlotShapes(IIf(Buy, shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-45);


PlotShapes(IIf(Short, shapeSquare, shapeNone),colorRed, 0, H, Offset=40);
PlotShapes(IIf(Short, shapeSquare, shapeNone),colorOrange, 0,H, Offset=50);

PlotShapes(IIf(Short, shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-45);

PlotShapes(Sell * shapestar, colorBrightGreen, 0, High, 12);


PlotShapes(Cover * shapestar, colorRed, 0, Low, -12);

_SECTION_END();

_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close
%g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle |
ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();

//Dashboard Controls.

_SECTION_BEGIN("Trading Dashboard");

strg_name = ParamStr("Strategy Name","ORB");


fontsize = Param("Font Size",14,12,36,1);

GfxSelectFont("BOOK ANTIQUA", fontsize, 400);


GfxSetBkMode(1); //Transparent Mode
GfxSetTextColor(colorWhite);

//build dyanmic dashboard colors based on the ongoing trades


color = IIf(buycontinue,colorGreen,IIf(shortcontinue,colorRed,colorGrey40));

GfxSelectPen(colorWhite);
GfxSelectSolidBrush(SelectedValue(color));

width = Status("pxchartwidth"); //output will be in terms of number of pixels


height = Status("pxchartheight");

//GfxRoundRect(20,height-150,320,height-30,15,15);

GfxGradientRect(20,height-150,320,height-30,SelectedValue(color),colorBlack);

sigstatus = WriteIf(buycontinue,"Buy Signal",WriteIf(shortcontinue,"Short


Signal","No Trade - Relax"));
PNL = IIf(buycontinue,Close-buyprice,IIf(shortcontinue,ShortPrice-close,Null));
GfxTextOut(strg_name,30,height-130);
GfxTextOut(sigstatus+" :
"+IIf(buycontinue,BuyPrice,IIf(shortcontinue,ShortPrice,Null)),30,height-110);
GfxTextOut("Profit/Loss : "+SelectedValue(Prec(PNL,2)),30,height-90);

_SECTION_END();

You might also like