PureBytes Links
Trading Reference Links
|
Hello,
I have made a number of posts in the past asking for help
understanding how some AFL things work that were causing me
problems. Today, I see that some of these issues are related to each
other.
Most seem to be related to the number of bars that are loaded for an
operation.
1. SetBarsRequired()
I reduce the number of bars for calculating some of my slow loops to
increase speed.
At TJ's suggestion, I also placed a SetBarsRequired(barHistory, 0);
at the end of my AFL which overrides the Fast AFL settings.
barHistory is set by parameter to the number of bars I want to see in
my charts.
This was a great help in AFL execution speed. However, the
SetBarsRequired() statement is peak detecting as long as the chart is
running. That means that if I want to see 50,000 bars instead of
2,000 bars for a moment, the number of bars loaded will go up to
50,000 when I increase them, but will never be reduced when I set the
number back to 2,000. So the slow down is permanent after that until
I restart AB (or edit my chart AFL). Not ideal from my perspective.
2. AddToComposite()
The first use of an AddToComposite() has the effect of requiring
1,000,000 bars back and 1,000,000 forward in fast AFL. Once
executed, you can never go back to fast AFL.
This can have a bad side effect for some ATC uses. In my case, I
wanted to use an ATC ticker to hold flags to indicate a manual
trade. Normally my code only needs 2000 bars loaded. When I load in
the ticker with foreign() and modify a bar, then use ATC to write it
back out, it does not write it out correctly The FIRST time. This is
because the number of bars required was less at the time the Foreign
() function was executed and the number required for the ATC was all
bars, which does not take effect until the next pass of AFL for the
next Foreign() function execution. This is messy to understand, and
I do not fully comprehend all the details of it, except the first ATC
write was not correct.
However, the SetBarsRequired() command at the end of the AFL
overrides this behavior, and keeps the number of bars the same as
before. This leads to a similar problem, only now every ATC write is
bad unless the SetBarsRequired() command includes all bars, which
defeats the purpose of speeding up the AFL.
3. My questions
Have I described what is happening correctly?
How do I get the number of bars loaded to match the SetBarsRequired()
command when I want to reduce the number?
In order to have fast execution, am I going to have to abandon my use
of ATC for saving static arrays?
What other approach could I use to have high speed AFL and also be
able to transfer array data between charts without using ATC?
4. The AFL which demonstrates the First ATC write problem :
_SECTION_BEGIN("Manual Trades");
// This section allows manual trades to be entered and saved
permanently as a ticker
// ~name1 is Buy flags
// ~name2 is Sell flags
// ~name3 is Short flags
// ~name4 is Cover flags
function saveManual(array, ManName)
{AddToComposite(array ,ManName ,"x",atcFlagEnableInIndicator|
atcFlagDefaults);}
function saveAllManual(BuyMan, SellMan, ShortMan, CoverMan, ManName)
{
saveManual(BuyMan , ManName+"1");
saveManual(SellMan , ManName+"2");
saveManual(ShortMan , ManName+"3");
saveManual(CoverMan , ManName+"4");
}
ManualName = ParamStr("Manual Trade Ticker", "~Kezha");
createManual = ParamTrigger("Make Empty Ticker", "Make Empty Ticker" );
EnableManual = ParamToggle("Enable Manual Trades", "OFF|ON" );
setbuy = ParamTrigger("Buy", "Buy" );
setsell = ParamTrigger("Sell", "Sell" );
setshort = ParamTrigger("Short", "Short" );
setcover = ParamTrigger("Cover", "Cover" );
clear = ParamTrigger("Clear", "Clear" );
bi = BarIndex();
sbi = SelectedValue( bi )-bi[0];
if( createManual )
{
saveAllManual(0, 0, 0, 0, ManualName);
}
if( enableManual )
{
BuyMan = Foreign(ManualName+"1" ,"H");
SellMan = Foreign(ManualName+"2" ,"H");
ShortMan = Foreign(ManualName+"3" ,"H");
CoverMan = Foreign(ManualName+"4" ,"H");
if( setbuy ){BuyMan[sbi ] = 1; saveManual(BuyMan , ManualName+"1");}
if( setsell ){SellMan[sbi ] = 1; saveManual(SellMan, ManualName+"2");}
if( setshort ){ShortMan[sbi ] = 1; saveManual(ShortMan, ManualName
+"3");}
if( setcover ){CoverMan[sbi ] = 1; saveManual(CoverMan, ManualName
+"4");}
if( clear )
{
BuyMan[sbi ] = 0;
SellMan[sbi ] = 0;
ShortMan[sbi ] = 0;
CoverMan[sbi ] = 0;
saveAllManual(BuyMan, SellMan, ShortMan, CoverMan, ManualName);
}
PlotShapes( BuyMan * shapeUpArrow,colorGreen,0,L,-25);
PlotShapes( SellMan * shapeDownArrow ,colorRed ,0,H,-25);
PlotShapes( ShortMan * shapeHollowDownTriangle ,colorRed ,0,H,-25);
PlotShapes( CoverMan * shapeHollowUpTriangle,colorGreen,0,L,-25);
}
_SECTION_END();
Thank you,
Dennis Brown
Please note that this group is for discussion between users only.
To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
For other support material please check also:
http://www.amibroker.com/support.html
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/amibroker/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:amibroker-digest@xxxxxxxxxxxxxxx
mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
<*> To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|