Dissecting the Nest Plus Auto Trading API

Yusi, I found an interesting afl in another forum relating to Nest Plus auto. Credits: Ranjicgnr. Pls go through it:
Manual Trading Control for NEST/NOW:
This afl will provide you a control for generating Buy and Sell Signals from clicking the buttons in the chart.
Features
You can predefine your quantity of Buy/Sell in the parameters
You Can Enter your Client ID in the Parameters
You can select the Buy/Sell Price from Ask price, Bid price or LTP.
Option for Enabling Actual Trading (If Disabled, No Signals will go to NOW/NEST, But chart will generate signals.) This can be used for testing.
Selecting the Buy/Sell as Intraday or Delivery.
Requirements.
For Buy/Sell Price selection, use Aux1 and Aux2 for importing the Ask Bid Prices.
Symbol in the Amibroker should be the same as present in the NEST/NOW.
Active Nest Plus API Subscription is required (Contact Nest Plus for Details)
Usage
Copy The Afl to Custom Afl folder of amibroker.
Drag and drop the afl to an intraday chart blank chart.
Enable Controls and Auto Trading Options.
Set Lot Qty and Purchase Type.
Type the Client ID.
Press Buy Or Sell when you decided.
(Decisions should be based on your trading strategy. This Afl will not generate any Buy/Sell Signals automatically)
[Suggest Features For Improvement]
[NEST, NOW, Amibroker are registered products of the Respective Companies]





Code:
Title = " ";
 
_SECTION_BEGIN("MaualTradingInt1V00 ");
 
EnableRealTimeControl = ParamList("Enable Controls", "No|Yes", 0);
EnableAutoTrade = ParamList("Enable Autotrade", "No|Yes", 0);
ClientIdValue = ParamStr("Client Id", "CLIENTID");
PurchaseType = ParamList("Transaction Type", "MIS|NRML", 0);
OrderType = ParamList("Order Type", "LIMIT|MARKET", 0);
BuyPriceSelection = ParamList("Buy Price", "Bid Price|Ask Price|LTP", 0);
SellPriceSelection = ParamList("Sell Price", "Ask Price|Bid Price|LTP", 0);
LotQuantity = Param("Lot Quantity", 1000, 50, 100000, 10);  // Default Trade Qty.
 
//firstflag=0;
if(StaticVarGetText("firstflag")=="")
{
	StaticVarSet("OrderNo", 0, 1);
	
	StaticVarSet("LTPSave", 0);
	StaticVarSet("LTQSave", 0);
	StaticVarSet("VolumeTemp", 0);
	StaticVarSet("AskSave", 0);
	StaticVarSet("BidSave", 0);
	
	StaticVarSetText ("firstflag","0");
}
 
if(StaticVarGetText("firstflag"+Name())=="")
{
	StaticVarSet(("Buy_Price" + Name()), 0, 1);
	StaticVarSet(("Buy_Qty" + Name()), 0, 1);
	StaticVarSet(("Sell_Price" + Name()), 0, 1);
	StaticVarSet(("Sell_Qty" + Name()), 0, 1);
	StaticVarSet(("AvgBuy_Price" + Name()), 0, 1);
	StaticVarSet(("NetBuy_Qty" + Name()), 0, 1);
	StaticVarSet(("AvgSell_Price" + Name()), 0, 1);
	StaticVarSet(("NetSell_Qty" + Name()), 0, 1);
	
	StaticVarSetText("firstflag"+Name(), "0");
}
 
nestplus = Null;
 
if(EnableAutoTrade == "Yes" && EnableRealTimeControl == "Yes")
{
	if(IsNull(nestplus))
	{
		nestplus = CreateObject("Nest.PlusApi");
		nestplus.SetObjectName("MaualTradingInt");
	}
}
 
TempBuyPrice = StaticVarGet(("Buy_Price" + Name()));
TempSellPrice = StaticVarGet(("Sell_Price" + Name()));
TempBuyQty = StaticVarGet(("Buy_Qty" + Name()));
TempSellQty = StaticVarGet(("Sell_Qty" + Name()));
 
LTPTemp = StaticVarGet("LTPSave");
LTQTemp = StaticVarGet("LTQSave");
VolumeTemp = StaticVarGet("VolumeTemp");
AskTemp = StaticVarGet("AskSave");
BidTemp = StaticVarGet("BidSave");
 
LTPLastTemp = LastValue(C);
VolumeLastTemp = LastValue(Volume);
 
LTQLastTemp = (VolumeLastTemp - VolumeTemp);
 
if(LTQLastTemp < 0)
{
	LTQLastTemp = LTQLastTemp * -1;
}
 
if(LTQLastTemp == 0)
{
	LTQLastTemp = LTQTemp;
}
 
 
AskLastTemp = LastValue(Aux1);
BidLastTemp = LastValue(Aux2);
 
LTPColor = colorGrey40;
LTQColor = colorGrey40;
AskColor = colorGrey40;
BidColor = colorGrey40;
 
 
if(LTPTemp > LTPLastTemp)
{
	LTPColor = colorRed;
}
else if(LTPTemp < LTPLastTemp)
{
	LTPColor = colorGreen;
}
 
