Ichimoku Kinko Hyo (SDK Trading)
The so-called Ichimoku Kinko Hyo, or Ichimoku for short, is a technical indicator that is used to help traders gauge momentum along with future areas of support and resistance. It's an all-in-one technical indicator comprised of five lines called the Tenkan line, Kijun line, Senkou Span A, Senkou Span B and Chikou Span line.
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
Ichimoku Kinko Hyo (SDK Trading)
registerIndicator("ichimoku", "Ichimoku Kinko Hyo(v1.0)", function (context) {
var dataInputHigh = getDataInput(context, 0)
var dataInputLow = getDataInput(context, 1)
var dataInputClose = getDataInput(context, 2)
var dataOutputTenkan = getDataOutput(context, "tenkan")
var dataOutputKijun = getDataOutput(context, "kijun")
var dataOutputChikou = getDataOutput(context, "chikou")
var dataOutputSpanA = getDataOutput(context, "spana")
var dataOutputSpanB = getDataOutput(context, "spanb")
var tenkan = getIndiParameter(context, "tenkan")
var kijun = getIndiParameter(context, "kijun")
var senkou = getIndiParameter(context, "senkou")
var spanA;
if (kijun < tenkan) {
spanA = tenkan;
}else{
spanA = kijun;
}
var calculatedLength = getCalculatedLength(context)
var ptr = calculatedLength
var maxParam = Math.max(tenkan, kijun, spanA, senkou)
if (ptr > 0) {
ptr--
} else {
ptr = maxParam - 1
for (var i = 1; i < maxParam; i++) {
dataOutputTenkan[ptr - i] = 0
dataOutputKijun[ptr - i] = 0
dataOutputChikou[ptr - i] = 0
dataOutputSpanA[ptr - i] = 0
dataOutputSpanB[ptr - i] = 0
}
}
var ptr2, tmp, highest, lowest
while (ptr < dataInputHigh.length) {
tmp = null
highest = -Number.MAX_VALUE
lowest = Number.MAX_VALUE
ptr2 = ptr - tenkan + 1
while (ptr2 <= ptr) {
tmp = dataInputHigh[ptr2]
if (highest < tmp) {
highest = tmp
}
tmp = dataInputLow[ptr2]
if (lowest > tmp) {
lowest = tmp
}
ptr2++
}
dataOutputTenkan[ptr] = (highest + lowest) / 2
tmp = null
highest = -Number.MAX_VALUE
lowest = Number.MAX_VALUE
ptr2 = ptr - kijun + 1
while (ptr2 <= ptr) {
tmp = dataInputHigh[ptr2]
if (highest < tmp) {
highest = tmp
}
tmp = dataInputLow[ptr2]
if (lowest > tmp) {
lowest = tmp
}
ptr2++
}
dataOutputKijun[ptr] = (highest + lowest) / 2
dataOutputSpanA[ptr] = (dataOutputTenkan[ptr] + dataOutputKijun[ptr]) / 2
tmp = null
highest = -Number.MAX_VALUE
lowest = Number.MAX_VALUE
ptr2 = ptr - senkou + 1
while (ptr2 <= ptr) {
tmp = dataInputHigh[ptr2]
if (highest < tmp) {
highest = tmp
}
tmp = dataInputLow[ptr2]
if (lowest > tmp) {
lowest = tmp
}
ptr2++
}
dataOutputSpanB[ptr] = (highest + lowest) / 2
dataOutputChikou[ptr] = dataInputClose[ptr]
ptr++
}
if (calculatedLength == 0) {
setIndiShift(context, "chikou", -kijun)
setIndiShift(context, "spana", kijun)
setIndiShift(context, "spanb", kijun)
}
},[{
name: "tenkan",
value: 9,
required: true,
type: PARAMETER_TYPE.INTEGER,
range: [1, 100]
},{
name: "kijun",
value: 26,
required: true,
type: PARAMETER_TYPE.INTEGER,
range: [1, 100]
},{
name: "senkou",
value: 52,
required: true,
type: PARAMETER_TYPE.INTEGER,
range: [1, 100]
}],
[{
name: DATA_NAME.HIGH,
index: 0
},{
name: DATA_NAME.LOW,
index: 1
},{
name: DATA_NAME.CLOSE,
index: 2
}],
[{
name: "tenkan",
visible: true,
renderType: RENDER_TYPE.LINE,
color: "#DE5029"
},{
name: "kijun",
visible: true,
renderType: RENDER_TYPE.LINE,
color: "steelblue"
},{
name: "chikou",
visible: true,
renderType: RENDER_TYPE.DASHARRAY,
color: "#4EC2B4"
},{
name: "spana",
visible: true,
renderType: RENDER_TYPE.ROUND,
color: "steelblue"
},{
name: "spanb",
visible: true,
renderType: RENDER_TYPE.ROUND,
color: "#CCCCCC"
}],
WHERE_TO_RENDER.CHART_WINDOW)