[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [amibroker] Re: Best Approach to a Multipass Problem



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

 

test5.jpg

 

From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Mark Hike
Sent: Tuesday, October 06, 2009 5:28 PM


To: amibroker@xxxxxxxxxxxxxxx
Subject: Re: [amibroker] Re: Best Approach to a Multipass Problem

 

 

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

 

test2.jpg

 

test3.jpg

 

test4.jpg

 

From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Mark Hike
Sent: Tuesday, October 06, 2009 5:13 PM


To: amibroker@xxxxxxxxxxxxxxx
Subject: Re: [amibroker] Re: Best Approach to a Multipass Problem

 

 

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

 

From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Mark Hike
Sent: Tuesday, October 06, 2009 3:24 PM


To: amibroker@xxxxxxxxxxxxxxx
Subject: Re: [amibroker] Re: Best Approach to a Multipass Problem

 

 

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

 

 

 

 

 

Testmark1.jpg

 

From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Mark Hike
Sent: Tuesday, October 06, 2009 12:31 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: Re: [amibroker] Re: Best Approach to a Multipass Problem

 

 

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

 

 

From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Mike
Sent: Monday, October 05, 2009 10:09 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: Best Approach to a Multipass Problem

 

 

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/





Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___