Luna Phase.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:4k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Luna Phase
  4. //  Author/Uploader: OzFalcon 
  5. //  E-mail:          OzFalconAB@BDen.org
  6. //  Date/Time Added: 2006-08-31 23:36:11
  7. //  Origin:          http://home.att.net/~srschmitt/lunarphasecalc.html
  8. //  Keywords:        Luna Phase Zodiac
  9. //  Level:           basic
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=681
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=681
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  This program helps anyone who needs to know the Moon's phase, age,
  17. //  distance, and position along the ecliptic on any date within several
  18. //  thousand years in the past or future. The age of the moon in days as well
  19. //  as its visual phase are given. The Moon's ecliptic longitude is calculated
  20. //  as well as the corresponding zodiac constellation.
  21. //
  22. //------------------------------------------------------------------------------
  23. _SECTION_BEGIN("LunaPhase");
  24. // Luna Phase Calculator.
  25. // Code converted from: http://home.att.net/~srschmitt/lunarphasecalc.html
  26. // OzFalconAB 
  27. // Get Day/Month/Year in number format (NOT array).
  28. Y = SelectedValue(Year()); M = SelectedValue(Month()); D = SelectedValue(Day());
  29. Hr = SelectedValue(Hour()); Mn = SelectedValue(Minute()); 
  30. // normalize values to range 0...1
  31. function normalize( Val )
  32. {
  33.     Val = Val - floor( Val ); 
  34.     if (Val < 0) {Val = Val + 1;}
  35.     return Val;
  36. }
  37. // Set Pi.
  38. PI = 3.1415926535897932385;
  39. // calculate the Julian Date at 12H UT
  40. YY = Y - floor( ( 12 - M ) / 10 );      
  41. MM = M + 9;
  42. if (MM >= 12) {MM = MM - 12;}
  43. K1 = floor( 365.25 * ( YY + 4712 ) );
  44. K2 = floor( 30.6 * MM + 0.5 );
  45. K3 = floor( floor( ( YY / 100 ) + 49 ) * 0.75 ) - 38;
  46.    
  47. JD = K1 + K2 + D + 59; // for dates in Julian calendar
  48. if (JD > 2299160) {JD = JD - K3;} // for Gregorian calendar
  49.         
  50. // calculate moon's age in days
  51. IP = normalize( ( JD - 2451550.1 ) / 29.530588853 );
  52. AG = IP*29.53;
  53. Phase = "NEW";
  54. if (AG < 27.68493) {Phase = "Waning crescent";S1=4;S2=8;}
  55. if (AG < 23.99361) {Phase = "Last quarter";S1=4;S2=12;}
  56. if (AG < 20.30228) {Phase = "Waning gibbous";S1=6;S2=14;}
  57. if (AG < 16.61096) {Phase = "FULL";S1=6;S2=15;}
  58. if (AG < 12.91963) {Phase = "Waxing gibbous";S1=6;S2=7;}
  59. if (AG <  9.22831) {Phase = "First quarter";S1=2;S2=3;}
  60. if (AG <  5.53699) {Phase = "Waxing crescent";S1=2;S2=1;}
  61. if (AG <  1.84566) {Phase = "NEW";S1=0;S2=0;}
  62. IP1 = IP;
  63. IP = IP*2*PI; // Convert phase to radians
  64. // calculate moon's distance
  65. DP = 2*PI*normalize( ( JD - 2451562.2 ) / 27.55454988 );
  66. DI = 60.4 - 3.3*cos( DP ) - 0.6*cos( 2*IP - DP ) - 0.5*cos( 2*IP );
  67. // calculate moon's ecliptic latitude
  68. NP = 2*PI*normalize( ( JD - 2451565.2 ) / 27.212220817 );
  69. LA = 5.1*sin( NP );
  70. // calculate moon's ecliptic longitude
  71. RP = normalize( ( JD - 2451555.8 ) / 27.321582241 );
  72. LO = 360*RP + 6.3*sin( DP ) + 1.3*sin( 2*IP - DP ) + 0.7*sin( 2*IP );
  73. Zodiac = "Pisces";
  74. if (LO < 348.58) {Zodiac = "Aquarius";}
  75. if (LO < 311.72) {Zodiac = "Capricorn";}
  76. if (LO < 302.49) {Zodiac = "Sagittarius";}
  77. if (LO < 271.26) {Zodiac = "Scorpio";}
  78. if (LO < 242.57) {Zodiac = "Libra";}
  79. if (LO < 224.17) {Zodiac = "Virgo";}
  80. if (LO < 173.34) {Zodiac = "Leo";}
  81. if (LO < 135.30) {Zodiac = "Cancer";}
  82. if (LO < 119.48) {Zodiac = "Gemini";}
  83. if (LO <  93.44) {Zodiac = "Taurus";}
  84. if (LO <  51.16) {Zodiac = "Aries";}
  85. if (LO <  33.18) {Zodiac = "Pisces";}
  86. _N(Title = "Date = " + Y + "/" + M + "/" +D + " Hr:" + Hr + " Min:" + Mn + "n" +
  87. "Age: " + AG + "     Phase: " + Phase + "n" +
  88. "distance: " + DI + " earth radiin" +
  89. "eclipticn" + 
  90. " latitude  = " + LA + "癨n" +
  91. " longitude = " + LO + "癨n" +
  92. "constellation = " + Zodiac+ "n" + 
  93. "IP: " + IP1);
  94. Color = IIf(O > C, colorBlack, colorYellow);
  95. Plot( Close, "Price", color, styleCandle | styleOwnScale );
  96. _SECTION_END();