Rajandran R Telecom Engineer turned Full-time Derivative Trader. Mostly Trading Nifty, Banknifty, USDINR and High Liquid Stock Derivatives. Trading the Markets Since 2006 onwards. Using Market Profile and Orderflow for more than a decade. Designed and published 100+ open source trading systems on various trading tools. Strongly believe that market understanding and robust trading frameworks are the key to the trading success. Writing about Markets, Trading System Design, Market Sentiment, Trading Softwares & Trading Nuances since 2007 onwards. Author of Marketcalls.in)

Send Smart Options Execution Orders from Futures or Spot Signals in Amibroker using Algomojo Platform

11 min read

This tutorial provides instructions on how to utilize simple buy and sell trading signals in Spot/Future charts to place option orders (including ATM, ITM, and OTM options) on the Algomojo platform. Implementing this system can help traders mitigate risk, particularly in the event of unexpected market movements that may result in significant losses. Additionally, implementing ATM or ITM option buying strategies, as opposed to futures, may help to reduce the risk of extreme black swan events and significantly mitigate the potential for large gap up or gap down risks when carrying forward positions.

Features of the Options Execution Module

1)Simple Drag and Drop Module on top of any Amibroker trading strategy with the proper buy,sell,short,cover defined variables.
2)Place Smart Option Orders to intelligent send orders by manipulating the current existing positions.
3)Place Larger Option Orders by Splitting Larger Orders into multiple small orders.
4)Option Strike calculation at Amibroker end (Trades can configure the Underlying symbol as Spot./Futures) based on their trading requirement) accordingly, options strikes will be calculated.

Supported Brokers

All Algomojo Supported Brokers

Supported Amibroker Version: 6.0 or above

Amibroker Option Buying Settings for Placing Ordes in ATM Options (Long Only Options Strategy)

Trades can control the CE/PE Offset Parameters to place orders in various option strikes. To place orders in ATM options one has to set the Offset value as “0” as shown below

Amibroker Parameter Settings for Place Orders with ATM CE/PE

Amibroker Option Buying Settings for Placing Ordes in ITM Options (Long Only Options Strategy)

Strategy Parameter Settings for Option Long and Exit Strategy

Trading Signal in Spot/FuturesOrders to be Placed
Buy SignalLong Call
Sell SignalExit Long Call
Short SignalLong Put
Cover SignalExit Long Put
Buy and Cover SignalLong Call
Exit Long Put
Short and Cover SignalLong Put
Exit Long Call

Strategy Parameter Settings for Option Short and Exit Strategy

Trading Signal in Spot/FuturesOrders to be Placed
Buy SignalShort Put
Sell SignalExit Short Put
Short SignalShort Call
Cover SignalExit Short Call
Buy and Cover SignalShort Put
Exit Short Call
Short and Cover SignalShort Call
Exit Short Put

To Build this module we need 2 components

1)Trading System with Buy/Sell/Short/Cover Signals
2)Option Execution Module that needs to be drag and dropped over the Trading System

1)Building your Trading System

Apply the Trading System with your Buy/Sell/Short/Cover variables on the charts.

Here is the sample EMA Crossover Trading System with Buy,Sell,Short,Cover variables.

_SECTION_BEGIN("EMA Crossover Strategy");

// Param controls for EMA values
p1 = Param("EMA1", 10, 1, 200, 1);
p2 = Param("EMA2", 20, 1, 200, 1);

// Param controls for EMA line colors
col1 = ParamColor("EMA1 Color", colorRed);
col2 = ParamColor("EMA2 Color", colorBlue);

// Calculate EMAs
EMA1 = EMA(C, p1);
EMA2 = EMA(C, p2);

// Plot EMAs
Plot(EMA1, "EMA1", col1, styleThick);
Plot(EMA2, "EMA2", col2, styleThick);

// Set position size
SetPositionSize(100, spsShares);

// Generate buy/sell signals
Buy = Cross(EMA1, EMA2);
Sell = Cross(EMA2, EMA1);

// Generate short/cover signals
Short = Sell;
Cover = Buy;

//Generate Signals only on close of the candle
Buy = Ref(Buy,-1);
Sell = Ref(Sell,-1);
Short = Ref(Short,-1);
Cover = Ref(Cover,-1);

// Plot buy/sell signals
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(Sell, shapeSquare, shapeNone),colorRed, 0, H, Offset=40);
PlotShapes(IIf(Sell, shapeSquare, shapeNone),colorOrange, 0,H, Offset=50);
PlotShapes(IIf(Sell, shapeDownArrow, shapeNone),colorWhite, 0,H, Offset=-45);