if(LTQTemp > LTQLastTemp)
{
	LTQColor = colorRed;
}
else if(LTQTemp < LTQLastTemp)
{
	LTQColor = colorGreen;
}
 
if(AskTemp > AskLastTemp)
{
	AskColor = colorRed;
}
else if(AskTemp < AskLastTemp)
{
	AskColor = colorGreen;
}
 
if(BidTemp > BidLastTemp)
{
	BidColor = colorRed;
}
else if(BidTemp < BidLastTemp)
{
	BidColor = colorGreen;
}
 
StaticVarSet("LTPSave", LTPLastTemp);
StaticVarSet("LTQSave", LTQLastTemp);
StaticVarSet("VolumeTemp", VolumeLastTemp);
StaticVarSet("AskSave", AskLastTemp);
StaticVarSet("BidSave", BidLastTemp);
 
X0 = 20;
Y0 = 10;
 
procedure DrawData (Text, x1, y1, x2, y2, colorFrom, colorTo)
{
	GfxSetOverlayMode(0);
	GfxSelectFont("Verdana", 8.5, 700);
	GfxSetBkMode(1);
	GfxGradientRect(x1, y1, x2, y2, colorFrom, colorTo);
	GfxDrawText(Text, x1, y1, x2, y2, 32|1|4|16);
}
GfxSetTextColor(colorWhite);
 
 
BuyAvgPriceDisplay = StaticVarGet(("AvgBuy_Price" + Name()));
NetBuyQtyDisplay = StaticVarGet(("NetBuy_Qty" + Name()));
SellAvgPriceDisplay = StaticVarGet(("AvgSell_Price" + Name()));
NetSellQtyDisplay = StaticVarGet(("NetSell_Qty" + Name()));
 
TempNetQuantity = NetBuyQtyDisplay - NetSellQtyDisplay;
TempNetValue = (SellAvgPriceDisplay * NetSellQtyDisplay) - (BuyAvgPriceDisplay * NetBuyQtyDisplay);
 
TempNetQuantityColor = colorGrey40;
TempNetValueColor = colorGrey40;
 
if(TempNetQuantity > 0)
{
	TempNetQuantityColor = colorGreen;
}
else if(TempNetQuantity < 0)
{
	TempNetQuantityColor = colorRed;
}
 
if(TempNetValue > 0)
{
	TempNetValueColor = colorGreen;
}
else if(TempNetValue < 0)
{
	TempNetValueColor = colorRed;
}
 
DrawData (Name(), X0, Y0, X0+150, Y0+20, colorGrey40, colorGrey40);
DrawData (Date(), X0+155, Y0, X0+320, Y0+20, colorGrey40, colorGrey40);
DrawData ("Open : " + Open, X0+325, Y0, X0+450, Y0+20, colorGrey40, colorGrey40);
DrawData ("Close : " + Close, X0+455, Y0, X0+580, Y0+20, colorGrey40, colorGrey40);
DrawData ("High : " + High, X0+585, Y0, X0+710, Y0+20, colorGrey40, colorGrey40);
DrawData ("Low : " + Low, X0+715, Y0, X0+840, Y0+20, colorGrey40, colorGrey40);
DrawData ("Volume : " + Volume, X0+845, Y0, X0+1000, Y0+20, colorGrey40, colorGrey40);
DrawData ("% Change : " + NumToStr( (((C-O)*100)/O), 1.2, True), X0+1005, Y0, X0+1130, Y0+20, colorGrey40, colorGrey40);
 
if(EnableRealTimeControl == "Yes")
{
	DrawData ("Buy Price : " + TempBuyPrice, X0, Y0+25, X0+150, Y0+45, colorGrey40, colorGrey40);
	DrawData ("Buy Qty : " + TempBuyQty, X0+155 , Y0+25, X0+305, Y0+45, colorGrey40, colorGrey40);
	DrawData ("Sell Price : " + TempSellPrice, X0+310, Y0+25, X0+460, Y0+45, colorGrey40, colorGrey40);
	DrawData ("Sell Qty : " + TempSellQty, X0+465, Y0+25, X0+615, Y0+45, colorGrey40, colorGrey40);
 
	DrawData ("BuyAvgPrice : " + BuyAvgPriceDisplay, X0+620, Y0+25, X0+770, Y0+45, colorGrey40, colorGrey40);
	DrawData ("NetBuyQty : " + NetBuyQtyDisplay, X0+775 , Y0+25, X0+925, Y0+45, colorGrey40, colorGrey40);
	DrawData ("SellAvgPrice : " + SellAvgPriceDisplay, X0+930, Y0+25, X0+1080, Y0+45, colorGrey40, colorGrey40);
	DrawData ("NetSellQty : " + NetSellQtyDisplay, X0+1085, Y0+25, X0+1235, Y0+45, colorGrey40, colorGrey40);
	
	TempNestOredrNo = ClientIdValue + NumToStr(Now(3),1,0) + "00" + StaticVarGet("OrderNo");
	
	DrawData ("NetQty : " + TempNetQuantity, X0+520, Y0+50, X0+670, Y0+70, TempNetQuantityColor, TempNetQuantityColor);
	DrawData ("NetValue : " + TempNetValue, X0+675, Y0+50, X0+900, Y0+70, TempNetValueColor, TempNetValueColor);
	DrawData ("Order No : " + TempNestOredrNo, X0+905, Y0+50, X0+1150, Y0+70, colorGrey40, colorGrey40);
	
	DrawData ("LTP : " + LTPLastTemp, X0, Y0+50, X0+125, Y0+70, LTPColor, LTPColor);
	DrawData ("LTQ : " + LTQLastTemp, X0+130, Y0+50, X0+255, Y0+70, LTQColor, LTQColor);
	DrawData ("Ask : " + AskLastTemp, X0+260, Y0+50, X0+385, Y0+70, AskColor, AskColor);
	DrawData ("Bid : " + BidLastTemp, X0+390, Y0+50, X0+515, Y0+70, BidColor, BidColor);
}
 
