Can you elaborate on 6? I
am not sure how this works
Joseph Biran
____________________________________________
From: amibroker@xxxxxxxxxxxxxxx
[mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Dennis Brown
Sent: Saturday, August 02,
2008 10:59 AM
To: amibroker@xxxxxxxxxxxxxxx
Subject: Re: [amibroker] AFL
programming style questions
Herman,
Wow! What a list. A lot of good ideas in here. Thanks!
I have gone down the
checklist to see where I stand on these (embedded below).
BR,
Dennis
On Aug 2, 2008, at 3:58 AM,
Herman vandenBergen wrote:
I have tried many styles but was never able to stick to anyone.
Here are some of my preferences however i am afraid I don't have a specific
style.
I like compact listings to see the maximum number of lines at
once.
1. Ditto.
I rarely use multiple statements in one line.
2. I do this sometimes when
it expresses one thought like: if( Condition ){ X=This; Y=That; }
I use empty
lines to space functional blocks, not to space code for visual effect.
3. Ditto.
I like to indent the curly brackets, to make function and other
blocks of code stand out better
4. I do this type of code
block indenting now:
if(condition){ // simple
comment about what we are doing
indented block of code
is put here
}
else{ // another simple
comment
the else part
}
I use include files when I can to shorten listings. i frequently
paste the code temporarily back in for debugging.
5. Ditto. I have thought it would be cool if include files could be
edited and applied with the syntax check in context with the active chart
--dream on.
If I need to store a lot of calculated variables I may write
them to an include file instead of using StaticVariables or
persistentvariables. I use #Pragma NoCache to get it read each time.
6. This is a real out of the
box idea that never occurred to me. So you overwrite a file with lines of
text like "var = number; " then pull them in at the beginning of
your formula as a way of saving parameters.
I approached the problem differently
with Flexible Parameters, but I like your idea to let the AFL parse the names
and default values in this way.
I use long descriptive variable names; it’s usually less typing
and easier to read than adding long comments.
7. I am trying to do more of this.
I break up lengthy calculations to give me debugging points.
8. Ditto.
I use DebugView a lot, every day.
9. Never use it other than once long ago. I have now written special debug statements that display
variables (in an information "button" array) as they appear at any
selected bar in a loop, or anytime option.
This has made debugging hard problems
a lot easier now. However, I can see that for things
like an auto trade audit trail, the DebugView method is the way to go.
I use three //////// rows to separate major functional sections
to allow spotting them when scrolling through thousands of lines of code.
10. Ditto, but I use //==============
I key most static variables to prevent them from being common to
multiple applications
11. Ditto, but I only use
ChartID because I only have one chart per ID.
I use persistent variables to facilitate easy start up sequences
and to keep trading (IB/TWS) records
12. Ditto, but I use Flexible Parameters method for this.
I like to see initialization blocks because conditions often
change
13. Ditto.
I have folders in my Charts workspace that contain frequent used
code snippets, segments, templates, etc. I edit-copy-paste from these
14. Good idea.
I often work with two editor windows, one to copy from, one
current work
15. Ditto, but one is often a Mac window and one a PC window.
;-)
I Apply my include files to a separate pane/tab so I can easily
open/modify include files. i use 20 tabs.
16. Interesting idea. Some of my include files will not
compile without each other.
I use Chart tabs to organize work in progress and create Layouts
for major code changes, or new systems.
17. I only do a little of this.
I use revision numbers for all programs, like ProgramName-001.
This creates lots of files and requires me to run Program maintenance once a
week.
18. I could improve in this area. I usually just keep the last one -- though I have an
automatic backup system that keeps versions by time, date and month.
Once a week I search my computer for all afl files and import
them into dated-folders in InfoSelect.
19. Luckily, I only have a few programs and only only one
main AFL I work on, so it is not hard for me to track my stuff.
When assigning many variables I like to tab all the
"=" signs to the same level for easier rea! ding.
20. That is an interesting idea.
...
best regards,
Herman
Friday, August 1, 2008, 9:07:31 PM, you wrote:
>
Hello veteran AFL programmers,
>
I am still working on developing a consistent AFL style.
>
I am writing a lot of AFL functions. I try to make as many things
>
functions as I can so that I can reuse a lot of code. It also
makes
>
it easier for the editor to find syntax errors since my main code is
>
indicator only and the syntax check pass does not see that code since
>
it runs without the Chart ID.
>
My trading platform is over 5000 lines of AFL (I keep adding more, and
>
it keeps getting smaller...LOL). About half of that is functions. I
>
pass a lot of data through global variables and arrays between
>
functions for the state of the system. It was the only efficient way
>
that I knew how to make code modular was to have the data common. AFL
>
is largely based on that premise already with special state variables
>
and price/trade arrays.
>
Right now, I have a mix of variable initializations and just global
>
declarations at the top of the formula so that I don't have to declare
>
the globals in each function. I still have a lot of global
>
declarations in some functions, but I want to fi! nish get ting rid of
>
them and just have them declared at the top with a good description of
>
how they are used.
>
I had it in my head that a bunch of global declarations in a
>
frequently called function would slow down the execution of the
>
function. Am I
right about that?
>
I thought I could just mention the names of the input and output
>
variables in the header comments if needed for documentation.
>
I am also slowly changing my comments from // to /* */ so that
they
>
are not in the execution path.
>
I am starting to make my variable names lo! nger so that they are more
>
descriptive of the data they hold.
>
I have some naming conventions like FP_Name for variables that are
>
part of my Flexible Parameters system and exist outside of that module.
>
I am now planning on adding GP_Name for global parameter names and
>
SP_Name for symbol specific parameter names. In Flexible Parameters,
>
I give my parameters distinct names independent of their displayed
>
labels. Those
will be more than mere convention in that they will
>
cause the parameters to be saved in a different file folder.
>
What kind of naming conventions do you use that you are proud of?
>
Any other unique features of your program style that you think are
>
worth copying?
>
Thanks for sharing your style ideas.
>
Best regards,
>
Dennis
|