// Downloaded From https://www.WiseStockTrader.com
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
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);
		
		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);
		}	
	}

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

_SECTION_BEGIN("MA");
P = ParamField("Price field",-1);
Periods = Param("Periods", 10, 2, 200, 1 );
Plot( MA( P, Periods ), /*_DEFAULT_NAME()*/ "", ParamColor( "Color", colorGreen ), ParamStyle("Style", styleLine | styleNoLabel ) | styleNoRescale ); 
_SECTION_END();

_SECTION_BEGIN("EMA");
P = ParamField("Price field",-1);
Periods = Param("Periods", 30, 2, 300, 1, 10 );
Plot( EMA( P, Periods ), /*_DEFAULT_NAME()*/ "", ParamColor( "Color", colorOrange ), ParamStyle("Style", styleLine | styleNoLabel) | styleNoRescale ); 
_SECTION_END();

_SECTION_BEGIN("Long MA");
P = ParamField("Price field",-1);
Periods = Param("Periods", 45, 2, 400, 1 );
Plot( MA( P, Periods ), /*_DEFAULT_NAME()*/ "", ParamColor( "Color", colorYellow ), ParamStyle("Style", styleLine | styleNoLabel ) | styleNoRescale ); 
_SECTION_END();

_SECTION_BEGIN("BBands");
P = ParamField("Price field",-1);
Periods = Param("Periods", 15, 2, 100, 1 );
Width = Param("Width", 2, 0, 10, 0.05 );
Color = ParamColor("Color", colorLightGrey );
Color = ColorBlend( Color,  GetChartBkColor(), 0.5 );
Style = ParamStyle("Style", styleLine | styleNoLabel ) | styleNoRescale;;
Plot( bbt = BBandTop( P, Periods, Width ), /*"BBTop" + _PARAM_VALUES()*/ "", Color, Style ); 
Plot( bbb = BBandBot( P, Periods, Width ), /*"BBBot" + _PARAM_VALUES()*/ "", Color, Style ); 
PlotOHLC( bbt, bbt, bbb, bbb, "", ColorBlend( Color, GetChartBkColor(), 0.7 ), styleNoLabel | styleCloud | styleNoRescale, Null, Null, Null, -1 );
_SECTION_END();

_SECTION_BEGIN("Volume");
Color = ParamColor("Color", ColorRGB( 128, 128, 192 ) );
Plot( Volume, /*_DEFAULT_NAME()*/"", ColorBlend( Color, GetChartBkColor(), 0.2  ), styleNoTitle | ParamStyle( "Style", styleHistogram | styleOwnScale | styleThick | styleNoLabel, maskHistogram  ), 2 );
_SECTION_END();