https://www.tradingview.com/script/8YTK3Tws-ICT-EXTENDED-MARKET-STRUCTURE-BY-MR-ALGORITHM/
Читать полностью…باید از هش فلگ یا array contact
استفاده کنید و یگ فلگ یا کانتکت به ارایه ها اضافه کنید بعد از رویداد
Your edited code looks good! Below is the updated version that includes a line for the lowest price over the same lookback period. This code will draw both a high-level and a low-level line, updating their positions and styles dynamically based on whether the price touches them.
---
### Updated Code: High and Low Levels
//@version=5
indicator("Memorized Event Lines", overlay=true)
// Inputs for customization
lookback = input.int(25, "Lookback Period")
line_width = input.int(2, "Line Width")
line_solid_color = color.new(color.green, 0)
line_dotted_color = color.new(color.red, 0)
// Calculate the highest and lowest prices over the lookback period
high_level = ta.highest(high, lookback)
low_level = ta.lowest(low, lookback)
// Persistent variables
var line high_line = na
var line low_line = na
var bool high_touched = false // Tracks if the price has reached the high line
var bool low_touched = false // Tracks if the price has reached the low line
// Check if the price has touched or exceeded the high-level line
if close >= high_level
high_touched := true
else
high_touched := false
// Check if the price has touched or fallen below the low-level line
if close <= low_level
low_touched := true
else
low_touched := false
// Create or update the high-level line
if na(high_line)
high_line := line.new(x1=bar_index[5], y1=high_level, x2=bar_index + 50, y2=high_level,
color=line_solid_color, width=line_width, style=line.style_solid)
else
line.set_xy1(high_line, bar_index[5], high_level)
line.set_xy2(high_line, bar_index + 50, high_level)
// Create or update the low-level line
if na(low_line)
low_line := line.new(x1=bar_index[5], y1=low_level, x2=bar_index + 50, y2=low_level,
color=line_solid_color, width=line_width, style=line.style_solid)
else
line.set_xy1(low_line, bar_index[5], low_level)
line.set_xy2(low_line, bar_index + 50, low_level)
// Change the high-level line style based on whether the price has touched it
if high_touched
line.set_style(high_line, line.style_dotted)
line.set_color(high_line, line_dotted_color)
else
line.set_style(high_line, line.style_solid)
line.set_color(high_line, line_solid_color)
// Change the low-level line style based on whether the price has touched it
if low_touched
line.set_style(low_line, line.style_dotted)
line.set_color(low_line, line_dotted_color)
else
line.set_style(low_line, line.style_solid)
line.set_color(low_line, line_solid_color)
high_level
).low_level
).high_level
, the high-level line becomes dotted.low_level
, the low-level line becomes dotted.high_line
and low_line
) and logic for position and style updates.چالش برنامه نویسی
چگونه یک رویداد مقیم در حافظه ایجاد کنیم
مثال
برای یک خط افقی در های و لو های بلند مدت
در پاین اسکریپت در حالت عادی
یک استایل سالید لاین
و در صورت عبور قیمت از سطح
استایل خط را به دش لاین تغییر
و تغییر ماندگار ایجاد کنید
کونی مگه همون شبکه نیست .
الان که لاگت رو فرستادم فورکس ارمی میفهمی . پلشت بازی یعنی چی
این کد به زبان Pine Script نوشته شده و یک اندیکاتور به نام "VIPER LOGARITHMIC MOVING AVERAGE" را برای استفاده در پلتفرم TradingView پیادهسازی میکند. در اینجا، توضیحی جامع از بخشهای اصلی کد و نحوهی محاسبات مربوط به میانگین متحرک لگاریتمی (LMA) و سطوح مختلف آن آورده شده است.
### 1. تابع اصلی `f_Logarithmic_Moving_Average`:
این تابع برای محاسبه میانگین متحرک لگاریتمی استفاده میشود. در اینجا نحوه عملکرد آن توضیح داده میشود:
- ورودیها:
- Source
: ورودی اصلی که معمولاً قیمت پایانی (close price) است.
- Length
: طول میانگین متحرک، که بر اساس ریشه مربع قیمت باز شدن محاسبه میشود: LENGTH = math.sqrt(open)
.
- نحوه محاسبه:
- ابتدا، دو متغیر SUM
و NORM
برای ذخیرهسازی مجموعها تعریف میشوند.
- سپس، از یک حلقه for
برای پیمایش و محاسبه وزنها و مجموع مقادیر لگاریتمی استفاده میشود.
- وزنها: برای هر نقطه، وزن به صورت math.log(Length + 1 - i)
محاسبه میشود که در آن i
به ترتیب زمان از 0 تا Length-1
میرود.
- محاسبه NORM: مجموع این وزنها برای نرمال کردن محاسبات نهایی استفاده میشود.
- محاسبه LMA: نهایتاً میانگین متحرک لگاریتمی با ضرب مجموع وزنها در قیمتها و تقسیم آن بر NORM
محاسبه میشود.
- MULTIPLIED_LMA: برای نمایش دقیقتر، میانگین متحرک لگاریتمی در مقدار بسیار بزرگ ضرب میشود: MULTIPLIED_LMA = LMA * 100000000000000 / 99999999999999
.
### 2. محاسبه سطوح بالا و پایین LMA:
سطوح مختلف حول میانگین متحرک لگاریتمی بر اساس قیمت باز شدن و مقدار STEP_SIZE
محاسبه میشوند.
- محاسبه `STEP_SIZE`: این اندازه از ریشه مکعبی قیمت باز شدن استفاده میکند و سپس آن را بر 10 تقسیم میکند:
STEP_SIZE = math.pow(open, int(1 / 5)) / 10
LEVEL_1 = LMA + STEP_SIZE / HOUR
LEVEL_2 = LEVEL_1 + STEP_SIZE / 4.47
LEVEL_3 = LEVEL_2 + STEP_SIZE / 8.35
STEP_SIZE
به تناسب در سطوح بالاتر اضافه میشود.LOWER_LEVEL_1 = LMA - STEP_SIZE / HOUR
LOWER_LEVEL_2 = LOWER_LEVEL_1 - STEP_SIZE / 4.47
LOWER_LEVEL_3 = LOWER_LEVEL_2 - STEP_SIZE / 8.35
line.new
برای ترسیم خطوط افقی در سطوح مختلف استفاده میکند:f_Calculate_Bias
برای تعیین جهت بازار استفاده میشود. این تابع با مقایسه قیمت پایانی (close) با میانگین متحرک لگاریتمی (LMA) مشخص میکند که روند بازار به سمت بالا ('UP'
) یا پایین ('DOWN'
) است. اگر قیمت پایانی از میانگین متحرک بالاتر باشد، جهت 'UP'
است، در غیر این صورت 'DOWN'
میشود.https://www.tradingview.com/script/UknkPXKH-VIPER-LOGARITHMIC-MOVING-AVERAGE-NEW-REINFORCED/
Читать полностью…### چالش:
شما میخواهید در Pine Script یک رویداد "حافظهای" (memorized event) طراحی کنید که به شکل زیر عمل کند:
1. تشخیص بالاترین قیمت در 256 کندل گذشته: خطی را روی نمودار برای این سطح رسم کنید.
2. تغییر سبک خط وقتی قیمت برای اولین بار به سطح خط رسید: اگر قیمت به سطح خط رسید، سبک خط از "solid" به "dotted" تغییر کند.
3. نگهداری وضعیت رویداد به صورت حافظهای: اطمینان حاصل شود که این رفتار در کد مدیریت و ذخیره میشود.
---
### کد مثال به Pine Script (پاسخ):
//@version=5
indicator("Memorized Event Line", overlay=true)
// ورودیها برای سفارشیسازی
lookback = input.int(256, "دوره بررسی گذشته")
line_width = input.int(2, "ضخامت خط")
line_solid_color = color.new(color.green, 0)
line_dotted_color = color.new(color.red, 0)
// پیدا کردن بالاترین قیمت در 256 کندل گذشته
high_level = ta.highest(high, lookback)
// متغیرهای پایدار برای ذخیره وضعیت خط
var line my_line = na
var bool touched = false // بررسی اینکه آیا قیمت به خط رسیده است یا نه
// بررسی اینکه آیا قیمت به سطح خط رسیده است
if not touched and close >= high_level
touched := true
// ایجاد یک خط جدید اگر هنوز خطی برای سطح فعلی رسم نشده است
if na(my_line) or line.get_price1(my_line) != high_level
// بازنشانی وضعیت اگر یک سطح جدید شناسایی شد
touched := false
line.delete(my_line) // حذف خط قبلی
my_line := line.new(x1=bar_index[1], y1=high_level, x2=bar_index, y2=high_level,
color=line_solid_color, width=line_width, style=line.style_solid)
// تغییر سبک خط به dotted اگر قیمت به سطح خط رسیده باشد
if touched
line.set_style(my_line, line.style_dotted)
line.set_color(my_line, line_dotted_color)
var line my_line
: خط فعلی رسم شده را ذخیره میکند.var bool touched
: بررسی میکند که آیا قیمت به سطح خط رسیده است یا خیر.solid
رسم میشود.touched
به true
تغییر میکند و سبک خط به dotted
تغییر مییابد.var
).تبلیغات و هر گهی هم که در اون پلت فرم اپارات خود پلتفرم میخورد به من ربطی ندارد .
خود مطلب اموزشی مد نظر است و دیگر هیچ