X0 = 20;
Y0 = 100;
X1 = 100;
 
LBClick = GetCursorMouseButtons() == 9;	// Click
MouseX  = Nz(GetCursorXPosition(1));		// 
MouseY  = Nz(GetCursorYPosition(1));		//
 
procedure DrawBut (Text, x1, y1, x2, y2, colorFrom, colorTo)
{
	GfxSetOverlayMode(0);
	GfxSelectFont("Verdana", 9, 700);
	GfxSetBkMode(1);
	GfxGradientRect(x1, y1, x2, y2, colorFrom, colorTo);
	GfxDrawText(Text, x1, y1, x2, y2, 32|1|4|16);
}
GfxSetTextColor(colorWhite);
 
if(EnableRealTimeControl == "Yes")
{
 
	DrawBut ("Buy", X0, Y0, X0+X1, Y0+30, colorGreen, colorGreen);
	CursorInBuyButton = MouseX >= X0 AND MouseX <= X0+X1 AND MouseY >= Y0 AND MouseY <= Y0+30;
	BuyButtonClick = CursorInBuyButton AND LBClick;
	if (BuyButtonClick) 
	{ 
		DrawBut("Buy", X0+X1+10, Y0, X0+X1+75, Y0+30,  colorGrey40, colorGrey40);
		TempBuy = LastValue(DateTime());
		StaticVarSet(("BuyIndex" + Name()),  TempBuy, 1);
		
		TempBuyLastQty = StaticVarGet(("NetBuy_Qty" + Name()));
		TempNetBuyQty = (TempBuyLastQty + LotQuantity);
		
		TempBuyLastPrice = StaticVarGet(("AvgBuy_Price" + Name()));
		
		if(BuyPriceSelection == "Bid Price")
		{
			BuyPriceValue = BidLastTemp;
		}
		else if(BuyPriceSelection == "Ask Price")
		{
			BuyPriceValue = AskLastTemp;
		}
		else
		{
			BuyPriceValue = LTPLastTemp;
		}
		
		if(TempBuyLastQty == 0)
		{
			TempAvgBuyPrice = BuyPriceValue;
		}
		else
		{
			TempAvgBuyPrice = (BuyPriceValue + TempBuyLastPrice)/2;
		}
		
		StaticVarSet(("Buy_Price" + Name()),  BuyPriceValue, 1);
		StaticVarSet(("Buy_Qty" + Name()),  LotQuantity, 1);
		
		StaticVarSet(("AvgBuy_Price" + Name()),  TempAvgBuyPrice, 1);
		StaticVarSet(("NetBuy_Qty" + Name()),  TempNetBuyQty, 1);
		
		if(EnableAutoTrade == "Yes" && EnableRealTimeControl == "Yes")
		{
			LastOrderNo = StaticVarGet("OrderNo");
			LastOrderNo++;
			StaticVarSet("OrderNo", LastOrderNo, 1);
			TempOrderNo = ClientIdValue + NumToStr(Now(3),1,0) + "00" + LastOrderNo;
			TempName = Name() + "-EQ";
			nestplus.PlaceOrder("BUY", TempOrderNo, "NSE", TempName, "DAY", OrderType, LotQuantity, BuyPriceValue, 0.0, 0, PurchaseType, ClientIdValue);
		}	
	}
 
	DrawBut ("Sell", X0, Y0+40, X0+X1, Y0+70, colorRed, colorRed);
	CursorInSellButton = MouseX >= X0 AND MouseX <= X0+X1 AND MouseY >= Y0+40 AND MouseY <= Y0+70;
	SellButtonClick = CursorInSellButton AND LBClick;
	if (SellButtonClick) 
	{ 
		DrawBut("Sell", X0+X1+10, Y0, X0+X1+75, Y0+30,  colorGrey40, colorGrey40);
		TempSell = LastValue(DateTime());
		StaticVarSet(("SellIndex" + Name()),  TempSell, 1);
		
		TempSellLastQty = StaticVarGet(("NetSell_Qty" + Name()));
		TempNetSellQty = (TempSellLastQty + LotQuantity);
		
		TempSellLastPrice = StaticVarGet(("Sell_Price" + Name()));
		
		if(SellPriceSelection == "Ask Price")
		{
			SellPriceValue = AskLastTemp;
		}
		else if(SellPriceSelection == "Bid Price")
		{
			SellPriceValue = BidLastTemp;
		}
		else
		{
			SellPriceValue = LTPLastTemp;
		}
		
		if(TempSellLastQty == 0)
		{
			TempAvgSellPrice = SellPriceValue;
		}
		else
		{
			TempAvgSellPrice = (SellPriceValue + TempSellLastPrice)/2;
		}
		
		StaticVarSet(("Sell_Price" + Name()),  SellPriceValue, 1);	
		StaticVarSet(("Sell_Qty" + Name()),  LotQuantity, 1);
		
		StaticVarSet(("AvgSell_Price" + Name()),  TempAvgSellPrice, 1);	
		StaticVarSet(("NetSell_Qty" + Name()),  TempNetSellQty, 1);
		
		if(EnableAutoTrade == "Yes" && EnableRealTimeControl == "Yes")
		{
			LastOrderNo = StaticVarGet("OrderNo");
			LastOrderNo++;
			StaticVarSet("OrderNo", LastOrderNo, 1);
			TempOrderNo = ClientIdValue + NumToStr(Now(3),1,0) + "00" + LastOrderNo;
			TempName = Name() + "-EQ";
			nestplus.PlaceOrder("SELL", TempOrderNo, "NSE", TempName, "DAY", OrderType, LotQuantity, SellPriceValue, 0.0, 0, PurchaseType, ClientIdValue);
		}	
	}
 
	DrawBut ("Clear Data", X0, Y0+80, X0+X1, Y0+110, colorGrey40, colorGrey40);
	CursorInClearButton = MouseX >= X0 AND MouseX <= X0+X1 AND MouseY >= Y0+80 AND MouseY <= Y0+110;
	ClearButtonClick = CursorInClearButton AND LBClick;
	if (ClearButtonClick) 
	{ 
		DrawBut("Clear", X0+X1+10, Y0, X0+X1+75, Y0+30,  colorGrey40, colorGrey40);
		StaticVarRemove(("BuyIndex" + Name()));
		StaticVarRemove(("SellIndex" + Name()));
		StaticVarSetText("firstflag"+Name(), "");
	}
 
	BuyTempData = StaticVarGet(("BuyIndex" + Name()));
	SellTempData = StaticVarGet(("SellIndex" + Name()));
 
	Buy = IIf(DateTime() == BuyTempData, 1, 0);
	Sell = IIf(DateTime() == SellTempData, 1, 0);
 
	Buyshape = Buy * shapeUpArrow;
	SellShape = Sell * shapeDownArrow;
	PlotShapes( Buyshape, colorBrightGreen, 0, Low );
	PlotShapes( SellShape, colorRed, 0, High );
	GraphXSpace = 5;
 
}
 
