Sending Futures/Spot – Signals to Two-Legged Options Execution Module – Tradingview Pinescript Module

Thought of making an open-source Tradingview Pinescript code demanded by most of the option traders to control the cost, control the risk, and configure the two-legged option trading strategy of their choice with slicing larger orders feature. So here is a two-legged options execution Tradingview module for the Algomojo trading platform where users can configure modules on top of their own trading logic to convert any spot/futures signals into 9 types of two-legged options execution modules.

Tradingview Pinescript Module Explained

Block 1 : API Controls + Algomojo Input Controls and Option Strike Calculation

Block 2 : Backtesting Controls & Target and Stoploss Controls

Block 3 : Trading Strategy and Controls (write your trading strategy in the block

Block 4 : Buy and Sell Signal Mapping (Buy,Sell, Short,Cover Signal Mapping is required)

Block 5 : Framing Option Symbols and Multi Order API Messaging Structure

Block 6 : Trade Execution Controls

Block 7 : Plotting Trading Dashboard

What is a Two-Legged Options Strategy?

A two-legged options trading strategy involves buying or selling two options at the same time, typically with different strike prices or expiration dates. The strategy is designed to take advantage of the price difference between the two options and can be used for a variety of purposes, such as hedging, speculation, or income generation.

Features of the Two-Legged Options Execution Module

1)Configure various styles of two-legged options execution strategies. Supports 9 types of two-legged options trading strategies.
2)Configure separate options trading strategies for long-entry and short-entry signals in spot/futures charts
3)Place Larger Option Orders by Splitting Larger Orders into multiple small orders.
4)Option Strike calculation at Tradingview end (Trades can configure the Underlying symbol as Spot./Futures) based on their trading requirement) accordingly, options strikes will be calculated.
5)Easy to configure the module by configuring block 3 and mapping the signals to block 4 in the below-mentioned code

Here are the Supported two-legged options trading strategies:

Credit Spread: Selling an option at one strike price and buying an option at a lower strike price.

Debit Spread: Buying an option at one strike price and selling an option at a higher strike price.

Straddle: buying a call and a put option with the same strike price and expiration date.

Strangle: buying a call option with a higher strike price and a put option with a lower strike price

Synthetic Futures: Buying/Selling a call option and selling/Buying a put option of the same strike price and expiration date

Diagonal Spread: Buying a call or put option with a longer expiration date and selling a call or put option with a shorter expiration date and a different strike price.

Calendar Spread: Buying a call or put option with a longer expiration date and selling a call or put option with a shorter expiration date.

Ratio Spread: Buying a call or put option at one strike price and selling multiple options at a different strike price

Ratio Back Spread: Buying multiple options at one strike price and selling an option at a different strike price

Webhook URL for Trade Automation

This code uses Algomojo Consolidated API and uses placemultiorder API functionality and sends two leg orders in options. Here is the webhook URL that needs to be used for all the supported Algomojo brokers,

https://amapi.algomojo.com/v1/PlaceMultiOrder

Pinescript Trading Strategy Module


/*
Algomojo - Smart Spot/Futures to Two Leg Options Trading Module with Split Order Controls

Supported Two Leg Strategies
Strategies that be built using this module
1)Credit Spread
2)Debit Spread
3)Straddle
4)Strangle
5)Synthetic Futures
6)Diagonal spread
7)Calendar Spread
8)Ratio Spread
9)Ratio Back Spread


Created By : Algomojo
Created on : 7 Mar 2023.
Website : www.algomojo.com
*/


_SECTION_BEGIN("Algomojo - Broker Controls");


// Send orders even if Amibroker is minimized or Chart is not active
RequestTimedRefresh(1, False); 

//Creating Input Controls for Setting Order Related Information

broker =Paramlist("Broker","an|ab|fs|fy|gc|pt|sm|tc|up|zb|ze",0);
ver = ParamStr("API Version ","v1");
apikey = ParamStr("apikey","xxxxxxxxxxxxxxxxxxxxxxxxxxxx"); //Enter your API key here
apisecret = ParamStr("secretkey","xxxxxxxxxxxxxxxxxxxxxxxxxxxx"); //Enter your API secret key here

