AmiBroker AFL using Switch with DayOfWeek()

AmiBroker AFL

DayOfWeek
Syntax: DayOfWeek()

Returns: ARRAY

Function: Returns the array with day of week (0-6):
0 - Sunday
1 - Monday
2 - Tuesday
3 - Wednesday
4 - Thursday
5 - Friday
6 - Saturday

I want to test DayOfWeek() and depending on the number returned, assign the corresponding day of the week to a variable.

I am thinking the Switch statement should do this but I am having trouble with the syntax.

switch(DayOfWeek)
{
case 1:
variable == Monday;
case 2:
variable == Tuesday;
case 3:
variable == Wednesday;
case 4:
variable == Thursday;
case 5:
variable == Friday;
}

What would be the correct way to code this?
 
Let me clairfy just a bit.

I want to enhance the Title section of my charts by inserting the day of the week in front of the date: Friday, 12/30/2011.

The DayOfWeek() returns a number. So I need to convert the number to text that says what day it is.

So...

varDayOfWeek = DayOfWeek()

switch(varDayOfWeek)
{
case 1:
varDayOnChart == Monday;
case 2:
varDayOnChart == Tuesday;
case 3:
varDayOnChart == Wednesday;
case 4:
varDayOnChart == Thursday;
case 5:
varDayOnChart == Friday;
}
 
Hi Quickless,

The AmiBroker AFL reference guide gives this information:

DAYOFWEEK

SYNTAX dayofweek()

RETURNS ARRAY
FUNCTION Returns the array with day of week (0-6):
0 - Sunday
1 - Monday
...
5 - Friday
6- Saturday

EXAMPLE buy = dayofweek() == 1; // buy on Monday
sell = dayofweek() == 5; // sell on Friday
 
Try this:

Code:
function DayOfWeekName()
{
	dayInt = DayOfWeek();
	dayStr = 
		WriteIf(dayInt == 0, "Sunday", 
		WriteIf(dayInt == 1, "Monday",
		WriteIf(dayInt == 2, "Tuesday",
		WriteIf(dayInt == 3, "Wednesday",
		WriteIf(dayInt == 4, "Thursday",
		WriteIf(dayInt == 5, "Friday",
		WriteIf(dayInt == 6, "Saturday",
			"Unknown")))))));

	return dayStr;
}
 
If you are just interested in converting a single number into a day of the week, then you can simply use:

DayOfWeekName = StrExtract( "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", lastvalue( DayOfWeek() ) );

This will give you the name of the day of the last bar (day if you are using end of day data)

Note that you may get more expertise on the yahoo group for Amibroker - Tomasz, the programmer behind AB, regularly posts.

HTH,
David
 
Quote from rdg:

Try this:

Code:
function DayOfWeekName()
{
	dayInt = DayOfWeek();
	dayStr = 
		WriteIf(dayInt == 0, "Sunday", 
		WriteIf(dayInt == 1, "Monday",
		WriteIf(dayInt == 2, "Tuesday",
		WriteIf(dayInt == 3, "Wednesday",
		WriteIf(dayInt == 4, "Thursday",
		WriteIf(dayInt == 5, "Friday",
		WriteIf(dayInt == 6, "Saturday",
			"Unknown")))))));

	return dayStr;
}

Thank you rdg:

I plugged in the code as you suggested.

It compiles without errors and I can apply it to the chart.

The problem is that it doesn't do anything.

I notice you are using a Return statement.

Sorry, I am such a rookie, but what language do I need to get the result to print out?
 
Quote from dwrowley:

If you are just interested in converting a single number into a day of the week, then you can simply use:

DayOfWeekName = StrExtract( "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday", lastvalue( DayOfWeek() ) );

This will give you the name of the day of the last bar (day if you are using end of day data)

Note that you may get more expertise on the yahoo group for Amibroker - Tomasz, the programmer behind AB, regularly posts.

HTH,
David

Thank you dwrowley: I input the code you suggested.

It compiles and prints to the chart. The problem is that the result is always 'Friday.' It doesn't matter what day it really is.
 
Quote from DonStar:

Thank you rdg:

I plugged in the code as you suggested.

It compiles without errors and I can apply it to the chart.

The problem is that it doesn't do anything.

I notice you are using a Return statement.

Sorry, I am such a rookie, but what language do I need to get the result to print out?

I use return because it's returning a value from a function. You can try to restructure the code so it doesn't use a function if you're looking for ways to learn syntax. Anyway, here it is with the Price.afl Title assignment modified to include the name:
Code:
function DayOfWeekName()
{
	dayInt = DayOfWeek();
	dayStr = 
		WriteIf(dayInt == 0, "Sunday", 
		WriteIf(dayInt == 1, "Monday",
		WriteIf(dayInt == 2, "Tuesday",
		WriteIf(dayInt == 3, "Wednesday",
		WriteIf(dayInt == 4, "Thursday",
		WriteIf(dayInt == 5, "Friday",
		WriteIf(dayInt == 6, "Saturday",
			"Unknown")))))));

	return dayStr;
}

_N(Title = "{{NAME}} - {{INTERVAL}} " + DayOfWeekName() + ", {{DATE}} " + StrFormat("Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
 
Quote from rdg:

I use return because it's returning a value from a function. You can try to restructure the code so it doesn't use a function if you're looking for ways to learn syntax. Anyway, here it is with the Price.afl Title assignment modified to include the name:
Code:
function DayOfWeekName()
{
	dayInt = DayOfWeek();
	dayStr = 
		WriteIf(dayInt == 0, "Sunday", 
		WriteIf(dayInt == 1, "Monday",
		WriteIf(dayInt == 2, "Tuesday",
		WriteIf(dayInt == 3, "Wednesday",
		WriteIf(dayInt == 4, "Thursday",
		WriteIf(dayInt == 5, "Friday",
		WriteIf(dayInt == 6, "Saturday",
			"Unknown")))))));

	return dayStr;
}

_N(Title = "{{NAME}} - {{INTERVAL}} " + DayOfWeekName() + ", {{DATE}} " + StrFormat("Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));

Thank you rdg!

This works great!
 
Back
Top