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:
EMBrefers 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, PiscesToSign(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 indexValuePrev(...)– returns the sign for the previous bar/dateValueNext(...)– returns the sign for the next bar/date
Note: Because ephemeris data is deterministic,
ValueNextcan 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"

Parameters
Body: Any supported celestial body (see list above)
Transits:
into– body enters a zodiac signout 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 barnext 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
Change Log
- Initial release