_SECTION_END();
 
// ~~~~~~~~~~~~~~~~ Quote Display Draw ~~~~~~~~~~~~~~~~~//
 
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
//_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} \nOpen : %g, Close : %g (%.1f%%) \nLow : %g, High : %g (%.1f%%) \nVolume : " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, C,(((C-O)*100)/O), L, H, (((H-L)*100)/L) ));
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); 
_SECTION_END();
 
Last edited:

yusi

Well-Known Member
Yusi, I found an interesting afl in another forum relating to Nest Plus auto. Pls go through it: Manual Trading Control for NEST/NOW:
Aroon, thank you for posting this; am sure it will be useful to many either to use as-is or build on. Will look at this at convenience.

Two things that are immediately noticeable are what you have mentioned (this may be a stumbling block for many) :
For Buy/Sell Price selection, use Aux1 and Aux2 for importing the Ask Bid Prices.
Symbol in the Amibroker should be the same as present in the NEST/NOW.
 
Last edited:
Aroon, thank you for posting this; am sure it will be useful to many either to use as-is or build on. Will look at this at convenience.

Can I request you to please edit your post to include the AFL within the Code tags. That will make it more readable, and also preserve the original author's formatting. For example:

Code:
///AFL Credits: Ranjicgnr
Title = " ";
_SECTION_BEGIN("MaualTradingInt1V00 ");
EnableRealTimeControl = ParamList("Enable Controls", "No|Yes", 0);
EnableAutoTrade = ParamList("Enable Autotrade", "No|Yes", 0);
Two things that are immediately noticeable are what you have mentioned (this may be a stumbling block for many) :
"For Buy/Sell Price selection, use Aux1 and Aux2 for importing the Ask Bid Prices."

What is Aux1 and Aux2 .... could you please explain about it for the sake of those of us who are unaware about it.

Thanx
 

yusi

Well-Known Member
If the trader choose buy/sell price as bid or ask price instead of LTP, then only this question arises. In order to read the bid/ask, one has to use import wizard of amibroker, pick file and assign the bid and ask as aux1 and aux2. If the datafeed provides bid/ask, no need to do it. (Best to my knowledge, correct me wrong)
 
