- Notifications
You must be signed in to change notification settings - Fork2
kunogi/fin-calc
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
case 1:
resultArr0 = ARR_0 * 2 // would like to multiply each item in ARR_0 by 2, and saves in resultArr0.
in js it's actually:
resultArr0 = ARR_0.map(item => item * 2)
case 2:
resultArr1 = ARR_1 - ARR_2 // which means items in ARR_1 minus items in ARR_2 one by one, and returns a new array with the result.
with this lib to implement the above cases:
import FinUtil from './util/FinUtil'resultArr0 = FinUtil.arrOp(ARR_0, 2, '*') // case1, ARR_0 * 2resultArr1 = FinUtil.arrOp(ARR_1, ARR_2, '-') // case2, ARR_1 - ARR_2
an original formula you learn from any sources such as some stock-softwares or wikipedia, which aims to calculate 123 days/months/minutes of the moving average of the close prices would probably look like this:
MA(CLOSE, 123)
//assume your data arranged as following:const _DATAS_ = [{ "open": 140.12, "high": 141.03, "low": 139.5, "cLoSe": 139.68, "volume": 25446000, "date": "2019-08-11"},{ "open": 139.69, "high": 140.29, "low": 139.52, "cLoSe": 139.55, "volume": 13304300, "date": "2019-08-12"}]
- do the import:
import FinUtil from '@/lib/util/FinUtil'import MA from '@/lib/MA'
- generate close-price array and do the math:
const closePriceArr = FinUtil.genArrByProp(_DATAS_, 'cLoSe')const ma = MA(closePriceArr, 123) // calculate the ma based on CLOSE and the parameter 123
DIF = EMA(CLOSE, SHORT) - EMA(CLOSE, LONG)DEA = EMA(DIF, MID)MACD = (DIF - DEA) * 2
import FinUtil from '@/lib/util/FinUtil'import EMA from '@/lib/EMA'const close = FinUtil.genArrByProp(_DATAS_, 'cLoSe')const dif = FinUtil.arrOp(EMA(close, 12), EMA(close, 26), '-') // DIF = EMA(CLOSE, 12) - EMA(CLOSE, 26)const dea = EMA(dif, 9) // DEA = EMA(DIF, 9)const macd = FinUtil.arrOp(FinUtil.arrOp(dif, dea, '-'), 2, '*') // MACD = (DIF - DEA) * 2
https://fincalc.web.cloudendpoint.cn/
TR1 = MAX(MAX((HIGH - LOW), ABS(REF(CLOSE, 1) - HIGH)), ABS(REF(CLOSE, 1) - LOW))ATR1 = MA(TR1, M)
BBIBOLL = (MA(CLOSE, 3) + MA(CLOSE, 6) + MA(CLOSE, 12) + MA(CLOSE, 24)) / 4UPR = BBIBOLL + M * STD(BBIBOLL, N)DWN = BBIBOLL - M * STD(BBIBOLL, N)
MA_V0 = MA(CLOSE, V0)MA_V1 = MA(CLOSE, V1)MA_V2 = MA(CLOSE, V2)BIAS1 = (CLOSE - MA_V0) / MA_V0 * 100BIAS2 = (CLOSE - MA_V1) / MA_V1 * 100BIAS3 = (CLOSE - MA_V2) / MA_V2 * 100
MID = MA(CLOSE, PERIOD)UPPER= MID + TIMES * STD(CLOSE, PERIOD)LOWER= MID - TIMES * STD(CLOSE, PERIOD)
TYP = (HIGH + LOW + CLOSE) / 3CCI = (TYP - MA(TYP, N)) / (0.015 * AVEDEV(TYP, N))
CH = REF(HIGH, 1)CL = REF(LOW, 1)CC = REF(CLOSE, 1)CDP = (CH + CL + CC) / 3AH = CDP + CH - CLAL = CDP - CH + CLNH = CDP * 2 - CLNL = CDP * 2 - CH
DIF = MA(CLOSE, SHORT) - MA(CLOSE, LONG)DMA = MA(DIF, M)
MTR = EXPMEMA(MAX(MAX(HIGH - LOW, ABS(HIGH - REF(CLOSE, 1))), ABS(REF(CLOSE, 1) - LOW)), N)HD = HIGH - REF(HIGH, 1)LD = REF(LOW, 1) - LOWDMP = EXPMEMA(IF(HD > 0 && HD > LD, HD, 0), N)DMM = EXPMEMA(IF(LD > 0 && LD > HD, LD, 0), N)PDI = DMP * 100 / MTRMDI = DMM * 100 / MTRADX = EXPMEMA(ABS(MDI - PDI) / (MDI + PDI) * 100, M)ADXR = EXPMEMA(ADX, M)
VOLUME = MA(VOL, N) / VOLMID = 100 * (HIGH + LOW - REFV(HIGH + LOW, 1)) / (HIGH + LOW)EMV = MA(MID * VOLUME * (HIGH - LOW) / MA(HIGH - LOW, N), N)EMVA = MA(EMV, N1)
UPPER = (1 + M1 / 100) * MA(CLOSE, M)LOWER = (1 - M2 / 100) * MA(CLOSE, M)ENE = (UPPER + LOWER) / 2
RSV = (CLOSE - LLV(LOW, P1)) / (HHV(HIGH, P1) - LLV(LOW, P1)) * 100K = SMA(RSV, P2, 1)D = SMA(K, P3, 1)J = 3 * K - 2 * D
DIF = EMA(CLOSE, SHORT) - EMA(CLOSE, LONG)DEA = EMA(DIF, MID)MACD = (DIF - DEA) * 2
AA = C - REF(C, M)MI = SMA(AA, M, 1)
MTM = CLOSE - REF(CLOSE, N)MTMMA = MA(MTM, M)
OSC = 100 * (CLOSE - MA(CLOSE, N))OSCEMA = EXPMEMA(OSC, M)
ROC = (CLOSE - REF(CLOSE, N)) / REF(CLOSE, N) * 100ROCMA = MA(ROC, M)
LC = REF(CLOSE, 1)MAXARR = MAX(CLOSE - LC, 0)ABSARR = ABS(CLOSE - LC)RSI1 = SMA(MAXARR, v0, 1) / SMA(ABSARR, v0, 1) * 100RSI2 = SMA(MAXARR, v1, 1) / SMA(ABSARR, v1, 1) * 100RSI3 = SMA(MAXARR, v2, 1) / SMA(ABSARR, v2, 1) * 100
TR = EMA(EMA(EMA(CLOSE, P), P), P)TR1 = REF(TR, 1)TRIX = (TR - TR1) / TR1 * 100TRMA = MA(TRIX, N)
ref1 = REF(CLOSE, 1)TH = SUM(IFF(CLOSE > LC, VOL, 0), N)TL = SUM(IFF(CLOSE < LC, VOL, 0), N)TQ = SUM(IFF(CLOSE = LC, VOL, 0), N)VR = 100 * (TH * 2 + TQ) / (TL * 2 + TQ)VRMA = MA(VR, M)
WVAD = (CLOSE - OPEN) / (HIGH - LOW) * VOL