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; }
Don, How did you get your data to code for 0-6 to begin with. Are there data bases that code for day of the week? Thanks
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
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?
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.
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 ) ) ));