Line Trading Module
Last updated
Last updated
The line Trading Automation tool is designed for Manual traders who want to perform level-based trade execution faster and also bring some advanced trade management in their trades (multiple entries, targets, stops, pyramiding, martingale, etc)
•Draw Horizontal Lines or Trend Lines in Amibroker When the levels are touched then the Line Trade Automation Module will convert into signals and orders will be transmitted to the broker automatically.
•Module Supports Multiple Entry, Targets, Stoploss levels can be drawn and converted into orders, Supports pyramiding.
•Module prevents placing multiple orders at the same signal
•Supports Intraday and Positional Trades
•Supports 3 Long Entry, 3 Long Exit(Target/Stoploss), 3 Short Entries, and 3 Short Exit (Target/Stoploss) Line based trading.
//Module - Line Pair Tading Automation Module
//Rajandran R - Creator of OpenAlgo
//website - openalgo.in / marketcalls.in
//OpenAlgo - Amibroker SmartOrder Chart Trading Module v1.0
//Date - 29/05/2024
_SECTION_BEGIN("OpenAlgo Trading Controls");
RequestTimedRefresh(1,False);
apikey = ParamStr("OpenAlgo API Key", "******");
strategy = ParamStr("Strategy", "Amibroker");
symbol = ParamStr("Symbol", "YESBANK");
exchange = ParamList("Exchange", "NSE|NFO|BSE|MCX|CDS");
pricetype = ParamStr("Price Type", "MARKET");
product = ParamList("Product", "MIS|NRML|CNC");
quantity = Param("Quantity", 1,1,1000,1);
Entrydelay = Param("Entry Delay",0,0,1,1);
Exitdelay = Param("Exit Delay",0,0,1,1);
host = ParamStr("host","http://127.0.0.1:5000");
ver = ParamStr("API Version","v1");
VoiceAlert = ParamList("Voice Alert","Disable|Enable",1);
EnableAlgo = ParamList("Algo Mode","Disable|Enable",0); // Algo Mode
bridgeurl = host+"/api/"+ver;
resp = "";
//Static Variables for Order protection
static_name_ = Name()+GetChartID()+interval(2)+strategy;
static_name_algo = Name()+GetChartID()+interval(2)+strategy+"algostatus";
//Mapping of Orders
iBuy = "BUY";
iSell = "SELL";
GfxSelectFont( "BOOK ANTIQUA", 14, 100 );
GfxSetBkMode( 1 );
if(EnableAlgo == "Enable")
{
AlgoStatus = "Algo Enabled";
GfxSetTextColor( colorGreen );
GfxTextOut( "Algostatus : "+AlgoStatus , 20, 40);
if(Nz(StaticVarGet(static_name_algo),0)!=1)
{
_TRACE("Algo Status : Enabled");
StaticVarSet(static_name_algo, 1);
}
}
if(EnableAlgo == "Disable")
{
AlgoStatus = "Algo Disabled";
GfxSetTextColor( colorRed );
GfxTextOut( "Algostatus : "+AlgoStatus , 20, 40);
if(Nz(StaticVarGet(static_name_algo),0)!=0)
{
_TRACE("Algo Status : Disabled");
StaticVarSet(static_name_algo, 0);
}
}
_SECTION_BEGIN("OpenAlgo Bridge Controls");
EnableScript("VBScript");
<%
Public Sub PlaceOrder(action, quantity)
Dim oXMLHTTP
Dim oStream
Set oXMLHTTP = CreateObject("Msxml2.XMLHTTP")
' Define variables with the specified values
Dim apikey, strategy, symbol , exchange, pricetype, product
apikey = AFL.Var("apikey")
strategy = AFL.Var("strategy")
symbol = AFL.Var("symbol")
exchange = AFL.Var("exchange")
pricetype = AFL.Var("pricetype")
product = AFL.Var("product")
' Construct the JSON string for the POST message
Dim jsonRequestBody
jsonRequestBody = "{""apikey"":""" & apikey & _
""",""strategy"":""" & strategy & _
""",""symbol"":""" & symbol & _
""",""action"":""" & action & _
""",""exchange"":""" & exchange & _
""",""pricetype"":""" & pricetype & _
""",""product"":""" & product & _
""",""quantity"":""" & quantity & """}"
' Set the URL
Dim url
url = AFL.Var("bridgeurl")&"/placeorder"
' Configure the HTTP request for POST method
oXMLHTTP.Open "POST", url, False
oXMLHTTP.setRequestHeader "Content-Type", "application/json"
oXMLHTTP.setRequestHeader "Cache-Control", "no-cache"
oXMLHTTP.setRequestHeader "Pragma", "no-cache"
' Send the request with the JSON body
oXMLHTTP.Send jsonRequestBody
api_parameters = "Strategy :" & strategy & " Symbol :" & symbol & " Exchange :" & exchange & _
" Action :" & action & " Pricetype :" & pricetype & _
" Product :" & product & " Quantity:" & quantity & _
" api_url :" & url
AFL("api_request") = api_parameters
AFL("api_response") = oXMLHTTP.responseText
' Optionally, handle the response here
' Dim response
' response = oXMLHTTP.responseText
' Response handling code...
End Sub
Public Sub PlaceSmartOrder(action, quantity,position_size)
Dim oXMLHTTP
Dim oStream
Set oXMLHTTP = CreateObject("Msxml2.XMLHTTP")
' Define variables with the specified values
Dim apikey, strategy, symbol , exchange, pricetype, product
apikey = AFL.Var("apikey")
strategy = AFL.Var("strategy")
symbol = AFL.Var("symbol")
exchange = AFL.Var("exchange")
pricetype = AFL.Var("pricetype")
product = AFL.Var("product")
' Construct the JSON string for the POST message
Dim jsonRequestBody
jsonRequestBody = "{""apikey"":""" & apikey & _
""",""strategy"":""" & strategy & _
""",""symbol"":""" & symbol & _
""",""action"":""" & action & _
""",""exchange"":""" & exchange & _
""",""pricetype"":""" & pricetype & _
""",""product"":""" & product & _
""",""quantity"":""" & quantity & _
""",""position_size"":""" & position_size & """}"
' Set the URL
Dim url
url = AFL.Var("bridgeurl")&"/placesmartorder"
' Configure the HTTP request for POST method
oXMLHTTP.Open "POST", url, False
oXMLHTTP.setRequestHeader "Content-Type", "application/json"
oXMLHTTP.setRequestHeader "Cache-Control", "no-cache"
oXMLHTTP.setRequestHeader "Pragma", "no-cache"
' Send the request with the JSON body
oXMLHTTP.Send jsonRequestBody
api_parameters = "Strategy :" & strategy & " Symbol :" & symbol & " Exchange :" & exchange & _
" Action :" & action & " Pricetype :" & pricetype & _
" Product :" & product & " Quantity:" & quantity & _
" Position Size :" & position_size & " api_url :" & url
AFL("sm_api_request") = api_parameters
AFL("sm_api_response") = oXMLHTTP.responseText
' Optionally, handle the response here
' Dim response
' response = oXMLHTTP.responseText
' Response handling code...
End Sub
Public Sub ExitOrder(action)
Dim oXMLHTTP
Dim oStream
Set oXMLHTTP = CreateObject("Msxml2.XMLHTTP")
' Define variables with the specified values
Dim apikey, strategy, symbol , exchange, pricetype, product
apikey = AFL.Var("apikey")
strategy = AFL.Var("strategy")
symbol = AFL.Var("symbol")
exchange = AFL.Var("exchange")
pricetype = AFL.Var("pricetype")
product = AFL.Var("product")
position_size = "0"
quantity = "0"
' Construct the JSON string for the POST message
Dim jsonRequestBody
jsonRequestBody = "{""apikey"":""" & apikey & _
""",""strategy"":""" & strategy & _
""",""symbol"":""" & symbol & _
""",""action"":""" & action & _
""",""exchange"":""" & exchange & _
""",""pricetype"":""" & pricetype & _
""",""product"":""" & product & _
""",""quantity"":""" & quantity & _
""",""position_size"":""" & position_size & """}"
' Set the URL
Dim url
url = AFL.Var("bridgeurl")&"/placesmartorder"
' Configure the HTTP request for POST method
oXMLHTTP.Open "POST", url, False
oXMLHTTP.setRequestHeader "Content-Type", "application/json"
oXMLHTTP.setRequestHeader "Cache-Control", "no-cache"
oXMLHTTP.setRequestHeader "Pragma", "no-cache"
' Send the request with the JSON body
oXMLHTTP.Send jsonRequestBody
api_parameters = "Strategy :" & strategy & " Symbol :" & symbol & " Exchange :" & exchange & _
" Action :" & action & " Pricetype :" & pricetype & _
" Product :" & product & " Quantity:" & quantity & _
" Position Size :" & position_size & " api_url :" & url
AFL("ex_api_request") = api_parameters
AFL("ex_api_response") = oXMLHTTP.responseText
' Optionally, handle the response here
' Dim response
' response = oXMLHTTP.responseText
' Response handling code...
End Sub
Public Sub SquareoffAll()
Dim oXMLHTTP
Dim oStream
Set oXMLHTTP = CreateObject("Msxml2.XMLHTTP")
' Define variables with the specified values
Dim apikey, strategy
apikey = AFL.Var("apikey")
strategy = AFL.Var("strategy")
' Construct the JSON string for the POST message
Dim jsonRequestBody
jsonRequestBody = "{""apikey"":""" & apikey & _
""",""strategy"":""" & strategy & """}"
' Set the URL
Dim url
url = AFL.Var("bridgeurl")&"/closeposition"
' Configure the HTTP request for POST method
oXMLHTTP.Open "POST", url, False
oXMLHTTP.setRequestHeader "Content-Type", "application/json"
oXMLHTTP.setRequestHeader "Cache-Control", "no-cache"
oXMLHTTP.setRequestHeader "Pragma", "no-cache"
' Send the request with the JSON body
oXMLHTTP.Send jsonRequestBody
api_parameters = "Strategy :" & strategy & " api_url :" & url
AFL("sq_api_request") = api_parameters
AFL("sq_api_response") = oXMLHTTP.responseText
' Optionally, handle the response here
' Dim response
' response = oXMLHTTP.responseText
' Response handling code...
End Sub
%>
openalgo = GetScriptObject();
_SECTION_END();
_SECTION_BEGIN("Line Pair Trading Module");
SetBarsRequired(-2,-2); //turning off quick afl
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();
//Static Variables will be saved in Amibroker every 60 seconds once
SetOption("StaticVarAutoSave",60);
// Send orders even if Amibroker is minimized or Chart is not active
RequestTimedRefresh(0.1, False);
EnableTextOutput(False);
IntradayMode = ParamList("Intraday Mode","ON|OFF",0);
StartTradeTime = ParamTime("Start Time","09:30");
EndTradeTime = ParamTime("End Time","15:00");
ExitTradeTime = ParamTime("Squareoff Time","15:15");
BuyMode=ParamToggle("Buy Mode","BUY ABOVE|BUY BELOW",0);
SellMode=ParamToggle("Sell Mode","SELL ABOVE|SELL BELOW",0);
ShortMode=ParamToggle("Short Mode","SHORT ABOVE|SHORT BELOW",1);
CoverMode=ParamToggle("Cover Mode","COVER ABOVE|COVER BELOW",1);
ExitPos = ParamList("Exit Positions","CURRENT|ALLOPENPOSITIONS");
buyquantity1 = Param("Buy Quantity1",1,0,10000,1);
buyquantity2 = Param("Buy Quantity2",1,0,10000,1);
buyquantity3 = Param("Buy Quantity3",1,0,10000,1);
shortquantity1 = Param("Short Quantity1",1,0,10000,1);
shortquantity2 = Param("Short Quantity2",1,0,10000,1);
shortquantity3 = Param("Short Quantity3",1,0,10000,1);
clear = ParamTrigger("Reset Trades and Signals","Press to Reset");
staticvar = Name()+Interval()+GetChartID();
if(clear)
{
StaticVarRemove(staticvar+"*");
_TRACE("Static Variables Cleared");
}
Plot( C, "Price", colorBlack, styleCandle );
if(BuyMode==0) Buydisplaytext = "Buy Above";
if(BuyMode==1) Buydisplaytext = "Buy Below";
if(SellMode==0) Selldisplaytext = "Sell Above";
if(SellMode==1) Selldisplaytext = "Sell Below";
if(ShortMode==0) Shortdisplaytext = "Short Above";
if(ShortMode==1) Shortdisplaytext = "Short Below";
if(CoverMode==0) Coverdisplaytext = "Cover Above";
if(CoverMode==1) Coverdisplaytext = "Cover Below";
B1 = LastValue(Study("B1", GetChartID() ));
B2 = LastValue(Study("B2", GetChartID() ));
B3 = LastValue(Study("B3", GetChartID() ));
X1 = LastValue(Study("X1", GetChartID() ));
X2 = LastValue(Study("X2", GetChartID() ));
X3 = LastValue(Study("X3", GetChartID() ));
S1 = LastValue(Study("S1", GetChartID() ));
S2 = LastValue(Study("S2", GetChartID() ));
S3 = LastValue(Study("S3", GetChartID() ));
C1 = LastValue(Study("C1", GetChartID() ));
C2 = LastValue(Study("C2", GetChartID() ));
C3 = LastValue(Study("C3", GetChartID() ));
function lineplot(value,text,quantity,displaytext)
{
textcolor = IIf(text=="B1" OR text=="B2" OR text=="B3", colorGreen,
IIf(text=="X1" OR text=="X2" OR text=="X3", colorRed,
IIf(text=="S1" OR text=="S2" OR text=="S3", colorBrown,
IIf(text=="C1" OR text=="C2" OR text=="C3", colorBlue,colorGrey40))));
x = LastValue( ValueWhen( ExRem( value, 0 ), DateTime() ) );
if( x!= 0 AND (text=="B1" OR text=="B2" OR text=="B3"))
PlotText(text+" "+Displaytext+" : "+value+" Qty ="+quantity,BarCount-40,value,colorWhite,textcolor,10);
if( x!= 0 AND (text=="S1" OR text=="S2" OR text=="S3"))
PlotText(text+" "+Displaytext+" : "+value+" Qty ="+quantity,BarCount-40,value,colorWhite,textcolor,10);
if( x!= 0 AND ExitPos=="CURRENT" AND (text=="X1" OR text=="X2" OR text=="X3"))
PlotText(text+" "+Displaytext+" : "+value+" Qty ="+quantity,BarCount-40,value,colorWhite,textcolor,10);
if( x!= 0 AND ExitPos=="CURRENT" AND (text=="C1" OR text=="C2" OR text=="C3"))
PlotText(text+" "+Displaytext+" : "+value+" Qty ="+quantity,BarCount-40,value,colorWhite,textcolor,10);
if( x!= 0 AND ExitPos=="ALLOPENPOSITIONS" AND (text=="X1" OR text=="X2" OR text=="X3"))
PlotText(text+" "+Displaytext+" : "+value+" Qty = All",BarCount-40,value,colorWhite,textcolor,10);
if( x!= 0 AND ExitPos=="ALLOPENPOSITIONS" AND (text=="C1" OR text=="C2" OR text=="C3"))
PlotText(text+" "+Displaytext+" : "+value+" Qty = All",BarCount-40,value,colorWhite,textcolor,10);
}
lineplot(B1,"B1",buyquantity1,Buydisplaytext);
lineplot(B2,"B2",buyquantity2,Buydisplaytext);
lineplot(B3,"B3",buyquantity3,Buydisplaytext);
lineplot(X1,"X1",buyquantity1,Selldisplaytext);
lineplot(X2,"X2",buyquantity2,Selldisplaytext);
lineplot(X3,"X3",buyquantity3,Selldisplaytext);
lineplot(S1,"S1",shortquantity1,Shortdisplaytext);
lineplot(S2,"S2",shortquantity2,Shortdisplaytext);
lineplot(S3,"S3",shortquantity3,Shortdisplaytext);
lineplot(C1,"C1",shortquantity1,Coverdisplaytext);
lineplot(C2,"C2",shortquantity2,Coverdisplaytext);
lineplot(C3,"C3",shortquantity3,Coverdisplaytext);
if(EnableAlgo != "Disable")
{
lasttime = StrFormat("%0.f",LastValue(BarIndex()));
SetChartBkColor(colorDarkGrey);
if(IntradayMode=="ON" AND LastValue(TimeNum())== ExitTradeTime AND Nz(StaticVarGet(staticvar+"SquareOff"))==0)
{
openalgo.ExitOrder("SELL");
StaticVarSet(staticvar+"SquareOffIndex",LastValue(BarIndex()));
StaticVarSet(staticvar+"SquareOff",1);
_TRACE("Squareoff Alert Triggered");
}
if(BuyMode==0 AND LastValue(Cross(H,B1)) AND Nz(StaticVarGet(staticvar+"B1"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("BUY",buyquantity1);
StaticVarSet(staticvar+"B1index",LastValue(BarIndex()));
StaticVarSet(staticvar+"B1",1);
_TRACE("Buy Above B1 Triggered");
}
}
if(BuyMode==1 AND LastValue(Cross(B1,L)) AND Nz(StaticVarGet(staticvar+"B1"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("BUY",buyquantity1);
StaticVarSet(staticvar+"B1index",LastValue(BarIndex()));
StaticVarSet(staticvar+"B1",1);
_TRACE("Buy Below B1 Triggered");
}
}
if(BuyMode==0 AND LastValue(Cross(H,B2)) AND Nz(StaticVarGet(staticvar+"B2"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("BUY",buyquantity2);
StaticVarSet(staticvar+"B2index",LastValue(BarIndex()));
StaticVarSet(staticvar+"B2",1);
_TRACE("Buy Above B2 Triggered");
}
}
if(BuyMode==1 AND LastValue(Cross(B2,L)) AND Nz(StaticVarGet(staticvar+"B2"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("BUY",buyquantity2);
StaticVarSet(staticvar+"B2index",LastValue(BarIndex()));
StaticVarSet(staticvar+"B2",1);
_TRACE("Buy Below B2 Triggered");
}
}
if(BuyMode==0 AND LastValue(Cross(H,B3)) AND Nz(StaticVarGet(staticvar+"B3"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("BUY",buyquantity3);
StaticVarSet(staticvar+"B3index",LastValue(BarIndex()));
StaticVarSet(staticvar+"B3",1);
_TRACE("Buy Above B3 Triggered");
}
}
if(BuyMode==1 AND LastValue(Cross(B3,L)) AND Nz(StaticVarGet(staticvar+"B3"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("BUY",buyquantity3);
StaticVarSet(staticvar+"B3index",LastValue(BarIndex()));
StaticVarSet(staticvar+"B3",1);
_TRACE("Buy Below B3 Triggered");
}
}
if(SellMode==0 AND LastValue(Cross(H,X1)) AND Nz(StaticVarGet(staticvar+"X1"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.placeorder("SELL",buyquantity1);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("SELL");
}
StaticVarSet(staticvar+"X1index",LastValue(BarIndex()));
StaticVarSet(staticvar+"X1",1);
_TRACE("Sell Above X1 Triggered");
}
}
if(SellMode==1 AND LastValue(Cross(X1,L)) AND Nz(StaticVarGet(staticvar+"X1"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.placeorder("SELL",buyquantity1);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("SELL");
}
StaticVarSet(staticvar+"X1index",LastValue(BarIndex()));
StaticVarSet(staticvar+"X1",1);
_TRACE("Sell Below X1 Triggered");
}
}
if(SellMode==0 AND LastValue(Cross(H,X2)) AND Nz(StaticVarGet(staticvar+"X2"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.placeorder("SELL",buyquantity2);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("SELL");
}
StaticVarSet(staticvar+"X2index",LastValue(BarIndex()));
StaticVarSet(staticvar+"X2",1);
_TRACE("Sell Above X2 Triggered");
}
}
if(SellMode==1 AND LastValue(Cross(X2,L)) AND Nz(StaticVarGet(staticvar+"X2"))==0)
{
if((IntradayMode=="ON" AND TimeNum()== ExitTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.placeorder("SELL",buyquantity2);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("SELL");
}
StaticVarSet(staticvar+"X2index",LastValue(BarIndex()));
StaticVarSet(staticvar+"X2",1);
_TRACE("Sell Below X2 Triggered");
}
}
if(SellMode==0 AND LastValue(Cross(H,X3)) AND Nz(StaticVarGet(staticvar+"X3"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.placeorder("SELL",buyquantity3);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("SELL");
}
StaticVarSet(staticvar+"X3index",LastValue(BarIndex()));
StaticVarSet(staticvar+"X3",1);
_TRACE("Sell Above X3 Triggered");
}
}
if(SellMode==1 AND LastValue(Cross(X3,L)) AND Nz(StaticVarGet(staticvar+"X3"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.placeorder("SELL",buyquantity3);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("SELL");
}
StaticVarSet(staticvar+"X3index",LastValue(BarIndex()));
StaticVarSet(staticvar+"X3",1);
_TRACE("Sell Below X3 Triggered");
}
}
if(ShortMode==0 AND LastValue(Cross(H,S1)) AND Nz(StaticVarGet(staticvar+"S1"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("SELL",shortquantity1);
StaticVarSet(staticvar+"S1index",LastValue(BarIndex()));
StaticVarSet(staticvar+"S1",1);
_TRACE("Short Above S1 Triggered");
}
}
if(ShortMode==1 AND LastValue(Cross(S1,L)) AND Nz(StaticVarGet(staticvar+"S1"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("SELL",shortquantity1);
StaticVarSet(staticvar+"S1index",LastValue(BarIndex()));
StaticVarSet(staticvar+"S1",1);
_TRACE("Short Below S1 Triggered");
}
}
if(ShortMode==0 AND LastValue(Cross(H,S2)) AND Nz(StaticVarGet(staticvar+"S2"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("SELL",shortquantity2);
StaticVarSet(staticvar+"S2index",LastValue(BarIndex()));
StaticVarSet(staticvar+"S2",1);
_TRACE("Short Above S2 Triggered");
}
}
if(ShortMode==1 AND LastValue(Cross(S2,L)) AND Nz(StaticVarGet(staticvar+"S2"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("SELL",shortquantity2);
StaticVarSet(staticvar+"S2index",LastValue(BarIndex()));
StaticVarSet(staticvar+"S2",1);
_TRACE("Short Below S2 Triggered");
}
}
if(ShortMode==0 AND LastValue(Cross(H,S3)) AND Nz(StaticVarGet(staticvar+"S3"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("SELL",shortquantity3);
StaticVarSet(staticvar+"S3index",LastValue(BarIndex()));
StaticVarSet(staticvar+"S3",1);
_TRACE("Short Above S3 Triggered");
}
}
if(ShortMode==1 AND LastValue(Cross(S3,L)) AND Nz(StaticVarGet(staticvar+"S3"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
openalgo.placeorder("SELL",shortquantity3);
StaticVarSet(staticvar+"S3index",LastValue(BarIndex()));
StaticVarSet(staticvar+"S3",1);
_TRACE("Short Below S3 Triggered");
}
}
if(CoverMode==0 AND LastValue(Cross(H,C1)) AND Nz(StaticVarGet(staticvar+"C1"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.PlaceOrder("BUY",shortquantity1);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("BUY");
}
StaticVarSet(staticvar+"C1index",LastValue(BarIndex()));
StaticVarSet(staticvar+"C1",1);
_TRACE("Cover Above C1 Triggered");
}
}
if(CoverMode==1 AND LastValue(Cross(C1,L)) AND Nz(StaticVarGet(staticvar+"C1"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.PlaceOrder("BUY",shortquantity1);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("BUY");
}
StaticVarSet(staticvar+"C1index",LastValue(BarIndex()));
StaticVarSet(staticvar+"C1",1);
_TRACE("Cover Below C1 Triggered");
}
}
if(CoverMode==0 AND LastValue(Cross(H,C2)) AND Nz(StaticVarGet(staticvar+"C2"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.PlaceOrder("BUY",shortquantity2);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("BUY");
}
StaticVarSet(staticvar+"C2index",LastValue(BarIndex()));
StaticVarSet(staticvar+"C2",1);
_TRACE("Cover Above C2 Triggered");
}
}
if(CoverMode==1 AND LastValue(Cross(C2,L)) AND Nz(StaticVarGet(staticvar+"C2"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.PlaceOrder("BUY",shortquantity2);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("BUY");
}
StaticVarSet(staticvar+"C2index",LastValue(BarIndex()));
StaticVarSet(staticvar+"C2",1);
_TRACE("Cover Below C2 Triggered");
}
}
if(CoverMode==0 AND LastValue(Cross(H,C3)) AND Nz(StaticVarGet(staticvar+"C3"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.PlaceOrder("BUY",shortquantity3);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("BUY");
}
StaticVarSet(staticvar+"C3index",LastValue(BarIndex()));
StaticVarSet(staticvar+"C3",1);
_TRACE("Cover Above C3 Triggered");
}
}
if(CoverMode==1 AND LastValue(Cross(C3,L)) AND Nz(StaticVarGet(staticvar+"C3"))==0)
{
if((IntradayMode=="ON" AND LastValue(TimeNum())>= StartTradeTime AND LastValue(TimeNum()) <= EndTradeTime) OR IntradayMode=="OFF")
{
if(ExitPos=="CURRENT")
{
//If positive open positions are there only then exit the Current Order Quantity
openalgo.PlaceOrder("BUY",shortquantity3);
}
if(ExitPos=="ALLOPENPOSITIONS")
{
//If positive open positions are there only then exit the All Open Positions
openalgo.ExitOrder("BUY");
}
StaticVarSet(staticvar+"C3index",LastValue(BarIndex()));
StaticVarSet(staticvar+"C3",1);
_TRACE("Cover Below C3 Triggered");
}
}
//Plot Signals and Arrows
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"B1index"), shapeSquare, shapeNone),colorGreen, 0, L, Offset=-40);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"B1index"), shapeSquare, shapeNone),colorLime, 0,L, Offset=-50);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"B1index"), shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-45);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"B2index"), shapeSquare, shapeNone),colorGreen, 0, L, Offset=-40);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"B2index"), shapeSquare, shapeNone),colorLime, 0,L, Offset=-50);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"B2index"), shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-45);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"B3index"), shapeSquare, shapeNone),colorGreen, 0, L, Offset=-40);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"B3index"), shapeSquare, shapeNone),colorLime, 0,L, Offset=-50);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"B3index"), shapeUpArrow, shapeNone),colorWhite, 0,L, Offset=-45);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"S1index"), shapeSquare, shapeNone),colorRed, 0, H, Offset=40);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"S1index"), shapeSquare, shapeNone),colorOrange, 0,H, Offset=50);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"S1index"), shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-45);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"S2index"), shapeSquare, shapeNone),colorRed, 0, H, Offset=40);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"S2index"), shapeSquare, shapeNone),colorOrange, 0,H, Offset=50);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"S2index"), shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-45);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"S3index"), shapeSquare, shapeNone),colorRed, 0, H, Offset=40);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"S3index"), shapeSquare, shapeNone),colorOrange, 0,H, Offset=50);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"S3index"), shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-45);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"X1index"), shapeStar,shapeNone), colorBrightGreen, 0, High, 12);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"X2index"), shapeStar,shapeNone), colorBrightGreen, 0, High, 12);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"X3index"), shapeStar,shapeNone), colorBrightGreen, 0, High, 12);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"C1index"), shapeStar,shapeNone), colorRed, 0, Low, -12);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"C2index"), shapeStar,shapeNone), colorRed, 0, Low, -12);
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"C3index"), shapeStar,shapeNone), colorRed, 0, Low, -12);
if(IntradayMode=="ON")
{
PlotShapes(IIf(BarIndex()==StaticVarGet(staticvar+"SquareOffIndex"), shapeStar,shapeNone), colorYellow, 0, Low, -12);
}
}
_SECTION_END();
•Smart Orders are enabled while exiting the position.
•If there are no open positions and if exit orders are triggered then those orders are smartly ignored.
•Provision to close only Current Quantity and All Open Positions is provided so that traders can flexibly use their own exit methods
●OpenAlgo Downloaded and Configured
●OpenAlgo Supported Broker
●Amibroker 6.0 or Higher
●Realtime Datafeed Subscription
where the characters ‘B’. ‘X’, ‘S’, ‘C’ are used along with horizontal or trendline study names.