_SECTION_END();


_SECTION_BEGIN("Algomojo - Order Controls");

strategy = ParamStr("Strategy Name", "Test Strategy");

spot = Paramlist("Spot Symbol","NIFTY|BANKNIFTY");
expiry_leg1 = ParamStr("Expiry Date1","25JAN23");
expiry_leg2 = ParamStr("Expiry Date2","25JAN23");

exchange = ParamList("Exchange","NFO|MCX",0); 
Symbol = ParamStr("Underlying Symbol","NIFTY-I.NFO");
iInterval= Param("Strike Interval",50,1,10000,1);
StrikeCalculation = Paramlist("Strike Calculation","PREVOPEN|PREVCLOSE|TODAYSOPEN",0);
LotSize = Param("Lot Size",50,1,10000,1);

quantity_leg1 = Param("quanity1(Lot Size)",1,0,10000)*LotSize;
quantity_leg2 = Param("quanity2(Lot Size)",1,0,10000)*LotSize;

opttype_buyleg1 = ParamList("Option Type1(Buy)","CE|PE",0);
opttype_buyleg2 = ParamList("Option Type2(Buy)","CE|PE",0);

tradetype_buyleg1 = ParamList("Option Trade Type1(Buy)","BUY|SELL",0);
tradetype_buyleg2 = ParamList("Option Trade Type2(Buy)","BUY|SELL",0);


offset_buyleg1 = Param("Offset1(Buy)",0,-40,40,1);
offset_buyleg2 = Param("Offset2(Buy)",0,-40,40,1);

opttype_shortleg1 = ParamList("Option Type1(Short)","CE|PE",0);
opttype_shortleg2 = ParamList("Option Type2(Short)","CE|PE",0);



tradetype_shortleg1 = ParamList("Option Trade Type1(Short)","BUY|SELL",0);
tradetype_shortleg2 = ParamList("Option Trade Type2(Short)","BUY|SELL",0);


offset_shortleg1 = Param("Offset1(Short)",0,-40,40,1);
offset_shortleg2 = Param("Offset2(Short)",0,-40,40,1);

pricetype = ParamList("Order Type","MARKET",0);
product = ParamList("Product","MIS|NRML",1);



price = 0; 
disclosed_quantity = 0;
trigger_price = 0;
amo = "NO";
splitorder = ParamList("To Split Orders","NO|YES",0);
split_quantity = Param("Split Quantity",500,1,100000,1);

VoiceAlert = ParamList("Voice Alert","Disable|Enable",1);

Entrydelay = Param("Entry Delay",0,0,1,1);
Exitdelay = Param("Exit Delay",0,0,1,1);
EnableAlgo = ParamList("AlgoStatus","Disable|Enable|LongOnly|ShortOnly",0);
resp = "";


//Static Variables for Order protection

static_name_ = Name()+GetChartID()+interval(2)+strategy;
static_name_algo = Name()+GetChartID()+interval(2)+strategy+"algostatus";


AlgoBuy = lastvalue(Ref(Buy,-Entrydelay));
AlgoSell = lastvalue(Ref(Sell,-Exitdelay));
AlgoShort = lastvalue(Ref(Short,-Entrydelay));
AlgoCover = lastvalue(Ref(Cover,-Exitdelay));



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);
}
}
if(EnableAlgo == "LongOnly")
{
AlgoStatus = "Long Only";
GfxSetTextColor( colorYellow ); 
GfxTextOut( "Algostatus : "+AlgoStatus , 20, 40); 
if(Nz(StaticVarGet(static_name_algo),0)!=2)
{
_TRACE("Algo Status : Long Only");
StaticVarSet(static_name_algo, 2);
}
}
if(EnableAlgo == "ShortOnly")
{
AlgoStatus = "Short Only";
GfxSetTextColor( colorYellow ); 
GfxTextOut( "Algostatus : "+AlgoStatus , 20, 40); 
if(Nz(StaticVarGet(static_name_algo),0)!=3)
{
_TRACE("Algo Status : Short Only");
StaticVarSet(static_name_algo, 3);
}
}


