- //------------------------------------------------------------------------------
- //
- // Formula Name: Luna Phase
- // Author/Uploader: OzFalcon
- // E-mail: OzFalconAB@BDen.org
- // Date/Time Added: 2006-08-31 23:36:11
- // Origin: http://home.att.net/~srschmitt/lunarphasecalc.html
- // Keywords: Luna Phase Zodiac
- // Level: basic
- // Flags: indicator
- // Formula URL: http://www.amibroker.com/library/formula.php?id=681
- // Details URL: http://www.amibroker.com/library/detail.php?id=681
- //
- //------------------------------------------------------------------------------
- //
- // This program helps anyone who needs to know the Moon's phase, age,
- // distance, and position along the ecliptic on any date within several
- // thousand years in the past or future. The age of the moon in days as well
- // as its visual phase are given. The Moon's ecliptic longitude is calculated
- // as well as the corresponding zodiac constellation.
- //
- //------------------------------------------------------------------------------
- _SECTION_BEGIN("LunaPhase");
- // Luna Phase Calculator.
- // Code converted from: http://home.att.net/~srschmitt/lunarphasecalc.html
- // OzFalconAB
- // Get Day/Month/Year in number format (NOT array).
- Y = SelectedValue(Year()); M = SelectedValue(Month()); D = SelectedValue(Day());
- Hr = SelectedValue(Hour()); Mn = SelectedValue(Minute());
- // normalize values to range 0...1
- function normalize( Val )
- {
- Val = Val - floor( Val );
- if (Val < 0) {Val = Val + 1;}
- return Val;
- }
- // Set Pi.
- PI = 3.1415926535897932385;
- // calculate the Julian Date at 12H UT
- YY = Y - floor( ( 12 - M ) / 10 );
- MM = M + 9;
- if (MM >= 12) {MM = MM - 12;}
- K1 = floor( 365.25 * ( YY + 4712 ) );
- K2 = floor( 30.6 * MM + 0.5 );
- K3 = floor( floor( ( YY / 100 ) + 49 ) * 0.75 ) - 38;
- JD = K1 + K2 + D + 59; // for dates in Julian calendar
- if (JD > 2299160) {JD = JD - K3;} // for Gregorian calendar
- // calculate moon's age in days
- IP = normalize( ( JD - 2451550.1 ) / 29.530588853 );
- AG = IP*29.53;
- Phase = "NEW";
- if (AG < 27.68493) {Phase = "Waning crescent";S1=4;S2=8;}
- if (AG < 23.99361) {Phase = "Last quarter";S1=4;S2=12;}
- if (AG < 20.30228) {Phase = "Waning gibbous";S1=6;S2=14;}
- if (AG < 16.61096) {Phase = "FULL";S1=6;S2=15;}
- if (AG < 12.91963) {Phase = "Waxing gibbous";S1=6;S2=7;}
- if (AG < 9.22831) {Phase = "First quarter";S1=2;S2=3;}
- if (AG < 5.53699) {Phase = "Waxing crescent";S1=2;S2=1;}
- if (AG < 1.84566) {Phase = "NEW";S1=0;S2=0;}
- IP1 = IP;
- IP = IP*2*PI; // Convert phase to radians
- // calculate moon's distance
- DP = 2*PI*normalize( ( JD - 2451562.2 ) / 27.55454988 );
- DI = 60.4 - 3.3*cos( DP ) - 0.6*cos( 2*IP - DP ) - 0.5*cos( 2*IP );
- // calculate moon's ecliptic latitude
- NP = 2*PI*normalize( ( JD - 2451565.2 ) / 27.212220817 );
- LA = 5.1*sin( NP );
- // calculate moon's ecliptic longitude
- RP = normalize( ( JD - 2451555.8 ) / 27.321582241 );
- LO = 360*RP + 6.3*sin( DP ) + 1.3*sin( 2*IP - DP ) + 0.7*sin( 2*IP );
- Zodiac = "Pisces";
- if (LO < 348.58) {Zodiac = "Aquarius";}
- if (LO < 311.72) {Zodiac = "Capricorn";}
- if (LO < 302.49) {Zodiac = "Sagittarius";}
- if (LO < 271.26) {Zodiac = "Scorpio";}
- if (LO < 242.57) {Zodiac = "Libra";}
- if (LO < 224.17) {Zodiac = "Virgo";}
- if (LO < 173.34) {Zodiac = "Leo";}
- if (LO < 135.30) {Zodiac = "Cancer";}
- if (LO < 119.48) {Zodiac = "Gemini";}
- if (LO < 93.44) {Zodiac = "Taurus";}
- if (LO < 51.16) {Zodiac = "Aries";}
- if (LO < 33.18) {Zodiac = "Pisces";}
- _N(Title = "Date = " + Y + "/" + M + "/" +D + " Hr:" + Hr + " Min:" + Mn + "n" +
- "Age: " + AG + " Phase: " + Phase + "n" +
- "distance: " + DI + " earth radiin" +
- "eclipticn" +
- " latitude = " + LA + "癨n" +
- " longitude = " + LO + "癨n" +
- "constellation = " + Zodiac+ "n" +
- "IP: " + IP1);
- Color = IIf(O > C, colorBlack, colorYellow);
- Plot( Close, "Price", color, styleCandle | styleOwnScale );
- _SECTION_END();