DeMarker (SDK Trading)
The DeMarker indicator is a technical analysis tool to compare the latest minimum and maximum prices to the previous period's equivalent price and then measure the demand of the underlying equity. From this comparison, it helps to assess the target market's directional bias.
Fintechee is the most promising Forex trading platform. Please access Fintechee's website to know more details. Fintechee provides cryptocurrency price on their website. Here is the link: https://www.brokerless.cc, the frontend is based on Fintechee WEB Trader. AngelInvestmentNetwork.org has some cases. You can find news at Fintecher.org, the blog of Fintechee's founder, PlaygroundFX and LetplayFX
DeMarker (SDK Trading)
registerIndicator("demarker", "DeMarker(v1.0)", function (context) {
var dataInputHigh = getDataInput(context, 0)
var dataInputLow = getDataInput(context, 1)
var dataOutput = getDataOutput(context, "demarker")
var dataOutputHL = getDataOutput(context, "highLevel")
var dataOutputLL = getDataOutput(context, "lowLevel")
var dataOutputMax = getDataOutput(context, "max")
var dataOutputMin = getDataOutput(context, "min")
var dataOutputMaMax = getDataOutput(context, "maMax")
var dataOutputMaMin = getDataOutput(context, "maMin")
var highLevel = getIndiParameter(context, "highLevel")
var lowLevel = getIndiParameter(context, "lowLevel")
var period = getIndiParameter(context, "period")
var calculatedLength = getCalculatedLength(context)
var ptr = calculatedLength
if (ptr > 0) {
ptr--
} else {
ptr = 1
dataOutputMax[0] = 0;
dataOutputMin[0] = 0;
}
var tmp = 0
while (ptr < dataInputHigh.length) {
tmp = dataInputHigh[ptr] - dataInputHigh[ptr - 1]
if (0 > tmp) {
tmp = 0
}
dataOutputMax[ptr] = tmp
tmp = dataInputLow[ptr - 1] - dataInputLow[ptr]
if (0 > tmp) {
tmp = 0
}
dataOutputMin[ptr] = tmp
ptr++
}
sma(dataOutputMax, dataOutputMaMax, calculatedLength, period)
sma(dataOutputMin, dataOutputMaMin, calculatedLength, period)
ptr = calculatedLength
if (ptr > 0) {
ptr--
} else {
ptr = period - 1
for (var i = 0; i < period - 1; i++) {
dataOutput[i] = 0
dataOutputHL[i] = highLevel
dataOutputLL[i] = lowLevel
}
}
while (ptr < dataInputHigh.length) {
tmp = dataOutputMaMax[ptr] + dataOutputMaMin[ptr]
if (0 == tmp) {
dataOutput[ptr] = 0
} else {
dataOutput[ptr] = dataOutputMaMax[ptr] / tmp
}
dataOutputHL[ptr] = highLevel
dataOutputLL[ptr] = lowLevel
ptr++
}
},[{
name: "period",
value: 14,
required: true,
type: PARAMETER_TYPE.INTEGER,
range: [1, 100]
},{
name: "highLevel",
value: 0.7,
required: false,
type: PARAMETER_TYPE.NUMBER,
range: [0, 1]
},{
name: "lowLevel",
value: 0.3,
required: false,
type: PARAMETER_TYPE.NUMBER,
range: [0, 1]
}],
[{
name: DATA_NAME.HIGH,
index: 0
},{
name: DATA_NAME.LOW,
index: 1
}],
[{
name: "demarker",
visible: true,
renderType: RENDER_TYPE.LINE,
color: "steelblue"
},{
name: "highLevel",
visible: true,
renderType: RENDER_TYPE.DASHARRAY,
color: "#AAAAAA"
},{
name: "lowLevel",
visible: true,
renderType: RENDER_TYPE.DASHARRAY,
color: "#AAAAAA"
},{
name: "max",
visible: false
},{
name: "min",
visible: false
},{
name: "maMax",
visible: false
},{
name: "maMin",
visible: false
}],
WHERE_TO_RENDER.SEPARATE_WINDOW)