[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Using Param() to analyze system price-sensitivity



PureBytes Links

Trading Reference Links

Nigel,

Are you trying to analyze real-life trades or trades generated by 
another software in this exercise? I'm curious...

Thanks.

Jitu

--- In amibroker@xxxxxxxxxxxxxxx, Nigel Rowe <rho@xxxx> wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> Actually Dale,
> 	I did know how, I was just too bloody lazy to do it!  But it 
always worked on 
> multiple tickers, just run it on a watchlist with *at least* all 
the tickers 
> mentioned in the file.  Doesn't matter if there are others, just 
slows it 
> down a bit.
> 
> In fairness it was only intended as an example for other people to 
extend 
> (like your DateToDateNum function).
> 
> Hovever I have:
> * tidied up your latest mod to the code
> * added position sizing
> * put the main body in a function
> * added 'local' declarations, so the functions can be generally 
used without 
> worrying about clobbering globals
> * added SetOption calls for the required settings
> 
> I did, however, restrain myself from 'fixing' the inside-out date 
format and 
> the hungarian notation in your DateToDateNum function! :-)
> 
> The latest version is both below *AND* attached as an attachment, 
so that 
> those of you who get individual emails don't have to worry about 
Yahoo's line 
> wrapping etc.
> 
> 	Nigel
> 
> On Sun, 25 Jan 2004 13:14, dingo wrote:
> > I know you asked for it a while back - a number of people have 
asked for it
> > over the last several years. I just saw what Nigel had done and 
it piqued
> > my curiosity.
> >
> > The position size is left as and exercise for the student.  
(Until I or
> > someone else can figure out how to implement it.  I strongly 
suspect that's
> > why Nigel decided not to finish it.  8-)  ).
> >
> > As to just the "current stock" that was to make it easy to run 
the example.
> >
> > It "should" be able to work on multple tickers, etc.
> >
> > Looking for suggestions from anyone!!!
> >
> > d
> >
> 
> // Inspired by a request for a 'playback' feature from Don Upton,
> //
> // initial code by Nigel Rowe,
> // with contributions by Ruddy Turnstone Trading, LLC  (dingo)
> //
> //
> // Input file is comma seperated text.
> // Fields are:
> //	0.	Symbol        -- without quotes
> //	1.  	Long Or Short -- L or S, without quotes
> //	2.	Number of shares
> //	3.  	Entry date    -- in mm/dd/yyyy format.  ie xmas day 
2003 is 12/25/2003
> //	4.	Entry price
> //	5.	Exit date     -- mm/dd/yyyy  format, or blank for no 
exit
> //	6.	Exit Price
> 
>  
> function DateToDateNum(sMMDDYYYY) // date in format mm/dd/yyyy
> {
>  
> /*-------------------------------------------------------------
>   This function will accept a string in the MM/DD/YYY format
>   and convert it into Amibroker's datenum.
>  
>   nDateNum = 10000 * (year - 1900) + 100 * month + day
>  
>   It assumes that mm dd and yyyy are reasonable. It does check
>   for the presence of 2 "/" characters and if not there
>   will return a 0.
> - -------------------------------------------------------------*/
>  	local nDateNum, sWrk, nPosn, nYr, nMth, nDay;
> 
> 	nDateNum = 0;
>     	sWrk = sMMDDYYYY;
>     	nPosn = StrFind(sWrk, "/");
>     	if (nPosn > 0) {
>        	nMth = StrToNum(StrLeft(sWrk, nPosn-1));
>         	sWrk = StrRight(sWrk, StrLen(sWrk) - nPosn);
>         	nPosn = StrFind(sWrk, "/");
>         	if (nPosn > 0) {
>             		nDay = StrToNum(StrLeft(sWrk, nPosn-1));
>             		sWrk = StrRight(sWrk, StrLen(sWrk) - nPosn);
>             		nYr = StrToNum(sWrk);
>             		nDateNum = 10000 * (nYr - 1900) + (100 * 
nMth) + nDay;
> 		}
> 	}
>     	return nDateNum;
> }
>  
>  
> 
> function DateToBar(dn) 
> {
> 	return LastValue(ValueWhen(DateNum()==dn, BarIndex()));
> }
>  
>  
>  
>  
> function playback(filename) 
> { 
> 	local f, Line, sym;
> 	local LorS, numShrs;
> 	local entryDate, entryPrice, exitDate, exitPrice;
> 	local bar;
> 
> 	global Buy, Sell, BuyPrice, SellPrice;
> 	global Short, Cover, ShortPrice, CoverPrice;
> 	global PositionSize;
> 
> 	f = fopen(filename, "r");
> 	while( f && (! feof(f))) {
> 		Line = fgets(f);
> 		sym = StrExtract(Line, 0);
> 		if( sym == Name() ) {
> 			LorS = StrExtract(Line, 1);
> 			numShrs = StrToNum(StrExtract(Line,2));
> 			entryDate = DateToDateNum(StrExtract(Line,3));
> 			entryPrice = StrToNum(StrExtract(Line,4));
> 			exitDate = DateToDateNum(StrExtract(Line,5));
> 			exitPrice = StrToNum(StrExtract(Line,6));
> 
> 			bar = DateToBar(entryDate);
> 
> 			// The extra (entryPrice/2) is to avoid 
rounding errors.
> 			PositionSize[bar] = (numShrs*entryPrice) + 
(entryPrice/2);
>  
> 			if (LorS == "L") {
> 				Buy[bar] = True;
> 				BuyPrice[bar] = entryPrice;
> 	      			if( exitdate ) {
> 	                   		bar = DateToBar(exitdate);
> 	                   		Sell[bar] = True;
> 	                   		SellPrice[bar] = exitPrice;
> 	            		}
> 			} else {
> 	      	         	Short[bar] = True;
> 	              	ShortPrice[bar] = entryPrice;
> 	              	if( exitDate ) {
> 	                  		bar = DateToBar(exitDate);
> 	                   		Cover[bar] = True;
> 	                   		CoverPrice[bar] = exitPrice;
> 	              	}
> 	        	}
> 	    	}
> 	}
> 	if(f) fclose(f);
> }
>  
> 
> SetFormulaName("Playback from file");
>  
> // Enforce required settings
> SetOption("InitialEquity", 10000000);	 
> SetOption("MaxOpenPositions", 10000);
> SetOption("MinShares", 1);
> SetOption("AllowPositionShrinking", False);
> SetOption("FuturesMode", False);
> SetTradeDelays(0,0,0,0);
> ApplyStop(stopTypeLoss,	  stopModeDisable, 0, 0);
> ApplyStop(stopTypeTrailing,stopModeDisable, 0, 0);
> ApplyStop(stopTypeProfit,	  stopModeDisable, 0, 0);
> ApplyStop(stopTypeNBar,    stopModeDisable, 0, 0);
> 
> 
> // NB!! you will have to manually set Positions and 
Periodicity !!!!!
> //
> //The following SetOption are NOT valid, mentioned here for 
completeness
> //SetOption("Positions", "Long and Short");
> //Setoption("Periodicity", "Daily");
> 
> Buy = False;
> Sell = False;
> BuyPrice = Close;
> SellPrice = Close;
> Short = False;
> Cover = False;
> ShortPrice = Close;
> CoverPrice = Close;
> PositionSize = 0;
>  
> // and the next line does all the work!
> playback("playback.txt"); 
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.2.2 (GNU/Linux)
> 
> iD8DBQFAEzjABbmcM2pfckkRAkjMAKCV9NBW9/0g2zHkwvoYnO123ADCsACfbe1P
> htBgUifFn5zE8aoCggQ4nl0=
> =qVyg
> -----END PGP SIGNATURE-----


Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

Yahoo! Groups Links

To visit your group on the web, go to:
 http://groups.yahoo.com/group/amibroker/

To unsubscribe from this group, send an email to:
 amibroker-unsubscribe@xxxxxxxxxxxxxxx

Your use of Yahoo! Groups is subject to:
 http://docs.yahoo.com/info/terms/