THANX Aroonsankarji,

You explained it so well.
 
Hi

error free installation. But "Object name is not set, Object name is not called". YUSI had similar problem and his thread is inactive after my post. I am using legal Ami 5.8: gdfl and esignal data feed. Any solutions.
SRJC
P.S. Same problem with GDFL Plug in and Hrish9000 plug in. Could it be be I am missing something?.
 

yusi

Well-Known Member
Hi

error free installation. But "Object name is not set, Object name is not called". YUSI had similar problem and his thread is inactive after my post. I am using legal Ami 5.8: gdfl and esignal data feed. Any solutions.
SRJC
P.S. Same problem with GDFL Plug in and Hrish9000 plug in. Could it be be I am missing something?.
Firstly, do not remember saying I had that problem. But do recall saying that you will get the problem if your subscription to the Plus API is not enabled. The way to check that is to go to your Plus Dashboard. It is not a function of Ami or GDFL or any AFL. See http://www.traderji.com/algo-automa...nest-plus-auto-trading-api-27.html#post996747

@aroon: a couple of observations:

- one should use CreateStaticObject() instead of CreateObject(). I think the original author has already modified the code to do so.
- as posted, the AFL applies to NSE equities. It should be the Symbol name, not the TradingSymbol name as the code appends '-EQ' (I misread that part).
- since it uses the version 5.80 of StaticVarSet to ensure delivery based tracking, that is a requirement.
 
Thanks for your valuable notes, Yusi.

In an attempt to make it fully automated, i edited and added some codes. I know it is a half-baked one, let it be a starter.

1. Paste Your own afl with Buy and Sell conditions.
2.The buy and sell condition variables named here are buy11 and sell11 resp.

Code:
//Author : Ranjicgnr
Title = " ";
 
_SECTION_BEGIN("MaualTradingInt1V00 ");
 
X2 = Param("Button X Offset", 0, 0, 2000, 100);
Y2 = Param("Button Y Offset", 0, 0, 2000, 100);
X1 = Param("Button Size", 100, 100, 300, 50);
 
EnableRealTimeControl = ParamList("Enable Controls", "No|Yes", 0);
EnableAutoTrade = ParamList("Enable Autotrade", "No|Yes", 0);
BuyPriceSelection = ParamList("Buy Price", "Bid Price|Ask Price|LTP", 0);
SellPriceSelection = ParamList("Sell Price", "Ask Price|Bid Price|LTP", 0);
ProductType = ParamList("Product Type", "MIS|NRML", 0);
OrderType = ParamList("Order Type", "LIMIT|MARKET", 0);
ClientIdValue = ParamStr("Client Id", "CLIENTID");
LotQuantity = Param("Lot Quantity", 1000, 50, 100000, 10);  // Default Trade Qty.
 
//firstflag=0;
if(StaticVarGetText("firstflag")=="")
{
    StaticVarSet("OrderNo", 0);
     
    StaticVarSet("LTPSave", 0);
    StaticVarSet("LTQSave", 0);
    StaticVarSet("VolumeTemp", 0);
    StaticVarSet("AskSave", 0);
    StaticVarSet("BidSave", 0);
     
    StaticVarSet("LastLTPColor", colorGrey40);
    StaticVarSet("LastLTQColor", colorGrey40);
    StaticVarSet("LastAskColor", colorGrey40);
    StaticVarSet("LastBidColor", colorGrey40);
     
    StaticVarSetText ("firstflag","0");
}
 
if(StaticVarGetText("firstflag"+Name())=="")
{
    StaticVarSet(("Buy_Price" + Name()), 0);
    StaticVarSet(("Buy_Qty" + Name()), 0);
    StaticVarSet(("Sell_Price" + Name()), 0);
    StaticVarSet(("Sell_Qty" + Name()), 0);
    StaticVarSet(("AvgBuy_Price" + Name()), 0);
    StaticVarSet(("NetBuy_Qty" + Name()), 0);
    StaticVarSet(("AvgSell_Price" + Name()), 0);
    StaticVarSet(("NetSell_Qty" + Name()), 0);
     
    StaticVarSetText("firstflag"+Name(), "0");
}
 
 
 
if(EnableAutoTrade == "Yes" && EnableRealTimeControl == "Yes")
{
    if(StaticVarGetText("firstflagforNest")=="")
    {
        nestplus = Null;
        if(IsNull(nestplus))
        {
            nestplus = CreateStaticObject("Nest.PlusApi");
            nestplus.SetObjectName("RKRAutoTrade");
        }
        StaticVarSetText ("firstflagforNest","0");
    }
     
}
 
TempBuyPrice = StaticVarGet(("Buy_Price" + Name()));
TempSellPrice = StaticVarGet(("Sell_Price" + Name()));
TempBuyQty = StaticVarGet(("Buy_Qty" + Name()));
TempSellQty = StaticVarGet(("Sell_Qty" + Name()));
 
