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

RE: [amibroker] Re: Single Value from Array



PureBytes Links

Trading Reference Links

Cato,

 

I don't have QP3 so I can't get too specific, but I think you have a basic misunderstanding on how Amibroker is supposed to work. It's very common for people with coding experience to want AB to work with single values. If I'm way off on understanding your issue, my apologies!

 

AB is an array processing system. For example, you shouldn't mix arrays and single values as you have done in your Do loop. You have assigned a single value to an array with EPS0 = EPS[b-1]. So, you have assigned the same value to the entire EPS0 array. This array is the same size array as the ticker you are working with. Now you have 4 arrays, all barcount long, with the same value in each one. I think you are thinking you have an array that is one-quarter long (about 66 days), but it is not. Besides, you already have all the data in the original EPS array and it's already arranged by quarter. In abbreviated form you have this:

 

Array Values à

EPS   11111111111111122222222222222233333333333333334444444444444444

EPS0  11111111111111111111111111111111111111111111111111111111111111

EPS1  22222222222222222222222222222222222222222222222222222222222222

EPS2  33333333333333333333333333333333333333333333333333333333333333

EPS3  44444444444444444444444444444444444444444444444444444444444444

 

You need to get comfortable with data being in arrays and each bar simply represents the status "as of that bar". It really works well this way. Your EPS has a value everyday. If it doesn't change for an entire quarter, you simply have the same value everyday. Then, on the day it changes, you'll have the new value for the next 66 days. On any given day you can simply refer to your EPS or Sales array and you will have the correct value. AB "knows" which day you are "on". Same answer for your original question about Ref(). It does refer to a single value -x bars in the past, it's just an array of single references so on any given day, the array "knows" the answer -x bars previously.

 

Again, sorry if I am explaining something you already know.

--

Terry

--

Thank you very much for replying, Terry. That's pretty much what I discovered over the weekend. Would you mind looking at my response to Bill Barnard and providing your input?

Terry <MagicTH@xxxxxxxxxxx> wrote:

Try this:

i = 0; //Start at beginning of array
do i++; while (myArray[i-1] == myArray[i])
//After this line executes, the value of i = the first changed array
element.
--

-----Original Message-----
From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Jeff Springer
Sent:
Monday, March 20, 2006 10:35
To: amibroker@xxxxxxxxxxxxxxx
Subject: Re: [amibroker] Re: Single Value from Array

 

Hi Bill,

I've figured it out, but have run into a new problem. I'm trying to get the history of EPS and Sales from the QP3 data, which are arrays. I didn't want to be this specific because I realize others don't have QP3 and I wanted to phrase my question in general terms that I think would work with all arrays. I think if you run this code on any array you should come up with the same error I got. Would you mind looking at it and giving your input?

 

EPS=GetExtraData("EPS");

b=BarCount;

i=1;

EPS0=EPS[b-1];

Sales0=Sales[b-1];

//CurrentQ-1

do

{

EPS1=EPS[b-i];

Sales1=Sales[b-i];

i++;

}

while (EPS1==EPS0 AND i<b);

//CurrentQ-2

//i=1;

do

{

EPS2=EPS[b-i];

Sales2=Sales[b-i];

i++;

}

while (((EPS2==EPS0) OR (EPS2==EPS1)) AND i<b);

//CurrentQ-3

i=1;

do

{

EPS3=EPS[b-i];

Sales3=Sales[b-i];

i++;

}

while (((EPS3==EPS2) OR (EPS3==EPS1) OR (EPS3==EPS0)) AND i<b);


There's more, but you can see the general pattern from these three. The EPS array is set up so that each bar for a quarter has the same EPS value. When a new EPS comes out, the EPS changes (ideally; since I'll only be looking at stocks where EPS increases, I don't care if the code mistakes a new EPS for an unchanged EPS). I step back through the array to search for a different EPS.

 

This code works fine, but I would prefer that "i" continues counting up rather than reseting (as I've done with the "i=1;" line before each do loop). The problem with this is that the do loop checks the condition /after/ running the "EPSx=EPS[b-i];" line. So, when it hits a stock with few bars, the code errors out with the "outside 0... (barcount-1) range" error. Is there a way to put a conditional statement in before the "EPSx=EPS[b-1];" line so that if "i" is greater than the barcount, then EPSx is null, or 0?

 

I've tried changing the "EPSx=EPS[b-i];" line to "EPSx=iif(i>b, 0, EPS[b-i];" but that still errors out. Maybe there's something more basic I'm missing.

 

Thank you, for your help.

 

Cato
Bill Barnard <wbarnard@xxxxxxx> wrote:

--- In amibroker@xxxxxxxxxxxxxxx, Jeff Springer <fatboycato@xxx> wrote:
>
> Thank you so much for replying, Bill, but I don't think that will
work for me. I was hoping to use the code in an exploration, and I
think this code will only give me the data in a debugger window,
correct? I tried assigning the _Trace calls to variables, and then
displaying that variable with AddColumn, but of course that doesn't
work. I'm too programming ignorant to know why.
>   
>   It seems to me that if Ref() calls up a specific value in the
array, then it shouldn't be returning an array, just that specific
value. I'm sure there's a good reason why it doesn't work this way, I
only wish I had some way of calling up a value from an array and
assigning that value, and only that value, to a variable.

---------------------------------------------

You are welcome. sorry it isn't what you need.

Ref() does produce an array, the original one shifted by a certain amount.

If you can describe what you are trying to do, very exactly, in
English, I am sure the code would not be too difficult.


 




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 other support material please check also:
http://www.amibroker.com/support.html





SPONSORED LINKS
Investment management software Real estate investment software Investment property software
Software support Real estate investment analysis software Investment software


YAHOO! GROUPS LINKS