PureBytes Links
Trading Reference Links
|
Without going into the details of what you did there - Are you sure
that PowerBasic uses the same format for floats as TS (the
Microsoft standard) ?
>
> I finally took the time to master the PowerBasic 16 bit DLL compiler and
> I generated a test DLL for TS 4.0. I coded the Tillson T3 moving
> average in the DLL and compared it with T3 written in EL. Calculation
> time for 30 years of daily SP500 close was 3.5 seconds for EL vs. 0.7
> seconds for the DLL. Improvement should be even more after subtracting
> TS's overhead to load the price data. The chart of both methods
> overlayed perfectly to confirm the DLL implementation. I used double
> precision float variables in the DLL for intermediate results because
> that is what I will use for future, more complex and accuracy critical
> applications. DLL file size was only 4.6K and far less than that will
> subtract from TS's 64K program limit.
>
> But, there was a problem that I had to work around and would like to
> resolve. I had no problem passing floats from TS to the DLL, but could
> not pass a float from the DLL function back to TS. I could however pass
> an INT or a LONG to TS. I settled on a LONG which gave more than
> adequate resolution because in the DLL I multiply the final float result
> by 1000 before converting to LONG, and then after TS converts this back
> to float, I divide by 1000. The factor could have just as well been
> 10000 because of the high dynamic range of a 32 bit signed integer.
> This has no bearing on numerical accuracy where it counts - in the DLL,
> where filters, FFT's, etc. will be done. It only involves the last
> transfer to TS where only conditional testing for buy - sell, plotting,
> etc. will be done.
>
> BUT, I still want to use either the FLOAT or LPFLOAT transfer to TS in
> DefineDLLFunc: or understand why they don't work. So, here are
> questions:
>
> 1) I assume I can use FLOAT or LPFLOAT without needing to activate
> TS_KIT.DLL. Is this correct?
>
> 2) I programmed my DLL function to output a 32 bit pointer for the
> address where its floating point result was. LPFLOAT didn't work. In
> fact, LPLONG and LPINT didn't work either when I programmed my function
> to output a 32 bit pointer for address of a LONG and then an INT result
> respectively. So, what is TS's LPxxx looking for?
>
> 3) PBDLL will output C convention, Pascal convention and also some
> other ways specific to VisualBasic. It can also output a float for the
> floating point processor stack. I tried all of these to no avail.
>
> I know that many of you are wizards at C++ version 1.52. I am a very
> proficient BASIC programmer, write utilities, test programs, and do a
> lot of embedded DSP and control processor assembly as well, but I never
> got around to mastering C. So I ask that you please explain in terms of
> memory, register and stack mapping rather than in C terminology. I have
> read a dozen documents (from Omega, Hashnums, Global-Pro, etc.) on
> interfacing DLL's to TS, plus everything about DLL's on the "Omega List"
> for the last two years, but still can't figure the parameter passing
> rules for TS's DefineDLLFunc:. Everything is explained as "how to use"
> C++ version 1.5x.
>
> Lastly, the PowerBasic 16 bit compiler is proving to be an excellent
> accessory to TS4. It is damn fast, generates lean code, and has all the
> amenities of a structured high level language: Functions, subroutines,
> huge multi-dimensional arrays, global and local variables, array
> sorting, etc. And, program and data size is unlimited. I will be
> moving math stuff and some conditional testing into DLL's from now on.
>
|