Hull Waves
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © AleSaira


//==================////////////////////////================================/////////////////======================}
//==================////////////////////////================================/////////////////======================{
 //  _____  .__           _________      .__               
 // /  _  \ |  |   ____  /   _____/____  |__|___________   
 ///  /_\  \|  | _/ __ \ \_____  \\__  \ |  \_  __ \__  \  
///    |    \  |_\  ___/ /        \/ __ \|  ||  | \// __ \_
//\____|__  /____/\___  >_______  (____  /__||__|  (____  /
//        \/          \/        \/     \/               \/ 
//==================////////////////////////================================/////////////////======================}
//==================////////////////////////================================/////////////////======================{

//@version=5


indicator("Hull Waves", "Hull Waves", true, max_lines_count = 100, max_bars_back = 100)
//==================////////////////////////================================/////////////////======================}
// Input pfor the number of lines 
//==================////////////////////////================================/////////////////======================{
fiu_time            = input.int     (100, title="Number of Lines", minval=1)
mira                = input.int     (15, title="Lenght of fan")
//==================////////////////////////================================/////////////////======================}
// Input for the fan colour
//==================////////////////////////================================/////////////////======================{
lineColorUp         = input         (color.lime, title="Color for Lines Going Up")
lineColorDown       = input         (color.rgb(248, 5, 5), title="Color for Lines Going Down")
//==================////////////////////////================================/////////////////======================}
// Input for the color of the fill areas
//==================////////////////////////================================/////////////////======================{
fillColorUp         = input         (color.new(#0fb5d2, 66), title="Fill Color for Up Lines")
fillColorDown       = input         (color.new(#de0ee2, 54), title="Fill Color for Down Lines")
//==================////////////////////////================================/////////////////======================}
// Input for moving average lengths
//==================////////////////////////================================/////////////////======================{
sma1Length          = input         (8, title="Length for 5-period HMA")
sma2Length          = input         (21, title="Length for 20-period HMA")
//==================////////////////////////================================/////////////////======================}
// Loop creating the fan of lines on each bar.
//==================////////////////////////================================/////////////////======================{
fivehma = ta.hma(close, sma1Length)
twentyhma = ta.hma(close, sma2Length)
firstplot = plot(fivehma, title="8-period HMA", color=lineColorUp)
secondplot = plot(twentyhma, title="21-period HMA", color=lineColorDown)
fill(firstplot, secondplot, fivehma > twentyhma ? fillColorUp : fillColorDown)
//==================////////////////////////================================/////////////////======================{
// Calculate the increment value for each line in the fan based on the price range over 'fiu_time' bars
//==================////////////////////////================================/////////////////======================{
for i = 0 to fiu_time
//==================////////////////////////================================/////////////////======================{
    // Starting point of the fan in y
//==================////////////////////////================================/////////////////======================{
    lineUp = math.avg(close[1], open[1])
    discover_01 = (close - open) / fiu_time
//==================////////////////////////================================/////////////////======================{
    // End point in y if line stopped at the current bar.
//==================////////////////////////================================/////////////////======================{
    giude_line = open + (discover_01 * i)
    // Extrapolate necessary y position to the next bar because we extend lines one bar in the future.
//==================////////////////////////================================/////////////////======================{
    giude_line := giude_line + (giude_line - lineUp)
    lineColor = giude_line > lineUp ? lineColorUp : lineColorDown
    line.new(bar_index - 1, lineUp, bar_index + mira, giude_line, color = lineColor)
//==================////////////////////////================================/////////////////======================}
// Define the condition for the alert
//==================////////////////////////================================/////////////////======================{
alertcondition(condition = ta.crossover(fivehma, twentyhma), title = "Hull Waves Cross", message = "The Hull Waves have crossed!")
//==================////////////////////////================================/////////////////======================}
//==================////////////////////////================================/////////////////======================{
