Click or drag to resize

MESASine Wave

The MesaSinewave utilizes two sine plots to depict whether the market is in a trend mode or in a cycle mode.  If the plots start to wander the market, it is called a trend mode.  The market is in a cyclical mode if the two plots look like a Sine wave.  In a trend mode, the Sine and Lead Sine plots typically weaken in a sideways pattern around the zero-point, running distant and parallel from each other.

MesaSinewave indicator is that it will anticipate cycle mode turning points rather than waiting for confirmation (as the majority of oscillators do).  This may be an extremely helpful trait.  The indicator also has an advantage that wrong signals are minimized in a trend mode.

The indicator contains two plots - one line depicting the Sine of the calculated phase angle over time, and the other the Sine of the phase angle advanced by 45 degrees - the Lead Sine.  The crossings of the Sine and Lead Sine together provide a precise and advanced picture of cycle mode turning points.

Market Signals

If the Sine plot crosses below the Lead Sine plot, sell signal is generated.  Buy signal is generated as the Sine plot crosses over the Lead Sine plot if the market is in cycle mode.  It may be worthwhile to trade the trend if the market is in the trend mode.  Main moving average crossovers are often helpful for exiting and entering positions in such markets.


MESASine Wave 001

MESASine Wave 002

MESASine Wave 003

MESASine Wave 004

where N is a period for indicator calculation.

Chart Example

MESASine Wave 005

Implementation and Usage

To initialize MesaSinewave Index use one of the following constructors:

MesaSinewave – sets default values: period = 14

MesaSinewave(Int32) – sets value for period




properties to get current value

 1// Create new instance
 2MesaSinewave mesa = new MesaSinewave(28);
 4// Number of stored values
 5mesa.HistoryCapacity = 2;
 7// Add new data point
 8mesa.Add(Bars.Current.Open, Bars.Current.High, Bars.Current.Low, Bars.Current.Close, Bars.Current.Volume);
10// Get indicator value
11double IndMesaSine = mesa.Sine;
12double IndMesaLeadSine = mesa.LeadSine;
13// Get previous values
14double IndPrevMesaSine = mesa[1].Sine;
15double IndPrevMesaLeadSine = mesa[1].LeadSine;