|
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.
/* 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 -----
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 );
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 -----
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
__,_._,___
|