EnableTextOutput(False);



//optionCEtype = WriteIf(offsetCE == 0, "ATM CE", WriteIf(offsetCE<0,"ITM"+abs(offsetCE)+" CE","OTM"+abs(offsetCE)+" CE"));
//optionPEtype = WriteIf(offsetPE == 0, "ATM PE", WriteIf(offsetPE<0,"ITM"+abs(offsetPE)+" PE","OTM"+abs(offsetPE)+" PE"));


if(StrikeCalculation=="PREVOPEN")
{
SetForeign(Symbol);
spotC = Ref(OPEN,-1);
RestorePriceArrays();
}

if(StrikeCalculation=="PREVCLOSE")
{
SetForeign(Symbol);
spotC = Ref(Close,-1);
RestorePriceArrays();
}

if(StrikeCalculation=="TODAYSOPEN")
{
SetForeign(Symbol);
spotC = TimeFrameGetPrice("O",inDaily);
RestorePriceArrays();
}
//Maintain Array to Store ATM Strikes for each and every bar
strike = IIf(spotC % iInterval > iInterval/2, spotC - (spotC%iInterval) + iInterval,
			spotC - (spotC%iInterval));
			
//Buy Signal Entry Strikes	

if(opttype_buyleg1=="CE")
{	
strike_buyleg1 = strike + (offset_buyleg1 * iInterval);
}
if(opttype_buyleg1=="PE")
{	
strike_buyleg1 = strike - (offset_buyleg1 * iInterval);
}
if(opttype_buyleg2=="CE")
{	
strike_buyleg2 = strike + (offset_buyleg2 * iInterval);
}
if(opttype_buyleg2=="PE")
{	
strike_buyleg2 = strike - (offset_buyleg2 * iInterval);
}

//Short Signal Entry Strikes	

if(opttype_shortleg1=="CE")
{	
strike_shortleg1 = strike + (offset_shortleg1 * iInterval);
}
if(opttype_shortleg1=="PE")
{	
strike_shortleg1 = strike - (offset_shortleg1 * iInterval);
}
if(opttype_shortleg2=="CE")
{	
strike_shortleg2 = strike + (offset_shortleg2 * iInterval);
}
if(opttype_shortleg2=="PE")
{	
strike_shortleg2 = strike - (offset_shortleg2 * iInterval);
}


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

exitsymbol_buyleg1 = "";
exitsymbol_buyleg2 = "";
exitsymbol_shortleg1 = "";
exitsymbol_shortleg2 = "";

ExitStrike_buyleg1 = ValueWhen(Ref(Buy,-Entrydelay),strike_buyleg1);
ExitStrike_buyleg2 = ValueWhen(Ref(Buy,-Entrydelay),strike_buyleg2);

ExitStrike_shortleg1 = ValueWhen(Ref(Short,-Entrydelay),strike_shortleg1);
ExitStrike_shortleg2 = ValueWhen(Ref(Short,-Entrydelay),strike_shortleg2);

if(broker=="tc" OR broker=="fs")
{

if(opttype_buyleg1=="CE") opttype_buy_leg1 = "C";
if(opttype_buyleg1=="PE") opttype_buy_leg1 = "P";

if(opttype_buyleg2=="CE") opttype_buy_leg2 = "C";
if(opttype_buyleg2=="PE") opttype_buy_leg2 = "P";

if(opttype_shortleg1=="CE") opttype_short_leg1 = "C";
if(opttype_shortleg1=="PE") opttype_short_leg1 = "P";

if(opttype_shortleg2=="CE") opttype_short_leg2 = "C";
if(opttype_shortleg2=="PE") opttype_short_leg2 = "P";


exitsymbol_buyleg1 = WriteIf(buycontinue OR sell,spot+expiry_leg1+opttype_buy_leg1+ExitStrike_buyleg1,"");
exitsymbol_buyleg2 = WriteIf(buycontinue OR sell,spot+expiry_leg2+opttype_buy_leg2+ExitStrike_buyleg2,"");
exitsymbol_shortleg1 = WriteIf(shortcontinue OR cover,spot+expiry_leg1+opttype_short_leg1+ExitStrike_shortleg1,"");
exitsymbol_shortleg2 = WriteIf(shortcontinue OR cover,spot+expiry_leg2+opttype_short_leg2+ExitStrike_shortleg2,"");

}

