Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Version( 6.3 );
- /**** Options Pricing Module **********************************/
- function OptionPrice( isCallFlag, S, X , T, r, iv, d )
- {
- local d1, d2, result;
- d1 = ( log( S / X ) + ( r - d + ( iv * iv * 0.5 ) ) * T ) / ( iv * sqrt( T ) );
- d2 = d1 - iv * sqrt( T );
- if( isCallFlag )
- result = ( ( S * exp( -d * T ) * NormDist( d1 ) ) - ( X * exp( -r * T ) * NormDist( d2 ) ) );
- else
- result = ( ( X * exp( -r * T ) * NormDist( -d2 ) ) - ( S * NormDist( -d1 ) * exp( -d * T ) ) );
- return result;
- }
- function OptionDelta( isCallFlag, S, X, T, r, iv, d )
- {
- local d1, d2, result;
- d1 = ( log( S / X ) + ( r - d + ( iv * iv * 0.5 ) ) * T ) / ( iv * sqrt( T ) );
- d2 = d1 - iv * sqrt( T );
- if( isCallFlag )
- result = NormDist( d1 );
- else
- result = NormDist( d1 ) - 1;
- return result;
- }
- function OptionGamma( S, X, T, r, iv, d )
- {
- local d1, d2, nd1, Pi, result;
- Pi = 3.14159265358979;
- d1 = ( log( S / X ) + ( r - d + ( iv * iv * 0.5 ) ) * T ) / ( iv * sqrt( T ) );
- d2 = d1 - iv * sqrt( T );
- nd1 = exp( -( d1 * d1 ) / 2 ) / sqrt( 2 * Pi );
- result = nd1 / ( S * ( iv * sqrt( T ) ) );
- return result;
- }
- function OptionTheta( isCallFlag, S, X, T, r, iv, d )
- {
- local d1, d2, nd1, nd2, Pi, theta, result;
- Pi = 3.14159265358979;
- d1 = ( log( S / X ) + ( r - d + ( iv * iv * 0.5 ) ) * T ) / ( iv * sqrt( T ) );
- d2 = d1 - iv * sqrt( T );
- nd1 = exp( -( d1 * d1 ) / 2 ) / sqrt( 2 * Pi );
- nd2 = d1 - iv * sqrt( T );
- if( isCallFlag )
- {
- theta = - ( ( ( S * iv * nd1 ) / ( 2 * sqrt( T ) ) ) - ( r * X * exp( -r * T ) * nd2 ) ) ;
- }
- else
- {
- theta = - ( ( ( S * iv * nd1 ) / ( 2 * sqrt( T ) ) ) + ( r * X * exp( -r * T ) * ( 1 - nd2 ) ) ) ;
- }
- /*if (T < 1 / 365)
- result = theta * T ;
- else
- result = theta / 365;
- */
- result = IIf( T < 1 / 365, theta * T, theta / 365 );
- return result;
- }
- function OptionVega( S, X, T, r, iv, d )
- {
- local d1, d2, nd1, Pi, result;
- Pi = 3.14159265358979;
- d1 = ( log( S / X ) + ( r - d + ( iv * iv * 0.5 ) ) * T ) / ( iv * sqrt( T ) );
- d2 = d1 - iv * sqrt( T );
- nd1 = exp( -( d1 * d1 ) / 2 ) / sqrt( 2 * Pi );
- result = 0.01 * S * sqrt( T ) * nd1;
- return result;
- }
- function OptionRho( isCallFlag, S, X, T, r, iv, d )
- {
- local d1, d2, nd1, Pi, result;
- Pi = 3.14159265358979;
- d1 = ( log( S / X ) + ( r - d + ( iv * iv * 0.5 ) ) * T ) / ( iv * sqrt( T ) );
- d2 = d1 - iv * sqrt( T );
- nd1 = exp( -( d1 * d1 ) / 2 ) / sqrt( 2 * Pi );
- if( iscallFlag )
- result = 0.01 * X * T * exp( -r * T ) * NormDist( d2 );
- else
- result = - 0.01 * X * T * exp( -r * T ) * ( 1 - NormDist( d2 ) );
- }
- function OptionIV( isCallFlag, S, X, T, r, mp, d )
- {
- local hval, lval, result;
- hval = 3;
- lval = 0;
- if( isCallFlag )
- {
- do
- {
- if( OptionPrice( isCallFlag, S, X, T, r, ( hval + lval ) / 2 , d ) > mp )
- hval = ( hval + lval ) / 2;
- else
- lval = ( hval + lval ) / 2;
- }
- while( ( hval - lval ) > 0.0001 );
- }
- else
- {
- do
- {
- if( OptionPrice( isCallFlag, S, X, T, r, ( hval + lval ) / 2 , d ) > mp )
- hval = ( hval + lval ) / 2;
- else
- lval = ( hval + lval ) / 2;
- }
- while( ( hval - lval ) > 0.0001 ) ;
- }
- result = ( hval + lval ) / 2;
- return result;
- }
- function OptionProb( isCallFlag, x, s , t, iv )
- {
- if( isCallFlag )
- result = Prec( 1 - NormDist( ( ln( x / s ) / ( iv * sqrt( t / 365 ) ) ) ), 3 );
- else
- result = Prec( NormDist( ( ln( x / s ) / ( iv * sqrt( t / 365 ) ) ) ), 3 );
- return result;
- }
- /**************** End of Options Pricing *****************************************/
- /***************Options Symbols *******************************/
- global vDataProviderList;
- vDataProviderList = "FlashTrader|TrueData|AccelPix|AmiFeed|AmiLiveData|AmiFeeder|BestRTNex|NSEEOD|GDFL";
- function getDateString( vdp, vdt, vWflag )
- {
- vy = DateTimeFormat( "%y", vdt );
- vd = DateTimeFormat( "%d", vdt );
- vm1 = DateTimeFormat( "%m", vdt );
- vm2 = StrToUpper( DateTimeFormat( "%b", vdt ) );
- vm = "";
- vdate = vd + "-" + DateTimeFormat( "%b", vdt ) + "-" + DateTimeFormat( "%Y", vdt );
- vdateVbiz = vd + DateTimeFormat( "%b", vdt ) + DateTimeFormat( "%Y", vdt );
- result = "Null";
- if( StrMatch( "FlashTrader", vdp ) )
- {
- if( StrToNum( vm1 ) <= 9 ) vm = StrRight( vm1, 1 );
- else vm = StrLeft( vm2, 1 );
- if( vWflag ) result = vy + vm + vd;
- else result = vy + vm2;
- }
- if( StrMatch( "TrueData", vdp ) )
- {
- if( StrToNum( vm1 ) <= 9 ) vm = StrRight( vm1, 1 );
- else vm = StrLeft( vm2, 1 );
- if( vWflag ) result = vy + vm + vd;
- else result = vy + vm2;
- }
- else
- if( StrMatch( "AccelPix", vdp ) )
- {
- if( vWFlag ) result = vd + vm2 + vy;
- else result = vm2 + vy;
- }
- else
- if( StrMatch( "AmiFeed", vdp ) )
- {
- if( vWFlag ) result = "WK";
- else result = "";
- }
- else
- if( StrMatch( "NSEEOD", vdp ) )
- {
- result = vdate;
- }
- else
- if( StrMatch( "VBIZ", vdp ) )
- {
- if( vWFlag ) result = vdatevbiz;
- else result = "-I";
- }
- else
- if( StrMatch( "GDFL", vdp ) )
- {
- result = vd + vm2 + vy;
- }
- else
- if( StrMatch( "BestRTNex", vdp ) )
- {
- result = vd + vm2 + DateTimeFormat( "%Y", vdt );
- }
- return result;
- }
- function getoptionsymbol( vdp, vdt, vWFlag, vInst, vstrike, vCP )
- {
- if( StrMatch( "TrueData", vdp ) )
- result = vInst + getDateString( vdp, vdt, vWFlag ) + vstrike + vCP;
- else
- if( StrMatch( "FlashTrader", vdp ) )
- result = vInst + getDateString( vdp, vdt, vWFlag ) + vstrike + vCP;
- else
- if( StrMatch( "AccelPix", vdp ) )
- result = vInst + vstrike + getDateString( vdp, vdt, vWFlag ) + vCP ;
- else
- if( StrMatch( "AmiFeed", vdp ) )
- result = vInst + getDateString( vdp, vdt, vWFlag ) + vstrike + vCP;
- else
- if( StrMatch( "NSEEOD", vdp ) )
- result = vInst + "_" + getDateString( vdp, vdt, vWFlag ) + "_" + vstrike + "-" + vCP;
- else
- if( StrMatch( "BestRTNex", vdp ) )
- result = vInst + "_" + vstrike + vCP + "-" + getDateString( vdp, vdt, vWFlag );
- else
- if( StrMatch( "AmiLiveData", vdp ) )
- result = vInst + vCP + vstrike ;
- else
- if( StrMatch( "AmiFeeder", vdp ) OR StrMatch( "ValueRT", vdp ) )
- result = vInst + WriteIf( vWFlag, "WK", "" ) + vstrike + StrLeft( vCP, 1 ) + "-I" ;
- else
- if( StrMatch( "GDFL", vdp ) )
- result = vInst + getDateString( vdp, vdt, vWFlag ) + vstrike + vCP + ".NFO" ;
- return result;
- }
- function getUnderlyingSymbol( vFSymbol )
- {
- vUSymbol = StrReplace( vFSymbol, "-III.NFO", "" );
- vUSymbol = StrReplace( vUSymbol, "JAN", "" );
- vUSymbol = StrReplace( vUSymbol, "FEB", "" );
- vUSymbol = StrReplace( vUSymbol, "MAR", "" );
- vUSymbol = StrReplace( vUSymbol, "APR", "" );
- vUSymbol = StrReplace( vUSymbol, "MAY", "" );
- vUSymbol = StrReplace( vUSymbol, "JUN", "" );
- vUSymbol = StrReplace( vUSymbol, "JUL", "" );
- vUSymbol = StrReplace( vUSymbol, "AUG", "" );
- vUSymbol = StrReplace( vUSymbol, "SEP", "" );
- vUSymbol = StrReplace( vUSymbol, "OCT", "" );
- vUSymbol = StrReplace( vUSymbol, "NOV", "" );
- vUSymbol = StrReplace( vUSymbol, "DEC", "" );
- vUSymbol = StrReplace( vUSymbol, "FUT", "" );
- vUSymbol = StrReplace( vUSymbol, "23", "" );
- vUSymbol = StrReplace( vUSymbol, "22", "" );
- vUSymbol = StrReplace( vUSymbol, "-II.NFO", "" );
- vUSymbol = StrReplace( vUSymbol, "-I.NFO", "" );
- vUSymbol = StrReplace( vUSymbol, "-FUT", "" );
- vUSymbol = StrReplace( vUSymbol, "-III", "" );
- vUSymbol = StrReplace( vUSymbol, "-II", "" );
- vUSymbol = StrReplace( vUSymbol, "-I", "" );
- vUSymbol = StrReplace( vUSymbol, "_III", "" );
- vUSymbol = StrReplace( vUSymbol, "_II", "" );
- vUSymbol = StrReplace( vUSymbol, "_I", "" );
- vUSymbol = StrReplace( vUSymbol, "-F1", "" );
- vUSymbol = StrReplace( vUSymbol, "-1", "" );
- vUSymbol = StrReplace( vUSymbol, "-2", "" );
- vUSymbol = StrReplace( vUSymbol, "-3", "" );
- vUSymbol = StrReplace( vUSymbol, "-4", "" );
- vUSymbol = StrReplace( vUSymbol, "-5", "" );
- vUSymbol = StrReplace( vUSymbol, "-6", "" );
- vUSymbol = StrReplace( vUSymbol, "-7", "" );
- vUSymbol = StrReplace( vUSymbol, "-8", "" );
- vUSymbol = StrReplace( vUSymbol, "-9", "" );
- return vUSymbol;
- }
- /***********************End of OptionsSymbols****************************/
- //Options Chain
- SetChartOptions( 1, chartDisableTooltips | chartHideQuoteMarker );
- GfxSetOverlayMode( 2 ); //No Axis
- SetChartBkColor( colorWhite );
- GfxSetBkMode( 1 );
- pxheight = Status( "pxheight" );
- pxwidth = Status( "pxwidth" );
- pxcenter = pxwidth / 2;
- vCFW = pxwidth / 1829 ;
- vCFH = pxheight / 807 ;
- vCFW = Param("Adjust Width",.71,.5,1.5,.01) ;
- vCFH = Param("Adjust Height",.9,.5,1.5,.01) ;
- CellHeight = 21 * vCFH;
- CellWidth = 65 * vCFW;
- vRowOffset = 4;
- vNumberofCols = 24;
- vCellWidth = 0;
- vCCellWidth = 0;
- vCellWidth[0] = 100 * vCFW; //Blank column
- vCellWidth[1] = 70 * vCFW; //Straddle Price
- vCellWidth[2] = 50 * vCFW; //IV
- vCellWidth[3] = 60 * vCFW; //Vega
- vCellWidth[4] = 60 * vCFW; //Theta
- vCellWidth[5] = 50 * vCFW; //Delta
- vCellWidth[6] = 65 * vCFW; //TVWAP
- vCellWidth[7] = 65 * vCFW; //VWAP
- vCellWidth[8] = 70 * vCFW; //OI Chng%
- vCellWidth[9] = 90 * vCFW; //OI Chng
- vCellWidth[10] = 95 * vCFW; //OI
- vCellWidth[11] = 65 * vCFW; //LTP
- vCellWidth[12] = 65 * vCFW; //Strike
- vCellWidth[13] = 65 * vCFW; //LTP
- vCellWidth[14] = 90 * vCFW; //OI
- vCellWidth[15] = 95 * vCFW; //OI Chg
- vCellWidth[16] = 70 * vCFW; //OI Chg%
- vCellWidth[17] = 65 * vCFW; //VWAP
- vCellWidth[18] = 65 * vCFW; //TVWAP
- vCellWidth[19] = 50 * vCFW; //Delta
- vCellWidth[20] = 60 * vCFW; //Theta
- vCellWidth[21] = 60 * vCFW; //Theta
- vCellWidth[22] = 60 * vCFW; //Vega
- vCellWidth[23] = 70 * vCFW; //Implied Futures
- vCellWidth[24] = 55 * vCFW; //PCR
- for( i = 1; i <= vNumberOfCols ; i++ )
- {
- vCCellWidth[i] = vCCellWidth[i - 1] + vCellWidth[i - 1];
- }
- function PrintInCell( string, row, Col, vformat )
- {
- GfxDrawText( string, vCCellWidth[Col] , ( row + vRowOffset ) * CellHeight , vCCellWidth[Col] + vCellWidth[Col], ( row + 1 + vRowOffset ) * CellHeight, vformat );
- }
- function FillCell( row, Col, vColor )
- {
- GfxFillSolidRect( vCCellWidth[Col] , ( row + vRowOffset ) * CellHeight , vCCellWidth[Col] + vCellWidth[Col], ( row + 1 + vRowOffset ) * CellHeight, vColor );
- }
- vRCellWidth = 255 * vCFW;
- vRcellheight = 50 * vCFH;
- function PrintInRibbon( string, row, Col , vf )
- {
- GfxDrawText( string, Col * vRCellWidth, row * vRCellHeight, ( Col + 1 ) * vRCellWidth, ( row + 1 ) * vRCellHeight, vf );
- }
- vABVersion = 0;
- vImpliedFutures = 1;
- //Parameters
- vDataProvider = ParamList( "DataProvider", vDataproviderList, 0 );
- vNumberofStrikes = Param( "# of Strikes +/- ATM", 10, 5, 15, 1 );
- vStrikeRange = Param( "Strike Multiple", 50, 1, 10000, 1 );
- vExpiryDate = ParamDate( "Expiry Date", "2020-01-01", 2 );
- vWeekly = ParamToggle( "Weekly/Monthly", "Monthly|Weekly", 0 );
- //vFNOSuffix = ParamStr("FNO Symbol Suffix" ,"-I");
- vATMStrikeColor = ParamColor( "ATM Strike Color", colorRose );
- vFontWeight = Param( "Font Weight", 44, 10, 100, 1 );
- //Variables
- //vSymbol = StrReplace(Name(),vFNOSuffix,"");
- vSymbol = getUnderlyingSymbol( Name() );
- _TRACE( vSymbol );
- vCallStrike = vPutStrike = "";
- vATMStrike = 0;
- vTotalCallOI = 0;
- vTotalPutOI = 0;
- vDTE = 0;
- vUnderlyingPrice = 0;
- Bars_so_far_today = 1 + BarsSince( Day() != Ref( Day(), -1 ) );
- StartBar = ValueWhen( TimeNum() == 091500, BarIndex() );
- vNewDay = Day() != Ref( Day(), -1 );
- vSpot = vPSpot = 0;
- vUnderlyingPrice = LastValue( C ) ; // Pick the last close price in the data
- vPUnderlyingPrice = LastValue( Ref( Close, -( BarsSince( vNewDay ) + 1 ) ) );
- if( SetForeign( vSymbol ) )
- {
- vSpot = LastValue( C );
- vPSpot = LastValue( Ref( Close, -( BarsSince( vNewDay ) + 1 ) ) );
- RestorePriceArrays();
- }
- else
- {
- if( StrMatch( "FlashTrader", vDataProvider ) )
- {
- if( StrMatch( vSymbol, "NIFTY" ) )
- vSymbol1 = "NIFTY 50";
- else
- if( StrMatch( vSymbol, "BANKNIFTY" ) )
- vSymbol1 = "NIFTY BANK";
- if( SetForeign( vSymbol1 ) )
- {
- vSpot = LastValue( C );
- vPSpot = LastValue( TimeFrameGetPrice( "C", inDaily, -1 ) );
- RestorePriceArrays();
- }
- }
- if( StrMatch( "NSEEOD", vDataProvider ) )
- {
- vSymbol1 = "";
- if( StrMatch( vSymbol, "NIFTY" ) )
- vSymbol1 = "NIFTY 50";
- else
- if( StrMatch( vSymbol, "BANKNIFTY" ) )
- vSymbol1 = "NIFTY BANK";
- if( SetForeign( vSymbol1 ) )
- {
- vSpot = LastValue( C );
- vPSpot = LastValue( Ref( Close, -( BarsSince( vNewDay ) + 1 ) ) );
- RestorePriceArrays();
- }
- }
- if( StrMatch( "GDFL", vDataProvider ) )
- {
- if( StrMatch( vSymbol, "NIFTY" ) )
- vSymbol1 = "NIFTY 50.NSE_IDX";
- else
- if( StrMatch( vSymbol, "BANKNIFTY" ) )
- vSymbol1 = "NIFTY BANK.NSE_IDX";
- if( SetForeign( vSymbol1 ) )
- {
- vSpot = LastValue( C );
- vPSpot = LastValue( Ref( Close, -( BarsSince( vNewDay ) + 1 ) ) );
- RestorePriceArrays();
- }
- }
- }
- vPVix = vVix = 0;
- if( SetForeign( "IndiaVix" ) )
- {
- vVix = LastValue( C );
- vPVix = LastValue( TimeFrameGetPrice( "C", inDaily, -1 ) );
- RestorePriceArrays();
- }
- else
- if( SetForeign( "India Vix" ) )
- {
- vVix = LastValue( C );
- vPVix = LastValue( TimeFrameGetPrice( "C", inDaily, -1 ) );
- RestorePriceArrays();
- }
- else
- if( SetForeign( "India Vix.NSE_IDX" ) )
- {
- vVix = LastValue( C );
- vPVix = LastValue( TimeFrameGetPrice( "C", inDaily, -1 ) );
- RestorePriceArrays();
- }
- vUPriceChange = vUnderlyingPrice - vPUnderlyingPrice;
- vUPriceChangePct = ( vUnderlyingPrice - vPUnderlyingPrice ) * 100 / vPUnderlyingPrice;
- vSPriceChange = vSpot - vPSpot;
- vSPriceChangePct = ( vSpot - vPSpot ) * 100 / vPSpot;
- vVPriceChange = vVix - vPVix;
- vVPriceChangePct = vVix - vPVix * 100 / vPVix;
- TodayVolume = Sum( V, Bars_so_far_today );
- vUVWAP = LastValue( IIf( BarIndex() >= StartBar, Sum( C * V, Bars_so_far_today ) / TodayVolume, 0 ) );
- vATMStrike = Round( vUnderlyingPrice / vStrikeRange ) * vStrikeRange;
- vAtmCall = getOptionSymbol( vDataProvider, vExpiryDate, vWeekly, vSymbol, NumToStr( vATMStrike, 1.0, False ), "CE" ) ;
- vAtmPut = getOptionSymbol( vDataProvider, vExpiryDate, vWeekly, vSymbol, NumToStr( vATMStrike, 1.0, False ), "PE" );
- vATMCPrice = LastValue( Foreign( vATMCall, "C" ) );
- vATMPPrice = LastValue( Foreign( vATMPut, "C" ) );
- vImpliedFutPrice = vATMStrike + vATMCPrice - vATMPPrice;
- vATMStrike = Round( vImpliedFutPrice / vStrikeRange ) * vStrikeRange;
- _TRACEF( NumToStr( pxheight ) );
- _TRACEF( NumToStr( pxwidth ) );
- GfxSetTextColor( colorBlack );
- GfxSetBkColor( colorBlack );
- GfxSelectPen( colorBlack );
- //GfxSelectFont( "Arial",cellheight * (vFontWeight + 10 ) / 100 ,500);
- GfxSelectFont( "Segoe UI SemiBold", cellheight * ( vFontWeight + 10 ) / 100 , 500 );
- PrintInCell( "Calls", 0, 7, 1 );
- PrintInCell( "Puts", 0, 17, 1 );
- vFillColor = colorGold;
- for( x = 1 ; x <= vNumberOfCols ; x++ )
- {
- FillCell( 1, x, vFillColor );
- }
- GfxSetTextColor( colorBlack );
- GfxSelectFont( "Segoe UI", Cellheight * ( vFontWeight / 100 ) , 600 );
- PrintInCell( "Straddle", 1, 1, 2 );
- PrintInCell( "IV", 1, 2, 2 );
- PrintInCell( "Vega", 1, 3, 2 );
- PrintInCell( "Theta", 1, 4, 2 );
- PrintInCell( "Delta", 1, 5, 2 );
- PrintInCell( "Gamma", 1, 6, 2 );
- PrintInCell( "VWAP", 1, 7, 2 );
- PrintInCell( "Chg%", 1, 8, 2 );
- PrintInCell( "OI-Chg", 1, 9, 2 );
- PrintInCell( "OI", 1, 10, 2 );
- PrintInCell( "LTP", 1, 11, 2 );
- PrintInCell( "Strike", 1, 12, 2 );
- PrintInCell( "LTP", 1, 13, 2 );
- PrintInCell( "OI", 1, 14, 2 );
- PrintInCell( "OI-Chg", 1, 15, 2 );
- PrintInCell( "Chg%", 1, 16, 2 );
- PrintInCell( "VWAP", 1, 17, 2 );
- PrintInCell( "Gamma", 1, 18, 2 );
- PrintInCell( "Delta", 1, 19, 2 );
- PrintInCell( "Theta", 1, 20, 2 );
- PrintInCell( "Vega", 1, 21, 2 );
- PrintInCell( "IV", 1, 22, 2 );
- PrintInCell( "Imp.Fut", 1, 23, 2 );
- PrintInCell( "PCR", 1, 24, 2 );
- vDTE = Max( 0, ( DateTimeDiff( vExpiryDate , LastValue( DateTime() ) ) - ( 7.5 * 60 * 60 ) ) / ( 365 * 24 * 60 * 60 ) ); //Since Expiry is at 3:30Pm subtract 7.5 hours
- vRcellheight = 50;
- GfxSelectFont( "Impact", vRcellHeight * ( vFontWeight / 110 ), 0, 0 );
- if( vWeekly ) vExpiryString = DateTimeToStr( vExpiryDate, 1 ) + "W";
- else vExpiryString = DateTimeToStr( vExpiryDate, 1 ) + "M";
- //Ribbon First Row
- PrintInRibbon( NumToStr( vUnderlyingPrice, 1.2 ), 0, 0, 2 );
- PrintInRibbon( NumToStr( vUVWAP, 1.2 ), 0, 1, 2 );
- PrintInRibbon( NumToStr( vSpot, 1.2 ), 0, 2, 2 );
- PrintInRibbon( NumToStr( vVix, 1.2 ), 0, 4, 1 );
- PrintInRibbon( vExpiryString, 0, 5, 2 );
- PrintInRibbon( NumToStr( vDTE * 365, 1.2 ), 0, 6, 2 );
- //Ribbon Second Row
- //GfxSelectFont( "Segoe UI",vRcellHeight * (vFontWeight / 200) );
- GfxSelectFont( "Segoe UI Semibold", vRcellHeight * ( vFontWeight / 200 ) );
- PrintInRibbon( NumToStr( vUPriceChange, 1.2 ) + "(" + NumToStr( vUPriceChangePCT, 1.2 ) + "%)" + " ", 1, 0, 2 | 0 );
- PrintInRibbon( "VWAP" + " ", 1, 1, 2 | 0 );
- PrintInRibbon( NumToStr( vSPriceChange, 1.2 ) + "(" + NumToStr( vSPriceChangePCT, 1.2 ) + "%)" + " Spot", 1, 2, 2 | 0 );
- PrintInRibbon( "Max Pain" + " ", 1, 3, 2 | 0 );
- PrintInRibbon( NumToStr( vVPriceChange, 1.2 ) + "(" + NumToStr( vVPriceChangePCT, 1.2 ) + "%)" + " Vix", 1, 4, 2 | 1 );
- PrintInRibbon( "Expiry Date" + " ", 1, 5, 2 | 0 );
- PrintInRibbon( "DTE" + " ", 1, 6, 2 | 0 );
- vR = 0;
- vD = 0;
- vCLtp = vPLtp = 0;
- vCallOI = vPutOI = vCPOI = vPPOI = vCOIC = vPOIC = vPCR = vCallGLS = vCallGLD = vPutGLS = vPutGLD = 0;
- for( i = ( vNumberofStrikes * -1 ) ; i <= vNumberofStrikes; i++ )
- {
- vOptionStrike = NumToStr( vATMStrike + ( i * vStrikeRange ), 1.0, False );
- vCallStrike = getOptionSymbol( vDataProvider, vExpiryDate, vWeekly, vSymbol, vOptionStrike, "CE" );
- vPutStrike = getOptionSymbol( vDataProvider, vExpiryDate, vWeekly, vSymbol, vOptionStrike, "PE" );
- vPrice = vOpen = vHigh = vLow = vVWAP = vPVWAP = vPDH = vPHL = vPDC = vStraddle = vImpFutOfStrike = 0;
- vRow = ( i * -1 ) + vNumberOfStrikes + 2;
- vARow = i + vNumberOfStrikes;
- if( SetForeign( vCallStrike ) )
- {
- vCPOI[vARow] = LastValue( Ref( OI, -( BarsSince( vNewDay ) + 1 ) ) );
- vLTP = vCLtp[vARow] = LastValue( C );
- vCallOI[vARow] = LastValue( OI );
- vCOIC[vARow] = vCallOI[vARow] - vCPOI[vARow];
- vExtrinsic = vLTP - Max( vSpot - StrToNum( vOptionStrike ), 0 );
- vFirstBarHigh = LastValue( Ref( H, -1 * ( Bars_so_far_today - 1 ) ) );
- vFirstBarLow = LastValue( Ref( L, -1 * ( Bars_so_far_today - 1 ) ) );
- vPVWAP = vVWAP = vVWAPa = vPVWAPa = 0;
- TodayVolume = Sum( V, Bars_so_far_today );
- vVWAPa = IIf( BarIndex() >= StartBar, Sum( ( ( C + H + L ) / 3 ) * V, Bars_so_far_today ) / TodayVolume, 0 );
- vPVWAPa = ValueWhen( vNewDay == True, Ref( vVWAPa, -1 ), 1 );
- vTotalVolume = Cum( V );
- vTVWAPa = Cum( ( ( C + H + L ) / 3 ) * V ) / vTotalVolume;
- vVWAP = LastValue( vVWAPa );
- vPVWAP = LastValue( vPVWAPa );
- vTVWAP = LastValue( vTVWAPa );
- vCallGLS[vARow] = ( vTVWAP - vLTP ) * vCallOI[vARow];
- vCallGLD[vARow] = ( vVWAP - vLTP ) * vCallOI[vARow];
- if( i == 0 ) GfxSetTextColor( vATMStrikeColor );
- else GfxSetTextColor( colorBlack );
- vCallIV = OptionIV( 1, vImpliedFutPrice, StrToNum( vOptionStrike ), LastValue( vDTE ), vR, vLTP, vD );
- vCallVega = OptionVega( vImpliedFutPrice, StrToNum( vOptionStrike ), LastValue( vDTE ), vR, vCallIV, vD );
- vCallDelta = OptionDelta( 1, vImpliedFutPrice, StrToNum( vOptionStrike ), LastValue( vDTE ), vR, vCallIV, vD );
- vCallTheta = OptionTheta( 1, vImpliedFutPrice, StrToNum( vOptionStrike ), LastValue( vDTE ), vR, vCallIV, vD );
- vCallGamma = OptionGamma( vImpliedFutPrice, StrToNum( vOptionStrike ), vDTE, vR, vCallIV, vD );
- vCallLTP = OptionPrice( 1, vImpliedFutPrice, vATMStrike, LastValue( vDTE ), vR, vCallIV, vD );
- vFillColor = IIf( vLTP > vVWAP, colorBrightGreen, colorRed );
- FillCell( vRow, 7, vFillColor ); //VWAP Color
- GfxSelectFont( "Segoe UI", Cellheight * ( vFontWeight / 100 ) );
- PrintInCell( NumToStr( LastValue( vCallIV ) * 100, 1.2 ), vRow , 2, 2 );
- PrintInCell( NumToStr( vCallVega, 1.2 ), vRow, 3 , 2 );
- PrintInCell( NumToStr( vCallTheta, 1.2 ), vRow, 4 , 2 );
- PrintInCell( NumToStr( vCallDelta, 1.2 ), vRow, 5, 2 );
- PrintInCell( NumToStr( vCallGamma, 1.5 ), vRow , 6, 2 );
- PrintInCell( NumToStr( vVWAP , 1.2 ), vRow , 7, 2 );
- PrintInCell( NumToStr( vCOIC[vARow] * 100 / vCPOI[vARow] , 1.2 ), vRow, 8, 2 );
- PrintInCell( NumToStr( vCOIC[vARow], 1.0 ), vRow, 9, 2 );
- PrintInCell( NumToStr( vCallOI[vArow], 1.0 ), vRow, 10, 2 );
- PrintInCell( NumToStr( vLTP, 1.2 ), vRow , 11, 2 );
- RestorePriceArrays();
- }
- if( SetForeign( vPutStrike ) )
- {
- vPPOI[vARow] = LastValue( Ref( OI, -( BarsSince( vNewDay ) + 1 ) ) );
- vLTP = vPLtp[vARow] = LastValue( C );
- vPutOI[vARow] = LastValue( OI );
- vPOIC[vARow] = vPutOI[vARow] - vPPOI[vARow];
- vFirstBarHigh = LastValue( Ref( H, -1 * ( Bars_so_far_today - 1 ) ) );
- vFirstBarLow = LastValue( Ref( L, -1 * ( Bars_so_far_today - 1 ) ) );
- TodayVolume = Sum( V, Bars_so_far_today );
- vPVWAP = vVWAP = vVWAPa = vPVWAPa = 0;
- vVWAPa = IIf( BarIndex() >= StartBar, Sum( ( ( C + H + L ) / 3 ) * V, Bars_so_far_today ) / TodayVolume, 0 );
- vPVWAPa = ValueWhen( vNewDay == True, Ref( vVWAPa, -1 ), 1 );
- vExtrinsic = vLTP - Max( StrToNum( vOptionStrike ) - vSpot , 0 );
- vTotalVolume = Cum( V );
- vTVWAPa = Cum( ( ( C + H + L ) / 3 ) * V ) / vTotalVolume;
- vVWAP = LastValue( vVWAPa );
- vPVWAP = LastValue( vPVWAPa );
- vTVWAP = LastValue( vTVWAPa );
- vPutGLS[vARow] = ( vTVWAP - vLTP ) * vPutOI[vARow];
- vPutGLD[vARow] = ( vVWAP - vLTP ) * vPutOI[vARow];
- vTrend = "NoTrend";
- vTrendColor = 0;
- vTrendPen = colorBlack;
- if( i == 0 ) GfxSetTextColor( vATMStrikeColor );
- else GfxSetTextColor( colorBlack );
- vPutIV = OptionIV( 0, vImpliedFutPrice, StrToNum( vOptionStrike ), vDTE, vR, vLTP, vD );
- vPutVega = OptionVega( vImpliedFutPrice, StrToNum( vOptionStrike ), LastValue( vDTE ), vR, vPutIV, vD );
- vPutDelta = OptionDelta( 0, vImpliedFutPrice, StrToNum( vOptionStrike ), vDTE, vR, vPutIV, vD );
- vPutTheta = OptionTheta( 0, vImpliedFutPrice, StrToNum( vOptionStrike ), vDTE, vR, vPutIV, vD );
- vPutGamma = OptionGamma( vImpliedFutPrice, StrToNum( vOptionStrike ), vDTE, vR, vPutIV, vD );
- vFillColor = IIf( vLTP > vVWAP, colorBrightGreen, colorRed );
- FillCell( vRow, 17, vFillColor ); //VWAP Color
- vPCR[vARow] = abs( 1 - ( vPutOI[vARow] / vCallOI[vARow] ) ) ;
- PrintInCell( NumToStr( vLTP, 1.2 ), vRow , 13, 2 );
- PrintInCell( NumToStr( vPutOI[vARow], 1.0 ), vRow, 14, 2 );
- PrintInCell( NumToStr( vPOIC[vARow], 1.0 ), vRow, 15, 2 );
- PrintInCell( NumToStr( vPOIC[vARow] * 100 / vPPOI[vARow], 1.2 ), vRow, 16, 2 );
- PrintInCell( NumToStr( vVWAP , 1.2 ), vRow , 17, 2 );
- PrintInCell( NumToStr( vPutGamma, 1.5 ), vRow , 18, 2 );
- PrintInCell( NumToStr( vPutDelta, 1.2 ), vRow, 19 , 2 );
- PrintInCell( NumToStr( vPutTheta, 1.2 ), vRow, 20 , 2 );
- PrintInCell( NumToStr( vPutVega, 1.2 ), vRow, 21 , 2 );
- PrintInCell( NumToStr( LastValue( vPutIV ) * 100, 1.2 ), vRow, 22, 2 );
- PrintInCell( NumToStr( vPutOI[vARow] / vCallOI[vArow], 1.2 ), vRow, 24, 2 );
- if( i == 0 ) GfxSetTextColor( vATMStrikeColor );
- else GfxSetTextColor( colorBlack );
- RestorePriceArrays();
- }
- vStraddle = vCLtp[vARow] + vPLtp[vARow];
- vImpFutOfStrike = StrToNum( vOptionStrike ) + vCLtp[vARow] - vPLtp[vARow];
- if( i != 0 ) GfxSetTextColor( colorBlack );
- PrintInCell( vOptionStrike, vRow , 12, 2 );
- PrintInCell( NumToStr( vStraddle, 1.0 ), vRow , 1, 2 );
- PrintInCell( NumToStr( vImpFutOfStrike, 1.0 ), vRow , 23, 2 );
- }
- vMaxE = ( vNumberOfStrikes * 2 ) - 1 ;
- vCallOIs = Sort( vCallOI, 0, vMaxE, True );
- vCOICs = Sort( abs( vCOIC ), 0, vMaxE, True );
- vPutOIs = Sort( vPutOI, 0, vMaxE, True );
- vPOICs = Sort( abs( vPOIC ), 0, vMaxE, True );
- vPCRs = Sort( vPCR, 0, vMaxE, True );
- vMaxPainStrike = vATMStrike + ( ( vPCRs[0] - vNumberofStrikes ) * vStrikeRange ) ;
- vFillColor = colorGold;
- for( x = 1 ; x <= vNumberOfCols ; x++ )
- {
- FillCell( vNumberofStrikes * 2 + 3, x, vFillColor );
- }
- GfxSetTextColor( colorBlack );
- GfxSelectFont( "Segoe UI", cellheight * ( vFontWeight / 100 ), 600 );
- PrintInCell( NumToStr( Cum( vCOIC ) * 100 / Cum( vCPOI ), 1.2 ), vNumberofStrikes * 2 + 3, 8, 2 );
- PrintInCell( NumToStr( Cum( vCOIC ), 1 ), vNumberofStrikes * 2 + 3, 9, 2 );
- PrintInCell( NumToStr( Cum( vCallOI ), 1 ), vNumberofStrikes * 2 + 3, 10, 2 );
- PrintInCell( "Total", vNumberofStrikes * 2 + 3 , 12, 2 );
- PrintInCell( NumToStr( Cum( vPutOI ), 1 ), vNumberofStrikes * 2 + 3, 14, 2 );
- PrintInCell( NumToStr( Cum( vPOIC ), 1 ), vNumberofStrikes * 2 + 3, 15, 2 );
- PrintInCell( NumToStr( Cum( vPOIC ) * 100 / Cum( vPPOI ) , 1.2 ), vNumberofStrikes * 2 + 3, 16, 2 );
- PrintInCell( NumToStr( Cum( vPutOI ) / Cum( vCallOI ) , 1.2 ), vNumberofStrikes * 2 + 3, 24, 2 );
- GfxSetTextColor( colorBlack );
- GfxSelectFont( "Segoe UI", cellheight * ( vFontWeight / 100 ) );
- vFillColor = colorAqua;
- FillCell( ( vNumberofStrikes * 2 ) - vPutOIs[vMaxE] + 2, 14, vFillColor );
- FillCell( ( vNumberofStrikes * 2 ) - vCallOIs[vMaxE] + 2, 10, vFillColor );
- FillCell( ( vNumberofStrikes * 2 ) - vPOICs[vMaxE] + 2, 15, vFillColor );
- FillCell( ( vNumberofStrikes * 2 ) - vCOICs[vMaxE] + 2, 9, vFillColor );
- PrintInCell( NumToStr( vPutOI[vPutOIs[vMaxE]], 1 ), ( vNumberofStrikes * 2 ) - vPutOIs[vMaxE] + 2 , 14, 2 );
- PrintInCell( NumToStr( vCallOI[vCallOIs[vMaxE]], 1 ), ( vNumberofStrikes * 2 ) - vCallOIs[vMaxE] + 2, 10, 2 );
- PrintInCell( NumToStr( vPOIC[vPOICs[vMaxE]], 1 ), ( vNumberofStrikes * 2 ) - vPOICs[vMaxE] + 2, 15, 2 );
- PrintInCell( NumToStr( vCOIC[vCOICs[vMaxE]], 1 ), ( vNumberofStrikes * 2 ) - vCOICs[vMaxE] + 2, 9, 2 );
- GfxSelectFont( "Impact", vRCellHeight * ( vFontWeight / 110 ) , 0, 0 );
- PrintInRibbon( NumToStr( vMaxPainStrike, 1 ), 0, 3, 2 );
Add Comment
Please, Sign In to add comment