Welcome Features News Download Registration Support FAQ Wish list Links
Advanced stock charting and analysis program

AFL Library

This is read-only version of AFL library entry. Ability to add user formulas and comment is only available from members-only area.

Details:

Formula name: BEANS-Summary of Holdings
Author/Uploader: Ken Close - closeks
Date/Time added: 2008-09-21 09:06:51
Origin:
Keywords: string, gfx
Level: medium
Flags: indicator

DISCLAIMER: Most formulas present in AFL on-line library are submitted by the users and are provided here on an "as is" and "as available" basis. AmiBroker.com makes no representations or warranties of any kind to the contents or the operation of material presented here. We do not maintain nor provide technical support for 3rd party formulas.
Description:

The BEANS module will display a list of your holdings and associated statistics. It uses string manipulations and gfx formulas to display the data in a graphics title statement. Total value of the holdings may be plotted.

Formula:

//  BEANS.afl   KSC   09/20/2008

// =============== Use Notes ====================
// To use, Apply Indicator as this is a plotted result using the 
// Gfx graphics routines.
// If you put the pole anywhere earlier than the BuyDate for a holding,
// the BuyPrice will be a large and incorrect number.  
// ==============================================

// =============== Holdings=======================
// Add as many holdings as you want, formatted as:
// Hx = "Symbol,Shares,DateofPurchase,BuyPrice";
// Example: H1 = "SPY,500,06/04/2008,148.50 ";
// Omit share price to automatically use EOD price.
// Avoid spaces after and before commas.
// Enter TotalSymbolCount to match the number of Holdings
H1 = "SPY,100,06/04/2007,148.50";
H2 = "GLD,100,06/05/2008,86.00";
H3 = "OAKBX,100,11/05/2007";
H4 = "PSPFX,100,03/10/2008";
H5	= "BEARX,100,05/21/2008";
TotalSymbolCount = 5;
// =============== End of Holdings==================

// ============== Initialize =======================
Title = "";
CellHeight 	= Param("CellHeight", 20, 10, 30, 1);
CellWidth 	= Param("CellWidth",  90, 70, 110,1);
PlotSpace	=	Param("PlotSpace", 50, 20, 80, 1);
// Toggle ShowPlot to plot the Total value of the holdings
ShowPlot		=	ParamToggle("ShowPlot","No|Yes");
SymList = "";
ShrList = "";
DatList = "";
BuyList = "";
// ============== Prepare Strings =================
for( i=1; i < totalSymbolCount+1; i++ )
    {
        list = VarGetText( "H" + NumToStr(i, 1.0, 0));
        if(i==1){comma = "";} else{comma = ",";}
        SymList +=  comma + StrExtract( list , 0);
        ShrList +=  comma + StrExtract( list, 1);
        DatList +=  comma +  StrExtract( list, 2);
        BuyList +=  comma +  StrExtract( list, 3);
    }
// Uncomment next line to see the strings
//Title = "\n\n\n\n\n\n\n\n\n\n\n\n\n" + SymList + "\n" + ShrList + "\n" +
DatList + "\n" + BuyList;

// ============== Functions for display ===========
function PrintInCell( string, row, Col,TxtColor )
	{
	GfxSetTextColor(TxtColor);
    GfxDrawText( string, Col * CellWidth, row * CellHeight, ( Col + 1 ) *
CellWidth, ( row + 1 ) * CellHeight, 0 ); 
	}

//	Converts a date to DateNum. dat is the date in mm/dd/yyyy format (enclose in
quotes)
function DateToDateNum(dat)
{
  	firstbreak	= StrFind(dat, "/");
  	mont			= StrToNum(StrLeft(StrLeft(dat, firstbreak)   , firstbreak - 1));
  	fragment		= StrRight(dat, StrLen(dat) - firstbreak);
  	secbreak		= StrFind(fragment, "/");
	daa			= StrToNum(StrLeft(StrLeft(fragment, secbreak)   , secbreak - 1));
  	yeer			= StrToNum(StrRight(fragment, StrLen(fragment) - secbreak));
  	yerr			= IIf(yeer <= 99 AND yeer > 25, yeer + 1900, IIf(yeer <= 25, yeer +
2000, yeer));
  	DatNum		= (yerr - 1900)*10000 + mont*100 + daa;
  	return DatNum;
}

function DateToBar(dn)
{
    return LastValue(ValueWhen(DateNum()==dn, BarIndex()));
}

// ===================== Gfx Printing of Title ==============================
GfxSelectFont( "Courior New", CellHeight/2 );
GfxSetBkMode(1);

// ===================== Headers for columns ================================
CellWidth = 400;
DateSelect = NumToStr(SelectedValue(DateTime()),formatDateTime);
TopHL = "BEANS Module for " + StrFormat(DateSelect);
Colorx = colorBlack;
PrintInCell( TopHL,			0,0,colorx);
CellWidth = 90;
PrintInCell( "Fund", 		1,0,colorx);
PrintInCell( "BuyDate",		1,1,colorx);
PrintInCell( "BuyPrice",	1,2,colorx);
PrintInCell( "Shares",		1,3,colorx);
PrintInCell( "BuyVal",		1,4,colorx);
PrintInCell( "CurPrice", 	1,5,colorx);
PrintInCell( "CurValue", 	1,6,colorx);
PrintInCell( "1d%",	 		1,7,colorx);
PrintInCell( "1d$Gain",		1,8,colorx);
PrintInCell( "Tot%Chg", 	1,9,colorx);
PrintInCell( "21dROC", 		1,10,colorx);
PrintInCell( "63dROC", 		1,11,colorx);


