input tenkan_period = 9;
input kijun_period = 26;
plot Tenkan = (Highest(high, tenkan_period) + Lowest(low, tenkan_period)) / 2;
plot Kijun = (Highest(high, kijun_period) + Lowest(low, kijun_period)) / 2;
plot "Span A" = (Tenkan[kijun_period] + Kijun[kijun_period]) / 2;
plot "Span B" = (Highest(high[kijun_period], 2 * kijun_period) + Lowest(low[kijun_period], 2 * kijun_period)) / 2;
plot Chikou = close[-kijun_period];
Tenkan.SetDefaultColor(GetColor(1));
Kijun.SetDefaultColor(GetColor(2));
"Span A".SetDefaultColor(GetColor(3));
"Span B".SetDefaultColor(GetColor(4));
Chikou.SetDefaultColor(color.dark_red);
DefineGlobalColor("Bullish", Color.YELLOW);
DefineGlobalColor("Bearish", Color.RED);
AddCloud("Span A", "Span B", globalColor("Bullish"), globalColor("Bearish"));
# alert signals
input showAlerts = yes;
input showOutsideCrosses = no;
#input strictMode = no;
input offset = .002;
def SpanUp = if "Span A" > "Span B" then "Span A" else "Span B";
def SpanDn = if "Span A" < "Span B" then "Span A" else "Span B";
def upTrigger1 = if showAlerts and tenkan > kijun and close crosses above SpanUp then 1 else 0;
def dnTrigger1 = if showAlerts and tenkan < kijun and close crosses below SpanDn then 1 else 0;
def upTrigger2 = if showAlerts and showOutsideCrosses and close > SpanUp and tenkan crosses above Kijun then 1 else 0;
def dnTrigger2 = if showAlerts and showOutsideCrosses and close < SpanDn and tenkan crosses below Kijun then 1 else 0;
plot UpSignal = if upTrigger1 or upTrigger2 then low - offset else Double.NaN;
plot DownSignal = if dnTrigger1 or dnTrigger2 then high + offset else Double.NaN;
UpSignal.SetDefaultColor(Color.magenta);
UpSignal.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
UpSignal.setLineWeight(3);
UpSignal.hideBubble();
DownSignal.SetDefaultColor(Color.magenta);
DownSignal.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
DownSignal.setLineWeight(3);
DownSignal.hideBubble();
#test
#def dataPoint = close[-26];
#plot crossUp = if "Span A" crosses above "Span B" then "Span B" - offset else Double.NaN;
#plot crossDn = if "Span A" crosses below "Span B" then "Span B" + offset else Double.NaN;
#plot crossUp = if upTrigger then dataPoint - offset else Double.NaN;
#plot crossDn = if dnTrigger then dataPoint + offset else Double.NaN;
#crossUp.SetDefaultColor(Color.blue);
#crossUp.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
#crossUp.setLineWeight(3);
#crossUp.hideBubble();
#crossDn.SetDefaultColor(Color.blue);
#crossDn.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
#crossDn.setLineWeight(3);
#crossDn.hideBubble();
input audioAlerts = no;
def aUp = if upSignal and audioalerts and showAlerts then upSignal else Double.NaN;
def aDown = if downSignal and audioalerts and showAlerts then downSignal else Double.NaN;
Alert(aUp, "ICHI BUY", Alert.BAR, Sound.Bell );
Alert(aDown, "ICHI SELL", Alert.BAR, Sound.Bell );