From your startday/endday conditions it looks like you're trying determine the number of days the close was below the
MA of the high.
 
Your startday/endday values need to be DateNum values.  ANDing a DateNum with the boolean 0 or 1 in the COND arrays
won't do that.  The way you're using it you also don't need LastValue or the Status calls.  In the example code I just used
the Status calls to get 2 arbitrary dates.
 
In the modified code below days and daysbetween arrays will be positive when the last cross was the price rising above the MA
and negative when the last cross was the price falling below the MA.  Either way, the value will be the number of days between
the most recent 2 crosses.

Regards,

Bob

/* Days Between Dates v4 */

price = Close;

sig = MA(High,20);

Cond1 = Cross(price,sig);

Cond2 = Cross(sig,price);

//////////////////////////////////

dt = DateNum();

dy = DayOfYear() + 365 * Year();

//startDay = fb = Status("rangefromdate") AND COND2;

//endDay = eb = Status("rangetodate") AND COND1;

startday=ValueWhen(Cond2,dt);

endday=ValueWhen(Cond1,dt);

//Days = LastValue(ValueWhen( dt == eb, dy ) - ValueWhen( dt == fb, dy ));

Days = ValueWhen( dt == endday, dy ) - ValueWhen( dt == startday, dy );

Plot(Close,"Close",1,128);

Plot(days,"days",colorBlack,styleLine+styleOwnScale);

Daysbetween = Days;

Plot(sig,"sig",2,1);

//Plot(Daysbetween ,"Daysbetween ",10,styleLine+styleOwnScale );

 

----- Original Message -----
From: Mr. Valley
Sent: Wednesday, October 04, 2006 9:35 PM
Subject: RE: [amibroker] DaysBetweenDates() TimeBetweenConds()

Bob, Thank you.
 
How do I fix the formula below?
I seem to understand the sweet subtraction, but assigning the conditions is what I'm struggling with - I get an Empty value.
Obviously, it's me...  I appreciate it.
 
for example:

/* Days Between Dates v4 */

price = Close;

sig = MA(High,20);

Cond1 = Cross(price,sig);

Cond2 = Cross(sig,price);

//////////////////////////////////

dt = DateNum();

dy = DayOfYear() + 365 * Year();

startDay = fb = Status("rangefromdate") AND COND2;

endDay = eb = Status("rangetodate") AND COND1;

Days = LastValue(ValueWhen( dt == eb, dy ) - ValueWhen( dt == fb, dy ));

Plot(Close,"Close",1,128);

Plot(days,"days",colorBlack,styleLine);

Daysbetween = Days;

Plot(sig,"sig",2,1);

Plot(Daysbetween ,"Daysbetween ",10,1 );

 

-----Original Message-----
From: [EMAIL PROTECTED]ps.com [mailto:amibroker@yahoogroups.com]On Behalf Of Bob Johnson
Sent: Wednesday, October 04, 2006 4:22 PM
To: [EMAIL PROTECTED]ps.com
Subject: Re: [amibroker] DaysBetweenDates()

I had similar question about comparing DateTime formatted values to determine the days between them.
I wanted to be able to tell if it had been more than 30 days since I exited a stock before taking an entry signal
in the same stock.
 
This is the elegant solution Marcin Gorznski at Amibroker Support supplied.
 
All I did here was convert the 'dt' array in Marcin's solution from DateTime() to DateNum().
 
dt = DateNum();
dy = DayOfYear() + 365 * Year();
 
fb = Status("rangefromdate");
eb = Status("rangetodate");
 
Days = LastValue(ValueWhen( dt == eb, dy ) - ValueWhen( dt == fb, dy ));
 
Plot(days,"days",colorBlack,styleLine);
If you really are comparing the start/end dates of a backtest be sure your 'to date' is not past the last day in the data
or this won't work because the dt array stops at the last bar.
 
The solution doesn't deal with leap years, but I could live with the possibilty of missing a trade or two every 4 years so
I didn't attempt to add that.
 
Regards,
 
Bob Johnson
 
----- Original Message -----
From: Mr. Valley
Sent: Tuesday, October 03, 2006 7:38 PM
Subject: [amibroker] DaysBetweenDates()


I'm having trouble with calculating the number of days between the dates of
two conditions, either daily or intraday intervals. I looked at the
DeDateTime.dll
These were planned functions, but I don't see them implemented.
GetDaysBetween() and GetTradeDaysBetween()

Also tried...

/* Days Between Dates v3 */

price = Close;
sig = MA(High,20);
Cond1 = Cross(price,sig);
Cond2 = Cross(sig,price);

startDay = LastValue( ValueWhen( Cond1 , 1 ) );
endDay = LastValue( ValueWhen( Cond2 , 1 ) );
Daysbetween = abs(endDay - startDay );
Plot(Close,"Close",1,1);
Plot(sig,"sig",2,1);
Plot(Daysbetween ,"Daysbetween ",10,1 | styleOwnScale);

//////////////
Also Tried this and wasn't able to resolve it to what I am trying to do.

/* Days Between dates v2 */
SetBarsRequired(1000,0);
function GetDaysInRange()
{ fb = Status("firstbarinrange");
eb = Status("lastbarinrange");
startday = LastValue( ValueWhen( fb, DayOfYear() ) );
startyear = LastValue( ValueWhen( fb, Year() ) );
endDay = LastValue( ValueWhen( eb, DayOfYear() ) );
endYear = LastValue( ValueWhen( eb, Year() ) );
Days = 365 * ( endYear - startyear ) + endDay - StartDay;
return Days;
}""+GetDaysInRange();

//Title = "" + GetDaysInRange();
Plot(Close,"Close",1,1);
Plot(GetDaysInRange(),"GetDaysInRange()",1,1);

Any Suggestions?
Thanks in advance.

Mr Valley

__._,_.___

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
Software support Small business finance Business finance online
Business finance training Business finance course

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

__,_._,___

Reply via email to