PureBytes Links
Trading Reference Links
|
<FONT face=Arial
color=#0000ff size=2>AHHHH!!
<FONT face=Arial
color=#0000ff size=2>
<FONT face=Arial
color=#0000ff size=2>that damned [bar] thingy!! But you'd have never
figured it out without my hint of using positionsize, eh
duude?
<FONT face=Arial
color=#0000ff size=2><FONT
face=Arial color=#0000ff size=2>
<FONT face=Arial
color=#0000ff size=2>PLUS you messed up my braces!
Gak!
<FONT face=Arial
color=#0000ff size=2>
<FONT face=Arial
color=#0000ff size=2>now for your next challenge: Commissions!! No
hints from me this time..
<FONT face=Arial
color=#0000ff size=2>
<FONT face=Arial
color=#0000ff size=2>
<SPAN
class=656303903-25012004># 8-]
<FONT
size=2>
<SPAN
class=656303903-25012004>You get a BIG attaboy for this
one!!
<SPAN
class=656303903-25012004>
<SPAN
class=656303903-25012004>d
From: Nigel Rowe [mailto:rho@xxxxxxxxxxxxxxx]
Sent: Saturday, January 24, 2004 10:32 PMTo:
amibroker@xxxxxxxxxxxxxxxSubject: Re: [amibroker] Enhancement Request
- "Playback" Function
-----BEGIN PGP SIGNED MESSAGE-----Hash: SHA1Actually
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 settingsI 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.
NigelOn 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
Pricefunction 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 settingsSetOption("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/0g2zHkwvoYnO123ADCsACfbe1PhtBgUifFn5zE8aoCggQ4nl0==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 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.
|