WealthTransits
Provides a collection of astrological indicators and Strategy Building Blocks for Wealth-Lab. These tools compute planetary positions, relationships, and cyclical patterns based on geocentric astronomical data.
$99.95 / Lifetime OR included in Premium subscription
Try before you Buy! Download the Extension for a 14-day free trial before purchasing.
(all Extensions require a Wealth-Lab Subscription)

WealthTransits

The WealthTransits Extension provides a collection of astrological indicators and Strategy Building Blocks for Wealth-Lab. These tools compute planetary positions, relationships, and cyclical patterns based on geocentric astronomical data.

Astro indicators can be used like any other indicator in Wealth-Lab - combined with price, volume, or other indicators to explore potential correlations and trading edges.


Supported Celestial Bodies

The following bodies are supported throughout the extension:

Sun, Moon, Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune, Pluto, EMB

Note: EMB refers to the Earth-Moon barycenter.


ZodiacHelper

Description: A utility class used internally by the WealthTransits extension to work with zodiac sign calculations. It provides methods for converting between sign names and indices, and for determining the zodiac sign of a celestial body on a given date.

Key Features:

  • Maintains the ordered list, ZodiacHelper.SIGNS, of zodiac signs:

    Aries, Taurus, Gemini, Cancer, Leo, Virgo, Libra, 
    Scorpio, Sagittarius, Capricorn, Aquarius, Pisces
    
  • ToSign(string signName) Converts a zodiac sign name to its corresponding index (0 = Aries, 1 = Taurus, etc.).

  • SignOf(DateTime dt, Body body) Calculates the zodiac sign index of a celestial body for a given date using its geocentric ecliptic longitude.

Usage Notes:

  • Zodiac signs are determined by dividing the 360° ecliptic into 12 equal 30° segments.
  • This helper is used by indicators like AstroLocation and by Strategy Building Blocks.
  • The returned integer values map directly to the sign order defined in SIGNS.

Example:

int sign = ZodiacHelper.ToSign("Leo");
int moonSign = ZodiacHelper.SignOf(bars.DateTimes[bar], Body.Moon);

// **Tip!** Get the string name of a sign by passing its integer to `ZodiacHelper.SIGNS`. 
string signName = ZodiacHelper.SIGNS[moonSign];
WriteToDebugLog($"The sign for {moonSign} is {signName}");

Available Indicators

Edge Hypothesis Notes: The following notes suggest possible market behaviors these indicators may correlate with. They are not claims of predictive power, but starting points for research and validation using backtesting or the Indicator Profiler.

AstroDeclination

Description: Returns the geocentric declination of a celestial body in degrees (-90° to +90°), relative to the Earth's equator.

Edge Hypothesis: Extreme declination values may correspond to cyclical turning points or shifts in market sentiment.

Example:

var dec = new AstroDeclination(bars, "Moon");

if (dec[bar] > 20)
    PlaceTrade(bars, TransactionType.Buy, OrderType.Market);

AstroDistance

Description: Returns the geocentric distance from Earth to the selected celestial body, in astronomical units.

Edge Hypothesis: Changes in distance (especially for the Moon) may correlate with volatility or liquidity cycles.

Example:

using WealthLab.Core;
using WealthLab.Backtest;
using WealthLab.Indicators;
using WealthLab.WealthTransits;

namespace WealthScript2 
{
    public class MyStrategy : UserStrategyBase
    {
		IndicatorBase dist;
		IndicatorBase avgdist;
		
        public override void Initialize(BarHistory bars)
        {			
			dist = new AstroDistance(bars, "Moon");
			PlotIndicator(dist);

			// avg distance for the last 5 bars
			avgdist = SMA.Series(dist, 5);
			PlotIndicator(avgdist);
        }