// Plot candlestick chart
Plot(C, "Price", colorWhite, styleCandle);

_SECTION_END();

Note: Buy/Sell/Short/Cover parameters are mandatory without that execution will not happen properly

If in case your trading system supports only Buy and Sell and you don’t want to use short and cover variables, in that case, use the below-mentioned logic where initialize short and cover variables to zero.

Buy = your buy trading logic ;
Sell = your sell trading logic ;

short =0;
cover =0;

2)Main Option Execution Module

Copy the Main Execution Module to Amibroker\Formulas\Algomojo folder. Save the AFL under the name Algomojo Spot Or Future Signals to Option Orders.afl

Now Drag and Drop the Module on top of your Charting with Buy/Sell Trading System


/*
Algomojo - Smart Spot/Futures to Options Trading Module with Split Order Controls
Created By : Rajandran R(Founder - Marketcalls / Co-Founder Algomojo )
Created on : 07 MAR 2023.
Website : www.marketcalls.in / www.algomojo.com
*/


_SECTION_BEGIN("Algomojo - Broker Controls");


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

//Creating Input Controls for Setting Order Related Information

broker =Paramlist("Broker","an|ab|fs|fp|fy|gc|pt|sm|tc|up|zb|ze",0);
ver = ParamStr("API Version ","v1");
apikey = ParamStr("apikey","xxxxxxxxxxxxxxxxxx"); //Enter your API key here
apisecret = ParamStr("secretkey","xxxxxxxxxxxxxxxxxx"); //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|FINNIFTY");
expiry = ParamStr("Expiry Date","29MAR23");

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);

offsetCE = Param("CE Offset",0,-40,40,1);
offsetPE = Param("PE Offset",0,-40,40,1);

pricetype = ParamList("Order Type","MARKET",0);
product = ParamList("Product","MIS|NRML",1);
tradetype = ParamList("Option Trade Type","BUY|SELL",0);

quantity = Param("quanity(Lot Size)",1,0,10000)*LotSize;
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));

//Plots Dashboard

GfxSelectFont( "BOOK ANTIQUA", 14, 100 );
GfxSetBkMode( 1 );
if (EnableAlgo != "")
{
AlgoStatus = EnableAlgo;
GfxSetTextColor( IIf(EnableAlgo == "Enable", colorGreen, 
					IIf(EnableAlgo == "LongOnly",colorYellow,
						IIf(EnableAlgo == "ShortOnly",colorOrange,colorRed)) ));
GfxTextOut( "Algostatus : "+AlgoStatus , 20, 40);
StaticVarSet(static_name_algo, IIf(EnableAlgo == "Enable", 1,
IIf(EnableAlgo == "LongOnly", 2, IIf(EnableAlgo == "ShortOnly", 3, 0))));
//_TRACE("Algo Status : "+EnableAlgo);
}





//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));
			
//Entry Strikes	
		
strikeCE = strike + (offsetCE * iInterval);
strikePE = strike - (offsetPE * iInterval);

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

entrysym = "";
exitsym = "";

//Exit Strikes
if(tradetype=="BUY")
{
ExitStrikeCE = ValueWhen(Ref(Buy,-Entrydelay),strikeCE); 
ExitStrikePE = ValueWhen(Ref(Short,-Entrydelay),strikePE);

if(broker=="tc" OR broker =="fs")
{
entrysym = WriteIf(buycontinue OR sell,spot+expiry+"C"+strikeCE,WriteIf(shortcontinue OR cover,spot+expiry+"P"+strikePE,""));
exitsym = WriteIf(buycontinue OR sell,spot+expiry+"P"+ExitStrikePE,WriteIf(shortcontinue OR cover,spot+expiry+"C"+ExitStrikeCE,""));
}
else
{
entrysym = WriteIf(buycontinue OR sell,spot+expiry+strikeCE+"CE",WriteIf(shortcontinue OR cover,spot+expiry+strikePE+"PE",""));
exitsym = WriteIf(buycontinue OR sell,spot+expiry+ExitStrikePE+"PE",WriteIf(shortcontinue OR cover,spot+expiry+ExitStrikeCE+"CE",""));
}


}
if(tradetype=="SELL")
{
ExitStrikeCE = ValueWhen(Ref(Short,-Entrydelay),strikeCE); 
ExitStrikePE = ValueWhen(Ref(Buy,-Entrydelay),strikePE);
if(broker=="tc" OR broker =="fs")
{
entrysym = WriteIf(buycontinue OR sell,spot+expiry+"P"+strikePE,WriteIf(shortcontinue OR cover,spot+expiry+"C"+strikeCE,""));
exitsym = WriteIf(buycontinue OR sell,spot+expiry+"C"+ExitStrikeCE,WriteIf(shortcontinue OR cover,spot+expiry+"P"+ExitStrikePE,""));
}
else
{
entrysym = WriteIf(buycontinue OR sell,spot+expiry+"P"+strikePE,WriteIf(shortcontinue OR cover,spot+expiry+"P"+strikeCE,""));
exitsym = WriteIf(buycontinue OR sell,spot+expiry+"C"+ExitStrikeCE,WriteIf(shortcontinue OR cover,spot+expiry+"C"+ExitStrikePE,""));
}
}

