// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © golshantashan

//@version=6
indicator(title="Ichimoku", shorttitle="Ichimoku", overlay=true)

// Input parameters
conversionPeriods = input.int(9, minval=1, title="Conversion Line Length")
basePeriods = input.int(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length")
displacement = input.int(26, minval=1, title="Lagging Span")

// Donchian function
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))

// Calculate lines
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

// Plot Leading Span A and B with offset
p1 = plot(leadLine1, offset=displacement - 1, color=#A5D6A7, title="Leading Span A")
p2 = plot(leadLine2, offset=displacement - 1, color=#EF9A9A, title="Leading Span B")

// Detect crossover and crossunder
cross_up = ta.crossover(leadLine1, leadLine2)
cross_down = ta.crossunder(leadLine1, leadLine2)

// Variables for red cloud
var int red_last_cross_bar = 0
var float red_max_leadLine2 = na
var float red_min_leadLine1 = na
var bool is_red_cloud = false
var int red_candle_count = 0
var int red_cross_bar_index = na

// Variables for green cloud
var int green_last_cross_bar = 0
var float green_max_leadLine1 = na
var float green_min_leadLine2 = na
var bool is_green_cloud = false
var int green_candle_count = 0
var int green_cross_bar_index = na

// Update red and green cloud states
if cross_down
    is_red_cloud := true
    is_green_cloud := false
    red_max_leadLine2 := leadLine2
    red_min_leadLine1 := leadLine1
    red_last_cross_bar := bar_index
    red_candle_count := 0
    red_cross_bar_index := bar_index
else if cross_up
    is_red_cloud := false
    is_green_cloud := true
    green_max_leadLine1 := leadLine1
    green_min_leadLine2 := leadLine2
    green_last_cross_bar := bar_index
    green_candle_count := 0
    green_cross_bar_index := bar_index

// Update values during red cloud
if is_red_cloud
    red_candle_count := red_candle_count + 1
    red_max_leadLine2 := na(red_max_leadLine2) ? leadLine2 : math.max(red_max_leadLine2, leadLine2)
    red_min_leadLine1 := na(red_min_leadLine1) ? leadLine1 : math.min(red_min_leadLine1, leadLine1)

// Update values during green cloud
if is_green_cloud
    green_candle_count := green_candle_count + 1
    green_max_leadLine1 := na(green_max_leadLine1) ? leadLine1 : math.max(green_max_leadLine1, leadLine1)
    green_min_leadLine2 := na(green_min_leadLine2) ? leadLine2 : math.min(green_min_leadLine2, leadLine2)

// Display label at the end of red cloud with OHLC
if cross_up and not na(red_max_leadLine2) and not na(red_min_leadLine1)
    red_candles_since_last_cross = red_candle_count
    red_pip_diff = (red_max_leadLine2 - red_min_leadLine1) / syminfo.mintick * 0.1
    red_label_text = str.tostring(red_candles_since_last_cross) + " candles\n" +
                     "Diff (pips): " + str.tostring(red_pip_diff, "#.##") + "\n" +
                     "Max LeadLine2: " + str.tostring(red_max_leadLine2, "#.##") + "\n" +
                     "Min LeadLine1: " + str.tostring(red_min_leadLine1, "#.##")
    label.new(
      bar_index + displacement - 1,
      high,
      red_label_text,
      color=#ff52a370,
      style=label.style_label_down,
      textcolor=color.white
      )
    // Reset red cloud variables
    red_max_leadLine2 := na
    red_min_leadLine1 := na
    red_candle_count := 0
    red_last_cross_bar := bar_index

// Display label at the end of green cloud with OHLC
if cross_down and not na(green_max_leadLine1) and not na(green_min_leadLine2)
    green_candles_since_last_cross = green_candle_count
    green_pip_diff = (green_max_leadLine1 - green_min_leadLine2) / syminfo.mintick * 0.1
    green_label_text = str.tostring(green_candles_since_last_cross) + " candles\n" +
                       "Diff (pips): " + str.tostring(green_pip_diff, "#.##") + "\n" +
                       "Max LeadLine1: " + str.tostring(green_max_leadLine1, "#.##") + "\n" +
                       "Min LeadLine2: " + str.tostring(green_min_leadLine2, "#.##")
    label.new(
      bar_index + displacement - 1,
      low,
      green_label_text,
      color=#13c3e26e,
      style=label.style_label_up,
      textcolor=color.white
      )
    // Reset green cloud variables
    green_max_leadLine1 := na
    green_min_leadLine2 := na
    green_candle_count := 0
    green_last_cross_bar := bar_index

// Display combined label with OHLC when reaching cross points
if not na(red_cross_bar_index) and bar_index == red_cross_bar_index + displacement - 1
    red_combined_label_text = 
                             "Open: " + str.tostring(open, "#.##") + "\n" +
                             "High: " + str.tostring(high, "#.##") + "\n" +
                             "Low: " + str.tostring(low, "#.##") + "\n" +
                             "Close: " + str.tostring(close, "#.##")
    label.new(
      bar_index,
      high + (high - low) * 0.5,
      red_combined_label_text,
      color=#13c3e26e,
      style=label.style_label_down,
      textcolor=color.white
      )
    red_cross_bar_index := na

if not na(green_cross_bar_index) and bar_index == green_cross_bar_index + displacement - 1
    green_combined_label_text = 
                               "Open: " + str.tostring(open, "#.##") + "\n" +
                               "High: " + str.tostring(high, "#.##") + "\n" +
                               "Low: " + str.tostring(low, "#.##") + "\n" +
                               "Close: " + str.tostring(close, "#.##")
    label.new(
      bar_index,
      low - (high - low) * 0.5,
      green_combined_label_text,
      color=#ff52a370,
      style=label.style_label_up,
      textcolor=color.white
      )
    green_cross_bar_index := na

این کد رو در نظر بگیر 
میخوام باهاش ی استراتژی معاملاتی بسازم 
ولی اول باید تشریح کنم ک چی میخوام 

خب  قبل از هرچی توضیح میدم ک چی نوشتم و بعدش اگر تایید دادی ک نوشته هام با کپم مطابقت داره میریم سراغ این کهخ چی میخوام 

من برای هر ابری ک در ایچیموکو تشکیل میشه اومدم اول طول ابر رو بر اساس تعداد کندل حساب کردم 
بعدش اومد ارتفاه هر ابر رو با استفاده از اختلاف بین لاین ۱ و ۲ به اینصورت که در ابرهای سبز رنگ اختلاف بیشترین مقدار لاین۱ با کمترین مقدار لاین۲ و در ابرهای قرمز اختلاف  بیشترین مقدارلاین ۲ با کمترین مقدار لاین۱ محاسبه کردم و بر اساس پیپ نوشتموشون
بعدش اومدم گفتم از اونجایی ک ابرها از کندل ها جلوتر حرکت میکنن اومدم گفتم وقتی ی کندل به محل کراس ( اتمام) ی  ابر میرسه بیاد و داده های اون کندل رو حساب کنه من به این داده ها برای ساخت استراتژیم نیاز دارم که جلوتر ب نحوه استفادش اشاره خواهم کرد 
 ولی قبل از اینکه استراتژی رو شروع کنیم نیاز دارم ی داده دیگ رو هم حساب کنیم.
من میخوام همونجا که کندل ها به کراس انتهایی میرسن و داده های اون کندل کراس محاسبه و توی لیبل نوشته میشه بیاد و ی داده دیگ رو هم حساب کنه اون داده اینه ک از محل همون کندل کراسمون به اندازه طول ابر به عقب برگرده و بزرگترین های و کوچکترین لورو بین اون تعداد کندل بدست بیاره در واقع من میخوام بزرگترین های و کوچکترین لو بین کندل هایی ک داخل یک ابر جای گرفتن رو حساب کنم 
دقت کن اشتباه نکنی بدییه ک این مقدارهای بالاترین های و کمترین لو زمانی میتونی حساب کنی ک کندل ها به نقطه پایانی یک ابر رسیدن پس باید همونجا ک داده های کندل آخر ی ابر رو نشون میدیم این دیتا ها رو نشون بدی و همچنین دقت کن ک از همون کندل آخر به اندازه طول ابری ک تموم شده عقب تر برگردی خود بخود میتونی بین اون کندل ها هایر های و لور لوشون رو بدست بیاری

 به اینکه ابر از کندل ها  به اندازه ۲۵ کندل جلوتر داره حرکت میکنه توجه کن
 هنگام محاسبه ohlc کندل رسیده به کراسمون بیا و این دیتا جدید رو محاسبه کن
منطقت طوری باش  ک تا وقتی ک هنوز کندل های داخل یک ابر تشکیل کاملا همشون نشدن تو هایر های و لور لو نمیتونی براشون حساب کنی 
باید بزاری کندل ها به محل کراس برسن و تموم بشن (یعنی همونجا ک دیتای ohlc رو حساب کردی ) بعد از اون محل به اندازه طول ابری ک کندل ها به پایان کراس ابرش رسیدن به عقب برگردی و هایر های و لور لو رو حساب کنی 


اول این چیزی ک خاستم رو روی کد اعمال کن تا بریم سراغ بقیش 
لطفا جوابمو فارسی بگو با کد کامل