        public override void Execute(BarHistory bars, int idx)
        {		
            if (!HasOpenPosition(bars, PositionType.Long))
            {
				if (dist[idx] < avgdist[idx])
					PlaceTrade(bars, TransactionType.Buy, OrderType.Market);
            }
            else
            {
				// hold for 3 bars
				Position p = LastPosition;
				if (idx - p.EntryBar + 1 > 3)
					ClosePosition(p, OrderType.Market);
            }
        }
    }
}


AstroLocation

Description: Returns the Zodiac sign index (0=Aries, 1=Taurus, etc.) of a celestial body.

Edge Hypothesis: Different zodiac sectors may align with recurring behavioral or seasonal market tendencies.

Special Methods: In addition to standard indicator access, AstroLocation provides static methods for direct value retrieval:

  • Value(...) – returns the sign for the specified bar index
  • ValuePrev(...) – returns the sign for the previous bar/date
  • ValueNext(...) – returns the sign for the next bar/date

Note: Because ephemeris data is deterministic, ValueNext can be used to peek one bar into the future. This can be useful for research purposes, but should be used carefully to avoid look-ahead bias in backtests.

Example:

var loc = new AstroLocation(bars, "Moon");

// standard usage
if (loc[bar] == 0) // Aries
    PlaceTrade(bars, TransactionType.Buy, OrderType.Market);

// peek next bar's sign
double nextSign = AstroLocation.ValueNext(bar, bars, "Moon");

AstroLongitude

Description: Returns the geocentric ecliptic longitude (0°–360°) of the selected celestial body.

Edge Hypothesis: Specific longitude levels (or cycles through them) may correspond to repeatable timing patterns.

Example:

var lon = new AstroLongitude(bars, "Sun");

if (CrossOver(lon, 0, bar))
    PlaceTrade(bars, TransactionType.Buy, OrderType.Market);

AstroParallel

Description: Returns the absolute declination difference between two bodies. Small values indicate a parallel or contra-parallel alignment.

Edge Hypothesis: Close declination alignments may coincide with periods of increased market sensitivity or reversals.

Example:

var parallel = new AstroParallel(bars, "Sun", "Moon", false);

if (parallel[bar] < 1.0)
    PlaceTrade(bars, TransactionType.Buy, OrderType.Market);

AstroSeparation

Description: Returns angular separation (0°–180° or full 360°) between two bodies.

Edge Hypothesis: Key aspect angles (e.g., conjunctions, oppositions) may align with cyclical highs/lows or volatility shifts.

Example:

var sep = new AstroSeparation(bars, "Sun", "Moon", true);

if (sep[bar] < 5)
    PlaceTrade(bars, TransactionType.Buy, OrderType.Market);

AstroSpeed

Description: Returns the longitudinal speed of a celestial body (degrees per bar).

Edge Hypothesis: Retrograde motion or rapid speed changes may correspond to instability or trend disruptions.

Example:

var speed = new AstroSpeed(bars, "Mercury");

if (speed[bar] < 0)
    PlaceTrade(bars, TransactionType.Sell, OrderType.Market);

AstroTransitNatal

Description: Returns angular separation between a transiting body and its natal position (defined by the first bar).

Edge Hypothesis: Returns to natal positions may align with cyclical resets or repeating behavioral patterns.

Example:

var transit = new AstroTransitNatal(bars, "Sun", true);

if (transit[bar] < 2)
    PlaceTrade(bars, TransactionType.Buy, OrderType.Market);

BradleySiderograph

Description: Composite astro-cycle indicator combining planetary aspects and declination effects.

Edge Hypothesis: Peaks and troughs may align with major turning points or inflection periods in market cycles.

Example:

var bradley = new BradleySiderograph(bars);

if (CrossOver(bradley, bradley.SMA(10), bar))
    PlaceTrade(bars, TransactionType.Buy, OrderType.Market);

EclipseStrength

Description: Measures eclipse alignment strength (0 to 100).

Edge Hypothesis: High eclipse strength may correspond to periods of uncertainty or volatility spikes.

Example:

var eclipse = new EclipseStrength(bars, "Sun");

