PureBytes Links
Trading Reference Links
|
Hello Cliff,
The arguments are passed to the DLL "by-value"
it means that you can not overwrite values of arguments.
There are actually two ways of returning results from your
DLL. One is just use return value allocated via
AmiVar VMyDLLFunction( int NumArgs, AmiVar *ArgsTable )
{
result = AllocArrayResult()
... calculate...
return result;
}
and use it in AFL:
returned_value = MyDLLFunction( arguments, ... );
The second way is to store the results in the variables
using GetVar / SetVar functions from the site interface
(will be available in 3.79)
Best regards,
Tomasz Janeczko
amibroker.com
----- Original Message -----
From: <cliffelion@xxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: 29 October, 2001 21:29
Subject: [amibroker] Re: plug-in's
Hi Tomasz,
I have successfully been able to create an indicator by passing the
O,H,L,C as arrays to the C code. I cant figure out how to return more
than one result array to AFL.
In the following code I tried to pass an existing AFL array to the C
code and then change the values, but it did not seem to work OK.
return.result; works fine for SI as per your example
changing the values of the asi array does not work as expected
AmiVar VSwingIndex( int NumArgs, AmiVar *ArgsTable )
{
int i, j, L1;
double si, K1, R1, R2, R3, R;
AmiVar result;
result = gSite.AllocArrayResult();
int nSize = gSite.GetArraySize();
float *O = ArgsTable[ 0 ].array;
float *H = ArgsTable[ 1 ].array;
float *L = ArgsTable[ 2 ].array;
float *C = ArgsTable[ 3 ].array;
float *asi = ArgsTable[ 4 ].array;
j = SkipEmptyValues( nSize, C, result.array );
L1 = 3;
for( i = j; i < nSize; i++ )
{
K1 = max ( fabs( H[i] - C[i-1] ), fabs( L[i] - C[i-
1] ) );
R1 = fabs ( H[i] - C[i-1] );
R2 = fabs ( L[i] - C[i-1] );
R3 = fabs ( H[i] - L[i] );
if ( (R1 > R2) & (R1 > R3) )
R = fabs(H[i]-C[i-1])-.5*fabs(L[i]-C[i-1])
+.25*fabs(C[i-1]-O[i-1]);
else if ( (R2 > R1) & (R2 > R3) )
R = fabs(L[i]-C[i-1])-.5*fabs(H[i]-C[i-1])
+.25*fabs(C[i-1]-O[i-1]);
else if ( (R3 > R1) & (R3 > R2) )
R = fabs(H[i]-L[i])+.25*fabs(C[i-1]-O[i-1]);
si = C[i]-C[i-1] + 0.5*(C[i]-O[i]) + 0.25*(C[i-1]-O[i-
1]);
si = (50 * si / R) * (K1/L1);
result.array[i] = (float) si;
asi[i] = asi[i-1] + (float) si;
}
return result;
}
--- In amibroker@xxxx, "Tomasz Janeczko" <amibroker@xxxx> wrote:
> Dear Cliff Elion,
>
> Check out the ReadMe.html and the supplied examples in C++ and VB
> in the beta archive (Plugins/src subdirectory for C++ sample code).
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
>
>
> ----- Original Message -----
> From: <cliffelion@xxxx>
> To: <amibroker@xxxx>
> Sent: Monday, October 29, 2001 4:16 PM
> Subject: [amibroker] plug-in's
>
>
> > Has anyone done any work with the plug-in's?
> >
> > I am looking at attempting my first plug-in. Where can I find
> > documentation or example of how to pass several arrays to the C
> > function. (ie H,L,C,O) and then return several arrays back to
Ami
> > such as (buy, buyprice .... ).
> >
> > Thanks for your help
> >
> > Cliff Elion
> >
> >
> >
> >
> >
> > Your use of Yahoo! Groups is subject to
http://docs.yahoo.com/info/terms/
> >
> >
> >
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
|