روزهای هفته: چگونه خرید هفتگی دورهای را خودکار و بهطور تاریخی آزمایش کنیم
thequantscience

مشخصات معامله
قیمت در زمان انتشار:
۶۲,۸۹۴
توضیحات
آیا تاکنون دیدهاید چگونه میتوان یک استراتژی معاملاتی مبتنی بر روز هفته را بهطور تاریخی ارزیابی کرد، مثلاً خرید هر دوشنبه؟ در این آموزش، یک استراتژی کامل برای Pine Script v6 میسازیم که هر دوشنبه بهطور دورهای مبلغ دلاری ثابتی برای خرید اجرا میکند. این استراتژی موقعیتها را مدیریت کرده و هدف سود (Take Profit) و حد ضرر (Stop-Loss) را بهصورت درصد به قیمت ورود میانگین اعمال میکند.
شرح استراتژی
🟩 ورود: خرید مقدار دلاری ثابت از دارایی پایه در هر دوشنبه
🟢 خروج سود هدف: بسته شدن همه معاملات در سود هدف زمانی که قیمت از سطح سود هدف به درصد نسبت به قیمت ورود میانگین عبور کند.
🔴 خروج از ضرر: بسته شدن همه معاملات در حد ضرر زمانی که قیمت از سطح ضرر به درصد نسبت به قیمت ورود میانگین پایینتر بیاید.
معاملهگران میتوانند پارامترهای حد ضرر و سرمایه تخصیصیافته برای هر خرید را بهطور مستقیم از رابط کاربری تنظیم کنند.
متغیر داخلی dayofweek
در دنیای معاملهگری، سوال صرفاً این نیست که چه چیزی بخریم یا با چه قیمتی، بلکه اغلب WHEN یعنی چه زمانی باید خرید، اهمیت دارد. در TradingView، متغیر داخلی dayofweek سنگبنای استفاده از عامل زمان در Pine Script است و به شما امکان میدهد مفاهیم ساده مبتنی بر تقویم را به استراتژیهای خودکار تبدیل کنید که میتوانند بهطور کامل با دادههای تاریخی مورد آزمایش قرار گیرند.
dayofweek یک متغیر سیستمی است که تاریخ هر میله را در نمودار میخواند و عددی صحیح متناظر با روز هفته را برمیگرداند. برای نگه داشتن کد تمیز و قابلفهم بدون نیاز به حفظ اعداد، Pine Script ثابتهای داخلی را ارائه میدهد:
dayofweek.sunday (Sunday 1)
dayofweek.monday (Monday 2)
dayofweek.tuesday (Tuesday 3)
dayofweek.wednesday (Wednesday 4)
dayofweek.thursday (Thursday 5)
dayofweek.friday (Friday 6)
dayofweek.saturday (Saturday 7)
💎 لینک مستقیم به راهنمای dayofweek Pine Script 6 رسمی: www.tradingview.com
این اسکریپت برای یادگیری موارد زیر ایدهآل است:
تشخیص روزهای مشخص هفته (dayofweek) و ساخت استراتژی بر پایه آن
جلوگیری از چندباره سفارش در همان میله
مدیریت تخصیص سرمایه و محدودیتهای پوزیشن
تنظیم اهداف Take Profit و Stop Loss برای کل پوزیشن
# بررسی عمیق کد
🧪 شناسایی دوشنبهها در Pine Script
برای بررسی اینکه آیا میله فعلی در دوشنبه است، Pine Script متغیر داخلی dayofweek را فراهم میکند:
bool is_monday = (dayofweek == dayofweek.monday)
🧪 جلوگیری از خریدهای تکراری در همان میله
وقتی با نمودارهای روزانه یا درونروز کار میکنیم، باید مطمئن شویم استراتژی تنها یکبار در میله دوشنبه وارد پوزیشن میشود. شاخص میله آخر ورود را دنبال میکنیم:
var int last_buy_bar = -1
if is_monday and bar_index != last_buy_bar and can_buy
// منطق ثبت سفارش ...
last_buy_bar := bar_index
🧪 کنترل سرمایه و تخصیص ریسک
قبل از ثبت سفارش، اسکریپت بررسی میکند که کل سرمایهگذاریشده از حداکثر سرمایه مجاز (که در این مثال به strategy.initial_capital تنظیم شده است) فراتر نرفته باشد:
float current_price_avg = nz(strategy.position_avg_price, 0.0)
float current_invested_capital = strategy.position_size * current_price_avg
bool can_buy = (current_invested_capital + amount_per_investment) <= max_investment
🧪 اندازهگیری پویا سفارش
بهجای خرید تعداد ثابت سهام/واحد، مقدار دلار ثابت ($500 بهطور پیشفرض) را مشخص میکنیم و مقدار لازم را در لحظه محاسبه میکنیم:
float qty_order = amount_per_investment / close
🧪 قواعد خروج برای کل پوزیشن (Take Profit & Stop Loss)
وقتی وارد معامله میشویم، استراتژی بهطور مداوم سطوح قیمت هدف را بر اساس قیمت ورود میانگین محاسبه میکند (strategy.position_avg_price):
if strategy.position_size > 0
float avg_pos = strategy.position_avg_price
float price_exit_profit = avg_pos * (1 + profit_target / 100)
float price_exit_loss = avg_pos * (1 - loss_target / 100)
strategy.exit(id = "Exit_All", limit = price_exit_profit, stop = price_exit_loss)
FULL PINE SCRIPT V6
//@version=6
strategy(
"Buy Every Monday Strategy Tutorial ",
overlay = false,
default_qty_type = strategy.cash,
initial_capital = 10000,
pyramiding = 100,
currency = currency.USD,
commission_type = strategy.commission.percent,
commission_value = 0.07,
slippage = 5,
process_orders_on_close = true,
close_entries_rule = "ANY"
)
amount_per_investment = input.float(500.0, "Amount per buy ")
profit_target = input.float(10.0, "Take Profit ")
loss_target = input.float(5.0, "Stop Loss ")
max_investment = strategy.initial_capital
bool is_monday = (dayofweek == dayofweek.monday)
var int last_buy_bar = -1
float current_price_avg = nz(strategy.position_avg_price, 0.0)
float current_invested_capital = strategy.position_size * current_price_avg
bool can_buy = (current_invested_capital + amount_per_investment) <= max_investment
if is_monday and bar_index != last_buy_bar and can_buy
float qty_order = amount_per_investment / close
string trade_id = "Buy_Monday_" + str.tostring(strategy.opentrades)
strategy.entry(id = trade_id, direction = strategy.long, qty = qty_order)
last_buy_bar := bar_index
if strategy.position_size > 0
float avg_pos = strategy.position_avg_price
float price_exit_profit = avg_pos * (1 + profit_target / 100)
float price_exit_loss = avg_pos * (1 - loss_target / 100)
strategy.exit(id = "Exit_All", limit = price_exit_profit, stop = price_exit_loss)
شرح استراتژی
🟩 ورود: خرید مقدار دلاری ثابت از دارایی پایه در هر دوشنبه
🟢 خروج سود هدف: بسته شدن همه معاملات در سود هدف زمانی که قیمت از سطح سود هدف به درصد نسبت به قیمت ورود میانگین عبور کند.
🔴 خروج از ضرر: بسته شدن همه معاملات در حد ضرر زمانی که قیمت از سطح ضرر به درصد نسبت به قیمت ورود میانگین پایینتر بیاید.
معاملهگران میتوانند پارامترهای حد ضرر و سرمایه تخصیصیافته برای هر خرید را بهطور مستقیم از رابط کاربری تنظیم کنند.
متغیر داخلی dayofweek
در دنیای معاملهگری، سوال صرفاً این نیست که چه چیزی بخریم یا با چه قیمتی، بلکه اغلب WHEN یعنی چه زمانی باید خرید، اهمیت دارد. در TradingView، متغیر داخلی dayofweek سنگبنای استفاده از عامل زمان در Pine Script است و به شما امکان میدهد مفاهیم ساده مبتنی بر تقویم را به استراتژیهای خودکار تبدیل کنید که میتوانند بهطور کامل با دادههای تاریخی مورد آزمایش قرار گیرند.
dayofweek یک متغیر سیستمی است که تاریخ هر میله را در نمودار میخواند و عددی صحیح متناظر با روز هفته را برمیگرداند. برای نگه داشتن کد تمیز و قابلفهم بدون نیاز به حفظ اعداد، Pine Script ثابتهای داخلی را ارائه میدهد:
dayofweek.sunday (Sunday 1)
dayofweek.monday (Monday 2)
dayofweek.tuesday (Tuesday 3)
dayofweek.wednesday (Wednesday 4)
dayofweek.thursday (Thursday 5)
dayofweek.friday (Friday 6)
dayofweek.saturday (Saturday 7)
💎 لینک مستقیم به راهنمای dayofweek Pine Script 6 رسمی: www.tradingview.com
این اسکریپت برای یادگیری موارد زیر ایدهآل است:
تشخیص روزهای مشخص هفته (dayofweek) و ساخت استراتژی بر پایه آن
جلوگیری از چندباره سفارش در همان میله
مدیریت تخصیص سرمایه و محدودیتهای پوزیشن
تنظیم اهداف Take Profit و Stop Loss برای کل پوزیشن
# بررسی عمیق کد
🧪 شناسایی دوشنبهها در Pine Script
برای بررسی اینکه آیا میله فعلی در دوشنبه است، Pine Script متغیر داخلی dayofweek را فراهم میکند:
bool is_monday = (dayofweek == dayofweek.monday)
🧪 جلوگیری از خریدهای تکراری در همان میله
وقتی با نمودارهای روزانه یا درونروز کار میکنیم، باید مطمئن شویم استراتژی تنها یکبار در میله دوشنبه وارد پوزیشن میشود. شاخص میله آخر ورود را دنبال میکنیم:
var int last_buy_bar = -1
if is_monday and bar_index != last_buy_bar and can_buy
// منطق ثبت سفارش ...
last_buy_bar := bar_index
🧪 کنترل سرمایه و تخصیص ریسک
قبل از ثبت سفارش، اسکریپت بررسی میکند که کل سرمایهگذاریشده از حداکثر سرمایه مجاز (که در این مثال به strategy.initial_capital تنظیم شده است) فراتر نرفته باشد:
float current_price_avg = nz(strategy.position_avg_price, 0.0)
float current_invested_capital = strategy.position_size * current_price_avg
bool can_buy = (current_invested_capital + amount_per_investment) <= max_investment
🧪 اندازهگیری پویا سفارش
بهجای خرید تعداد ثابت سهام/واحد، مقدار دلار ثابت ($500 بهطور پیشفرض) را مشخص میکنیم و مقدار لازم را در لحظه محاسبه میکنیم:
float qty_order = amount_per_investment / close
🧪 قواعد خروج برای کل پوزیشن (Take Profit & Stop Loss)
وقتی وارد معامله میشویم، استراتژی بهطور مداوم سطوح قیمت هدف را بر اساس قیمت ورود میانگین محاسبه میکند (strategy.position_avg_price):
if strategy.position_size > 0
float avg_pos = strategy.position_avg_price
float price_exit_profit = avg_pos * (1 + profit_target / 100)
float price_exit_loss = avg_pos * (1 - loss_target / 100)
strategy.exit(id = "Exit_All", limit = price_exit_profit, stop = price_exit_loss)
FULL PINE SCRIPT V6
//@version=6
strategy(
"Buy Every Monday Strategy Tutorial ",
overlay = false,
default_qty_type = strategy.cash,
initial_capital = 10000,
pyramiding = 100,
currency = currency.USD,
commission_type = strategy.commission.percent,
commission_value = 0.07,
slippage = 5,
process_orders_on_close = true,
close_entries_rule = "ANY"
)
amount_per_investment = input.float(500.0, "Amount per buy ")
profit_target = input.float(10.0, "Take Profit ")
loss_target = input.float(5.0, "Stop Loss ")
max_investment = strategy.initial_capital
bool is_monday = (dayofweek == dayofweek.monday)
var int last_buy_bar = -1
float current_price_avg = nz(strategy.position_avg_price, 0.0)
float current_invested_capital = strategy.position_size * current_price_avg
bool can_buy = (current_invested_capital + amount_per_investment) <= max_investment
if is_monday and bar_index != last_buy_bar and can_buy
float qty_order = amount_per_investment / close
string trade_id = "Buy_Monday_" + str.tostring(strategy.opentrades)
strategy.entry(id = trade_id, direction = strategy.long, qty = qty_order)
last_buy_bar := bar_index
if strategy.position_size > 0
float avg_pos = strategy.position_avg_price
float price_exit_profit = avg_pos * (1 + profit_target / 100)
float price_exit_loss = avg_pos * (1 - loss_target / 100)
strategy.exit(id = "Exit_All", limit = price_exit_profit, stop = price_exit_loss)
منتخب سردبیر
مشاهده بیشتردستیار هوشمند ارز دیجیتال
ترمینال ترید بایتیکل نرمافزار جامع ترید و سرمایهگذاری در بازار ارز دیجیتال است و امکاناتی مانند دورههای آموزشی ترید و سرمایهگذاری، تریدینگ ویو بدون محدودیت، هوش مصنوعی استراتژی ساز ترید، کلیه دادههای بازارهای مالی شامل دادههای اقتصاد کلان، تحلیل احساسات بازار، تکنیکال و آنچین، اتصال و مدیریت حساب صرافیها و تحلیلهای لحظهای را برای کاربران فراهم میکند.

