Show/Hide Toolbars

Hitta kursvinnare - Hjälpmanual

Navigation: HkScript

Kodexempel: RSI, Stoch, Macd m fl

Scroll Föregående Topp Nästa Fler

Exempel på denna sida:

 
RSI - Relative Strength Index (HkScript)

#global param("p1", 14)
#global param("p2", 30)
#global param("p3", 70)

#global nbrplots(3)
 
#global dataserie("upMove");
#global dataserie("downMove");
#global dataserie("avgUp");
#global dataserie("avgDown");
#global dataserie("rsiCalc");
 
local n = p1;
local delta = 0;
 
// 1) Prisförändring (delta)
if (BarNumber == 0)
{
 delta = 0;
}
else
{
 delta = Close[0] - Close[-1];
}
 
// 2) Dela upp i upp/ned-rörelse
if (delta > 0)
{
upMove[0] = delta;
downMove[0] = 0;
}
else
{
upMove[0] = 0;
downMove[0] = fabs(delta); // fabs rekommenderas för decimaltal
}
 
// 3) Wilder smoothing av avgUp/avgDown
// Init: första gången vi har minst n+1 bars (BarNumber == n) sätter vi startvärde som SMA
if (BarNumber == n)
{
avgUp[0] = upMove.sum(n) / n;
avgDown[0] = downMove.sum(n) / n;
}
else if (BarNumber > n)
{
avgUp[0] = avgUp[-1] + (1.0 / n) * (upMove[0] - avgUp[-1]);
avgDown[0] = avgDown[-1] + (1.0 / n) * (downMove[0] - avgDown[-1]);
}
else
{
// För tidiga bars: sätt 0 (eller lämna tomt beroende på hur du vill att grafen ska se ut)
avgUp[0] = 0;
avgDown[0] = 0;
}
 
// 4) RSI = 100 - (100 / (1 + RS)), där RS = avgUp/avgDown
if (BarNumber <= n)
{
rsiCalc[0] = 0; // ännu ej "riktig" RSI
}
else if (avgDown[0] == 0)
{
rsiCalc[0] = 100;
}
else
{
 local rs = avgUp[0] / avgDown[0];
rsiCalc[0] = 100 - (100 / (1 + rs));
}
 
// 5) Rita ut
plot1[0] = rsiCalc[0];
plot2[0] = p2; // undre nivå, t ex 30
plot3[0] = p3; // övre nivå, t ex 70
 
 
StoS - Stochastic Slow (HkScript)

#global param("p1", 14) // %K-linje, standard 14
#global param("p2", 3) // %D-linje, standard 3
#global param("p3", 3) // Slowfaktor, standard 3

#global nbrplots(2)
 
#global dataserie("fastK");
#global dataserie("slowK");
#global dataserie("slowD");
 
local kPeriod = p1;
local dPeriod = p2;
local slowFactor = p3;
 
local highestHigh = 0;
local lowestLow = 0;
local range = 0;
 
// Fast %K:
// 100 * (Close - lowest low) / (highest high - lowest low)
if (BarNumber >= kPeriod - 1)
{
 highestHigh = High.highest(kPeriod);
 lowestLow = Low.lowest(kPeriod);
 range = highestHigh - lowestLow;
 
 if (range != 0)
 {
  fastK[0] = 100 * (Close[0] - lowestLow) / range;
 }
 else
 {
  fastK[0] = 0;
 }
}
else
{
fastK[0] = 0;
}
 
// Slow %K = utjämnad Fast %K.
// Detta motsvarar %D-linjen i Stochastic Fast.
if (BarNumber >= kPeriod + dPeriod - 2)
{
slowK[0] = fastK.sum(dPeriod) / dPeriod;
}
else
{
slowK[0] = 0;
}
 
// Slow %D = ytterligare utjämning av Slow %K med slowfaktor.
if (BarNumber >= kPeriod + dPeriod + slowFactor - 3)
{
slowD[0] = slowK.sum(slowFactor) / slowFactor;
}
else
{
slowD[0] = 0;
}
 
// Rita ut
plot1[0] = slowK[0]; // StoS / %K
plot2[0] = slowD[0]; // StoS_D / %D
 

