Metastock Equivalents


    The following table was compiled to help you translate indicators expressed in Metastock Formula Language to Trademan.  The list of Metastock functions comes from the Equis Formula Primer.  This document can be obtained from  http://groups.yahoo.com/group/equismetastock/files/formulabook.zip .  You will have to join the Yahoo group, if you haven't already.

    For most of the Metastock functions which are technical indicators, I have had to rely on sources other than the Formula Primer or Equis for a description.  The simpler functions should behave very similarly to the description provided in that book, but please don't hold me to that.  I believe that the "equivalent" expressions provided here will produce results that would be expected from a given indicator.  Candlestick function expressions represent the behavior described in the Formula Primer, but may not exactly replicate Metastock's behavior due to factors left ambiguous in the Equis description.

    You can find descriptions of technical indicators online at:

    Additional formulas may be obtained online at:     A few words of explanation may be required for the right hand column, particularly regarding parameter syntax.  In Metastock, everything is defined
as a function.  In Trademan, everything the user defines as a formula indicator is an indicator that can be used as a function in other indicators.  Indicators that are plotted directly can only take numerical parameter inputs from the control panel.  Formula indicators that are used as functions in other indicators can take
expressions as parameters.  Thus, I show the direct usage of an indicator with the parameter labels used by the corresponding Metastock function, but
the same parameters are shown as "parm1", "parm2", or "parm3" in the definition of an indicator.  When the indicator is interpreted by the program, the expressions in the first, second, and third parameters of the calling indicator are expanded in place of parm1, parm2, and parm3, respectively.

    By using parm1, parm2, and parm3 in the definitions, I can show the new indicators exactly the way they would have to be defined to be used as functions in other indicators.  That way, you can copy and paste a definition directly to the formula definition dialog.
 