LTPTemp = StaticVarGet("LTPSave");
LTQTemp = StaticVarGet("LTQSave");
VolumeTemp = StaticVarGet("VolumeTemp");
AskTemp = StaticVarGet("AskSave");
BidTemp = StaticVarGet("BidSave");
 
LTPLastTemp = LastValue(C);
VolumeLastTemp = LastValue(Volume);
 
LTQLastTemp = (VolumeLastTemp - VolumeTemp);
 
if(LTQLastTemp < 0)
{
    LTQLastTemp = LTQLastTemp * -1;
}
 
if(LTQLastTemp == 0)
{
    LTQLastTemp = LTQTemp;
}
 
 
AskLastTemp = LastValue(Aux1);
BidLastTemp = LastValue(Aux2);
 
LTPColor = StaticVarGet("LastLTPColor");
LTQColor = StaticVarGet("LastLTQColor");
AskColor = StaticVarGet("LastAskColor");
BidColor = StaticVarGet("LastBidColor");
 
 
if(LTPTemp > LTPLastTemp)
{
    LTPColor = colorRed;
}
else if(LTPTemp < LTPLastTemp)
{
    LTPColor = colorGreen;
}
 
if(LTQTemp > LTQLastTemp)
{
    LTQColor = colorRed;
}
else if(LTQTemp < LTQLastTemp)
{
    LTQColor = colorGreen;
}
 
if(AskTemp > AskLastTemp)
{
    AskColor = colorRed;
}
else if(AskTemp < AskLastTemp)
{
    AskColor = colorGreen;
}
 
if(BidTemp > BidLastTemp)
{
    BidColor = colorRed;
}
else if(BidTemp < BidLastTemp)
{
    BidColor = colorGreen;
}
 
StaticVarSet("LastLTPColor", LTPColor);
StaticVarSet("LastLTQColor", LTQColor);
StaticVarSet("LastAskColor", AskColor);
StaticVarSet("LastBidColor", BidColor);
 
StaticVarSet("LTPSave", LTPLastTemp);
StaticVarSet("LTQSave", LTQLastTemp);
StaticVarSet("VolumeTemp", VolumeLastTemp);
StaticVarSet("AskSave", AskLastTemp);
StaticVarSet("BidSave", BidLastTemp);
 
X0 = 20;
Y0 = 10;
 
procedure DrawData (Text, x1, y1, x2, y2, colorFrom, colorTo)
{
    GfxSetOverlayMode(0);
    GfxSelectFont("Verdana", 8.5, 700);
    GfxSetBkMode(1);
    GfxGradientRect(x1, y1, x2, y2, colorFrom, colorTo);
    GfxDrawText(Text, x1, y1, x2, y2, 32|1|4|16);
}
GfxSetTextColor(colorWhite);
 
 
 
NetBuyQtyDisplay = StaticVarGet(("NetBuy_Qty" + Name()));
if(NetBuyQtyDisplay == 0)
{
    BuyAvgPriceDisplay = 0;
}
else
{
    BuyAvgPriceDisplay = (StaticVarGet(("AvgBuy_Price" + Name())))/(NetBuyQtyDisplay/LotQuantity);
}
 
NetSellQtyDisplay = StaticVarGet(("NetSell_Qty" + Name()));
if(NetSellQtyDisplay == 0)
{
    SellAvgPriceDisplay = 0;
}
else
{
    SellAvgPriceDisplay = (StaticVarGet(("AvgSell_Price" + Name())))/(NetSellQtyDisplay/LotQuantity);
}
 
 
 
TempNetQuantity = NetBuyQtyDisplay - NetSellQtyDisplay;
TempNetValue = (SellAvgPriceDisplay * NetSellQtyDisplay) - (BuyAvgPriceDisplay * NetBuyQtyDisplay);
 
TempNetQuantityColor = colorGrey40;
TempNetValueColor = colorGrey40;
 
if(TempNetQuantity > 0)
{
    TempNetQuantityColor = colorGreen;
}
else if(TempNetQuantity < 0)
{
    TempNetQuantityColor = colorRed;
}
 
if(TempNetValue > 0)
{
    TempNetValueColor = colorGreen;
}
else if(TempNetValue < 0)
{
    TempNetValueColor = colorRed;
}
 
DrawData (Name(), X0, Y0, X0+300, Y0+20, colorGrey40, colorGrey40);
DrawData (Date(), X0+305, Y0, X0+470, Y0+20, colorGrey40, colorGrey40);
DrawData ("Open : " + Open, X0+475, Y0, X0+625, Y0+20, colorGrey40, colorGrey40);
DrawData ("Close : " + Close, X0+630, Y0, X0+780, Y0+20, colorGrey40, colorGrey40);
DrawData ("High : " + High, X0+785, Y0, X0+935, Y0+20, colorGrey40, colorGrey40);
DrawData ("Low : " + Low, X0+940, Y0, X0+1090, Y0+20, colorGrey40, colorGrey40);
DrawData ("Volume : " + NumToStr(Volume,1,0), X0+1095, Y0, X0+1300, Y0+20, colorGrey40, colorGrey40);
DrawData ("% Change : " + NumToStr( (((C-O)*100)/O), 1.2, True), X0+1305, Y0, X0+1450, Y0+20, colorGrey40, colorGrey40);
 
