// Downloaded From https://www.WiseStockTrader.com _SECTION_BEGIN("NICK MA Swing"); EnableTextOutput(False); SetChartOptions(0, chartShowDates); RequestTimedRefresh(1); Filename = StrLeft(_DEFAULT_NAME(),StrLen(_DEFAULT_NAME())-2); _N(Title = Filename + StrFormat(" - {{DATE}} \nOpen %g, Hi %g, Lo %g, Close %g (%.1f%%) Vol " + " {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 )) )); VarPfx = "Btn1"; // some var that reflects the trading file // #### Parameters ######################################################################################################## AutoTrade = ParamToggle("Auto trade", "Off|Running"); Contracts = Param("Num contracts", 1, 1, 1000, 1); typeOrder = ParamList("Order type", "MKT,STP"); BuyOrder = ParamTrigger("Place Buy order","Buy"); SellOrder = ParamTrigger("Place Sell order","Sell"); CloseAll = ParamTrigger("Close all positions","Close all"); CancelAll = ParamTrigger("Cancel all orders","Cancel all"); Reset = ParamTrigger("Reset", "Reset"); SetBarsRequired(200,0); GraphXSpace = 5; SetChartOptions(0,chartShowArrows|chartShowDates); k = Optimize("K",Param("K",2,0.25,5,0.25),0.25,5,0.25); Per= Optimize("atr",Param("atr",20,3,20,1),3,20,1); HACLOSE=(O+H+L+C)/4; HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); PlotOHLC( HaOpen, HaHigh, HaLow, HaClose, "" + Name(), colorBlack, styleCandle | styleNoLabel ); j=Haclose; //======================================================================================================================= //=========================Indicator============================================================================================== f=ATR(15); rfsctor = WMA(H-L, Per); revers = k * rfsctor; Trend = 1; NW[0] = 0; NW[BarCount-1] = Null; for(i = 1; i < BarCount-1; i++) { if(Trend[i-1] == 1) { if(j[i] < NW[i-1]) { Trend[i] = -1; NW[i] = j[i] + Revers[i]; } else { Trend[i] = 1; if((j[i] - Revers[i]) > NW[i-1]) { NW[i] = j[i] - Revers[i]; } else { NW[i] = NW[i-1]; } } } if(Trend[i-1] == -1) { if(j[i] > NW[i-1]) { Trend[i] = 1; NW[i] = j[i] - Revers[i]; } else { Trend[i] = -1; if((j[i] + Revers[i]) < NW[i-1]) { NW[i] = j[i] + Revers[i]; } else { NW[i] = NW[i-1]; } } } } //===============system================ Plot(NW, "", IIf(Trend == 1, 27, 4), 4); Buy=NWHACLOSE; SellPrice=ValueWhen(Sell,C,1); BuyPrice=ValueWhen(Buy,C,1); Buy=ExRem(Buy,Sell); Sell=ExRem(Sell,Buy ); Short=Sell; Cover=Buy; NMAB= NWHACLOSE; NMA_status= WriteIf(NMAB, "BUY MODE", WriteIf(NMAS, "SELL MODE", "NEUTRAL")); NMAS_Col=IIf(NMAB, colorGreen, IIf(NMAS, colorRed, colorLightGrey)); Filter=1; AddColumn( NW[BarCount-1], "SAR", 1.2 ); AddColumn( HACLOSE, "HA Close", 1.2 ); AddColumn( C, "Close", 1.2 ); AddTextColumn(NMA_status, "MODE", 1, colorWhite, NMAS_Col); AddColumn( DateTime(), "Date / Time", formatDateTime ); // #### Static vars reset ################################################################################################## if( reset OR Nz(StaticVarGet(varPfx + "Init") == False) ) { StaticVarSetText(varPfx + "orderID", ""); StaticVarSetText(VarPfx + "lastTrade", ""); StaticVarSet(VarPfx + "numPositions", 0); _TRACE("# init, " + NumToStr(StaticVarGet(varPfx + "num"), 1.0)); } // #### functions ########################################################################################################### function fSayOnce( text ) { if( StaticVarGetText(VarPfx + "lastsaidtext") != text ) { Say( text ); StaticVarSetText(VarPfx + "lastsaidtext", text ); if(DebugOn) _TRACE("#, SayOnce Text =" + text + "\n"); } } // #### Trading section ######################################################################################################## if(autotrade) { ibc = GetTradingInterface("IB"); ConnectedStatus = ibc.IsConnected(); // get the connection status, 2 is OK // this is where the trade processing is done if( ConnectedStatus == 2 OR ConnectedStatus == 3) // connected to TWS with no error messages { OrderID = StaticVarGetText(VarPfx + "OrderID"); OrderStatus = ibc.GetStatus( OrderID, True ); oldNumPositions = StaticVarGet(VarPfx + "numPositions"); numPositions = ibc.GetPositionSize(Name()); StaticVarSet(VarPfx + "numPositions", numPositions ); LastTrade = StaticVarGetText(VarPfx + "lastTrade"); _TRACE("# buy, positions = " + NumToStr(numPositions, 1.0) + ", last trade = " + LastTrade + ", OID = " + OrderID); if( ( LastTrade == "Buy" AND numPositions > oldNumPositions ) OR ( LastTrade == "Sell" AND numPositions < oldNumPositions ) OR ( LastTrade == "Close" AND numPositions == 0) ) { fSayOnce("Filled"); OrderID = StaticVarSetText(VarPfx + OrderID, ""); } else if (OrderStatus == "Cancelled") OrderID = StaticVarSetText(VarPfx + OrderID, ""); if( BuyOrder ) { fSayOnce("buy"); OrderID = ibc.PlaceOrder( Name(), "Buy", Contracts, typeOrder, 0, LastValue(C), "GTC", True); StaticVarSetText(VarPfx + "OrderID", OrderID); StaticVarSetText(VarPfx + "lastTrade", "Buy"); _TRACE("# buy, positions = " + NumToStr(numPositions, 1.0)); } if( SellOrder ) { fSayOnce("sell"); OrderID = ibc.PlaceOrder( Name(), "Sell", Contracts, typeOrder , 0, LastValue(C), "GTC", True); StaticVarSetText(VarPfx + "OrderID", OrderID); StaticVarSetText(VarPfx + "lastTrade", "Sell"); _TRACE("# sell, positions = " + NumToStr(numPositions, 1.0)); } else if( CloseAll ) { fSayOnce("close all"); ibc.CancelAllPendingOrders( ); ibc.CloseAllOpenPositions(); StaticVarSetText(VarPfx + "lastTrade", "Close"); _TRACE("# close, positions = " + NumToStr(numPositions, 1.0)); } else if( CancelAll ) { fSayOnce("cancel all"); ibc.CancelAllPendingOrders( ); _TRACE("# cancel, "); } LastTWSMsg = ibc.getLastError( 0 ); // the following will display in the interprettion window printf("Order type: " + LastTrade + "\nOrder Status: " + OrderStatus + "\nOrder ID: " + StaticVarGetText(VarPfx + "OrderID") + "\nNum positions: " + NumToStr(ibc.GetPositionSize( Name() ),1.0,False) + "\nLast TWS Msg: " + LastTWSMsg ); } else // ConnectedStatus == 0 OR ConnectedStatus == 1, lost connection { // handle commection errors if(ConnectedStatus == 0) stat = "Not Connected."; else if(ConnectedStatus == 1) stat = "Lost Connection."; SetChartBkColor( colorYellow); // the following will display in the interprettion window printf("\nTWS Status: " + stat + "\n"); } } // end auto trading loop else { SetChartBkColor( colorTan); // the following will display in the interprettion window printf("\n1. Autotrading is turned off\n" + "2. TWS not started." ); } _SECTION_END(); //=================TITLE================================================================================================ _SECTION_BEGIN("Title"); if( Status("action") == actionIndicator ) ( Title = EncodeColor(colorWhite)+ "NICK MA Swing System" + " - " + Name() + " - " + EncodeColor(colorRed)+ Interval(2) + EncodeColor(colorWhite) + " - " + Date() +" - "+"\n" +EncodeColor(colorRed) +"Op-"+O+" "+"Hi-"+H+" "+"Lo-"+L+" "+ "Cl-"+C+" "+ "Vol= "+ WriteVal(V)+"\n"+ EncodeColor(colorLime)+ WriteIf (Buy , " GO LONG / Reverse Signal at "+C+" ","")+ WriteIf (Sell , " EXIT LONG / Reverse Signal at "+C+" ","")+"\n"+EncodeColor(colorWhite)+ WriteIf(Sell , "Total Profit/Loss for the Last Trade Rs."+(C-BuyPrice)+"","")+ WriteIf(Buy , "Total Profit/Loss for the Last trade Rs."+(SellPrice-C)+"","")); //WriteIf(Long AND NOT Buy, "Trade : Long - Entry price Rs."+(BuyPrice),"")+ //WriteIf(shrt AND NOT Sell, "Trade : Short - Entry price Rs."+(SellPrice),"")+"\n"+ //WriteIf(Long AND NOT Buy, "Current Profit/Loss Rs."+(C-BuyPrice)+"","")+ //WriteIf(shrt AND NOT Sell, "Current Profit/Loss Rs."+(SellPrice-C)+"","")); 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); for(i=BarCount-1;i>1;i--) { if(Buy[i] == 1) { entry = H[i]; sig = "BUY"; sl = Ref(NW,-1); tar1 = entry + (entry * .0050); tar2 = entry + (entry * .0092); tar3 = entry + (entry * .0179); bars = i; i = 0; } if(Sell[i] == 1) { sig = "SELL"; entry = L[i]; sl = Ref(NW,-1); tar1 = entry - (entry * .0050); tar2 = entry - (entry * .0112); tar3 = entry - (entry * .0212); bars = i; i = 0; } } Offset = 20; Clr = IIf(sig == "BUY", colorLime, colorRed); ssl = IIf(bars == BarCount-1, NW[BarCount-1], Ref(NW, -1)); sl = ssl[BarCount-1]; Plot(LineArray(bars-Offset, tar1, BarCount, tar1,1), "", Clr, styleLine|styleDots, Null, Null, Offset); Plot(LineArray(bars-Offset, tar2, BarCount, tar2,1), "", Clr, styleLine|styleDots, Null, Null, Offset); Plot(LineArray(bars-Offset, tar3, BarCount, tar3,1), "", Clr, styleLine|styleDots, Null, Null, Offset); messageboard = ParamToggle("Message Board","Show|Hide",1); if (messageboard == 1 ) { GfxSelectFont( "Tahoma", 13, 100 ); GfxSetBkMode( 1 ); GfxSetTextColor( colorWhite ); if ( sig =="BUY") { GfxSelectSolidBrush( colorBlue ); // this is the box background color } else { GfxSelectSolidBrush( colorRed ); // this is the box background color } pxHeight = Status( "pxchartheight" ) ; xx = Status( "pxchartwidth"); Left = 1100; width = 310; x = 5; x2 = 290; y = pxHeight; GfxSelectPen( colorGreen, 1); // broader color GfxRoundRect( x, y - 98, x2, y , 7, 7 ) ; GfxTextOut( ( "NMA Trading System"),13,y-100); GfxTextOut( (" "),27,y-100); GfxTextOut( ("Last " + sig + " Signal came " + (BarCount-bars-1) * Interval()/60 + " mins ago"), 13, y-80) ; // The text format location GfxTextOut( ("" + WriteIf(sig =="BUY",sig + " @ ",sig + " @") + " : " + entry), 13, y-60); GfxTextOut( ("Trailing SL : " + sl + " (" + WriteVal(IIf(sig == "SELL",entry-sl,sl-entry), 2.2) + ")"), 13, y-40); /*GfxTextOut( ("TGT:1 : " + tar1), 13, y -80); GfxTextOut( ("TGT:2 : " + tar2), 13,y-60); GfxTextOut( ("TGT:3 : " + tar3), 13,y-40);*/ GfxTextOut( ("Current P/L : " + WriteVal(IIf(sig == "BUY",(C-entry),(entry-C)),2.2)), 13, y-22); } _SECTION_END(); _SECTION_BEGIN("Magfied Market Price"); //Magfied Market Price FS=Param("Font Size",30,11,100,1); GfxSelectFont("Times New Roman", FS, 700, True ); GfxSetBkMode( colorWhite ); GfxSetTextColor( ParamColor("Color",colorGreen) ); Hor=Param("Horizontal Position",800,1,1200,1); Ver=Param("Vertical Position",12,1,830,1); GfxTextOut(""+C, Hor , Ver ); YC=TimeFrameGetPrice("C",inDaily,-1); DD=Prec(C-YC,2); xx=Prec((DD/YC)*100,2); GfxSelectFont("Times New Roman", 11, 700, True ); GfxSetBkMode( colorBlack ); GfxSetTextColor(ParamColor("Color",colorYellow) ); GfxTextOut(""+DD+" ("+xx+"%)", Hor , Ver+45 ); _SECTION_END(); _SECTION_BEGIN("Time Left"); function GetSecondNum() { Time = Now( 4 ); Seconds = int( Time % 100 ); Minutes = int( Time / 100 % 100 ); Hours = int( Time / 10000 % 100 ); SecondNum = int( Hours * 60 * 60 + Minutes * 60 + Seconds ); return SecondNum; } RequestTimedRefresh( 1 ); TimeFrame = Interval(); SecNumber = GetSecondNum(); Newperiod = SecNumber % TimeFrame == 0; SecsLeft = SecNumber - int( SecNumber / TimeFrame ) * TimeFrame; SecsToGo = TimeFrame - SecsLeft; x=Param("xposn",50,0,1000,1); y=Param("yposn",350,0,1000,1); GfxSelectSolidBrush( ColorRGB( 230, 230, 230 ) ); GfxSelectPen( ColorRGB( 230, 230, 230 ), 2 ); if ( NewPeriod ) { GfxSelectSolidBrush( colorYellow ); GfxSelectPen( colorYellow, 2 ); Say( "New period" ); } //GfxRoundRect( x+45, y+40, x-3, y-2, 0, 0 ); //GfxSetBkMode(1); GfxSelectFont( "Arial", 14, 700, False ); GfxSetTextColor( colorRed ); GfxTextOut( "Time Left :"+SecsToGo+"", x, y ); _SECTION_END();