درس 14: اولین استراتژی شما
یک تقاطع را به استراتژی با ورود، حد ضرر و هدف تبدیل کنید، هزینههای واقعی را در سرآیند بنویسید و معاملههایی را که نمودار میکشد بخوانید.
درس 14 از 18. استراتژی اندیکاتوری است که سفارش هم میگذارد. نمودار به جای شما معامله نمیکند: سفارشهای شما را روی کندلهایی که میبینید دوباره اجرا میکند و معاملههایی را نشان میدهد که انجام میشد، با هزینههایی که شما اعلام میکنید.
سفارش از یک تقاطع#
strategy "Crossover strategy"
edition = 1
display = price
input fast_length: int = 10, name = "Fast length", min = 1
input slow_length: int = 30, name = "Slow length", min = 2
let fast = tech.ema(close, fast_length)
let slow = tech.ema(close, slow_length)
if tech.crosses_above(fast, slow)
orders.enter("Long", side.long)
if tech.crosses_below(fast, slow)
orders.close("Long")
plot(fast, name = "Fast", color = color.green)
plot(slow, name = "Slow", color = color.red)strategy "Crossover strategy"سرآیند است، به جایindicator "...".orders.enter("Long", side.long)میخواهد یک معاملهٔ خرید (long) به نام "Long" باز شود. نام همان چیزی است که بعداً با آن به معامله اشاره میکنید.orders.close("Long")میخواهد آن بسته شود.- سفارش وقتی کندل بسته میشود گذاشته میشود و با قیمت بازشدن کندل بعدی اجرا میشود. اسکریپت نمیتواند با قیمت بستهشدنی که همین الان دیده بخرد.
حد ضرر و هدف#
orders.exit برای یک معامله هم حد ضرر میگذارد و هم هدف. هرکدام زودتر برسد معامله را میبندد و دیگری لغو میشود.
strategy "Crossover with exits"
edition = 1
display = price
input stop_pct: float = 1.0, name = "Stop %", min = 0.1, step = 0.1
input target_pct: float = 2.0, name = "Target %", min = 0.1, step = 0.1
let fast = tech.ema(close, 10)
let slow = tech.ema(close, 30)
if tech.crosses_above(fast, slow)
orders.enter("Long", side.long)
if position.size > 0
let entry = position.avg_price
orders.exit(
"Exit",
"Long",
stop = entry * (1 - stop_pct / 100),
limit = entry * (1 + target_pct / 100),
)
plot(fast, name = "Fast", color = color.green)
plot(slow, name = "Slow", color = color.red)orders.exit(key, entry, stop = ..., limit = ...) به معاملهای تعلق دارد که در entry نامش آمده (اینجا "Long"). فقط تا وقتی آن معامله باز است زنده میماند. position.size اندازهٔ پوزیشن باز است، برای خرید مثبت؛ position.avg_price قیمتی است که معامله با آن باز شده.
اندازه و هزینهها در سرآیند#
نتیجهٔ بدون هزینه تصویری قشنگتر از واقعیت نشان میدهد. هزینهٔ معامله را در سرآیند بگویید، همانجا که اندازه را میگویید:
strategy "Crossover with costs"
edition = 1
display = price
setup:
capital = 10000
size = sizing.lots(0.1)
fees = fee.per_lot(3.5)
execution:
spread = 20 ticks
slippage = 2 ticks
let fast = tech.ema(close, 10)
let slow = tech.ema(close, 30)
if tech.crosses_above(fast, slow)
orders.enter("Long", side.long)
if tech.crosses_below(fast, slow)
orders.close("Long")
plot(fast, name = "Fast", color = color.green)
plot(slow, name = "Slow", color = color.red)size = sizing.lots(0.1)با 0.1 لات معامله میکند (لات اندازهٔ استاندارد معامله برای یک ابزار است). راههای دیگر گفتن اندازه:sizing.fixed(n)برای واحد،sizing.equity(p)برای سهمی از حساب وsizing.cash(m)برای پول.spread = 20 ticksوslippage = 2 ticksبر حسب تیک نماد هستند (تیک کوچکترین گام قیمت آن است). اسپرد فاصلهٔ بین قیمت خرید و فروش است؛ لغزش قیمت (slippage) تغییر قیمت بین سفارش و اجرای آن است.fees = fee.per_lot(3.5)برای هر لات و در هر اجرا 3.5 از پول حساب کم میکند.- همهٔ تنظیمها زندهاند: میتوانید به هرکدام یک ورودی بدهید، و عوض کردن ورودی اجرای بعدی را عوض میکند.
نتیجه را بخوانید#
نمودار هر ورود را با یک مثلث علامت میزند (نام ورود کنارش) و هر خروج را با یک ضربدر، سبز برای سود و قرمز برای ضرر، با یک خط نقطهچین بین آنها. جدولی در یک گوشه سود خالص و درصد آن، تعداد معاملههای بستهشده، سهم معاملههایی که پول ساختهاند، ضریب سود (پولی که بردهاید تقسیم بر پولی که باختهاید)، بزرگترین افت سرمایه (drawdown، بزرگترین افت حساب از یک اوج) و تعداد معاملههایی را که هنوز باز هستند نشان میدهد. وقتی کمیسیون یا سواپ پرداخت شده باشد، ردیفی به نام Costs ظاهر میشود. علامتها و خطها برای جدیدترین 500 معامله نگه داشته میشوند؛ جدول همهٔ آنها را میشمارد. دو ورودی روی استراتژی، Show the trades on the chart و Show the results table، علامتها و جدول را خاموش میکنند.
در ویرایشگر، استراتژی یک دکمهٔ دیگر هم دارد: تست. این دکمه اسکریپت را ذخیره میکند و آن را در Strategy Lab اجرا میکند؛ Strategy Lab استراتژی را روی بازهٔ طولانیتری آزمایش میکند، با انتخابهای بیشتر برای دادهٔ قیمت و هزینهها. درس 15 Strategy Lab را نشان میدهد و استراتژیها و سرآیند همهٔ تنظیمهای سرآیند را فهرست میکند.
امتحان کنید#
- در تنظیمات برنامهٔ اول،
slow_lengthرا 50 کنید. تقاطعها کمتر میشوند، پس جدول معاملههای کمتری میشمارد. - در برنامهٔ دوم،
target_pctرا کوچکتر ازstop_pctکنید و بعد دوباره بزرگتر. ببینید سهم معاملههایی که پول ساختهاند و اندازهٔ هر ضرر در جدول چطور عوض میشود. - در برنامهٔ سوم،
spreadرا به 60 تیک برسانید. هر ورود با قیمت بالاتری اجرا میشود و سود خالص در جدول کم میشود. - در برنامهٔ اول، به جای
side.longبنویسیدside.shortو برای ورود ازtech.crosses_belowو برای بستن ازtech.crosses_aboveاستفاده کنید. حالا استراتژی فروش (short) میکند.
نقطهٔ بررسی#
- میتوانید سرآیند
strategyبنویسید و باorders.enterوorders.closeمعاملهای باز کنید و ببندید. - میتوانید با
orders.exitو یک حد ضرر و یک هدف از معامله محافظت کنید. - میتوانید اندازه و هزینهها را در
setup:وexecution:بنویسید. - میدانید که سفارش با قیمت بازشدن کندل بعدی اجرا میشود و نمودار فقط معاملهها را شبیهسازی میکند.