PureBytes Links
Trading Reference Links
|
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 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
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
#include<FONT
size=2>
<ParameterTableInclude001.afl> //
Create some dummy data...<FONT
face=Arial> T1=<FONT
color=#0000ff>Status(<FONT
color=#ff00ff>"StockNum"<FONT
face=Arial>); T2=<FONT
color=#0000ff>LastValue(<FONT
color=#0000ff>DateNum<FONT
color=#000000>()); 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( Name<FONT
color=#000000>(), T1, Null<FONT
color=#000000>, T3, Null<FONT
color=#000000>, T5 );// Update only 3 of
them<FONT
color=#000000> SaveParameters( <FONT
color=#ff00ff>"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
== 0<FONT
face=Arial> ) {
<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 < <FONT
color=#ff00ff>0<FONT
color=#000000>) 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, <FONT
color=#ff00ff>1<FONT
color=#000000>, ParameterTable ); <FONT
color=#ff0000>if(<FONT
color=#0000ff>Nz(P2,<FONT
color=#ff00ff>0)==P2)
osTabSetNumber<FONT
color=#000000>( P2, Row, <FONT
color=#ff00ff>2<FONT
color=#000000>, ParameterTable ); <FONT
color=#ff0000>if(<FONT
color=#0000ff>Nz(P3,<FONT
color=#ff00ff>0)==P3)
osTabSetNumber<FONT
color=#000000>( P3, Row, <FONT
color=#ff00ff>3<FONT
color=#000000>, ParameterTable ); <FONT
color=#ff0000>if(<FONT
color=#0000ff>Nz(P4,<FONT
color=#ff00ff>0)==P4)
osTabSetNumber<FONT
color=#000000>( P4, Row, <FONT
color=#ff00ff>4<FONT
color=#000000>, ParameterTable ); <FONT
color=#ff0000>if(<FONT
color=#0000ff>Nz(P5,<FONT
color=#ff00ff>0)==P5)
osTabSetNumber<FONT
color=#000000>( P5, Row, <FONT
color=#ff00ff>5<FONT
color=#000000>, ParameterTable ); <FONT
color=#0000ff>osTabSave(<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
== 1<FONT
face=Arial> )
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
== 1<FONT
face=Arial> ) {
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@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.
|