else
{
exitsymbol_buyleg1 = WriteIf(buycontinue OR sell,spot+expiry_leg1+ExitStrike_buyleg1+opttype_buyleg1,"");
exitsymbol_buyleg2 = WriteIf(buycontinue OR sell,spot+expiry_leg2+ExitStrike_buyleg2+opttype_buyleg2,"");
exitsymbol_shortleg1 = WriteIf(shortcontinue OR cover,spot+expiry_leg1+ExitStrike_shortleg1+opttype_shortleg1,"");
exitsymbol_shortleg2 = WriteIf(shortcontinue OR cover,spot+expiry_leg2+ExitStrike_shortleg2+opttype_shortleg2,"");
}





printf("\n\n\nLeg1 Symbol(Buy) : "+exitsymbol_buyleg1);
printf("\nLeg2 Symbol(Buy) : "+exitsymbol_buyleg2);

printf("\n\n\nLeg1 Symbol(Short) : "+exitsymbol_shortleg1);
printf("\nLeg2 Symbol(Short) : "+exitsymbol_shortleg2);



_SECTION_END();




//Buy and Sell Order Functions
//signaltype = "buy" OR "short
//leg = "leg1","leg2"
function Placeorder(action,OptionType,orderqty,expiry,signaltype,leg)
{
//strike_buyleg1	
    algomojo=CreateObject("AMAMIBRIDGE.Main");
    
    if(broker=="tc" OR broker=="fs" )
	{
		if(OptionType=="CE") OptType = "C";
		if(OptionType=="PE") OptType = "P";
		tradingsymbol = spot+expiry+OptType+VarGetText("strike_"+signaltype+leg);
    }
    else
	{
		tradingsymbol = spot+expiry+VarGetText("strike_"+signaltype+leg)+OptionType;
    }
    api_data = "{ \"broker\": \""+broker+"\",
            \"strategy\":\""+strategy+"\",
            \"exchange\":\""+exchange+"\",
            \"symbol\":\""+tradingsymbol+"\",
            \"action\":\""+action+"\",
            \"product\":\""+product+"\",
            \"pricetype\":\""+pricetype+"\",
            \"quantity\":\""+orderqty+"\",
            \"price\":\""+price+"\",      
            \"disclosed_quantity\":\""+disclosed_quantity+"\",
            \"trigger_price\":\""+trigger_price+"\",
            \"amo\":\""+amo+"\",
            \"splitorder\":\""+splitorder+"\",
            \"split_quantity\":\""+split_quantity+"\"
          
        }"; 
    _TRACE("Signal Type"+signaltype+" Option Leg : "+leg);
    _TRACE("API Request"+api_data);
    resp=algomojo.AMDispatcher(apikey, apisecret,"PlaceOrder",api_data,"am",ver);
    _TRACE("API Response : "+resp);
    
    if(VoiceAlert == "Enable")
	Say( "Order Placed" ); 
}

//Squareoff Function to Exit Open Positions

//signaltype = "buy" OR "short
//leg = "leg1","leg2"