if(EnableRealTimeControl == "Yes")
{
    DrawData ("Buy Price : " + TempBuyPrice, X0, Y0+25, X0+150, Y0+45, colorGrey40, colorGrey40);
    DrawData ("Buy Qty : " + TempBuyQty, X0+155 , Y0+25, X0+305, Y0+45, colorGrey40, colorGrey40);
    DrawData ("Sell Price : " + TempSellPrice, X0+310, Y0+25, X0+460, Y0+45, colorGrey40, colorGrey40);
    DrawData ("Sell Qty : " + TempSellQty, X0+465, Y0+25, X0+615, Y0+45, colorGrey40, colorGrey40);
 
    DrawData ("BuyAvgPrice : " + BuyAvgPriceDisplay, X0+620, Y0+25, X0+770, Y0+45, colorGrey40, colorGrey40);
    DrawData ("NetBuyQty : " + NetBuyQtyDisplay, X0+775 , Y0+25, X0+925, Y0+45, colorGrey40, colorGrey40);
    DrawData ("SellAvgPrice : " + SellAvgPriceDisplay, X0+930, Y0+25, X0+1080, Y0+45, colorGrey40, colorGrey40);
    DrawData ("NetSellQty : " + NetSellQtyDisplay, X0+1085, Y0+25, X0+1235, Y0+45, colorGrey40, colorGrey40);
     
    TempNestOredrNo = ClientIdValue + NumToStr(Now(3),1,0) + "00" + StaticVarGet("OrderNo");
     
    DrawData ("NetQty : " + TempNetQuantity, X0+520, Y0+50, X0+670, Y0+70, TempNetQuantityColor, TempNetQuantityColor);
    DrawData ("NetValue : " + TempNetValue, X0+675, Y0+50, X0+900, Y0+70, TempNetValueColor, TempNetValueColor);
    DrawData ("Order No : " + TempNestOredrNo, X0+905, Y0+50, X0+1150, Y0+70, colorGrey40, colorGrey40);
     
    DrawData ("LTP : " + LTPLastTemp, X0, Y0+50, X0+125, Y0+70, LTPColor, LTPColor);
    DrawData ("LTQ : " + NumToStr(LTQLastTemp,1,0), X0+130, Y0+50, X0+255, Y0+70, LTQColor, LTQColor);
    DrawData ("Bid : " + BidLastTemp, X0+260, Y0+50, X0+385, Y0+70, AskColor, AskColor);
    DrawData ("Ask : " + AskLastTemp, X0+390, Y0+50, X0+515, Y0+70, BidColor, BidColor);
}
 
X0 = X2 + 20;
Y0 = Y2 + 100;
 
 
//LBClick = GetCursorMouseButtons() == 9; // Click
LBClickB =IIf(ExRem(Buy11,Sell11),1,0);
MouseX  = Nz(GetCursorXPosition(1));        // 
MouseY  = Nz(GetCursorYPosition(1));        //
 
procedure DrawBut (Text, x1, y1, x2, y2, colorFrom, colorTo)
{
    GfxSetOverlayMode(0);
    GfxSelectFont("Verdana", 9, 700);
    GfxSetBkMode(1);
    GfxGradientRect(x1, y1, x2, y2, colorFrom, colorTo);
    GfxDrawText(Text, x1, y1, x2, y2, 32|1|4|16);
}
GfxSetTextColor(colorWhite);
 