// ================== Core section to print and calculate Title information
=============
// Note: if you rearrange columns, change headers to match
// -------------- Extract Symbols, Dates, and Shares from string lists
------------------
kk	=	2;  FTot = 0; GainDol1dTot = 0; ValatBuyTot = 0;
	for( i = 0; ( sym = StrExtract( SymList, i ) ) != ""; i++ )
		{// Loop
		// Set Ticker/Trade Environment.
		SetForeign(sym);

		Dat			=	StrExtract(DatList,i); 
		Dat1 			= 	StrToDateTime(Dat);
		BuyDate		=	DateToDateNum(Dat);
		BuyBar		=	DatetoBar(BuyDate);
		BuyPr			=	StrExtract(BuyList,i);
			if (BuyPr != "") 
				{	BuyPr2	=	StrToNum(BuyPr); }
			else
				{	BuyPr2	=	ValueWhen(DateTime()==Dat1,C,1);	}
		Shr			=	StrExtract(ShrList,i);
		ValatBuy		=	BuyPr2 * StrToNum(Shr);
		ValToday 	= C * StrToNum(Shr);
		GainPC		=	100 * (C - BuyPr2)/BuyPr2;
		GainDol1d	=	StrToNum(Shr) * (C - Ref(C,-1) );
		Ftot 			= Ftot + ValToday;	
		GainDol1dTot= GainDol1dTot + GainDol1d;
		ValatBuyTot = ValatBuyTot + ValatBuy;
		Color1 		=	colorBlack;
		if (LastValue(ROC(C,1)>=0)) {Color2 = colorGreen;}else {Color2 = colorRed;}
		if (LastValue(ROC(C,21)>=0)) {Color3 = colorGreen;}else {Color3 = colorRed;}
		if (LastValue(ROC(C,63)>=0)) {Color4 = colorGreen;}else {Color4 = colorRed;}


		Colorx	=	colorBlack;
		PrintInCell( StrFormat(sym), 								i+kk,0,color1);//Col1:Sym
		PrintInCell( StrFormat(Dat), 								i+kk,1,color1);//Col2:BuyDate
		PrintInCell( StrFormat("$"+"%01.2f",BuyPr2),
		i+kk,2,color1);//Col3:BuyPrice
		PrintInCell(
StrFormat("%01.0f",StrToNum(Shr)),		i+kk,3,color1);//Col4:Shares
		PrintInCell(
StrFormat("$"+"%01.0f",ValatBuy),			i+kk,4,color1);//Col5:ValatBuy
		PrintInCell( StrFormat("$"+"%01.2f", C  ), 				i+kk,5,color1);//Col5:Price
Today
		PrintInCell(
StrFormat("$"+"%01.0f",ValToday),			i+kk,6,color1);//Col6:ValueToday	
		PrintInCell( StrFormat("%01.2f", ROC(C,1))+"%", 	i+kk,7,color2);//Col6:1dROC
		PrintInCell( StrFormat("$"+"%01.0f", GainDol1d),
	i+kk,8,color2);//Col8:1dGain$
		PrintInCell( StrFormat("%01.1f",
GainPC)+"%",		i+kk,9,color2);//Col7:Tot%Change
		PrintInCell( StrFormat("%01.2f", ROC(C,21))+"%",
		i+kk,10,color3);//Col9:21dROC
		PrintInCell( StrFormat("%01.2f", ROC(C,63))+"%",
		i+kk,11,color4);//Col9:63dROC


		RestorePriceArrays(); 
		}// End Loop
FTot1dROC	=	ROC(Ftot,1);
TotChg		=	100 * (FTot - ValatBuyTot)/ValatBuyTot;
FTot21		=	ROC(Ftot,21);
Ftot63		=	ROC(Ftot,63);

		if (LastValue(Ftot1dROC>=0)) {Color5 = colorGreen;}else {Color5 = colorRed;}
		if (LastValue(GainDol1dTot>=0)) {Color6 = colorGreen;}else {Color6 =
colorRed;}
		if (LastValue(TotChg>=0)) {Color7 = colorGreen;}else {Color7 = colorRed;}
		if (LastValue(Ftot21>=0)) {Color8 = colorGreen;}else {Color8 = colorRed;}
		if (LastValue(Ftot63>=0)) {Color9 = colorGreen;}else {Color9 = colorRed;}


		PrintInCell(StrFormat("$"+"%01.0f",ValatBuytot),	i+kk+1,4,color1);
		PrintInCell(StrFormat("%01.0f",Ftot), 					i+kk+1,6,color1);
		PrintInCell(StrFormat("%01.1f",FTot1dROC)+"%",		i+kk+1,7,color5);
		PrintInCell(StrFormat("$"+"%01.0f",GainDol1dTot),	i+kk+1,8,color6);
		PrintInCell(StrFormat("%01.1f",TotChg)+"%",			i+kk+1,9,color7);
		PrintInCell(StrFormat("%01.1f",Ftot21)+"%",			i+kk+1,10,color8);
		PrintInCell(StrFormat("%01.1f",Ftot63)+"%",			i+kk+1,11,color9);


if (ShowPlot != 0)
  {Plot(Ftot,"",1,1); }

GraphXSpace = PlotSpace;

Comments:


About | Privacy | Terms of Use | Contact information
Copyright © 2001 AMIBROKER.COM