{"id":384,"date":"2022-04-20T17:20:36","date_gmt":"2022-04-20T17:20:36","guid":{"rendered":"https:\/\/algomojo.com\/blog\/?p=384"},"modified":"2023-09-13T04:37:03","modified_gmt":"2023-09-13T04:37:03","slug":"intraday-straddle-execution-module-amibroker-for-upstox-users","status":"publish","type":"post","link":"https:\/\/algomojo.com\/blog\/intraday-straddle-execution-module-amibroker-for-upstox-users\/","title":{"rendered":"Intraday Straddle Execution Module \u2013 Amibroker for Upstox Users"},"content":{"rendered":"\n<p>This tutorial focus on how to automate your time-based index straddle\/strangle management with intraday stop-loss levels with time-based entry and exits using Algomojo Platform and Amibroker. Modern Internal memory management is used to speed up the execution and management of Index Straddle.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/i0.wp.com\/www.marketcalls.in\/wp-content\/uploads\/2022\/04\/image-14-1024x539.png?resize=1024%2C539&amp;ssl=1\" alt=\"\" class=\"wp-image-56002\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Trading Activity<\/strong><\/td><td><strong>Orders to be Placed<\/strong><\/td><\/tr><tr><td>Time Based Entry<\/td><td>Enter Straddle\/Strangle at 9.30a.m (Two legged Order)<\/td><\/tr><tr><td>Calculate the Short Call Average Price<\/td><td>Calculate the Short call Stoploss<\/td><\/tr><tr><td>Calculate the Short Put Average Price<\/td><td>Calculate the Short Put Stoploss<\/td><\/tr><tr><td>Place Stoploss Orders<\/td><td>Place the Stoploss for both Short call and Short Put if the entry order status is completed<\/td><\/tr><tr><td>Check Open Positions<\/td><td>Check the Open Positions for the Qty traded<\/td><\/tr><tr><td>Time Based Exit<\/td><td>Square of Short Call and Short Put legs for the qty present in the open positions around 3.15p.m.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Supported Brokers<\/strong>&nbsp;: Upstox<br><strong>Supported Algo Platform:<\/strong>&nbsp;Algomojo Platform<br>S<strong>upported Amibroker Version:<\/strong>&nbsp;Amibroker 6.0 or Higher<br><strong>Supported Trading Instruments<\/strong>: Index Options<\/p>\n\n\n\n<p><strong>Intraday Straddle Management \u2013 Amibroker AFL Code<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-clike\">\n_SECTION_BEGIN(&quot;Upstox - Broker Controls&quot;);\n\n\/\/Static Variables will be saved in Amibroker every 30 seconds once\nSetOption(&quot;StaticVarAutoSave&quot;,60);\n\n\/\/ Send orders even if Amibroker is minimized or Chart is not active\nRequestTimedRefresh(1, False); \nEnableTextOutput(False);\n\n\/\/Creating Input Controls for Setting Order Related Information\n\nbroker = ParamStr(&quot;Broker&quot;,&quot;up&quot;);\nver = ParamStr(&quot;API Version&quot;,&quot;1.0&quot;);\nclient_id = ParamStr(&quot;Client ID&quot;,&quot;xxxxxxx&quot;);\napikey = ParamStr(&quot;APIKey&quot;,&quot;xxxxxx&quot;);\napisecret = ParamStr(&quot;APIsecret&quot;,&quot;xxxxxxx&quot;);\n\n_SECTION_END();\n\n_SECTION_BEGIN(&quot;Upstox - Order Controls&quot;);\n\nstgy_name = ParamStr(&quot;Strategy Name&quot;,&quot;Intraday Short Straddle&quot;);\nentrytime = ParamTime(&quot;Entry Time&quot;,&quot;09:20:00&quot;);\nexittime = ParamTime(&quot;Exit Time&quot;,&quot;15:15:00&quot;);\nstopsenabled = ParamToggle(&quot;Stoploss Controls&quot;,&quot;Enable|Disable&quot;,0);\nstoppercentage = Param(&quot;Stoploss Percentage&quot;,30,10,100,1);\nstoplossslippagebuffer = Param(&quot;Stoploss Slippage Buffer&quot;,2,0.25,100,0.25);\n\n\n\nspot_sym = ParamList(&quot;Spot Symbol&quot;,&quot;NIFTY|BANKNIFTY&quot;); \nexpiry_date = ParamStr(&quot;Expiry Date&quot;,&quot;22421&quot;); \ntranstype = Paramlist(&quot;Options Transaction Type&quot;,&quot;S&quot;,0);\nexchange = &quot;NSE_FO&quot;;\nduration = &quot;DAY&quot;;\nMktPro = &quot;NA&quot;;\nprice = &quot;0&quot;;\ndisclosed_quantity = &quot;0&quot;;\ntrigger_price = &quot;0&quot;;\nis_amo = &quot;NO&quot;;\n\n\nif(spot_sym == &quot;NIFTY&quot;)\n{\nlotsize = 50;\nstrike_interval = 50;\n\n}\n\nif(spot_sym == &quot;BANKNIFTY&quot;)\n{\nlotsize = 25;\nstrike_interval = 100;\n\n}\n \nquantity = Param(&quot;Quantity(Lots)&quot;,1,1,10000,1)*lotsize;\n\norder_type = &quot;MKT&quot;;\nproductType = ParamList(&quot;Product Type&quot;,&quot;MIS|NRML&quot;,0);  \/\/MIS - Intraday, NRML - Carryforward\n\n\nprice = &quot;0&quot;;\ntrigger_price = &quot;0&quot;;\n\n\nif(productType==&quot;MIS&quot;)\n{\nproduct = &quot;I&quot;;\n}\nif(productType==&quot;CNC&quot; OR productType==&quot;NRML&quot;)\n{\nproduct = &quot;D&quot;;\n}\n\/\/ Offset = 0 -&gt; ATM, Offset = +ve number -&gt; OTM, Offset = -ve -&gt; ITM\nOffsetCE = Param(&quot;CE Offset&quot;,0,-20,20,1);\nOffsetPE = Param(&quot;PE Offset&quot;,0,-20,20,1);\n\nEntrydelay = Param(&quot;Entry Delay&quot;,0,0,1); \/\/ 0 - Execution with No Delay after a signal, 1- Execution at the end of the candle\nExitdelay = Param(&quot;Exit Delay&quot;,0,0,1);\nEnableAlgo = ParamList(&quot;Algo Mode&quot;,&quot;Disable|Enable|LongOnly|ShortOnly&quot;,0); \/\/ Algo Mode\nclear = ParamTrigger(&quot;Clear Static Variables&quot;,&quot;Clear&quot;);\nstatic_var_options = &quot;staticvar_options&quot;+Name()+Interval(2)+GetChartID() + stgy_name;\n\nif(clear)\n{\n\nStaticVarRemove(&quot;staticvar_options*&quot;);\n_TRACE(&quot;Static Variables Cleared&quot;);\n}\n\n\nfunction removeinteralmemory(typeoforder,opt_type,legno)\n{\nStaticVarRemove(static_var_options+typeoforder+&quot;Options_Trans&quot;+opt_type+legno);\nStaticVarRemove(static_var_options+typeoforder+&quot;Options_OrderNo&quot;+opt_type+legno);\nStaticVarRemove(static_var_options+typeoforder+&quot;Options_Symbol&quot;+opt_type+legno);\nStaticVarRemove(static_var_options+typeoforder+&quot;Options_OrderStatus&quot;+opt_type+legno);\nStaticVarRemove(static_var_options+typeoforder+&quot;Options_NetQty&quot;+opt_type+legno);\nStaticVarRemove(static_var_options+typeoforder+&quot;Options_AveragePrice&quot;+opt_type+legno);\nStaticVarRemove(static_var_options+typeoforder+&quot;Options_ExecutionTime&quot;+opt_type+legno);\n}\n\n\/\/Internal Memory\nopt_type=&quot;CE&quot;;\nlegno = 1;\nprintf(&quot;\\n---------------Leg 1 CE Orders (Main) Internal Memory----------&quot;);\nprintf(&quot;\\nOrderType : &quot;+StaticVarGetText(static_var_options+&quot;Options_Trans&quot;+opt_type+legno));\nprintf(&quot;\\nOrderNo : &quot;+StaticVarGetText(static_var_options+&quot;Options_OrderNo&quot;+opt_type+legno));\nprintf(&quot;\\nSymbol : &quot;+StaticVarGetText(static_var_options+&quot;Options_Symbol&quot;+opt_type+legno));\nprintf(&quot;\\nStatus : &quot;+StaticVarGetText(static_var_options+&quot;Options_OrderStatus&quot;+opt_type+legno));\nprintf(&quot;\\nNetQty : &quot;+StaticVarGetText(static_var_options+&quot;Options_NetQty&quot;+opt_type+legno));\nprintf(&quot;\\nAveragePrice : &quot;+StaticVarGetText(static_var_options+&quot;Options_AveragePrice&quot;+opt_type+legno));\nprintf(&quot;\\nExecutionTime : &quot;+StaticVarGetText(static_var_options+&quot;Options_ExecutionTime&quot;+opt_type+legno));\n\nopt_type=&quot;CE&quot;;\nlegno = 1;\nprintf(&quot;\\n---------------Leg 1 CE Orders (Stoploss) Internal Memory----------&quot;);\nprintf(&quot;\\nOrderType : &quot;+StaticVarGetText(static_var_options+&quot;SLOptions_Trans&quot;+opt_type+legno));\nprintf(&quot;\\nOrderNo : &quot;+StaticVarGetText(static_var_options+&quot;SLOptions_OrderNo&quot;+opt_type+legno));\nprintf(&quot;\\nSymbol : &quot;+StaticVarGetText(static_var_options+&quot;SLOptions_Symbol&quot;+opt_type+legno));\nprintf(&quot;\\nStatus : &quot;+StaticVarGetText(static_var_options+&quot;SLOptions_OrderStatus&quot;+opt_type+legno));\n\nopt_type=&quot;PE&quot;;\nlegno = 2;\nprintf(&quot;\\n---------------Leg 2 PE Orders Internal Memory----------&quot;);\nprintf(&quot;\\nOrderType : &quot;+StaticVarGetText(static_var_options+&quot;Options_Trans&quot;+opt_type+legno));\nprintf(&quot;\\nOrderNo : &quot;+StaticVarGetText(static_var_options+&quot;Options_OrderNo&quot;+opt_type+legno));\nprintf(&quot;\\nSymbol : &quot;+StaticVarGetText(static_var_options+&quot;Options_Symbol&quot;+opt_type+legno));\nprintf(&quot;\\nStatus : &quot;+StaticVarGetText(static_var_options+&quot;Options_OrderStatus&quot;+opt_type+legno));\nprintf(&quot;\\nNetQty : &quot;+StaticVarGetText(static_var_options+&quot;Options_NetQty&quot;+opt_type+legno));\nprintf(&quot;\\nAveragePrice : &quot;+StaticVarGetText(static_var_options+&quot;Options_AveragePrice&quot;+opt_type+legno));\nprintf(&quot;\\nExecutionTime : &quot;+StaticVarGetText(static_var_options+&quot;Options_ExecutionTime&quot;+opt_type+legno));\n\nopt_type=&quot;PE&quot;;\nlegno = 2;\nprintf(&quot;\\n---------------Leg 2 PE Orders (Stoploss) Internal Memory----------&quot;);\nprintf(&quot;\\nOrderType : &quot;+StaticVarGetText(static_var_options+&quot;SLOptions_Trans&quot;+opt_type+legno));\nprintf(&quot;\\nOrderNo : &quot;+StaticVarGetText(static_var_options+&quot;SLOptions_OrderNo&quot;+opt_type+legno));\nprintf(&quot;\\nSymbol : &quot;+StaticVarGetText(static_var_options+&quot;SLOptions_Symbol&quot;+opt_type+legno));\nprintf(&quot;\\nStatus : &quot;+StaticVarGetText(static_var_options+&quot;SLOptions_OrderStatus&quot;+opt_type+legno));\n\nfunction GetSecondNum()\n{\nTime = Now(4);\nreturn Time;\n}\n\n\n\nfunction PlaceOrder(EntrySymbol,TransType,order_type,LimitPrice,stoplevel) \n{\n\n\/\/Creating the Trading Bridge\nalgomojo=CreateObject(&quot;AMAMIBRIDGE.Main&quot;);\n\/\/Preparing the API data\n\napi_data = &quot;{\n            \\&quot;stgy_name\\&quot;: \\&quot;&quot;+stgy_name+&quot;\\&quot;,\n            \\&quot;symbol\\&quot;:\\&quot;&quot;+EntrySymbol+&quot;\\&quot;,\n            \\&quot;exchange\\&quot;:\\&quot;&quot;+exchange+&quot;\\&quot;,\n            \\&quot;transaction_type\\&quot;:\\&quot;&quot;+TransType+&quot;\\&quot;,\n            \\&quot;duration\\&quot;:\\&quot;&quot;+duration+&quot;\\&quot;,\n            \\&quot;order_type\\&quot;:\\&quot;&quot;+order_type+&quot;\\&quot;,\n            \\&quot;quantity\\&quot;:\\&quot;&quot;+quantity+&quot;\\&quot;,\n            \\&quot;disclosed_quantity\\&quot;:\\&quot;&quot;+disclosed_quantity+&quot;\\&quot;,\n            \\&quot;MktPro\\&quot;:\\&quot;&quot;+MktPro+&quot;\\&quot;,\n            \\&quot;price\\&quot;:\\&quot;&quot;+LimitPrice+&quot;\\&quot;,\n            \\&quot;trigger_price\\&quot;:\\&quot;&quot;+stoplevel+&quot;\\&quot;,\n            \\&quot;product\\&quot;:\\&quot;&quot;+productType+&quot;\\&quot;,\n            \\&quot;is_amo\\&quot;:\\&quot;&quot;+is_amo+&quot;\\&quot;\n        }&quot;; \n\n_TRACE(&quot;Broker API Request&quot;+api_data);\nresp=algomojo.AMDispatcher(apikey, apisecret,&quot;PlaceOrder&quot;,api_data,broker,ver);\n\n_TRACE(&quot;API Response : &quot;+resp);\n\n_TRACE(&quot;Strategy Name : &quot;+stgy_name+&quot;  AlgoStatus : &quot;+ EnableAlgo);\n_TRACE(&quot;Chart Symbol : &quot;+ Name() +&quot;  Trading Symbol : &quot;+  EntrySymbol +&quot;Trading Interval : &quot;+Interval(2)+&quot;  Chard Id : &quot;+ GetChartID());\n\nSay( &quot;Order Placed&quot; ); \n\nreturn resp;\n\n\n\n}\n\n\nfunction GetOrderNo(resp)\n{\n\nOrderNo = &quot;&quot;;\n\nsym = StrExtract( resp, 2,&#039;{&#039; );\n\nfor( jitem = 0; ( posdetails = StrExtract( sym, jitem,&#039;,&#039; )) != &quot;&quot;; jitem++ )\n{\n\n\n if(StrFind(posdetails,&quot;order_id&quot;) AND !StrFind(posdetails,&quot;exchange_order_id&quot;)\n\tAND !StrFind(posdetails,&quot;parent_order_id&quot;))\n  {\n   OrderNo = StrExtract(posdetails,1,&#039;:&#039;);\n   OrderNo = StrTrim(OrderNo,&quot;\\&quot;&quot;); \/\/Trim if any extra white space\n   _TRACE(&quot;\\nOrderNo : &quot;+OrderNo);\n  }\n  \n  \n\n} \/\/end of for loop\n\nreturn OrderNo;\n}\n\nfunction GetSymbol(resp)\n{\n\nSymbol = &quot;&quot;;\n\n\nOrderNo = &quot;&quot;;\n\nsym = StrExtract( resp, 2,&#039;{&#039; );\n\nfor( jitem = 0; ( posdetails = StrExtract( sym, jitem,&#039;,&#039; )) != &quot;&quot;; jitem++ )\n{\n\n\n if(StrFind(posdetails,&quot;symbol&quot;) AND !StrFind(posdetails,&quot;trading_symbol&quot;))\n  {\n   Symbol = StrExtract(posdetails,1,&#039;:&#039;);\n   Symbol = StrTrim(Symbol,&quot;\\&quot;&quot;); \/\/Trim if any extra white space\n   _TRACE(&quot;\\nSymbol : &quot;+Symbol);\n  }\n  \n}\n  \n\nreturn Symbol;\n}\n\nfunction GetOrderHistory(OrderNo)\n{\n\n\/\/Creating the Trading Bridge\nalgomojo=CreateObject(&quot;AMAMIBRIDGE.Main&quot;);\n\napi_data = &quot;{\n        \\&quot;order_id\\&quot;: \\&quot;&quot;+OrderNo+&quot;\\&quot;\n      }&quot;;\n_TRACE(&quot;OrderHistory API Request&quot;+api_data);\n\n\/\/Sending The Broker Request for NetOpenPositions\nresp=algomojo.AMDispatcher(apikey, apisecret,&quot;OrderHistory&quot;,api_data,broker,ver);\n_TRACE(&quot;OrderHistory API Response : &quot;+resp);\n\nreturn resp;\n\n}\n\n\nfunction GetOrderStatus(OrderNo)  \/\/OrderHistory for OrderStatus\n{\nOrderStatus = &quot;&quot;;\nresp = GetOrderHistory(OrderNo);\n\n\nsym = StrExtract( resp, 2,&#039;{&#039; );\n\nfor( jitem = 0; ( posdetails = StrExtract( sym, jitem,&#039;,&#039; )) != &quot;&quot;; jitem++ )\n{\n\n\n if(StrFind(posdetails,&quot;status&quot;))\n  {\n   OrderStatus = StrExtract(posdetails,1,&#039;:&#039;);\n   OrderStatus = StrTrim(OrderStatus,&quot;\\&quot;&quot;); \/\/Trim if any extra white space\n   _TRACE(&quot;\\nOrderStatus : &quot;+OrderStatus);\n  }\n  \n}\nreturn OrderStatus;\n\n}\n\n\nfunction GetPositionsBook()\n{\n\/\/Creating the Trading Bridge\nalgomojo=CreateObject(&quot;AMAMIBRIDGE.Main&quot;);\n\napi_data = &quot;{ }&quot;;\n_TRACE(&quot;PositionBook API Request&quot;+api_data);\n\n\/\/Sending The Broker Request for NetOpenPositions\nresp=algomojo.AMDispatcher(apikey, apisecret,&quot;Positions&quot;,api_data,broker,ver);\n_TRACE(&quot;PositionBook API Response : &quot;+resp);\n\nreturn resp;\n\n}\n\nfunction NetOpenPos(Symbol)\n{\n\nflag = 0;\n\n\nresp = GetPositionsBook();\n\n\nposNetqty =&quot;0&quot;;\nproductmsg=&quot;&quot;;\nfor( item = 1; ( sym = StrExtract( resp, item,&#039;{&#039; )) != &quot;&quot;; item++ )\n{\n\n\nif(Strfind(sym,Symbol) AND StrFind(sym,product)) \/\/Matches the symbol and \/\/Matches the Order Type\n{\n\nflag = 1; \/\/turn on the flag\n\nfor( jitem = 0; ( posdetails = StrExtract( sym, jitem,&#039;,&#039; )) != &quot;&quot;; jitem++ )\n{\n\nif(Strfind(posdetails,&quot;product&quot;))\n  {\n   productmsg = StrExtract(posdetails,1,&#039;:&#039;);\n   productmsg = StrTrim(productmsg,&quot;\\&quot;&quot;); \/\/Trim if any extra white space\n   }\n \n\n if(productmsg == product AND Strfind(posdetails,&quot;net_quantity&quot;))\n  {\n   posNetqty = StrExtract(posdetails,1,&#039;:&#039;);\n   posNetqty = StrTrim(posNetqty,&quot;\\&quot;&quot;); \/\/Trim if any extra white space\n  \n    _TRACE(&quot;\\nNetqty : &quot;+posNetqty);\n  }\n  \n  \n\n} \/\/end of for loop\n}\n\n}\/\/end of for loop\n\n\nif(flag==0)\n{\n_TRACE(&quot;\\nTrading Symbol Not Found&quot;);\n\/\/posNetqty =0;\n_TRACE(&quot;\\nNetQty : &quot;+posNetqty);\n}\n\nreturn posNetqty;\n\n}\n\nfunction GetExecTime(Symbol)\n{\n\n\nflag = 0;\n\n\nresp = GetPositionsBook();\n\nExecTime = &quot;Not Executed&quot;;\nproductmsg=&quot;&quot;;\nfor( item = 1; ( sym = StrExtract( resp, item,&#039;{&#039; )) != &quot;&quot;; item++ )\n{\n\n\nif(Strfind(sym,Symbol) AND StrFind(sym,product)) \/\/Matches the symbol and \/\/Matches the Order Type\n{\n\nflag = 1; \/\/turn on the flag\n\nfor( jitem = 0; ( posdetails = StrExtract( sym, jitem,&#039;,&#039; )) != &quot;&quot;; jitem++ )\n{\n\nif(Strfind(posdetails,&quot;product&quot;))\n  {\n   productmsg = StrExtract(posdetails,1,&#039;:&#039;);\n   productmsg = StrTrim(productmsg,&quot;\\&quot;&quot;); \/\/Trim if any extra white space\n   }\n \n\n if(productmsg == product AND Strfind(posdetails,&quot;exchange_time&quot;))\n  {\n   exchange_time = StrExtract(posdetails,1,&#039;:&#039;);\n   exchange_time = StrTrim(exchange_time,&quot;\\&quot;&quot;); \/\/Trim if any extra white space\n  \n    _TRACE(&quot;\\nexchange_time : &quot;+exchange_time);\n  }\n  \n  \n\n} \/\/end of for loop\n}\n\n}\/\/end of for loop\n\n\nif(flag==0)\n{\n_TRACE(&quot;\\nTrading Execution Time Not Available and Trading Symbol Not Found&quot;);\n}\nreturn ExecTime;\n}\n\n\n\nfunction GetAveragePrice(OrderNo)  \/\/OrderHistory for OrderStatus\n{\nAveragePrice = &quot;&quot;;\nresp = GetOrderHistory(OrderNo);\n\n\nsym = StrExtract( resp, 2,&#039;{&#039; );\n\nfor( jitem = 0; ( posdetails = StrExtract( sym, jitem,&#039;,&#039; )) != &quot;&quot;; jitem++ )\n{\n\n\n if(StrFind(posdetails,&quot;average_price&quot;))\n  {\n   AveragePrice = StrExtract(posdetails,1,&#039;:&#039;);\n   AveragePrice = StrTrim(AveragePrice,&quot;\\&quot;&quot;); \/\/Trim if any extra white space\n   _TRACE(&quot;\\nAverage Price : &quot;+AveragePrice);\n  }\n  \n}\nreturn AveragePrice;\n\n}\n\n\n\n\nfunction PlaceSLOptionsOrder(EntrySymbol, opt_type,legno,AveragePrice)\n{\n\n_TRACE(&quot;Place Stoploss Order&quot;);\n\nif(stopsenabled)\n{\n\/\/stoploss computation and stoploss order placement logic,\n\n\/\/stoploss computation\nstoplevel = StrToNum(AveragePrice) * (1+ stoppercentage\/100);\n\/\/round off to the nearest ticksize\nTickSz = 0.05;\nstoplevel = TickSz * round( stoplevel \/ TickSz );\nLimitPrice = stoplevel + stoplossslippagebuffer;  \/\/slippage is restricted to 2 points (Slippage Buffer)\n\n\nresp = PlaceOrder(EntrySymbol,&quot;B&quot;,&quot;SL&quot;,LimitPrice,stoplevel);\n\nTrans = &quot;B&quot;;\nStaticVarSetText(static_var_options+&quot;SLOptions_Trans&quot;+opt_type+legno,Trans,True); \nOrderNo = GetOrderNo(resp);\nStaticVarSetText(static_var_options+&quot;SLOptions_OrderNo&quot;+opt_type+legno,OrderNo,True);\nSymbol = GetSymbol(resp);\nStaticVarSetText(static_var_options+&quot;SLOptions_Symbol&quot;+opt_type+legno,Symbol,True);\nOrderstatus = GetOrderStatus(OrderNo);  \/\/Get the Orderstatus from OrderHistory\nStaticVarSetText(static_var_options+&quot;SLOptions_OrderStatus&quot;+opt_type+legno,Orderstatus,True);\n}\n\nreturn 0;\n}\n\n\nfunction PlaceOptionsOrder(spot_sym,expiry_date,strike_int,TransType, opt_type, offset,legno)\n{\n\nif(opt_type==&quot;PE&quot;)\n{\noffset = -offset;  \/\/changing the polarity\n}\n\n\/\/create the Trading Bridge\nalgomojo = CreateObject(&quot;AMAMIBRIDGE.Main&quot;);  \/\/calling the bridge dll\n\n\/\/Prepart the API data\n\napi_data =  &quot;{\n        \\&quot;stgy_name\\&quot;:\\&quot;&quot;+stgy_name+&quot;\\&quot;,\n        \\&quot;spot_sym\\&quot;:\\&quot;&quot;+spot_sym+&quot;\\&quot;,\n        \\&quot;expiry_dt\\&quot;:\\&quot;&quot;+expiry_date+&quot;\\&quot;,\n        \\&quot;opt_type\\&quot;:\\&quot;&quot;+opt_type+&quot;\\&quot;,\n        \\&quot;transaction_type\\&quot;:\\&quot;&quot;+TransType+&quot;\\&quot;,\n        \\&quot;order_type\\&quot;:\\&quot;&quot;+order_type+&quot;\\&quot;,\n        \\&quot;quantity\\&quot;:\\&quot;&quot;+quantity+&quot;\\&quot;,\n        \\&quot;price\\&quot;:\\&quot;0\\&quot;,\n        \\&quot;trigger_price\\&quot;:\\&quot;0\\&quot;,\n        \\&quot;product\\&quot;:\\&quot;&quot;+productType+&quot;\\&quot;,\n        \\&quot;strike_int\\&quot;:\\&quot;&quot;+strike_int+&quot;\\&quot;,\n        \\&quot;offset\\&quot;:\\&quot;&quot;+offset+&quot;\\&quot;\n      }&quot;;\n\n\n_TRACE(&quot;Broker API Request&quot;+api_data);\n\nresp = algomojo.AMDispatcher(apikey,apisecret,&quot;PlaceFOOptionsOrder&quot;,api_data,broker,ver);\n\n_TRACE(&quot;Broker API Respone&quot;+resp);\n\n\/\/Store the Transaction Type, OrderNo,Trading Symbol,OrderStatus,Netqty\n\nTrans = TransType;\nStaticVarSetText(static_var_options+&quot;Options_Trans&quot;+opt_type+legno,Trans,True); \nOrderNo = GetOrderNo(resp);\nStaticVarSetText(static_var_options+&quot;Options_OrderNo&quot;+opt_type+legno,OrderNo,True);\nSymbol = GetSymbol(resp);\nStaticVarSetText(static_var_options+&quot;Options_Symbol&quot;+opt_type+legno,Symbol,True);\nOrderstatus = GetOrderStatus(OrderNo);  \/\/Get the Orderstatus from OrderHistory\nStaticVarSetText(static_var_options+&quot;Options_OrderStatus&quot;+opt_type+legno,Orderstatus,True);\nNetQty = NetOpenPos(Symbol);  \/\/Get the Netqty from the Positions Book\nStaticVarSetText(static_var_options+&quot;Options_NetQty&quot;+opt_type+legno,NetQty,True);\nAveragePrice = GetAveragePrice(OrderNo);\nStaticVarSetText(static_var_options+&quot;Options_AveragePrice&quot;+opt_type+legno,AveragePrice,True);\nExecutionTime = GetExecTime(Symbol);  \/\/Get the Execution Time from OrderHistory\nStaticVarSetText(static_var_options+&quot;Options_ExecutionTime&quot;+opt_type+legno,ExecutionTime,True);\n\n\/\/follow thro stoploss order\n\/\/Testing Purpose\n\/\/PlaceSLOptionsOrder(Symbol, opt_type,legno,&quot;100&quot;);\n\/\/Live Trading Purpose\nPlaceSLOptionsOrder(Symbol, opt_type,legno,AveragePrice);\n\n}\n\nfunction cancelorder(OrderNo)\n{\n\n\n\/\/Creating the Trading Bridge\nalgomojo=CreateObject(&quot;AMAMIBRIDGE.Main&quot;);\n\napi_data = &quot;{\n        \\&quot;order_id\\&quot;: \\&quot;&quot;+OrderNo+&quot;\\&quot;\n      }&quot;;\n_TRACE(&quot;Cancel API Request&quot;+api_data);\n\n\/\/Sending The Broker Request for NetOpenPositions\nresp=algomojo.AMDispatcher(apikey, apisecret,&quot;CancelOrder&quot;,api_data,broker,ver);\n_TRACE(&quot;Cancel API Response : &quot;+resp);\n\n\n}\n\nfunction cancelSLorders()\n{\nopt_type = &quot;CE&quot;;\nlegno = 1;\nCEorderid = StaticVarGetText(static_var_options+&quot;SLOptions_OrderNo&quot;+opt_type+legno);\n\ncancelorder(CEorderid);\nremoveinteralmemory(&quot;SL&quot;,opt_type,legno);\t\n\nopt_type = &quot;PE&quot;;\nlegno = 2;\nPEorderid = StaticVarGetText(static_var_options+&quot;SLOptions_OrderNo&quot;+opt_type+legno);\n\ncancelorder(PEorderid);\nremoveinteralmemory(&quot;SL&quot;,opt_type,legno);\t\n}\n\n\nfunction SquareOffPosition(opt_type,legno)\n{\nresp =&quot;&quot;;\nTType = &quot;&quot;;\nExitSymbol = StaticVarGetText(static_var_options+&quot;Options_Symbol&quot;+opt_type+legno);\nNetqty = StrToNum(NetOpenPos(ExitSymbol));\n\nif(StaticVarGetText(static_var_options+&quot;Options_Trans&quot;+opt_type+legno)==&quot;B&quot;)\n{\nTType = &quot;S&quot;;\n}\n\nif(StaticVarGetText(static_var_options+&quot;Options_Trans&quot;+opt_type+legno)==&quot;S&quot;)\n{\nTType = &quot;B&quot;;\n}\n\n\n\n\/\/Creating the Trading Bridge\nalgomojo=CreateObject(&quot;AMAMIBRIDGE.Main&quot;);\n\/\/Preparing the API data\n\n\napi_data = &quot;{\n            \\&quot;stgy_name\\&quot;: \\&quot;&quot;+stgy_name+&quot;\\&quot;,\n            \\&quot;symbol\\&quot;:\\&quot;&quot;+ExitSymbol+&quot;\\&quot;,\n            \\&quot;exchange\\&quot;:\\&quot;&quot;+exchange+&quot;\\&quot;,\n            \\&quot;transaction_type\\&quot;:\\&quot;&quot;+TType+&quot;\\&quot;,\n            \\&quot;duration\\&quot;:\\&quot;&quot;+duration+&quot;\\&quot;,\n            \\&quot;order_type\\&quot;:\\&quot;&quot;+order_type+&quot;\\&quot;,\n            \\&quot;quantity\\&quot;:\\&quot;&quot;+Netqty+&quot;\\&quot;,\n            \\&quot;disclosed_quantity\\&quot;:\\&quot;&quot;+disclosed_quantity+&quot;\\&quot;,\n            \\&quot;MktPro\\&quot;:\\&quot;&quot;+MktPro+&quot;\\&quot;,\n            \\&quot;price\\&quot;:\\&quot;&quot;+price+&quot;\\&quot;,\n            \\&quot;trigger_price\\&quot;:\\&quot;&quot;+trigger_price+&quot;\\&quot;,\n            \\&quot;product\\&quot;:\\&quot;&quot;+productType+&quot;\\&quot;,\n            \\&quot;is_amo\\&quot;:\\&quot;&quot;+is_amo+&quot;\\&quot;\n        }&quot;; \n\n_TRACE(&quot;Squareoff API Request&quot;+api_data);\n\/\/Testing\n\/\/if(Netqty==0 AND ExitSymbol!=&quot;&quot;)\n\/\/Live Trading Purpose\nif(Netqty!=0 AND ExitSymbol!=&quot;&quot;)\n{\nresp=algomojo.AMDispatcher(apikey, apisecret,&quot;PlaceOrder&quot;,api_data,broker,ver);\nremoveinteralmemory(&quot;&quot;,opt_type,legno);\t\n}\n\nif(resp!=&quot;&quot;)\n{\n_TRACE(&quot;Squareoff API Response : &quot;+resp);\n}\nelse\n{\n_TRACE(&quot;Squareoff Order Not Triggered&quot;);\n}\nreturn resp;\n\n}\n\n\/\/straddletrigger = ParamTrigger(&quot;Straddle Entry Trigger&quot;,&quot;Place Straddle Options&quot;);\n\/\/exittrigger = ParamTrigger(&quot;Straddle Exit Trigger&quot;,&quot;Exit Straddle&quot;);\n\n\/\/if(straddletrigger)\n\/\/{\n\n\/\/PlaceOptionsOrder(spot_sym,expiry_date,strike_interval,TransType, &quot;CE&quot;, offsetCE,1);\n\/\/PlaceOptionsOrder(spot_sym,expiry_date,strike_interval,TransType, &quot;PE&quot;, offsetPE,2);\n\n\/\/}\n\n\/\/if(exittrigger)\n\/\/{\n\n\/\/cancelSLorders();\n\/\/SquareOffPosition(&quot;CE&quot;,1);\n\/\/SquareOffPosition(&quot;PE&quot;,2);\n\n\/\/}\n\nif(EnableAlgo != &quot;Disable&quot;)\n    {\n\t\t\/\/if the time set as per the parameter control is reached\n\t\tif(GetSecondNum() == entrytime AND StaticVarGet(static_var_options + entrytime) == 0)\n\t\t{\n\t\t\t\/\/send the straddle orders\n\t\t\tStaticVarSet(static_var_options + entrytime,1);\n\t\t\tPlaceOptionsOrder(spot_sym,expiry_date,strike_interval,TransType, &quot;CE&quot;, offsetCE,1);\n\t\t\tPlaceOptionsOrder(spot_sym,expiry_date,strike_interval,TransType, &quot;PE&quot;, offsetPE,2);\n\t\n\t\t\n\t\t}\n\t\t\/\/reset the static variable if the otime is not matching\n\t\telse if(GetSecondNum() != entrytime)\n\t\t{\n\t\t\tStaticVarSet(static_var_options + entrytime,0);\n\t\t}\n\t\t\n\t\t\/\/if the time set as per the parameter control is reached\n\t\tif(GetSecondNum() == exittime AND StaticVarGet(static_var_options + exittime) == 0)\n\t\t{\n\t\t\t\/\/send the straddle orders\n\t\t\tStaticVarSet(static_var_options + exittime,1);\n\t\t\tcancelSLorders();\n\t\t\tSquareOffPosition(&quot;CE&quot;,1);\n\t\t\tSquareOffPosition(&quot;PE&quot;,2);\n\t\t\t\n\t\t\n\t\t}\n\t\t\/\/reset the static variable if the otime is not matching\n\t\telse if(GetSecondNum() != exittime)\n\t\t{\n\t\t\tStaticVarSet(static_var_options + exittime,0);\n\t\t}\n    \n    \n    \n    }\/\/end of Main if loop\n\nSetChartOptions(0, chartShowArrows | chartShowDates); \/\/x-Axis will be plottted\n\/\/plot the candles\nPlot(Close,&quot;Close&quot;,colorDefault,GetPriceStyle() | styleNoTitle);\n\n\n<\/code><\/pre>\n\n\n\n<p><strong>How to Setup Intraday Straddle Module?<\/strong><\/p>\n\n\n\n<p>1)Apply the AFL Code with proper Algomojo API Key and API secret key and Stoploss controls , Set the Entry and Exit time<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/i0.wp.com\/www.marketcalls.in\/wp-content\/uploads\/2022\/04\/image-15.png?resize=728%2C693&amp;ssl=1\" alt=\"\" class=\"wp-image-56003\"\/><\/figure>\n\n\n\n<p>2)Press Clear Static Variables to clear the temporary memory<\/p>\n\n\n\n<p>3)Temporary Multi Legged Memory Management can be seen at Amibroker -&gt; Window -&gt; Interpretation Box as shown below<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img src=\"https:\/\/i0.wp.com\/www.marketcalls.in\/wp-content\/uploads\/2022\/04\/image-16.png?resize=405%2C447&amp;ssl=1\" alt=\"\" class=\"wp-image-56004\"\/><\/figure>\n\n\n\n<p><strong>Expiry Symbol Format<\/strong><\/p>\n\n\n\n<p>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.<\/p>\n\n\n\n<p>For Upstox account holders Monthly Option Symbol Format: NIFTY22APR17200CE<\/p>\n\n\n\n<p>Hence the Expiry Date needs to be entered as 22APR<\/p>\n\n\n\n<p>For Aliceblue Account holders weekly Option Symbol Format: NIFTY2242117200CE<\/p>\n\n\n\n<p>Hence the Expiry Date needs to be entered as 22421Upstox &#8211; Symbol Format<\/p>\n\n\n\n<p>4)Ensure Log Window is open to capture the Trace Logs<\/p>\n\n\n\n<p>5)Bingo Now you have setup the complete end to end automated straddle\/strangle execution. Straddle\/Strangle Control can be controlled via offset parameters.<\/p>\n\n\n\n<p>6)Code is designed such a way that stoploss is placed for individual price legs and not for the combined premium of Straddle\/Strangle Spreads<\/p>\n\n\n\n<p>7)Make the Algo Enable and send time based straddle execution (Supports both entry and exit conditions).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial focus on how to automate your time-based index straddle\/strangle management with intraday stop-loss levels with time-based entry and exits using Algomojo Platform and Amibroker. Modern Internal memory management is used to speed up the execution and management of Index Straddle.<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":""},"categories":[6,83],"tags":[13,157,86,158],"_links":{"self":[{"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/posts\/384"}],"collection":[{"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/comments?post=384"}],"version-history":[{"count":2,"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/posts\/384\/revisions"}],"predecessor-version":[{"id":599,"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/posts\/384\/revisions\/599"}],"wp:attachment":[{"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/media?parent=384"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/categories?post=384"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/algomojo.com\/blog\/wp-json\/wp\/v2\/tags?post=384"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}