function ExitOrder(action,OptionType,expiry,signaltype,leg)
{


 algomojo=CreateObject("AMAMIBRIDGE.Main");
//exitsymbol_buyleg1
if(broker=="tc" or broker=="fs")
{
	if(OptionType=="CE") OptType = "C";
	if(OptionType=="PE") OptType = "P";
					//spot+expiry+OptType+VarGetText("strike_"+signaltype+leg);
	tradingsymbol = VarGetText("exitsymbol_"+signaltype+leg);
}

else
{
	tradingsymbol = VarGetText("exitsymbol_"+signaltype+leg);
}

api_data = "{ \"broker\": \""+broker+"\",
            \"strategy\":\""+strategy+"\",
            \"exchange\":\""+exchange+"\",
            \"symbol\":\""+tradingsymbol+"\",
            \"action\":\""+action+"\",
            \"product\":\""+product+"\",
            \"pricetype\":\""+pricetype+"\",
            \"quantity\":\""+"0"+"\",
            \"price\":\""+price+"\",
            \"position_size\":\""+"0"+"\",            
            \"disclosed_quantity\":\""+disclosed_quantity+"\",
            \"trigger_price\":\""+trigger_price+"\",
            \"amo\":\""+amo+"\",
            \"splitorder\":\""+splitorder+"\",
            \"split_quantity\":\""+split_quantity+"\"
          
        }"; 

_TRACE("Signal Type"+signaltype+" Option Leg : "+leg);
_TRACE("Broker API Request"+api_data);
resp=algomojo.AMDispatcher(apikey, apisecret,"PlaceSmartOrder",api_data,"am",ver);

_TRACE("API Response : "+resp);

if(VoiceAlert == "Enable")
	Say( "Order Placed" );

return resp;

}