if (eclipse[bar] < 80)
    PlaceTrade(bars, TransactionType.Buy, OrderType.Market);

MoonPhase

Description: Returns the Moon phase from 0 (new) to 100 (full). Includes the FullMoonNextBar and NewMoonNextBar methods to assist with trading on new/full moon events.

Edge Hypothesis: Lunar cycles may align with sentiment oscillations or short-term cyclical behavior.

Example: Here's a Moon Phase strategy, which uses the FullMoonNextBar, NewMoonNextBar methods to trigger buying on a full moon and selling on a new moon. Try it on QLD!

using WealthLab.Core;
using WealthLab.Backtest;
using WealthLab.Indicators;
using WealthLab.WealthTransits;

namespace WealthScript3 
{
    public class MyStrategy : UserStrategyBase
    {
		// instantiate a MoonPhase object to use NewMoonNextBar and FullMoonNextBar methods
		MoonPhase _phase;

		public override void Initialize(BarHistory bars)
		{
			_phase = new MoonPhase(bars);
			PlotIndicator(_phase);
			StartIndex = 0;
		}

        public override void Execute(BarHistory bars, int idx)
        {
			// set the background brightness according to the moon phase value
			byte alpha = (byte)(_phase[idx] * 120);
			SetBackgroundColor(bars, idx, WLColor.Silver.SetAlpha(alpha));
			
			
            if (!HasOpenPosition(bars, PositionType.Long))
            {	
				if (_phase.FullMoonNextBar(idx, bars))
					PlaceTrade(bars, TransactionType.Buy, OrderType.Market);
            }
            else
            {
				if (_phase.NewMoonNextBar(idx, bars))
					ClosePosition(LastPosition, OrderType.Market);
					
            }
        }
    }
}

MoonVoidOfCourse

Description: Returns 1 when the Moon is void of course (VoC), otherwise 0. The parameter orb is the allowable angular tolerance (deviation in degrees) around an exact aspect angle for considering the Moon to be "in aspect" with another planet.

An aspect angle (e.g., 0° for conjunction, 60° for sextile, 90° for square, 120° for trine, 180° for opposition) is the ideal geometric separation between two planets' longitudes. The orb is a small buffer on either side of that exact angle. If the actual separation (sep) falls within aspectAngle ± orb, the aspect is considered active.

Example: If aspectAngle = 90° (square) and orb = 5, then any separation between 85° and 95° counts as a square.

Edge Hypothesis: Void-of-course periods may correspond to reduced momentum or indecisive market behavior.

Example:

var voc = new MoonVoidOfCourse(bars, 1.0);

if (voc[bar] == 1)
    PlaceTrade(bars, TransactionType.Sell, OrderType.Market);

Strategy Building Blocks (Rules)

In addition to indicators, the extension provides Rule-based Condition Blocks for the Strategy Builder.

These allow you to define trading logic such as:

"Mercury transits into Aries on this bar"

WealthTransit Conditions

Parameters

  • Body: Any supported celestial body (see list above)

  • Transits:

    • into – body enters a zodiac sign
    • out of – body exits a zodiac sign
  • Sign:

    • Any, Aries, Taurus, Gemini, Cancer, Leo, Virgo, Libra, Scorpio, Sagittarius, Capricorn, Aquarius, Pisces
  • on:

    • this bar – trigger for a transit on the current bar
    • next bar – trigger on the following bar

Example (Strategy Logic)

Buy when Mercury enters any sign:

if (Transit("Mercury", "into", "Any", idx))
{
    PlaceTrade(bars, TransactionType.Buy, OrderType.Market);
}

Notes

  • Celestial body names must match supported values exactly.
  • These indicators are experimental and are best combined with traditional signals.
  • Use the Indicator Profiler Extension to evaluate their effectiveness.

Screenshots

This Extension doesn't have any screenshots yet!

Change Log

Wealth-Lab 8 Build 1 - 4/22/2026
  • Initial release

Discussions