Metastock Function
Trademan Equivalent Indicator or Function
Absolute Value -- syntax:  abs(data) abs(data)
Accumulation/Distribution -- syntax:  ad() Accumulation/Distribution
Accumulation Swing Index -- syntax:  aswing(LIMIT MOVE) Accumulative Swing Index(LIMIT MOVE, trailing stop)
Addition -- syntax:  add(data1, data2) or data1 + data2 data1 + data2 or plus(data1, data2)
Alert -- syntax:  alert(condition, periods) since(condition, bars)
Arc Tangent -- syntax:  atan(y data, x data)  
Aroon Down -- syntax:  aroondown(periods) Aroon(periods, 0, 0, 1)
Aroon Up -- syntax:  aroonup(periods) Aroon(periods, 0, 0, 0)
Average Directional Movement -- syntax:  adx(periods) Directional Movement(periods, 0, 0, 2)
Average True Range -- syntax:  atr(periods) Average True Range(periods)
Bars Since -- syntax:  barssince(data) barsSince(data)
Bollinger Band Bottom -- syntax:  bbandbot(data, periods, method, deviation), where method is SIMPLE, EXPONENTIAL, WEIGHTED, TIMESERIES, TRIANGULAR, or VARIABLE <method>(data, periods) - deviation*sdev(data, periods), where <method> is replaced by the Trademan function corresponding to the one that would be used by Metastock.  See the Moving Average item.
Bollinger Band Top -- syntax:  bbandtop(data, periods, method, deviation), where method is SIMPLE, EXPONENTIAL, WEIGHTED, TIMESERIES, TRIANGULAR, or VARIABLE <method>(data, periods) + deviation*sdev(data, periods), where <method> is replaced by the Trademan function corresponding to the one that would be used by Metastock.  See the Moving Average item.
Buying Pressure -- syntax:  buyp() buyp or buyp(5)
Ceiling -- syntax:  ceiling(data) Define mceiling(data) as
int(highest(parm1, size(parm1)+1)+1)
Chaikin A/D Oscillator -- syntax:  co() Chaikin Oscillator or Chaikin Oscillator(10, 3)
Chaikin's Money Flow -- syntax:  cmf() mov((2*close-high-low)/(high-low)*volume,21)/mov(volume,21)
Chande Momentum Oscillator -- syntax:  cmo(data, periods) Chande Momemtum Oscillator(periods) is cmo(close, parm1)
Define cmo(data, periods) to use in other formulas as:
100*(cmo1(parm1, parm2)-cmo2(parm1,parm2))/
(cmo1(parm1,parm2)+cmo2(parm1,parm2),
where cmo1 = mov(if(parm1>delay(parm1,1), delta(parm1), 0), parm2), and
cmo2 = mov(if(parm1<delay(parm1,1), -1*delta(parm1), 0), parm2)
Commodity Channel Index (Equis) -- syntax:  ccie(periods)  
Commodity Channel Index (Standard) -- syntax:  cci(periods) Commodity Channel Index(periods)
Commodity Selection Index -- syntax:  csi(periods, value, margin, commission) Commodity Selection Index(value, margin, commission)
Define Commodity Selection Index as:
ADXR(14)*ATR(14)*parm1/sqrt(parm2)/(150+parm3)*100 
(Wilder's definition)
Correlation Analysis -- syntax:  correl(indep data, dep data, period, shift) corr(indep data, delay(dep data, shift), period)
Cosine -- syntax:  cos(data) cos(data)
Cross -- syntax:  cross(data1, data2)  returns 1 at crossover, 0 otherwise Define mcross(data1, data2) as
if(pcross(parm1, parm2)>0, pcross(parm1, parm2), 0)
Cumulate -- syntax:  cum(data) accum(data)
Day of Month -- syntax:  dayofmonth() Define dayofmonth as date()%100
Day of Week -- syntax:  dayofweek() weekday()
Delta -- syntax:  delta(type, date, price, interest, dividend) Define mdelta(type, date, price, interest, dividend) as
erf(d1(parm2, parm3, parm4, parm5)),
where d1 is part of Black-Scholes definition.  You must supply dividend dependence.
Dema -- syntax:  dema(data, periods) Define dema(data, periods) as
2*emov(parm1, parm2) - emov(emov(parm1, parm2), parm2)
Demand Index -- syntax:  di() Demand Index(5)  (formula indicator example)
Detrended Price Oscillator -- syntax:  dpo(periods) Detrended Price Oscillator(periods)
Directional Movement Index -- syntax:  dx(periods) (Directional Movement(periods)-Directional Movement(periods,0,0,1))/
(Directional Movement(periods)+Directional Movement(periods,0,0,1))*100
Directional Movement Rating -- syntax:  adxr(periods) ADXR(periods)
Divergence -- syntax:  divergence(data1, data2, min change) divergence(data1, data2, min change) is defined as
if(delta(zigzag(parm1, parm3))> 0, if(delta(zigzag(parm2, parm3)) < 0, 1, 0), if(delta(zigzag(parm2, parm3)) > 0, -1, 0))
Division -- syntax:  div(data1, data2) or data1/data2 data1/data2 or div(data1, data2)
Dynamic Momentum Index -- syntax:  dmi(data) Define dmi(data) as
100 - (100/(1+RS(parm1)), where RS is defined as:
emov(pgains(parm1,1), 2*vperiod-1)/
emov(plosses(parm1,1),2*vperiod-1)
where vperiod is
if(14/svol(parm1) < 5, 5, if(14/svol(parm1) > 30, 30, 14/svol(parm1)))
where svol is
sdev(parm1,5)/mov(sdev(parm1, 5), 10)  (not necessarily Metastock or Chande formulation)
Ease of Movement -- syntax:  eom(periods, method), where method is SIMPLE, EXPONENTIAL, WEIGHTED, TIMESERIES, TRIANGULAR, and VARIABLE <method>(Ease of Movement(14,0,1), periods), where <method> is
mov for SIMPLE, emov for EXPONENTIAL, wmov for WEIGHTED, 
tsf for TIMESERIES, and tmov for TRIANGULAR.  The variable moving average is available as a formula indicator.
Exponent -- syntax:  exp(data) exp(data)
Fast Fourier Transform -- syntax:  fft(data, periods, length, detrend or mean, amplitude or power)  
Floor -- syntax:  floor(data) Define mfloor(data) as
int(lowest(parm1, size(parm1)))
Forecast Oscillator -- syntax:  forecastosc(data, periods) Define forecastosc(data, periods) as
(parm1 - delay(lr(parm1, parm2), 1)-delay(slope(parm1,parm2),1))/
parm1*100
Formula Call -- syntax:  fml("<formula name>") <formula name>
Formula Variable Call -- syntax:  fmlvar("<formula name>", "<variable name>")  
Fraction -- syntax:  frac(data) Define frac(data) as
parm1 - int(parm1)
Gamma -- syntax:  gamma(type, date, price, interest, dividend)  
Gap Down -- syntax:  gapdown() if (high < delay(low,1), 1, 0)
Gap Up -- syntax:  gapup() if (low > delay(high,1), 1, 0)
Herrick Payoff Index -- syntax:  hpi(cents, multiplying factor)  
Highest -- syntax:  highest(data) Define highestever(data) as
highest(parm1, size(parm1))
Highest Bars Ago -- syntax:  highestbars(data) Define highestbars(data) as
barsSince(parm1 == highest(parm1, size(parm1)))
Highest High Value -- syntax:  hhv(data, periods) highest(data, periods)
Highest High Value Bars Ago -- syntax:  hhvbars(data, periods) Define barsSinceHighest(data, periods) as
barsSince(parm1 == highest(parm1, parm2))
Highest Since -- syntax:  highestsince(nth, condition, data) Define highestsincenth(nth, condition, data) as
highest(parm3, barsSinceNth(parm2, parm1))
Highest Since Bars Ago -- syntax:  highestsincebars(nth, condition, data) Define barsSinceHighestSince(nth, condition, data) as
highest(parm3, barsSinceNth(parm2, parm1))
If -- syntax:  if(condition, data if true, data if false) if(condition, data if true, data if false)
Inertia -- syntax:  inertia(periods, RVI periods) Define inertia(periods, RVI periods) as
mov(relvol(parm1, parm2), where relvol is
(100*relvoluph(parm1)/(relvoluph(parm1)+relvoldownh(parm1)) +
100*revolupl(parm1)/(relvolupl(parm1)+relvoldownl(parm1)))/2
relvoluph is emov(if(delta(high)>0,sdev(high,10),0),parm1)
relvoldownh is emov(if(delta(high)<0,sdev(high,10),0),parm1)
relvolupl is emov(if(delta(low)>0,sdev(low,10),0),parm1)
relvoldownl is emov(if(delta(low)<0,sdev(low,10),0),parm1)
Input -- syntax:  input("<prompt text>", min value, max value, default value) parameters are inputs
Inside -- syntax:  inside() if (high < delay(high,1) && low > delay(low, 1), 1, 0)
Integer -- syntax:  int(data) int(data)
Intraday Momentum Index -- syntax:  imi(periods)  
Klinger Volume Oscillator -- syntax:  kvo()  
Last Value in Data Array -- syntax:  lastvalue(data) last(data)
Linear Regression Indicator -- syntax:  linearreg(data, periods) lr(data, periods)
Linear Regression Slope -- syntax:  linregslope(data, periods) slope(data, periods)
Logarithm (natural) -- syntax:  log(data) ln(data)
Lowest -- syntax:  lowest(data) Define lowerstever(data) as
lowest(parm1, size(parm1))
Lowest Bars Ago -- syntax:  lowestbars(data) Define lowestbars(data) as
barsSince(parm1 == lowest(parm1, size(parm1)))
Lowest Low Value -- syntax: llv(data, periods) lowest(data, period)
Lowest Low Value Bars Ago -- syntax:  llvbars(data, periods) Define barsSinceHighest(data, periods) as
barsSince(parm1 == lowest(parm1, parm2))
Lowest Since -- syntax:  lowestsince(nth, condition, data) Define lowestSinceNth(nth, condition, data) as
lowest(parm3, barsSinceNth(parm2, parm1))
Lowest Since Bars Ago -- syntax:  lowestsincebars(nth, condition, data) Define barsSinceLowestSince(nth, condition, data) as
lowest(parm3, barsSinceNth(parm2, parm1))
MACD -- syntax:  macd() MACD
Market Facilitation Index -- syntax:  marketfacindex() if (delta((high-low)/volume) > 0, if (delta(volume) > 0, 4, 2),
if(delta(volume) > 0, 1, 3)),
Green is 4, Fade is 3, Fake is 2, and Squat is 1.
Mass Index -- syntax:  mass(periods) Mass Index(periods, 0, 9)
Maximum -- syntax:  max(data1, data2) max(data1, data2)
Median Price -- syntax:  mp() median  (This is a data input)
MESA Lead Sine -- syntax:  mesaleadsine(cycle length)  
MESA Sine Wave -- syntax:  mesasinewave(cycle length)  
Midpoint -- syntax:  mid(data, periods) Define midpoint(data, periods) as
(highest(parm1, parm2)+lowest(parm1, parm2))/2
Minimum -- syntax:  min(data1, data2) min(data1, data2)
Minus Directional Movement -- syntax:  mdi(periods) Directional Movement(periods, 0, 0, 1)
Modulus -- syntax:  mod(data1, data2) data1 % data2 or mod(data1, data2)
Momentum -- syntax:  mo(periods) Momentum(periods, 0, 1)
Money Flow Index -- syntax:  mfi(periods) Money Flow Index(periods)
Month -- syntax:  month() (date() % 10000)/100
Moving Average -- syntax:  mov(data, periods, method), where method is one of SIMPLE(S), EXPONENTIAL(E), TIMESERIES(T), TRIANGULAR(TRI), WEIGHTED(W), VARIABLE(VAR), or VOLUMEADJUSTED(VOL) mov(data, period) for SIMPLE
emov(data, period) for EXPONENTIAL
wmov(data, period) for WEIGHTED
tsf(data, period) for TIMESERIES 
define tmov(data, periods) as:
mov(mov(parm1,halve(parm2)), halve(parm2)) for TRIANGULAR, where
halve(periods) is 
if(int(parm1)%2 == 0, int((parm1+1)/2)+1, int((parm1+1)/2))
VARIABLE and VOLUMEADJUSTED available as formula indicators
Multiplication -- syntax:  mul(data1, data2) data1 * data2 or mult(data1, data2)
Negative -- syntax:  neg(data) -1*data
Negative Volume Index -- syntax:  nvi() Negative Volume Index
On Balance Volume -- syntax:  obv() On Balance Volume
Option Expiration -- syntax:  optionexp()  
Option Life -- syntax:  life(expiration date mmddyy) Define getmmddyy(date) as
if (parm1 > 200000, 20000000 + parm1 - date(), 
19000000 + parm1 - date())
Outside -- syntax:  outside() if(delta(high) > 0 && delta(low) < 0, 1, 0)
Parabolic SAR -- syntax:  sar(step, maximum) Parabolic Sar(step, maximum)
Peak Bars Ago -- syntax:  peakbars(nth, data, min change) Define barsSinceNthPeak(nth, data, min change) as
barsSinceNth(atpeak(parm2, parm3), parm1)
Peak Value -- syntax:  peak(nth, data, min change) Define mpeak(nth, data, min change) as
peak(parm1, parm2, parm3/100)
Performance -- syntax:  per() Performance Index (?)
Plus Directional Movement -- syntax:  pdi(periods) Directional Movement(periods)
Polarized Fractal Efficiency -- syntax:  pfe(data, periods, smoothing) Define pfe(data, periods, smoothing) as
emov(if(parm1>delay(parm1,parm2), tpfe(parm1,parm2), -1*tpfe(parm1,parm2)), parm3)
Define tpfe(data, periods) as:
sqrt(pow(parm1-delay(parm1,parm2),2)+100)/
mov(sqrt(pow(delta(parm1),2)+1),parm2)/parm2*100
Positive Volume Index -- syntax:  pvi() Positive Volume Index
Power -- syntax:  pow(data, exponent) pow(data, exponent)
Precision -- syntax:  prec(data, precision) Define prec(data, precision) as
int(parm1*pow(10,parm2))/pow(10,parm2)
Price Channel High -- syntax:  pricechannelhigh(periods)  
Price Channel Low -- syntax:  pricechannellow(periods)  
Price Oscillator -- syntax:  oscp(period1, period2, ma method, diff_method),
where ma method is SIMPLE, EXPONENTIAL, WEIGHTED, TIMESERIES, TRIANGULAR, or VARIABLE.  diff_method is PERCENT or POINTS
mov(close, period1) - mov(close, period2) for SIMPLE, POINTS
(mov(close, period1) - mov(close, period2))/
mov(close, min(period1, period2)) for SIMPLE, PERCENT
substitute emov for mov if EXPONENTIAL behavior is desired
wmov if WEIGHTED, tsf if TIMESERIES, formula indicator for TRIANGULAR (see moving average entry) or VARIABLE
Price Volume Trend -- syntax:  pvt() Price Volume Trend
Projection Band Bottom -- syntax:  Projbandbot(periods) Define projbandbottom(periods) as
min(for(delay(low,var)+var*slope(low,parm1),;1;var<parm1;var+1))
Projection Band Top -- syntax:  Projbandtop(periods) Define projbandtop(periods) as 
max(for(delay(high,var)+var*slope(high, parm1),;1;var<parm1;var+1))
Projection Oscillator -- syntax:  Projosc(regression periods, slowing periods) Define Projection Oscillator(regressions periods, slowing periods, 0, 0) as
(close - projbandbottom(parm1))/
(projbandtop(parm1) - projbandbottom(parm1))*100
Define Projection Oscillator(regression periods, slowing periods, 0, 1) as
mov(Projection Oscillator(parm1), parm2)
Put/Call Price -- syntax:  option(type, date, price, interest, dividend)  
Qstick -- syntax:  qstick(periods) Define qstick(periods) as
mov(close-open, parm1)
r-squared -- syntax:  rsquared(data, periods) Define rsquared(data, periods) as
pow(corr(parm1, parm2), 2)
Rally -- syntax:  rally() Define rally as
if(delta(high) > 0 && delta(low) >= 0, 1, 0)
Rally With Volume -- syntax:  rallywithvol() Define rallywithvol as
if(rally && delta(volume) > 0, 1, 0)
Random Walk Index of Highs -- syntax:  rwih(periods) Define rwih(periods) as
max(for(delay(high,var)-high)/
delay(mov(Average True Range(1), var+1),1)*sqrt(var+1),;1;var <= parm1; var+1)) (?)
Random Walk Index of Lows -- syntax:  rwil(periods) Define rwil(periods) as
min(for(delay(low,var)-low)/
delay(mov(Average True Range(1), var+1),1)*sqrt(var+1),;1;var <= parm1; var+1)) (?)
Range Indicator -- syntax:  rangeindicator(periods, smoothing periods) Define Range Indicator(periods, smoothing periods) as
emov(stochrange(parm1), parm2)
Define stochrange(periods) as
if(v3(parm1)>v2(parm1), 100*(v1-v2(parm1))/
(v3(parm1)-v2(parm1)), 100*(v1-v2(parm1)))
Define v3(periods) as
highest(v1, parm1)
Define v2(periods) as
lowest(v1, parm1)
Define v1 as
if(delta(close)>0, Average True Range(1)/delta(close), 
Average True Range(1))
Rate of Change -- syntax:  roc(data, periods, diff method), where diff method is PERCENT or POINTS roc(data, periods) for PERCENT
Define rocpoints(data, periods)
parm1 - delay(parm1, parm2) for POINTS
Reaction -- syntax:  reaction() Define reaction as
if(delta(high) <= 0 && delta(low) < 0, 1, 0)
Reaction with Volume -- syntax:  reactionwithvol() Define reactionwithvol as
if(delta(high) <= 0 && delta(low) < 0 && delta(volume) > 0, 1, 0)
Reference -- syntax:  ref(data, periods) delay(data, -1*periods) for periods <= 0
Relative Momentum Index -- syntax:  rmi(data, periods, momentum parm) Define Relative Momentum Index(data, periods, momentum parm) as
100 - (100/(1+RS(parm1, parm2, parm3)), 
where RS(data, periods, momentum parm) is defined as:
emov(pgains(parm1, parm3), 2*parm2-1)/
emov(plosses(parm1, parm3),2*parm2-1)
where pgains(data, momentum parm) is defined as:
if(data-delay(parm1,parm2) > 0, 
data-delay(parm1,parm2), 0)
plosses(data, momentum parm) is:
if(parm1-delay(parm1,parm2) < 0, abs(data-delay(parm1,parm2),0)
Relative Strength Index -- syntax:  rsi(periods) Relative Strength Index(periods) or 
Relative Momentum Index(close, periods, 1)
Relative Volatility Index -- syntax:  rvi(periods) Define Relative Volatility Index(periods) as
100*rviup(parm1)/(rviup(parm1)+rvidown(parm1)
Define rviup(periods) as:
emov(if(delta(close)>0, sdev(close, 10), 0), 2*parm1+1)
Define rvidown(periods) as:
emov(if(delta(close)<0, sdev(close, 10), 0), 2*parm1+1)
Round -- syntax:  round(data) define round(data) as
if (parm1 - int(parm1) >= 0.5, int(parm1)+1, int(parm1))
Selling Pressure -- syntax:  sellp() sellp or sellp(5)
Sine -- syntax:  sin(data) sin(data)
Square Root -- syntax:  sqrt(data) sqrt(data)
Standard Deviation -- syntax:  stddev(data, periods) sdev(data, periods)
Standard Error -- syntax::  ste(data,periods) Define ste(data, periods) as:
sqrt(((parm2-1)*pow(sdev(parm1,parm2),2)-pow(slope(parm1,parm2),2)*
(pow(parm2,3)-parm2)/12)/(parm2-2)) -- From other sources
Standard Error Band Bottom -- syntax:  stebandbot(data, periods, deviants) Define stebandbot(data, periods, deviants) as
lr(parm1,parm2)-parm3*ste(parm1, parm2)
Standard Error Band Top -- syntax:  stebandtop(data, periods, deviants) Define stebandtop(data, periods, deviants) as
lr(parm1,parm2)+parm3*ste(parm1, parm2)
Stochastic Momentum Index -- syntax:  stochmomentum(periods, smoothing, double smoothing) Define stochmomentum(periods, smoothing, double smoothing) as
100*emov(
emov(close-(.5*(highest(high,parm1)+lowest(low,parm1),parm2),parm3)/
(.5*emov(emov(highest(high,parm1)-lowest(low,parm1),parm2),parm3))
Stochastic Oscillator -- syntax:  stoch(periods, slowing) Stochastic Oscillator(periods, slowing)
Subtraction -- syntax:  sub(data1, data2) or data1 - data2 data1 - data2 or minus(data1, data2)
Summation -- syntax:  sum(data, periods) Define sum(data, periods) as
mov(parm1, parm2)*parm2
Swing Index -- syntax:  swing(limit move) see Accumulation Swing Index
Tema -- syntax:  tema(data, periods) Define tema(data, periods) as
3*emov(parm1, parm2)-
3*emov(emov(parm1, parm2), parm2) +
emov(emov(emov(parm1, parm2), parm2), parm2)
Theta -- syntax:  theta(type, date, price, interest, dividend)  
Time Series Forecast -- syntax:  tsf(data, periods) Define tsf(data, periods) as
delay(lr(parm1, parm2) + slope(parm1, parm2),1)
Trade Volume Index -- syntax:  tvi(minimum tick)
TRIX -- syntax:  trix(periods) TRIX(periods)
Trough Bars Ago -- syntax:  troughbars(nth, data, min change) Define troughbars(nth, data, min change) as
barsSinceNth(at trough(parm2, parm3), parm1)
Trough Value -- syntax:  trough(nth, data, min change) trough(nth, data, min change)
Typical Price -- syntax:  typical() Define typical as
(high + low + close)/3
Ultimate Oscillator -- syntax:  ult(period1, period2, period3) Define Ultimate Oscillator(period1, period2, period3) as
mov(true range, parm1)/mov(total activity, parm1)*max(parm1, parm2, parm3)/parm1 +
mov(true range, parm2)/mov(total activity, parm2)*max(parm1, parm2, parm3)/parm2 +
mov(true range, parm3)/mov(total activity, parm3*max(parm1, parm2, parm3)/parm3, where
true range is defined as:
max(close-low, close-delay(low,1))
and total activity is defined as:
max(max(high-low, high-delay(low,1)), max(delay(high,1)-low, delay(high,1)-delay(low,1)))
Value When -- syntax:  valuewhen(nth, expression, data) valueAt(expression, data, nth)
Variance -- syntax:  var(data, periods) Define var(data, periods) as
pow(sdev(parm1, parm2), 2)
Vega -- syntax:  vega(type, date, price, interest, dividend)  
Vertical Horizontal Filter -- syntax:  vhf(data, periods) Built-in Vertical Horizontal Filter calculates vhf on closes.
To use other data, define VHF(data, periods) as:
mov(abs(highest(parm1, parm2)-lowest(parm1, parm2)), parm2)/
mov(abs(delta(parm1)), parm2)
Volatility, Chaikins's -- syntax:  vol(ma period, roc period) Chaikin's Volatility(roc period, 0, ma period)
Volatility, Option -- syntax:  volo()  
Volume Oscillator -- syntax:  oscv(period1, period2, method, diff_method), where method is one of SIMPLE, EXPONENTIAL, WEIGHTED, TIMESERIES, TRIANGULAR, and VARIABLE.  diff_method is PERCENT or POINTS Volume Oscillator(period1, period2) for SIMPLE and PERCENT

(emov(volume,min(period1,period2))-emov(volume,max(period1, period2)))/
emov(volume, max(period1, period2))*100 for EXPONENTIAL and PERCENT

(wmov(volume,min(period1,period2))-wmov(volume,max(period1,period2)))/
wmov(volume, max(period1, period2))*100 for WEIGHTED and PERCENT

(tsf(volume,min(period1,period2))-tsf(volume,max(period1, period2)))/
tsr(volume, max(period1, period2))*100 for TIMESERIES and PERCENT

(tmov(volume,min(period1,period2))-tmov(volume,max(period1, period2)))/
tmov(volume, max(period1, period2))*100 for EXPONENTIAL and PERCENT (See Moving Average entry)

Weighted Close -- syntax:  wc() Define wc as
(2*close + high + low)/4
Wilder's Smoothing -- syntax:  wilders(data, periods) Define wilders(data, periods) as
emov(parm1, 2*parm2-1)
Williams' %R -- syntax:  willr(periods) Williams' %R(periods)
Williams' A/D -- syntax:  willa() Williams' A/D
WriteIf -- syntax:  WriteIf(expression, text if true, text if false)  
Writeval -- syntax:  writeval(data)  
Year -- syntax:  year() Define year as
int(date()/10000)
Zigzag -- syntax:  zigzag(data, min change, diff method), where diff method is PERCENT or POINTS zigzag(data, min change/100) for PERCENT
zigzag(data, min change, -1) for POINTS
Bearish 3 Method Formation -- syntax:  bear3formation() Define bear3formation as
bigblack && barsSinceNth(bigblack>1, 1) == 4 && 
count(short>1, 4) ==3 && barsSince(highest(delay(high,1))) == 3 &&
barsSince(lowest(delay(low,1))) == 3
Define count(condition, periods) as
mov(if(parm1>0, 1, 0), parm2)*parm2
Define short as
high-low < Average True Range(4)/3  (NOT Metastock formulation)
Bearish Harami -- syntax:  bearharami() Define bearharami as
delay(longwhite,1) && short && open>=close && delta(high)<0 && delta(low)>0
Bearish Harami Cross -- syntax:  bearharamicross() Define bearharamicross as
bearharami && doji
Big Black Candle -- syntax:  bigblack() Define bigblack as
open > close && open-close > 2*(high-low)/3 && 
high-low > Average True Range(4)
Big White Candle -- syntax:  bigwhite() Define bigwhite as
open < close && close-open > 2*(high-low)/3 && 
high-low > Average True Range(4)
Black Body -- syntax:  black() Define black as
open > close
Bullish 3 Method Formation -- syntax:  bull3formation() Define bull3formation as
bigwhite && barsSinceNth(bigwhite>1, 1) == 4 && 
count(short>1, 4) ==3 && barsSince(highest(delay(high,1))) == 3 &&
barsSince(lowest(delay(low,1))) == 3
Define count as
mov(if(parm1>0, 1, 0), parm2)*parm2
Define short as
high-low < Average True Range(4)/2  (NOT Metastock formulation)
Bullish Harami -- syntax:  bullharami() Define bullharami as
delay(longblack,1) && short && open<=close && delta(high)<0 && delta(low)>0
Bullish Harami Cross -- syntax:  bullharamicross() Define bullharamicross as
bullharami && open == doji
Dark Cloud Cover -- syntax:  darkcloud() Define darkcloud as
delay(bigwhite,1) && black && open > delay(high,1) && close < delay(close-(close-open)/4,1)
Doji -- syntax:  doji() Define doji as
open == close
Doji Star -- syntax:  dojistar() Define dojistar as
doji && (open < delay(low,1) || open > delay(high, 1))
Engulfing Bearish Line -- syntax:  engulfingbear() Define engulfingbear as
delay(short,1) && delay(white,1) && bigblack && delta(low) < 0 && delta(high) > 0
Engulfing Bullish Line -- syntax:  engulfingbull() Define engulfingbull
delay(short,1) && delay(black,1) && bigwhite && delta(low) < 0 && delta(high) > 0
Evening Doji Star -- syntax:  eveningdojistar() Define eveningdojistar as
delay(dojistar,1) && delay(bigwhite, 2) && 
delay(open - delay(high,1),1) > 0 && bigblack && 
close < delay(close - (close-open)/3,2)
Evening Star -- syntax:  eveningstar() Define eveningstar as
delay(short, 1) && delay(bigwhite, 2) && 
delay(open - delay(high,1),1) > 0 && bigblack && 
close < delay(close - (close-open)/3,2)
Falling Window -- syntax:  fallingwindow() Define fallingwindow as
delay(low,1) > high
Gravestone Doji -- syntax:  gravestonedoji() Define gravestonedoji as
open == close && open == low
Hammer -- syntax:  hammer() Define hammer as
shortbody && (high-low) > 2*(abs(close-open)) &&
if(close-open > 0, high-close < abs(close-open)/2, 
high-open < abs(close-open)/2)
Define shortbody as
abs(close-open) < Average True Range(4)/3
Hanging Man -- syntax:  hangingman() Define hangingman as
hammer && longlowershadow
Inverted Black Hammer -- syntax:  invblackhammer() Define invblackhammer as
invhammer && black
Inverted Hammer -- syntax:  invhammer() Define invhammer as
shortbody && (high-low) > 2*(abs(close-open)) &&
if(close-open > 0, open-low < abs(close-open)/2,
close-low < abs(close-open)/2
Long Legged Doji -- syntax:  longleggeddoji() Define longleggeddoji as
doji && high - low > Average True Range(4) && high-close > (high-low)/3 && close - low > (high-low)/3
Long Lower Shadow -- syntax:  longlowershadow() Define longlowershadow as
if (close-open > 0, open-low > 2*(high-low)/3, close-low > 2*(high-low)/3)
Long Upper Shadow -- syntax:  longuppershadow() Define longuppershadow as
if (close-open > 0, high-close > 2*(high-low)/3, high-open > 2*(high-low)/3)
Morning Doji Star -- syntax:  morningdojistar() Define morningdojistar as
morningstar && delay(doji, 1)
Morning Star -- syntax:  morningstar() Define morningstar as
delay(bigblack, 2) && delay(shortbody, 1) && if(delay(close>open,1),delay(close,1) < delay(close,2), delay(open, 1) < delay(close,2)) && white && close > delay(open-close,2)/3 + delay(close,2)
On Neck-Line -- syntax:  onneckline() Define onneckline as
slope(close, 14) < 0 && white && short && delay(black, 1) && abs(close - delay(low,1)) < Average True Range(4)/5
Piercing Line -- syntax:  piercingline() Define piercingline as
open < delay(low,1) && close > delay((open+close)/2, 1) && delay(black,1)
Rising Window -- syntax:  risingwindow() Define risingwindow as
low > delay(high,1)
Separating Lines -- syntax:  separatinglines() Define separatinglines as
open == delay(open,1) && if (slope(close, 14) > 0, white && delay(black,1), black && delay(white,1))
Shaven Bottom -- syntax:  shavenbottom() Define shavenbottom as
if (open<close, open == low, close == low)
Shaven Head -- syntax:  shavenhead() Define shavenhead as
if (open>close, open == high, close == high)
Shooting Star -- syntax:  shootingstar() Define shootingstar as
shortbody && longuppershadow && if(open>close, close-low < Average True Range(4)/10, open-low < Average True Range(4)/10)
Spinning Top -- syntax:  spinningtop() Define spinnintop as
shortbody
Three Black Crows -- syntax:  3blackcrows() Define threeblackcrows as
delay(bigblack, 2) && delay(bigblack,1) && bigblack && 
delay(close-low,2) < Average True Range(4)/5 &&
delay(close-low,1) < Average True Range(4)/5 && 
close-low < Average True Range(4)/5 &&
delay(delta(close),1) < 0 && delta(close) < 0
Three White Soldiers -- syntax:  3whitesoldiers() Define threewhitesoldiers as
delay(high-close,2) < Average True Range(4)/5 &&
delay(high-close,1) < Average True Range(4)/5 && 
high-close < Average True Range(4)/5 &&
delay(delta(close),1) > 0 && delta(close) > 0
Tweezer Bottoms -- syntax:  tweezerbottoms() Define tweezerbottoms as
for(delay(min(open, close), var) == min(open, close) ||; 1; var<5; var+1)
Tweezer Tops -- syntax:  tweezertops() Define tweezertops as
for(delay(max(open, close), var) == max(open, close) ||; 1; var<5; var+1)
White Body -- syntax:  white() Define white as
close > open