if(EnableAlgo != "Disable")
    {
        lasttime = StrFormat("%0.f",LastValue(BarIndex()));
        
        SetChartBkColor(colorDarkGrey);
        if(EnableAlgo == "Enable")
        {   
            if (AlgoBuy==True AND AlgoCover == True AND StaticVarGet(static_name_+"buyCoverAlgo")==0 AND StaticVarGetText(static_name_+"buyCoverAlgo_barvalue") != lasttime )
            {
            
	//ExitOrder(action,OptionType,orderqty,position_size,expiry,signaltype,leg)
	//leg = "leg1","leg2"
				
				//Cover Signal
				if(tradetype_shortleg1=="SELL")
				{
				ExitOrder(tradetype_shortleg1,opttype_shortleg1,expiry_leg1,"short","leg1"); 
				ExitOrder(tradetype_shortleg2,opttype_shortleg2,expiry_leg2,"short","leg2"); 
				}
				else
				{
				ExitOrder(tradetype_shortleg2,opttype_shortleg2,expiry_leg2,"short","leg2");
				ExitOrder(tradetype_shortleg1,opttype_shortleg1,expiry_leg1,"short","leg1");  
				}
				//Buy Signal
				if(tradetype_buyleg1=="BUY")
				{
				PlaceOrder(tradetype_buyleg1,opttype_buyleg1,quantity_leg1,expiry_leg1,"buy","leg1");
				PlaceOrder(tradetype_buyleg2,opttype_buyleg2,quantity_leg2,expiry_leg2,"buy","leg2");
				}
				else
				{
				PlaceOrder(tradetype_buyleg2,opttype_buyleg2,quantity_leg2,expiry_leg2,"buy","leg2");
				PlaceOrder(tradetype_buyleg1,opttype_buyleg1,quantity_leg1,expiry_leg1,"buy","leg1");
				}
					
				
				
				
                StaticVarSetText(static_name_+"buyCoverAlgo_barvalue",lasttime);  
                StaticVarSet(static_name_+"buyCoverAlgo",1); //Algo Order was triggered, no more order on this bar
                
        
            }
            else if ((AlgoBuy != True OR AlgoCover != True))
            {   
                StaticVarSet(static_name_+"buyCoverAlgo",0);
                StaticVarSetText(static_name_+"buyCoverAlgo_barvalue","");
            }
            
            if (AlgoBuy==True AND AlgoCover != True AND StaticVarGet(static_name_+"buyAlgo")==0 AND StaticVarGetText(static_name_+"buyAlgo_barvalue") != lasttime)
            {
				
				//Buy Signal
				if(tradetype_buyleg1=="BUY")
				{
				PlaceOrder(tradetype_buyleg1,opttype_buyleg1,quantity_leg1,expiry_leg1,"buy","leg1");
				PlaceOrder(tradetype_buyleg2,opttype_buyleg2,quantity_leg2,expiry_leg2,"buy","leg2");
				}
				else
				{
				PlaceOrder(tradetype_buyleg2,opttype_buyleg2,quantity_leg2,expiry_leg2,"buy","leg2");
				PlaceOrder(tradetype_buyleg1,opttype_buyleg1,quantity_leg1,expiry_leg1,"buy","leg1");
				}
				
				
                StaticVarSetText(static_name_+"buyAlgo_barvalue",lasttime); 
                StaticVarSet(static_name_+"buyAlgo",1); //Algo Order was triggered, no more order on this bar
                
            }
            else if (AlgoBuy != True)
            {   
                StaticVarSet(static_name_+"buyAlgo",0);
                StaticVarSetText(static_name_+"buyAlgo_barvalue","");
                
            }
            if (AlgoSell==true AND AlgoShort != True AND StaticVarGet(static_name_+"sellAlgo")==0 AND StaticVarGetText(static_name_+"sellAlgo_barvalue") != lasttime)
            {     
				//Sell Signal
				if(tradetype_buyleg1=="SELL")
				{
				ExitOrder(tradetype_buyleg1,opttype_buyleg1,expiry_leg1,"buy","leg1"); 
				ExitOrder(tradetype_buyleg2,opttype_buyleg2,expiry_leg2,"buy","leg2"); 
				}
				else
				{
				ExitOrder(tradetype_buyleg2,opttype_buyleg2,expiry_leg2,"buy","leg2");
				ExitOrder(tradetype_buyleg1,opttype_buyleg1,expiry_leg1,"buy","leg1");  
				}
                
                StaticVarSetText(static_name_+"sellAlgo_barvalue",lasttime);
                StaticVarSet(static_name_+"sellAlgo",1); //Algo Order was triggered, no more order on this bar
                
            }
            else if (AlgoSell != True )
            {   
                StaticVarSet(static_name_+"sellAlgo",0);
                StaticVarSetText(static_name_+"sellAlgo_barvalue","");
            }
            if (AlgoShort==True AND AlgoSell==True AND  StaticVarGet(static_name_+"ShortSellAlgo")==0 AND StaticVarGetText(static_name_+"ShortSellAlgo_barvalue") != lasttime)
            {
				//Sell Signal
				if(tradetype_buyleg1=="SELL")
				{
				ExitOrder(tradetype_buyleg1,opttype_buyleg1,expiry_leg1,"buy","leg1"); 
				ExitOrder(tradetype_buyleg2,opttype_buyleg2,expiry_leg2,"buy","leg2"); 
				}
				else
				{
				ExitOrder(tradetype_buyleg2,opttype_buyleg2,expiry_leg2,"buy","leg2");
				ExitOrder(tradetype_buyleg1,opttype_buyleg1,expiry_leg1,"buy","leg1");  
				}
				//Short
				if(tradetype_shortleg1=="BUY")
				{
				PlaceOrder(tradetype_shortleg1,opttype_shortleg1,quantity_leg1,expiry_leg1,"short","leg1");
				PlaceOrder(tradetype_shortleg2,opttype_shortleg2,quantity_leg2,expiry_leg2,"short","leg2");
				}
				else
				{
				PlaceOrder(tradetype_shortleg2,opttype_shortleg2,quantity_leg2,expiry_leg2,"short","leg2");
				PlaceOrder(tradetype_shortleg1,opttype_shortleg1,quantity_leg1,expiry_leg1,"short","leg1");
				}
				
				
                StaticVarSetText(static_name_+"ShortsellAlgo_barvalue",lasttime);
                StaticVarSet(static_name_+"ShortSellAlgo",1); //Algo Order was triggered, no more order on this bar
                
            }
            else if ((AlgoShort != True OR AlgoSell != True))
            {   
                StaticVarSet(static_name_+"ShortSellAlgo",0);
                StaticVarSetText(static_name_+"ShortsellAlgo_barvalue","");
            }
                
            if (AlgoShort==True  AND  AlgoSell != True AND StaticVarGet(static_name_+"ShortAlgo")==0 AND  StaticVarGetText(static_name_+"ShortAlgo_barvalue") != lasttime)
            {
				//Short
				if(tradetype_shortleg1=="BUY")
				{
				PlaceOrder(tradetype_shortleg1,opttype_shortleg1,quantity_leg1,expiry_leg1,"short","leg1");
				PlaceOrder(tradetype_shortleg2,opttype_shortleg2,quantity_leg2,expiry_leg2,"short","leg2");
				}
				else
				{
				PlaceOrder(tradetype_shortleg2,opttype_shortleg2,quantity_leg2,expiry_leg2,"short","leg2");
				PlaceOrder(tradetype_shortleg1,opttype_shortleg1,quantity_leg1,expiry_leg1,"short","leg1");
				}
				
                StaticVarSetText(static_name_+"ShortAlgo_barvalue",lasttime); 
                StaticVarSet(static_name_+"ShortAlgo",1); //Algo Order was triggered, no more order on this bar
                
            }
            else if (AlgoShort != True )
            {   
                StaticVarSet(static_name_+"ShortAlgo",0);
                StaticVarSetText(static_name_+"ShortAlgo_barvalue","");
            }
            if (AlgoCover==true AND AlgoBuy != True AND StaticVarGet(static_name_+"CoverAlgo")==0 AND StaticVarGetText(static_name_+"CoverAlgo_barvalue") != lasttime)
            {
				
				//Cover Signal
				if(tradetype_shortleg1=="SELL")
				{
				ExitOrder(tradetype_shortleg1,opttype_shortleg1,expiry_leg1,"short","leg1"); 
				ExitOrder(tradetype_shortleg2,opttype_shortleg2,expiry_leg2,"short","leg2"); 
				}
				else
				{
				ExitOrder(tradetype_shortleg2,opttype_shortleg2,expiry_leg2,"short","leg2");
				ExitOrder(tradetype_shortleg1,opttype_shortleg1,expiry_leg1,"short","leg1");  
				}
               
                StaticVarSetText(static_name_+"CoverAlgo_barvalue",lasttime); 
                StaticVarSet(static_name_+"CoverAlgo",1); //Algo Order was triggered, no more order on this bar
                
            }
            else if (AlgoCover != True )
            {   
                StaticVarSet(static_name_+"CoverAlgo",0);
                StaticVarSetText(static_name_+"CoverAlgo_barvalue","");
            }
        }
        
      else if(EnableAlgo == "LongOnly")
        {
        
			 if (AlgoBuy==True AND StaticVarGet(static_name_+"buyAlgo")==0 AND StaticVarGetText(static_name_+"buyAlgo_barvalue") != lasttime)
            {
            
				//Buy Signal
				if(tradetype_buyleg1=="BUY")
				{
				PlaceOrder(tradetype_buyleg1,opttype_buyleg1,quantity_leg1,expiry_leg1,"buy","leg1");
				PlaceOrder(tradetype_buyleg2,opttype_buyleg2,quantity_leg2,expiry_leg2,"buy","leg2");
				}
				else
				{
				PlaceOrder(tradetype_buyleg2,opttype_buyleg2,quantity_leg2,expiry_leg2,"buy","leg2");
				PlaceOrder(tradetype_buyleg1,opttype_buyleg1,quantity_leg1,expiry_leg1,"buy","leg1");
				}
				
                StaticVarSetText(static_name_+"buyAlgo_barvalue",lasttime);
                StaticVarSet(static_name_+"buyAlgo",1); //Algo Order was triggered, no more order on this bar
                
            }
            
            
            else if (AlgoBuy != True )
            {  
                StaticVarSet(static_name_+"buyAlgo",0);
                StaticVarSetText(static_name_+"buyAlgo_barvalue","");
            
            }
            
             if (AlgoSell==True AND StaticVarGet(static_name_+"sellAlgo")==0 AND StaticVarGetText(static_name_+"sellAlgo_barvalue") != lasttime)
            { 
            
				//Sell Signal
				if(tradetype_buyleg1=="SELL")
				{
				ExitOrder(tradetype_buyleg1,opttype_buyleg1,expiry_leg1,"buy","leg1"); 
				ExitOrder(tradetype_buyleg2,opttype_buyleg2,expiry_leg2,"buy","leg2"); 
				}
				else
				{
				ExitOrder(tradetype_buyleg2,opttype_buyleg2,expiry_leg2,"buy","leg2");
				ExitOrder(tradetype_buyleg1,opttype_buyleg1,expiry_leg1,"buy","leg1");  
				}
				
                StaticVarSet(static_name_+"sellAlgo",1);
                StaticVarSetText(static_name_+"sellAlgo_barvalue",lasttime);
            }
            else if (AlgoSell != True )
            {  
                StaticVarSet(static_name_+"sellAlgo",0);
                StaticVarSetText(static_name_+"sellAlgo_barvalue","");
            
            }
            
        } 
        else if(EnableAlgo == "ShortOnly")
        {
            if (AlgoShort==True AND StaticVarGet(static_name_+"ShortAlgo")==0 AND StaticVarGetText(static_name_+"ShortAlgo_barvalue") != lasttime)
            {
				//Short
				if(tradetype_shortleg1=="BUY")
				{
				PlaceOrder(tradetype_shortleg1,opttype_shortleg1,quantity_leg1,expiry_leg1,"short","leg1");
				PlaceOrder(tradetype_shortleg2,opttype_shortleg2,quantity_leg2,expiry_leg2,"short","leg2");
				}
				else
				{
				PlaceOrder(tradetype_shortleg2,opttype_shortleg2,quantity_leg2,expiry_leg2,"short","leg2");
				PlaceOrder(tradetype_shortleg1,opttype_shortleg1,quantity_leg1,expiry_leg1,"short","leg1");
				}
				
                StaticVarSetText(static_name_+"ShortAlgo_barvalue",lasttime); 
                StaticVarSet(static_name_+"ShortAlgo",1); //Algo Order was triggered, no more order on this bar
                
            }
            else if (AlgoShort != True )
            {   
                StaticVarSet(static_name_+"ShortAlgo",0);
                StaticVarSetText(static_name_+"ShortAlgo_barvalue","");
            }
            if (AlgoCover==true AND StaticVarGet(static_name_+"CoverAlgo")==0 AND StaticVarGetText(static_name_+"CoverAlgo_barvalue") != lasttime)
            {
            
				//Cover Signal
				if(tradetype_shortleg1=="SELL")
				{
				ExitOrder(tradetype_shortleg1,opttype_shortleg1,expiry_leg1,"short","leg1"); 
				ExitOrder(tradetype_shortleg2,opttype_shortleg2,expiry_leg2,"short","leg2"); 
				}
				else
				{
				ExitOrder(tradetype_shortleg2,opttype_shortleg2,expiry_leg2,"short","leg2");
				ExitOrder(tradetype_shortleg1,opttype_shortleg1,expiry_leg1,"short","leg1");  
				}
               
                StaticVarSetText(static_name_+"CoverAlgo_barvalue",lasttime); 
                StaticVarSet(static_name_+"CoverAlgo",1); //Algo Order was triggered, no more order on this bar
                
            }
            else if (AlgoCover != True)
            {   
                StaticVarSet(static_name_+"CoverAlgo",0);
                StaticVarSetText(static_name_+"CoverAlgo_barvalue","");
            }
        } 
        
    }
    
  
_SECTION_END();

Leave a Comment

Your email address will not be published. Required fields are marked *