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

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



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.