PureBytes Links
Trading Reference Links
|
Mark, I made slight changes that helped me achieve my objective.
It also requires only one run of the scan. Below is the modified code for
anybody that is interested.
>StaticVarGet("RSIInitial");
list = CategoryGetSymbols(categoryWatchlist, 4);
for(i = 0; (sym = StrExtract(list, i)) != ""; i++)
{
SetForeign(sym);
if(Nz(Once) == 0)
{
StaticVarSet("RSIMinArray", C);
StaticVarSet("RSIMaxArray", C);
StaticVarSet("RSIInitial", 1);
}
else
{
currentMin = StaticVarGet("RSIMinArray");
currentMax = StaticVarGet("RSIMaxArray");
newMin = Min( C, currentMin );
newMax = Max( C, currentMax );
StaticVarSet("RSIMinArray", newMin);
StaticVarSet("RSIMaxArray", newMax);
}
RestorePriceArrays();
}
Buy = 0;
AddToComposite(StaticVarGet("RSIMaxArray"), "~minmax", "H", 2 + 8 + 16 );
AddToComposite(StaticVarGet("RSIMinArray"), "~minmax", "L", 2 + 8 + 16 );
From:
amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of ta
Sent: Wednesday, October 07, 2009 1:54 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: RE: [amibroker] Re: Best Approach to a Multipass Problem
Thanks Mark for all your effort. It
seems that it is picking up the min correctly but then it uses the close of
index for max value. I’ll spend the rest of the day to figure out what the
problem and will report back later. Thanks again.
From:
amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Mark
Hike
Sent: Tuesday, October 06, 2009 8:21 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: Re: [amibroker] Re: Best Approach to a Multipass Problem
This thing is more complicated than I originally thought. Atc() is a bit
unpredictable if the code refers to the Atc() symbol itself.
But using static arrays seem to work:
1. Set the current symbol to an index (such as !COMP) and run scan for the
watchlist with RSI artificial symbols (use filter), set Range to all quotations:
Buy = 0;
>
if(Nz(Once) == 0)
{
StaticVarSet("RSIMinArray", C);
StaticVarSet("RSIMaxArray", C);
StaticVarSet("RSIInitial", 1);
}
else
{
currentMax = StaticVarGet("RSIMaxArray");
currentMin = StaticVarGet("RSIMinArray");
newMax = Max( C, currentMax );
newMin = Min( C, currentMin );
StaticVarSet("RSIMinArray", newMin);
StaticVarSet("RSIMaxArray", newMax);
}
2. Keep the current symbol as the index, and run scan for current symbol only
with all quotations:
AddToComposite(StaticVarGet("RSIMaxArray"), "~minmax",
"H" );
AddToComposite(StaticVarGet("RSIMinArray"), "~minmax",
"L" );
StaticVarRemove("RSI*");
Now you can go to ~minmax symbol to check it out.
- Mark
On
Tue, Oct 6, 2009 at 8:54 PM, ta <tagroups@xxxxxxxxxxxxx>
wrote:
Still
no luck. I think the problem has to do using the rsi atc files and
addtocomposite function. Rsi atc files have only value in the closed field.
Have you tested successfully? TA
Change "Use only local database" to Yes
and it should work.
On Tue, Oct 6, 2009 at 8:25 PM, ta <tagroups@xxxxxxxxxxxxx>
wrote:
Indeed.
Below are the setting & information
Weird, it works for me.
I don't know what database you use, please check the ticker "~minmax"
(Menu Symbol/Information), make sure "Use only local database" is
Yes, because you created manually.
- Mark
On Tue, Oct 6, 2009 at 7:58 PM, ta <tagroups@xxxxxxxxxxxxx>
wrote:
Mark, I simplified the code for debugging purposes as follows. The
trace statement shows the values, however it doesn’t write successfully to atc
file ~minmax (~minmax, high field remain empty). Any idea why? TIA
currentMax = Nz(Foreign( "~minmax", "high"
));
newMax = Max(C, currentMax);
deltaMax = newMax - currentMax;
_TRACE( "symbol:
" + Name() + " newMax: " + newMax );
AddToComposite(newMax, "~minmax", "High");
symbol:
~RSI-IBM newMax: 65.5203 Formulas\1Production\AddtoCompsiteTestMark.afl
10
53 16:15:20.75
symbol:
~RSI-INTC newMax: 57.6707 Formulas\1Production\AddtoCompsiteTestMark.afl
10
53 16:15:20.75
symbol:
~RSI-MSFT newMax: 48.1265 Formulas\1Production\AddtoCompsiteTestMark.afl
10
53 16:15:20.75
Put Nz() around them to avoid initial NULL values.
currentMax = Nz(Foreign( "~minmax", "high" ));
currentMin = Nz(Foreign( "~minmax", "low"));
Also you need to use Delta..., otherwise you just add all those min/max values together,
which is not what you want as I understand.
- Mark
On Tue, Oct 6, 2009 at 6:01 PM, ta <tagroups@xxxxxxxxxxxxx>
wrote:
Thanks
Mike for your input. Couple of points.
1. First pass
mRSI = RSI(14);
AddToComposite( mRSI, "~RSI-"+ Name(), "C", atcFlagDeleteValues
| atcFlagEnableInBacktest | atcFlagDefaults );
Buy=0 AND InWatchList(3);
during
the first pass we run a scan on all quotations on watchlist 3. The above code
calculates rsi for symbols ibm, msft and intc and writes their rsi value in
close field of atc files ~RSI-IBM, ~RSI-MSFT & ~ ~RSI-INTC.
Then
we can run the following code (in scan mode) to assign the new atc symbols to
watch list 4
TickerList = CategoryGetSymbols( categoryGroup,
253);
for( i=0; (Ticker=StrExtract( TickerList,
i)) != ""; i++)
{
if ((StrLeft(Ticker,4)=="~RSI"))
{
CategoryAddSymbol(Ticker, categoryWatchlist,
4);
}
}
Buy=0;
I then added the symbol ~minmax manually. Then I ran the
following code based on your suggestion with the modification that I did not
use Deltamax and Deltamin (I am interested only in max & min). The code
does not create any values. I used static variables That did not produce
results either.
currentMax = Foreign( "~minmax", "high" );
StaticVarSet("newMax", Max( C,
currentMax ));
_TRACE( "symbol:
" + Name() + " newMax: " + StaticVarGet("newMax"));
AddToComposite( StaticVarGet("newMax"), "~minmax", "high");
What do you think. The following is the put from the _trace
statement.
currentMax = Foreign( "~minmax", "high" );
currentMin = Foreign( "~minmax", "low"
);
newMax = Max( C, currentMax );
newMin = Min( C, currentMin );
_TRACE( "symbol:
" + Name() + " newMax: " + LastValue(newMax) + " newMin:
" + LastValue(newMin) );
AddToComposite( newMax, "~minmax", "high");
AddToComposite(NewMin, "~minmax", "low");
symbol: ~RSI-IBM newMax: 0 newMin: 0
Formulas\1Production\AddtoCompsiteTestMark.afl
9 100 14:43:49.21
symbol: ~RSI-INTC newMax: 0 newMin: 0
Formulas\1Production\AddtoCompsiteTestMark.afl
9 100 14:43:49.21
symbol: ~RSI-MSFT newMax: 0 newMin: 0
Formulas\1Production\AddtoCompsiteTestMark.afl
9 100 14:43:49.21
my AA settings
1. First pass
Run scan through all real tickers to generate artificial tickers for RSI (close
field).
2. Second pass
Run scan through all RSI artificial tickers. Do the following:
currentMax = Foreign("~minmax", "high");
currentMin = Foreign("~minmax", "low");
newMax = max(C, currentMax);
newMin = min(C, currentMin);
deltaMax = newMax - currentMax;
deltaMin = newMin - currentMin;
AddToComposite(deltaMax, "~minmax", "high");
AddToComposite(deltaMin, "~minmax", "low");
On Tue, Oct 6, 2009 at 1:01 PM, ta <tagroups@xxxxxxxxxxxxx>
wrote:
Mike,
thanks for your interest. Lets simplify the problem. Lets assume that we want
to calculate the RSI for every bar for all tickers in the database. We can
easily calculate rsi numbers and store them in an atc file. Then we want to
find out what is the minimum and maximum values for rsi is on any given bar in
our database (all tickers). For example if we have three tickers in our
database and we have three bars. The calculated rsi for each ticker would be as
follows:
IBM =
12, 1 , 6
MSFT =
10, 2, 7
INTC =
13, 9, 87
On bar
1 min = 10 max = 13
On bar
2 min = 1 max = 9
On bar
2 min = 6 max = 8
I
don’t know how to program AB to find the min and max values for every bar and
store in a new atc file (lets call it ~minmax). I hope this clarifies the
problem. TIA
For steps 1 and 3, are you spanning symbols? In
other words, do you want the min out of all symbols, or do you want the min on
a symbol by symbol basis?
You might get a better response if you describe a concrete example of what you
are trying to do, assuming 2-3 symbols over a handful of bars.
e.g.
AAA
Alpha = 1, 3, 5, 7
Beta = 2, 4, 6, 8
BBB
Alpha = ...
Beta = ...
CCC
Alpha = ...
Beta = ...
Now what?
Mike
--- In amibroker@xxxxxxxxxxxxxxx,
"ta" <tagroups@xxx> wrote:
>
> Well, after spending about a month on this problem. I can not figure out
> step to namely:
>
> 2. Run thru the atc files and find the min and max values for alpha
> and beta and store is in one new atc file (2nd pass thru database)
>
> Any help or direction would be much appreciated. TIA
>
>
>
> From: amibroker@xxxxxxxxxxxxxxx
[mailto:amibroker@xxxxxxxxxxxxxxx]
On Behalf
> Of ta
> Sent: Friday, September 11, 2009 4:42 PM
> To: amibroker@xxxxxxxxxxxxxxx
> Subject: [amibroker] Best Approach to a Multipass Problem
>
>
>
>
>
> I am calculating certain characteristics for every stock than I have in my
> EOD database (approximately 3000). For the sake of clarity let's use alpha
> and Beta as characteristics. I want to :
>
> 1. calculate the min and max value of alpha & beta in my data base.
>
> 2. Then normalize the values to values between 0 and 1
>
> 3. Then calculate the sum of normalized alpha and beta and store them
> in atc file to be used in backtests
>
>
>
> I was thinking of using the following procedure:
>
> 1. Calculate alpha and beta and store the values for each stock in an
> atc file (first pass thu database)
>
> 2. Run thru the atc files and find the min and max values for alpha
> and beta and store is in one new atc file (2nd pass thru database)
>
> 3. Normalize alpha & beta for each stock using the stock's atc file
> and minmax atc file that I created during the previous step (3rd pass thru
> database)
>
>
>
>
>
> Is there a better/faster approach? Any help or suggestions is much
> appreciated. TIA
>
__._,_.___
**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com
TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
__,_._,___
|
|