public override void Update(double dataPoint) { _rsi.Update(dataPoint); _msCrsi.Update(_rsi.Value); SetValue(_msCrsi.Value); }
public override void Update(Bar bar) { var index = (bar.ClosePrice - bar.OpenPrice) * bar.Volume / (bar.HighestPrice - bar.LowestPrice); _ms.Update(index); SetValue(_ms.Value); }
public override void Update(Bar bar) { var cost = ((bar.ClosePrice - bar.LowestPrice) - (bar.HighestPrice - bar.ClosePrice)) / (bar.HighestPrice - bar.LowestPrice) * bar.Volume; _sumCost.Update(cost); _sumVolume.Update(bar.Volume); SetValue(_sumCost.Value / _sumVolume.Value); }
public override void Update(Bar bar) { var truePrice = (bar.HighestPrice + bar.LowestPrice + 2 * bar.ClosePrice) / 4; _msCost.Update(bar.Volume * truePrice); var sumCost = _msCost.Value; _msVolume.Update(bar.Volume); var sumVolume = _msVolume.Value; SetValue(sumCost / sumVolume); }
public override void Update(double dataPoint) { _volatility.Update(Math.Abs(dataPoint - _previousData)); var volatilitySum = _volatility.Value; var movingSpeed = Data.Length == 0 ? 0.0 : Math.Abs(Data[-1] - Data[0]); Data.Add(dataPoint); _previousData = dataPoint; var efficencyRatio = Math.Abs(volatilitySum) < 1e-6 ? 0.0: movingSpeed / volatilitySum; SetValue(efficencyRatio); }
public override void Update(Bar bar) { const double smallValue = 1e-10; double pv, nv, zv; if (_firstBar) { pv = nv = smallValue; zv = bar.Volume; } else { if (bar.ClosePrice > _prevClosePrice) { pv = bar.Volume; nv = zv = 0.0; } else if (bar.ClosePrice < _prevClosePrice) { nv = bar.Volume; pv = zv = 0.0; } else { zv = bar.Volume; pv = nv = 0.0; } } _msPv.Update(pv); _msNv.Update(nv); _msZv.Update(zv); var msPv = _msPv.Value + smallValue; var msNv = _msNv.Value + smallValue; var msZv = _msZv.Value + smallValue; var volumeRatio = (msPv + msZv / 2.0) / (msNv + msZv / 2.0) * 100.0; // update status _prevClosePrice = bar.ClosePrice; _firstBar = false; // return result; SetValue(volumeRatio); }
public override void Update(Bar bar) { const double smallValue = 1e-10; var truePrice = (bar.HighestPrice + bar.LowestPrice + bar.ClosePrice) / 3; double positiveMoneyFlow; double negativeMoneyFlow; if (_firstData) { positiveMoneyFlow = truePrice * bar.Volume; negativeMoneyFlow = smallValue; } else { if (truePrice > _prevTruePrice) { positiveMoneyFlow = truePrice * bar.Volume; negativeMoneyFlow = 0.0; } else if (truePrice < _prevTruePrice) { positiveMoneyFlow = 0.0; negativeMoneyFlow = truePrice * bar.Volume; } else { positiveMoneyFlow = negativeMoneyFlow = smallValue; } } _msPmf.Update(positiveMoneyFlow); var sumPmf = _msPmf.Value; _msNmf.Update(negativeMoneyFlow); var sumNmf = _msNmf.Value; // update status _prevTruePrice = truePrice; _firstData = false; // return result var mfi = 100.0 / (1.0 + sumPmf / sumNmf); SetValue(mfi); }
public override void Update(Bar bar) { // calculate AR _sumUp.Update(bar.HighestPrice - bar.OpenPrice); var up = _sumUp.Value; _sumDown.Update(bar.OpenPrice - bar.LowestPrice); var down = _sumDown.Value; var ar = Math.Abs(down) < 1e-6 ? 0.0 : up / down * 100.0; // calculate BR var tempBrBs = _firstBar ? 0.0 : Math.Max(0.0, bar.HighestPrice - _prevBar.ClosePrice); var tempBrSs = _firstBar ? 0.0 : Math.Max(0.0, _prevBar.ClosePrice - bar.LowestPrice); _sumBrBs.Update(tempBrBs); var brbs = _sumBrBs.Value; _sumBrSs.Update(tempBrSs); var brss = _sumBrSs.Value; var br = Math.Abs(brss) < 1e-6 ? 0.0 : brbs / brss * 100.0; // calculate CR var tp = Tp(_prevBar); var tempCrBs = _firstBar ? 0.0 : Math.Max(0.0, bar.HighestPrice - tp); var tempCrSs = _firstBar ? 0.0 : Math.Max(0.0, tp - bar.LowestPrice); _sumCrBs.Update(tempCrBs); var crbs = _sumCrBs.Value; _sumCrSs.Update(tempCrSs); var crss = _sumCrSs.Value; var cr = Math.Abs(crss) < 1e-6 ? 0.0 : crbs / crss * 100.0; // update bar _prevBar = bar; _firstBar = false; // return results; SetValue(ar, br, cr); }
public override void Update(double dataPoint) { var uc = _firstData ? 0.0 : Math.Max(0.0, dataPoint - _prevData); var dc = _firstData ? 0.0 : Math.Max(0.0, _prevData - dataPoint); _msUc.Update(uc); var msuc = _msUc.Value; _msDc.Update(dc); var msdc = _msDc.Value; // update status _prevData = dataPoint; _firstData = false; var rsi = (Math.Abs(msuc + msdc) < 1e-6) ? 0.0 : msuc / (msuc + msdc) * 100.0; SetValue(rsi); }
public override void Update(Bar bar) { // calculate +DM and -DM double pdm, ndm; if (_firstBar) { pdm = 0.0; ndm = 0.0; } else { pdm = Math.Max(0.0, bar.HighestPrice - _prevBar.HighestPrice); ndm = Math.Max(0.0, _prevBar.LowestPrice - bar.LowestPrice); if (pdm > ndm) { ndm = 0.0; } else if (pdm < ndm) { pdm = 0.0; } else { pdm = ndm = 0.0; } } // Calculate +DI and -DI double tr; if (_firstBar) { tr = bar.HighestPrice - bar.LowestPrice; } else { tr = Math.Max(Math.Abs(bar.HighestPrice - bar.LowestPrice), Math.Max(Math.Abs(bar.HighestPrice - _prevBar.ClosePrice), Math.Abs(bar.LowestPrice - _prevBar.ClosePrice))); } // calculate +DIM and -DIM _msPdm.Update(pdm); _msNdm.Update(ndm); _msTr.Update(tr); var mspdm = _msPdm.Value; var msndm = _msNdm.Value; var mstr = _msTr.Value; var pdim = mspdm * 100.0 / mstr; var ndim = msndm * 100.0 / mstr; // calculate DX and ADX var dx = Math.Abs((pdim + ndim)) < 1e-6 ? 0.0 : Math.Abs(pdim - ndim) / (pdim + ndim); dx *= 100.0; _maDx.Update(dx); var adx = _maDx.Value; // calculate ADXR _adx.Add(adx); var adxr = _adx.Length < 2 ? _adx[0] : (_adx[-1] + _adx[0]) / 2.0; // update internal status _prevBar = bar; _firstBar = false; // return result SetValue(pdim, ndim, adx, adxr); }