PureBytes Links
Trading Reference Links
|
<FONT face=Arial color=#0000ff
size=2>Thanks Andrew,
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Arial color=#0000ff
size=2>I am looking forward to your code and hope that some others will
also share some of their OSAKA code. It is a very useful
DLL.
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Arial color=#0000ff
size=2>best regards,
<SPAN
class=620371723-23012004>herman<SPAN
class=620371723-23012004>
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Arial color=#0000ff
size=2>
<FONT face=Tahoma
size=2>-----Original Message-----From: Andrew Perrin
[mailto:adjp@xxxxxxxxxxxxxxx]Sent: January 24, 2004 6:46
AMTo: amibroker@xxxxxxxxxxxxxxxSubject: Re: [amibroker]
Ready OSAKA/AFL functions: Ranking, Watchlists, Static Variables,
etc.
Herman
Thanks for sharing your code, I agree OSAKA
is powerful and can often be used to assist us to achieve certain
objectives. I have used OSAKA off and on since it was written, the
sort functions are very useful. I'm particular busy at the moment
but will try to post some examples next week.
Picked up a few very useful pointers from your
code,
Thanks again
Andrew
<BLOCKQUOTE
>
----- Original Message -----
<DIV
>From:
Herman
vandenBergen
To: <A title=amibroker@xxxxxxxxxxxxxxx
href="">AmiBroker
Sent: Wednesday, January 21, 2004 10:41
AM
Subject: [amibroker] Ready OSAKA/AFL
functions: Ranking, Watchlists, Static Variables, etc.
Here is my
first attempt at using the OSAKA DLL to solve some of the current problems
discussed on the list. The OSAKA DLL turns out to be very powerful
and pretty fast too. Many thanks to Joe Osaka, for contributing this
nice DLL!
I show
only three functions to see what interest there is on the list. Typical
tasks that can be performed by the thre functions
are:
<SPAN
class=840460112-20012004>save <SPAN
class=840460112-20012004>optimized parameters (numbers, not arrays) for
individual stocks during in-line
optimizations, <FONT
size=2>Typical <SPAN
class=840460112-20012004>parameters saved for each stock might
be a RSI Period, LongThreshold, ShortThreshold, ProfitStop and
StopLoss.
<SPAN
class=840460112-20012004>simulate Static variables that can be
accessed while performing various AA
operations, <SPAN
class=840460112-20012004>simply save the
parameters under a variable name of your choice.
<SPAN
class=840460112-20012004>create/save Ranking related data for stocks,
whatever you like to have in a table for Excel analysis and
recall.
<SPAN
class=840460112-20012004>dynamic Watchlists, i.e. enable stocks on the
basis of their being consituent in an Index. You could Explore all
annual lists to built a master table for all stocks ever traded in the
index and save the start-trading and stop trading dates for each
stock. When backtesting you use this data to enable trading the
stock or not. To do this properly this must be done using the
PositionScore, perhaps set a very High scrore for Short positions and a
very Low score for Long positions to disable stocks. That way they will be
skipped but your portfolio keeps trading the same number of
stocks.
<SPAN
class=840460112-20012004>You could probably use the functions to develop
code to skip top-ranked stocks .... but i haven't tried
it.
<SPAN
class=840460112-20012004>There is no limit to the number of parameter-sets
that can be saved. To use the functions you must copy the
ParameterTableInclude001.afl program listed below to your Include Directory.
The functions are designed for ease of use, not for speed. For more
complicated tasks and better speed you should learn to call the OSAKA
functions directly. To use multiple tables just substitute other names for
"ParamaterTable"
<SPAN
class=840460112-20012004>
1)
SaveParameters( "Name", Number1, Number2, Number3, Number4, Number5
);
<SPAN
class=840460112-20012004>This function saves 5
different parameters under one name in a binary file named
variable name, or a dynamically created name. If you set one or more
numbers to NULL then that particular number will not change in the
table and the previous value will remain valid. The length of the name is
limited to 30 char.
<SPAN
class=840460112-20012004><FONT face=Arial
size=2><SPAN
class=840460112-20012004>2) P=GetParameters( <SPAN
class=840460112-20012004>"Name" );
The function
returns an array; the parameters are stored in elements1-5. To use the
variables under their original names you would use P1=O[1]; P2=P[2];
P3=P[3]; P4=P[4]; and P5=P[5]; I reserved P[0] for other
uses.
3)
OutputParameterTable( Flag
);
Flag = 0
dumps the parameter table to the interpretation window from an indicator or
using the Equity button in the AA.
Flag = 1 use the
Explorer to display the table contents for the stocks in the current
Watchlist, does not list names not in the Watchlist.
Flag = 2 creates
a ParameterTable.csv file in the AmiBroker directory for import into
Excel.
<FONT face=Arial
size=2>
For a quick
test:
<FONT face=Arial
size=2>
1) Copy the
Include file to your Include Directory and load the code in your AA, select
a Watch list, set a range, and Run the OldBacktester, click Equity to run
the formula as an Indicator to display the table in your interpretation
window. Note that the current stock, if it is not in your Watchlist, is
still included in your ParameterTable. I do almost all my system/indicator
development from the AA window but the functions should work from anywhere
in AmiBroker.
<FONT face=Arial
size=2>
2) Run the
Exporer on you Watchlist to display all variable save for it's
membership.
<FONT face=Arial
size=2>
3) Run Excel
and import the ParameterTable.csv file.
<FONT face=Arial
size=2>
have
fun!
<FONT face=Arial
size=2>herman
<FONT face=Arial
size=2>
<FONT face=Arial
size=2>
// Test
program for the OSAKA parameter functions
<FONT
color=#ff0000>Buy=<FONT
color=#ff0000>Sell=<FONT
color=#ff0000>Short=<FONT
color=#ff0000>Cover=<FONT
color=#ff00ff>0<FONT
color=#000000>; Filter<FONT
color=#000000> = Status<FONT
color=#000000>("LastBarInRange"<FONT
color=#000000>); // Or set n-Last-Quotations
to 1<FONT
color=#000000> <FONT
color=#ff0000>#include<FONT
face=Arial> <ParameterTableInclude001.afl>
// Create some dummy
data...<FONT
color=#000000> T1=Status<FONT
color=#000000>(<FONT
color=#ff00ff>"StockNum"<FONT
face=Arial>); T2=<FONT
color=#0000ff>LastValue(<FONT
color=#0000ff>DateNum<FONT
face=Arial>()); T3=<FONT
color=#ff0000>BarCount<FONT
face=Arial>; T4=<FONT
color=#0000ff>LastValue(<FONT
color=#0000ff>Random<FONT
color=#000000>()); T5=<FONT
color=#ff00ff>12345<FONT
color=#000000>; SaveParameters( <FONT
color=#0000ff>Name(), T1, T2, T3, T4, T5 );
// Save 5 parameters under
ticker<FONT
color=#000000> SaveParameters( <FONT
color=#0000ff>Name(), T1, <FONT
color=#ff0000>Null, T3, <FONT
color=#ff0000>Null, T5 );<FONT
color=#000000>// Update only 3 of them<FONT
size=2> SaveParameters(
"Test1", <FONT
color=#ff00ff>1,<FONT
color=#ff00ff>2,<FONT
color=#ff00ff>3,<FONT
color=#ff00ff>4,<FONT
color=#ff00ff>5<FONT
color=#000000>); <FONT
color=#000000>// Save an arbitrary variable<FONT
size=2>
OutputParameterTable(1<FONT
color=#000000>|2<FONT
color=#000000>|4);
<FONT
color=#000000>// Review table in various
formats<FONT
color=#000000> P=GetParameters( <FONT
color=#0000ff>Name()
); <FONT
color=#000000>// Read ticker parameters from
table<FONT
color=#000000> T=GetParameters(<FONT
color=#ff00ff>"Test1"<FONT
color=#000000>); <FONT
color=#000000>// Read arbitrary variable from
table
// ParameterTableInclude001.afl ---
Copy this file to your AmiBroker Include Directory
osInitialize<FONT
size=2>(); <FONT
color=#ff0000>function<FONT
face=Arial> SaveParameters( Ticker, P1, P2,P3,P4,P5 )
{ <FONT
color=#ff0000>global<FONT
face=Arial> ParameterTable;
<FONT
color=#ff0000>local<FONT
face=Arial> RowCount, TickerRow, Row, P1, P2, P3, P4,
P5; ParameterTable = <FONT
color=#0000ff>osTabCreate<FONT
face=Arial>(); <FONT
color=#ff0000>if( <FONT
color=#0000ff>osTabLoad(<FONT
ParameterTable) == 0<FONT
size=2> )
{
<FONT
color=#0000ff>osTabAddColumn( <FONT
color=#ff00ff>"Symbol", <FONT
color=#ff00ff>2,
ParameterTable, <FONT
color=#ff00ff>30<FONT
color=#000000> ); <FONT
color=#0000ff>osTabAddColumn( <FONT
color=#ff00ff>"P1", <FONT
color=#ff00ff>1<FONT
color=#000000>, ParameterTable );
<FONT
color=#0000ff>osTabAddColumn( <FONT
color=#ff00ff>"P2", <FONT
color=#ff00ff>1<FONT
color=#000000>, ParameterTable );
<FONT
color=#0000ff>osTabAddColumn( <FONT
color=#ff00ff>"P3", <FONT
color=#ff00ff>1<FONT
color=#000000>, ParameterTable );
<FONT
color=#0000ff>osTabAddColumn( <FONT
color=#ff00ff>"P4", <FONT
color=#ff00ff>1<FONT
color=#000000>, ParameterTable );
<FONT
color=#0000ff>osTabAddColumn( <FONT
color=#ff00ff>"P5", <FONT
color=#ff00ff>1<FONT
color=#000000>, ParameterTable );
<FONT
color=#0000ff>osTabSave(<FONT
face=Arial>, ParameterTable );
} RowCount =
osTabGetRowCount<FONT
size=2>( ParameterTable );
TickerRow = -<FONT
color=#ff00ff>1<FONT
color=#000000>; <FONT
color=#ff0000>for( Row = <FONT
color=#ff00ff>0<FONT
color=#000000>; Row <= RowCount; Row++ )
{
<FONT
color=#ff0000>if( Ticker == <FONT
color=#0000ff>osTabGet( Row, <FONT
color=#ff00ff>0<FONT
color=#000000>, ParameterTable )) TickerRow = Row;
} <FONT
color=#ff0000>if(TickerRow <
0<FONT
face=Arial>)
Row=RowCount;
<FONT
color=#ff0000>else<FONT
face=Arial> Row
= TickerRow; <FONT
color=#0000ff>osTabSetString( Ticker, Row,
0<FONT
face=Arial>, ParameterTable );
if<FONT
color=#000000>(Nz<FONT
color=#000000>(P1,0<FONT
color=#000000>)==P1) <FONT
color=#0000ff>osTabSetNumber( P1, Row,
1<FONT
face=Arial>, ParameterTable );
if<FONT
color=#000000>(Nz<FONT
color=#000000>(P2,0<FONT
color=#000000>)==P2) <FONT
color=#0000ff>osTabSetNumber( P2, Row,
2<FONT
face=Arial>, ParameterTable );
if<FONT
color=#000000>(Nz<FONT
color=#000000>(P3,0<FONT
color=#000000>)==P3) <FONT
color=#0000ff>osTabSetNumber( P3, Row,
3<FONT
face=Arial>, ParameterTable );
if<FONT
color=#000000>(Nz<FONT
color=#000000>(P4,0<FONT
color=#000000>)==P4) <FONT
color=#0000ff>osTabSetNumber( P4, Row,
4<FONT
face=Arial>, ParameterTable );
if<FONT
color=#000000>(Nz<FONT
color=#000000>(P5,0<FONT
color=#000000>)==P5) <FONT
color=#0000ff>osTabSetNumber( P5, Row,
5<FONT
face=Arial>, ParameterTable );
osTabSave<FONT
color=#000000>(<FONT
face=Arial>, ParameterTable );
<FONT
color=#0000ff>osTabDelete<FONT
face=Arial>( ParameterTable ); }
function<FONT
size=2> OutputParameterTable(
Destination ) { <FONT
color=#ff0000>local<FONT
face=Arial> Row, RowCount, NOTable, Destination, OutPut;
<FONT
color=#ff0000>global<FONT
face=Arial> ParameterTable;
ParameterTable = <FONT
color=#0000ff>osTabCreate<FONT
face=Arial>(); <FONT
color=#ff0000>if( <FONT
color=#0000ff>osTabLoad(<FONT
ParameterTable) == 1<FONT
size=2> )
RowCount = <FONT
color=#0000ff>osTabGetRowCount<FONT
face=Arial>( ParameterTable );
OutPut = <FONT
color=#ff00ff>""<FONT
color=#000000>; <FONT
color=#ff0000>if( Destination &
1 )
// To Interpretation
window<FONT
color=#000000> {
<FONT
color=#ff0000>for( Row = <FONT
color=#ff00ff>0<FONT
color=#000000>; Row < RowCount; Row++ )
{
OutPut = OutPut +
<FONT
color=#0000ff>osTabGet( Row, <FONT
color=#ff00ff>0, ParameterTable
)+", "<FONT
face=Arial>+
<FONT
color=#0000ff>osTabGet( Row, <FONT
color=#ff00ff>1, ParameterTable
)+", "<FONT
face=Arial>+
<FONT
color=#0000ff>osTabGet( Row, <FONT
color=#ff00ff>2, ParameterTable
)+", "<FONT
face=Arial>+
<FONT
color=#0000ff>osTabGet( Row, <FONT
color=#ff00ff>3, ParameterTable
)+", "<FONT
face=Arial>+
<FONT
color=#0000ff>osTabGet( Row, <FONT
color=#ff00ff>4, ParameterTable
)+", "<FONT
face=Arial>+
<FONT
color=#0000ff>osTabGet( Row, <FONT
color=#ff00ff>5, ParameterTable
)+"\n"<FONT
face=Arial>;
}
}
if<FONT
color=#000000>( Destination & 2<FONT
color=#000000> ) // To Exploration
Results window<FONT
color=#000000> {
<FONT
color=#0000ff>SetOption(<FONT
color=#ff00ff>"NoDefaultColumns",<FONT
color=#ff0000>True<FONT
face=Arial>);
TickerRow = -<FONT
color=#ff00ff>1<FONT
color=#000000>; <FONT
color=#ff0000>for( Row = <FONT
color=#ff00ff>0; Row < <FONT
color=#0000ff>osTabGetRowCount<FONT
face=Arial>( ParameterTable ); Row++ )
<FONT
color=#ff0000>if( <FONT
color=#0000ff>Name() == <FONT
color=#0000ff>osTabGet( Row, <FONT
color=#ff00ff>0<FONT
color=#000000>, ParameterTable )) TickerRow = Row;
<FONT
color=#ff0000>if(TickerRow >=
0<FONT
face=Arial> )
<FONT
color=#0000ff>AddTextColumn<FONT
face=Arial>(
<FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>0<FONT
color=#000000>, ParameterTable),<FONT
color=#ff00ff>"WLTicker",<FONT
color=#ff00ff>1.0<FONT
color=#000000>); <FONT
color=#0000ff>AddColumn(<FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>1, ParameterTable
),"Par1",<FONT
color=#ff00ff>1.4<FONT
color=#000000>); <FONT
color=#0000ff>AddColumn(<FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>2, ParameterTable
),"Par2",<FONT
color=#ff00ff>1.4<FONT
color=#000000>); <FONT
color=#0000ff>AddColumn(<FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>3, ParameterTable
),"Par3",<FONT
color=#ff00ff>1.4<FONT
color=#000000>); <FONT
color=#0000ff>AddColumn(<FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>4, ParameterTable
),"Par4",<FONT
color=#ff00ff>1.4<FONT
color=#000000>); <FONT
color=#0000ff>AddColumn(<FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>5, ParameterTable
),"Par5",<FONT
color=#ff00ff>1.4<FONT
color=#000000>); }
if<FONT
color=#000000>(Destination & 4<FONT
color=#000000> ) // To csv
file<FONT
color=#000000> {
<FONT
color=#0000ff>osTabExport( <FONT
color=#ff00ff>"ParameterTable.csv", <FONT
color=#ff00ff>","<FONT
color=#000000>, ParameterTable); }
<FONT
color=#ff0000>return<FONT
face=Arial> Output; }
function<FONT
size=2> GetParameters( Ticker )
{ <FONT
color=#ff0000>local<FONT
face=Arial> Row, RowCount, NOTable, Destination, OutPut,
TickerRow; <FONT
color=#ff0000>global<FONT
face=Arial> ParameterTable;
ParameterTable = <FONT
color=#0000ff>osTabCreate<FONT
face=Arial>();
Parameter[0<FONT
color=#000000>] = -1;
// First Element is used to pass table
status<FONT
color=#000000> <FONT
color=#ff0000>if( <FONT
color=#0000ff>osTabLoad(<FONT
ParameterTable) == 1<FONT
size=2> )
{
ParameterArray = <FONT
color=#ff00ff>0<FONT
color=#000000>; RowCount =
osTabGetRowCount<FONT
size=2>( ParameterTable );
<FONT
color=#ff0000>for( Row = <FONT
color=#ff00ff>0; Row < <FONT
color=#0000ff>osTabGetRowCount<FONT
face=Arial>( ParameterTable ); Row++ )
<FONT
color=#ff0000>if( <FONT
color=#0000ff>Name() == <FONT
color=#0000ff>osTabGet( Row, <FONT
color=#ff00ff>0<FONT
color=#000000>, ParameterTable )) TickerRow = Row;
ParameterArray[<FONT
color=#ff00ff>1] = <FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>1<FONT
color=#000000> , ParameterTable );
ParameterArray[<FONT
color=#ff00ff>2] = <FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>2<FONT
color=#000000> , ParameterTable );
ParameterArray[<FONT
color=#ff00ff>3] = <FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>3<FONT
color=#000000> , ParameterTable );
ParameterArray[<FONT
color=#ff00ff>4] = <FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>4<FONT
color=#000000> , ParameterTable );
ParameterArray[<FONT
color=#ff00ff>5] = <FONT
color=#0000ff>osTabGet( TickerRow, <FONT
color=#ff00ff>5<FONT
color=#000000> , ParameterTable );
}
<FONT
color=#ff0000>return<FONT
face=Arial size=2> ParameterArray; }
<FONT face=Arial
size=2>
<FONT face=Arial
size=2>
<FONT face=Arial
size=2>
<FONT face=Arial
size=2>
<FONT face=Arial
size=2> 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@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.
|