MultiMA (HkScript)

// 5 olika MA
#global param("p1", 20)  // ma1
#global param("p2", 40)  // ma3
#global param("p3", 60)  // ma3
#global param("p4", 80)  // ma4
#global param("p5", 100) // ma5

#global nbrplots(5)
 
// Rita ut - sätt färger i inställningarna
plot1[0] = MA1(p1)[0];
plot1[0] = MA1(p2)[0];
plot1[0] = MA1(p3)[0];
plot1[0] = MA1(p4)[0];
plot1[0] = MA1(p5)[0];

 
MACD (HkScript)

#global param("p1", 26) // Slow EMA
#global param("p2", 12) // Fast EMA
#global param("p3", 9)  // Smooth / signallinje

#global nbrplots(3)
 
#global dataserie("fastEma");
#global dataserie("slowEma");
#global dataserie("macdLine");
#global dataserie("avgLine");
#global dataserie("diffLine");
 
local slowPeriod = p1;
local fastPeriod = p2;
local smoothPeriod = p3;
 
local fastAlpha = 2.0 / (1 + fastPeriod);
local slowAlpha = 2.0 / (1 + slowPeriod);
local smoothAlpha = 2.0 / (1 + smoothPeriod);
 
if (BarNumber == 0)
{
fastEma[0] = Close[0];
slowEma[0] = Close[0];
macdLine[0] = 0;
avgLine[0] = 0;
diffLine[0] = 0;
}
else
{
fastEma[0] = fastAlpha * Close[0] + (1 - fastAlpha) * fastEma[-1];
slowEma[0] = slowAlpha * Close[0] + (1 - slowAlpha) * slowEma[-1];
macdLine[0] = fastEma[0] - slowEma[0];
avgLine[0] = smoothAlpha * macdLine[0] + (1 - smoothAlpha) * avgLine[-1];
diffLine[0] = macdLine[0] - avgLine[0];
}
 
// Rita ut - sätt plot3 visa staplar i inställningarna
plot1[0] = macdLine[0]; // MACD / Macd
plot2[0] = avgLine[0]; // Avg / signallinje
plot3[0] = diffLine[0]; // Diff / histogram
 

BBW - Bollinger Band Width (HkScript)

#global param("p1", 20) // Period
#global param("p2", 2.0) // Bredd på band
#global param("p3", 5) // MA-period

#global nbrplots(2)
 
#global dataserie("closeSq");
#global dataserie("middleBand");
#global dataserie("stdDevLine");
#global dataserie("upperBand");
#global dataserie("lowerBand");
#global dataserie("bandWidth");
#global dataserie("bandWidthMa");
 
local period = p1;
local bandWidthFactor = p2;
local maPeriod = p3;
 
local mean = 0;
local variance = 0;
 
// Kvadrerad Close används för standardavvikelse
closeSq[0] = Close[0] * Close[0];
 
// Beräkna Bollinger-band och BBW
if (BarNumber >= period - 1)
{
 mean = Close.sum(period) / period;
middleBand[0] = mean;
 
 variance = (closeSq.sum(period) / period) - (mean * mean);
 
 if (variance < 0)
 {
  variance = 0;
 }
 
stdDevLine[0] = sqrt(variance);
 
upperBand[0] = middleBand[0] + bandWidthFactor * stdDevLine[0];
lowerBand[0] = middleBand[0] - bandWidthFactor * stdDevLine[0];
 
 if (middleBand[0] != 0)
 {
  bandWidth[0] = 100 * (upperBand[0] - lowerBand[0]) / middleBand[0];
 }
 else
 {
  bandWidth[0] = 0;
 }
 
 if (BarNumber >= period + maPeriod - 2)
 {
  bandWidthMa[0] = bandWidth.sum(maPeriod) / maPeriod;
 }
 else
 {
  bandWidthMa[0] = 0;
 }
}
else
{
bandWidth[0] = 0;
bandWidthMa[0] = 0;
}
 
// Rita ut
plot1[0] = bandWidth[0]; // BBW
plot2[0] = bandWidthMa[0]; // BBW_MA