printf("\n\n\nEntry Symbol : "+entrysym);
printf("\nExit Symbol : "+exitsym);


_SECTION_END();



//Buy and Sell Order Functions
function Placeorder(action,OptionType,orderqty)
{
	
    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"+OptionType);
    }
    else
	{
		tradingsymbol = spot+expiry+VarGetText("strike"+OptionType)+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("API Request"+api_data);
    resp=algomojo.AMDispatcher(apikey, apisecret,"PlaceOrder",api_data,"am",ver);
    _TRACE("API Response : "+resp);
    
    if(VoiceAlert == "Enable")
	Say( "Order Placed" ); 
}

function ExitOrder(action,OptionType)
{


 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("ExitStrike"+OptionType);
}

else
{
	tradingsymbol = spot+expiry+VarGetText("ExitStrike"+OptionType)+OptionType;
}

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("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 )
            {
            
				if(tradetype=="BUY")
				{
				//Long Call and Exit Long Put Option
				ExitOrder("SELL","PE"); 
				PlaceOrder("BUY","CE",quantity);
				
				
				}
				
				if(tradetype=="SELL")
				{
				//Short Put and Exit Short Call Option
				ExitOrder("BUY","CE"); 
				PlaceOrder("SELL","PE",quantity);
				
				
				}
				
				
                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)
            {
            
				if(tradetype=="BUY")
				{
				//Long Call and Exit Long Put Option
				PlaceOrder("BUY","CE",quantity);
				
				
				}
				
				if(tradetype=="SELL")
				{
				//Short Put
				PlaceOrder("SELL","PE",quantity);
					
				}
                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)
            {     
				
				if(tradetype=="BUY")
				{
				//Exit Long Call Option
				
				ExitOrder("SELL","CE"); 
				
				}
				
				if(tradetype=="SELL")
				{
				//Exit Short Put Option
				ExitOrder("BUY","PE"); 
				
				}
                
                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)
            {
            
				if(tradetype=="BUY")
				{
				//Long Put and Exit Long Call Option
				ExitOrder("SELL","CE"); 
				PlaceOrder("BUY","PE",quantity);
				
				
				}
				
				if(tradetype=="SELL")
				{
				//Short Call and Exit Short Put Option
				ExitOrder("BUY","PE");
				PlaceOrder("SELL","CE",quantity);
				 
				
				}
                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)
            {
				if(tradetype=="BUY")
				{
				//Long Put
				PlaceOrder("BUY","PE",quantity);
				
				
				}
				
				if(tradetype=="SELL")
				{
				//Short Call
				PlaceOrder("SELL","CE",quantity);
							
				}
                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)
            {
				
				if(tradetype=="BUY")
				{
				//Exit Long Put Option
				
				ExitOrder("SELL","PE"); 
				
				}
				
				if(tradetype=="SELL")
				{
				//Exit Short Call Option
				ExitOrder("BUY","CE"); 
				
				}
               
                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)
            {
            
				if(tradetype=="BUY")
				{
				//Long Call and Exit Long Put Option
				PlaceOrder("BUY","CE",quantity);
				
				
				}
				
				if(tradetype=="SELL")
				{
				//Short Put
				PlaceOrder("SELL","PE",quantity);
					
				}
                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)
            { 
            
				if(tradetype=="BUY")
				{
				//Exit Long Call Option
				
				ExitOrder("SELL","CE"); 
				
				}
				
				if(tradetype=="SELL")
				{
				//Exit Short Put Option
				ExitOrder("BUY","PE"); 
				
				}
                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)
            {
				if(tradetype=="BUY")
				{
				//Long Put
				PlaceOrder("BUY","PE",quantity);
				
				
				}
				
				if(tradetype=="SELL")
				{
				//Short Call
				PlaceOrder("SELL","CE",quantity);
							
				}
                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)
            {
            
				if(tradetype=="BUY")
				{
				//Exit Long Put Option
				
				ExitOrder("SELL","PE"); 
				
				}
				
				if(tradetype=="SELL")
				{
				//Exit Short Call Option
				ExitOrder("BUY","CE"); 
				
				}
               
                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();

3)Ensure Amibroker Log Window is open to capture the Trace Logs

4)Enter the Spot Symbol, Expiry Date, Strike Interval, Offset, and Trade Delay

