millionchart
English

درس 14: اولین استراتژی شما

یک تقاطع را به استراتژی با ورود، حد ضرر و هدف تبدیل کنید، هزینه‌های واقعی را در سرآیند بنویسید و معامله‌هایی را که نمودار می‌کشد بخوانید.

درس 14 از 18. استراتژی اندیکاتوری است که سفارش هم می‌گذارد. نمودار به جای شما معامله نمی‌کند: سفارش‌های شما را روی کندل‌هایی که می‌بینید دوباره اجرا می‌کند و معامله‌هایی را نشان می‌دهد که انجام می‌شد، با هزینه‌هایی که شما اعلام می‌کنید.

سفارش از یک تقاطع#

Cuprel
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 برای یک معامله هم حد ضرر می‌گذارد و هم هدف. هرکدام زودتر برسد معامله را می‌بندد و دیگری لغو می‌شود.

Cuprel
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 قیمتی است که معامله با آن باز شده.

اندازه و هزینه‌ها در سرآیند#

نتیجهٔ بدون هزینه تصویری قشنگ‌تر از واقعیت نشان می‌دهد. هزینهٔ معامله را در سرآیند بگویید، همان‌جا که اندازه را می‌گویید:

Cuprel
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: بنویسید.
  • می‌دانید که سفارش با قیمت بازشدن کندل بعدی اجرا می‌شود و نمودار فقط معامله‌ها را شبیه‌سازی می‌کند.

بعدی: درس 15: آزمایش در Strategy Lab