PureBytes Links
Trading Reference Links
|
<FONT face=Arial
color=#0000ff size=2>follow the original request - was for actual trades but it
can be used for anything.
<FONT face=Arial
color=#0000ff size=2>
<FONT face=Arial
color=#0000ff size=2>d
From: jtelang [mailto:jtelang@xxxxxxxxx]
Sent: Saturday, January 24, 2004 10:45 PMTo:
amibroker@xxxxxxxxxxxxxxxSubject: [amibroker] Re: Enhancement Request
- "Playback" Function
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@xxxxxxxxxxxxxSend SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check
group FAQ at: <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Yahoo! Groups Links
To visit your group on the web, go to:<A
href="">http://groups.yahoo.com/group/amibroker/
To unsubscribe from this group, send an email to:<A
href="">amibroker-unsubscribe@xxxxxxxxxxxxxxx
Your use of Yahoo! Groups is subject to the <A
href="">Yahoo! Terms of Service.
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 Sponsor
ADVERTISEMENT
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 the Yahoo! Terms of Service.
|