if(EnableRealTimeControl == "Yes")
{
 
    DrawBut ("Buy", X0, Y0, X0+X1, Y0+30, colorGreen, colorGreen);
    CursorInBuyButton = MouseX >= X0 AND MouseX <= X0+X1 AND MouseY >= Y0 AND MouseY <= Y0+30;
    BuyButtonClick = CursorInBuyButton AND LBClickB;
    if (BuyButtonClick=1) 
    { 
        DrawBut("Buy", X0+X1+10, Y0, X0+X1+75, Y0+30,  colorGrey40, colorGrey40);
        TempBuy = LastValue(DateTime());
        StaticVarSet(("BuyIndex" + Name()),  TempBuy);
         
        TempBuyLastQty = StaticVarGet(("NetBuy_Qty" + Name()));
        TempNetBuyQty = (TempBuyLastQty + LotQuantity);
         
        TempBuyLastPrice = StaticVarGet(("AvgBuy_Price" + Name()));
         
        if(BuyPriceSelection == "Bid Price")
        {
            BuyPriceValue = BidLastTemp;
        }
        else if(BuyPriceSelection == "Ask Price")
        {
            BuyPriceValue = AskLastTemp;
        }
        else
        {
            BuyPriceValue = LTPLastTemp;
        }
         
        if(TempBuyLastQty == 0)
        {
            TempAvgBuyPrice = BuyPriceValue;
        }
        else
        {
            TempAvgBuyPrice = (BuyPriceValue + TempBuyLastPrice);
        }
         
        StaticVarSet(("Buy_Price" + Name()),  BuyPriceValue);
        StaticVarSet(("Buy_Qty" + Name()),  LotQuantity);
         
        StaticVarSet(("AvgBuy_Price" + Name()),  TempAvgBuyPrice);
        StaticVarSet(("NetBuy_Qty" + Name()),  TempNetBuyQty);
         
        if(EnableAutoTrade == "Yes" && EnableRealTimeControl == "Yes")
        {
            LastOrderNo = StaticVarGet("OrderNo");
            LastOrderNo++;
            StaticVarSet("OrderNo", LastOrderNo);
            TempOrderNo = ClientIdValue + NumToStr(Now(3),1,0) + "00" + LastOrderNo;
            TempName = Name() + "-EQ";
            nestplus.PlaceOrder("BUY", TempOrderNo, "NSE", TempName, "DAY", OrderType, LotQuantity, BuyPriceValue, 0.0, 0, ProductType, ClientIdValue);
        }   
    }
 	 LBClickS=IIf(ExRem(Sell11,Buy11),1,0);
    DrawBut ("Sell", X0, Y0+40, X0+X1, Y0+70, colorRed, colorRed);
    CursorInSellButton = MouseX >= X0 AND MouseX <= X0+X1 AND MouseY >= Y0+40 AND MouseY <= Y0+70;
    SellButtonClick = CursorInSellButton AND LBClickS;
    if (SellButtonClick=1) 
    { 
        DrawBut("Sell", X0+X1+10, Y0, X0+X1+75, Y0+30,  colorGrey40, colorGrey40);
        TempSell = LastValue(DateTime());
        StaticVarSet(("SellIndex" + Name()),  TempSell);
         
        TempSellLastQty = StaticVarGet(("NetSell_Qty" + Name()));
        TempNetSellQty = (TempSellLastQty + LotQuantity);
         
        TempSellLastPrice = StaticVarGet(("AvgSell_Price" + Name()));
         
        if(SellPriceSelection == "Ask Price")
        {
            SellPriceValue = AskLastTemp;
        }
        else if(SellPriceSelection == "Bid Price")
        {
            SellPriceValue = BidLastTemp;
        }
        else
        {
            SellPriceValue = LTPLastTemp;
        }
         
        if(TempSellLastQty == 0)
        {
            TempAvgSellPrice = SellPriceValue;
        }
        else
        {
            TempAvgSellPrice = (SellPriceValue + TempSellLastPrice);
        }
         
        StaticVarSet(("Sell_Price" + Name()),  SellPriceValue); 
        StaticVarSet(("Sell_Qty" + Name()),  LotQuantity);
         
        StaticVarSet(("AvgSell_Price" + Name()),  TempAvgSellPrice);    
        StaticVarSet(("NetSell_Qty" + Name()),  TempNetSellQty);
         
        if(EnableAutoTrade == "Yes" && EnableRealTimeControl == "Yes")
        {
            LastOrderNo = StaticVarGet("OrderNo");
            LastOrderNo++;
            StaticVarSet("OrderNo", LastOrderNo);
            TempOrderNo = ClientIdValue + NumToStr(Now(3),1,0) + "00" + LastOrderNo;
            TempName = Name() + "-EQ";
            nestplus.PlaceOrder("SELL", TempOrderNo, "NSE", TempName, "DAY", OrderType, LotQuantity, SellPriceValue, 0.0, 0, ProductType, ClientIdValue);
        }   
    }
 
    DrawBut ("Clear Data", X0, Y0+80, X0+X1, Y0+110, colorGrey40, colorGrey40);
    CursorInClearButton = MouseX >= X0 AND MouseX <= X0+X1 AND MouseY >= Y0+80 AND MouseY <= Y0+110;
    ClearButtonClick = CursorInClearButton AND LBClick;
    if (ClearButtonClick) 
    { 
        DrawBut("Clear", X0+X1+10, Y0, X0+X1+75, Y0+30,  colorGrey40, colorGrey40);
        StaticVarRemove(("BuyIndex" + Name()));
        StaticVarRemove(("SellIndex" + Name()));
        StaticVarSetText("firstflag"+Name(), "");
    }
 
    BuyTempData = StaticVarGet(("BuyIndex" + Name()));
    SellTempData = StaticVarGet(("SellIndex" + Name()));
 
    //Buy = IIf(DateTime() == BuyTempData, 1, 0);
    //Sell = IIf(DateTime() == SellTempData, 1, 0);
 
    Buyshape = Buy * shapeUpArrow;
    SellShape = Sell * shapeDownArrow;
    PlotShapes( Buyshape, colorBrightGreen, 0, Low );
    PlotShapes( SellShape, colorRed, 0, High );
    GraphXSpace = 5;
}
 
_SECTION_END();
 
_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
//_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} \nOpen : %g, Close : %g (%.1f%%) \nLow : %g, High : %g (%.1f%%) \nVolume : " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, C,(((C-O)*100)/O), L, H, (((H-L)*100)/L) ));
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
 
Last edited:

Similar threads