Note : Ensure while entering the Option Expiry Format. Login to Algomojo Terminal and check out the weekly and monthly option format and enter the expiry date accordingly.

For Aliceblue account holders Monthly Option Symbol Format: NIFTY21JAN14500CE

Hence the Expiry Date needs to be entered as 21JAN

For Aliceblue Account holders weekly Option Symbol Format: NIFTY2111414500CE

Hence the Expiry Date needs to be entered as 21114

For Tradejini and Zebu Account Holders Monthly Option Symbol Format: NIFTY28JAN2114500CE

Hence the Expiry Date needs to be entered as 28JAN21

For Tradejini and Zebu Account Holders Monthly Option Symbol Format: NIFTY14JAN2114500CE

Hence the Expiry Date needs to be entered as 14JAN21

7)Bingo Now you can Send ATM Option Orders from Amibroker by connecting any of your Buy/Sell Trading System. To Send ITM/OTM Option Orders to adjust the offset parameters from the Properties section

Rajandran R Telecom Engineer turned Full-time Derivative Trader. Mostly Trading Nifty, Banknifty, USDINR and High Liquid Stock Derivatives. Trading the Markets Since 2006 onwards. Using Market Profile and Orderflow for more than a decade. Designed and published 100+ open source trading systems on various trading tools. Strongly believe that market understanding and robust trading frameworks are the key to the trading success. Writing about Markets, Trading System Design, Market Sentiment, Trading Softwares & Trading Nuances since 2007 onwards. Author of Marketcalls.in)

[Live Coding Webinar] Build Your First Trading Bridge for…

In this course, you will be learning to build your own trading bridge using Python. This 60-minute session is perfect for traders, Python enthusiasts,...
Rajandran R
1 min read

[Webinar] Understanding and Mitigating Curve Fitting in System Trading

"Understanding and Mitigating Curve Fitting in System Trading"! This dynamic session aims to equip novice to intermediate traders, quantitative analysts, and financial engineers with...
Rajandran R
1 min read

P-Signal Strategy Long Only Strategy – Amibroker AFL Code

This tutorial provides an overview of the P-Signal reversal strategy, a quantitative trading strategy that utilizes statistical parameters and error functions to generate probabilistic...
Rajandran R
2 min read

13 Replies to “Send Smart Options Execution Orders from Futures or Spot…”

  1. …while ((GetPerformanceCounter()/1000 – tradetime) < timer)….

    Error 13. Endless loop detected in WHILE loop

    ?

      1. I extracted only timer:

        RequestTimedRefresh(1, False);

        timer = 3; //3 seconds for providing delay after placing order
        tradetime=GetPerformanceCounter()/1000;

        while ((GetPerformanceCounter()/1000 – tradetime) < timer)
        {
        _TRACE("\nTest");
        //Error 13. Endless loop detected in WHILE loop
        }

  2. i am getting this error. it is not able to locate the formula/include folder. how to make it recognize. the moment i am dragging and dropping on my buy and sell affl it is giving the error. I have pasted the header execution in include folder

  3. Hi Rajendra this code is working fine on intraday hoever positional carry dosent work..It dosent squareoff previous day order..pls help

  4. HI Rajendran. Can I do Backtesting of my Strategy for the Options using above AFL

    1. Negative offset controls indicate ITM and Positive offset indicates OTM

      For Example
      Offset = +3 then it points to 3 strike wide OTM options
      Offset = -3 then it points to 3 strike wide ITM options.

      Hope this helps.

  5. Sir, you are provide code for six type of signal like 1)Buy Call and Exit Long Put Options, 2)Buy Call Options, 3)Exit Long Call Options,4) Long Put Options and Exit Long Call Options,5)Buy Put Options and 6)Exit Long Put, but for trading trendwise , there are other two types of signal may comes like in uptrend 7) Buy Call and Exit Long Call Options and in downtrend 8)Long Put Options and Exit Long Put Options signal, we need these extra two types of signal when our strategy takes both trend signal in a singal strategy instead of switching to take only buy long calls and put long calls every time when trend change direction. Hoe you provide the other two tyes signal code. Thanks in advance sir.

Leave a Reply

Get Notifications, Alerts on Market Updates, Trading Tools, Automation & More