LootX

Ստրատեգիաներ և թեստեր

նոր Թարմացվել է 30 սեպտեմբերի, 2026 թ. Այս էջը PDF-ով

Ինչպես գրել ստրատեգիա LootScript-ով և ստուգել այն պատմության վրա թեստերում՝ հայտարարում `strategy()`, հայտերը, կատարման մոդելը, ծախսերը, հաշվետվության ներդիրները եւ բեքթեստի սահմանափակումները։

Ստրատեգիան սկրիպտ է, որը գրաֆիկի վրայի գծերից բացի կադրում է հայտեր։ Հենց հայտերն չի իրականացնում բորսան, այլ տերմինալի ներսի սիմուլյատորը՝ այն անցկացնում է ստրատեգիան գրաֆիկի պատմության վրա՝ հաշվի առնելով կոմիսիաները, slippage- ը եւ funding rate-ը, եւ ցույց է տալիս արդյունքը Ստրատեգիայի թեստեր պատուհանում։

Հայտարարում strategy()

Ստրատեգիան ի տարբերություն ինդիկատորի սկսվում է առաջին տողում strategy(...)-ով՝ ոչ indicator(...)-ով։ Մնացածը — կարգավորումները, գրաֆիկական արտապատկերը եւ շուկայի տվյալները — գործում են նույն կերպ։ Ֆունկցիաները strategy.* ինդիկատորում չեն կոմպիլացվում՝ «strategy.* հասանելի է միայն strategy(...)-ում»։

Պարամետր Լռելյայն Ինչ է սահմանում
initialCapital 10000 Սկիզբային կապիտալ
defaultQtyType, defaultQtyValue strategy.qty.fixed, 1 Հայտի չափը, եթե հայտում չի նշվել qty
commissionType, commissionValue տոկոս, նշված չէ Կոմիսիա: strategy.commission.percent — շրջանառության տոկոս (0.05 = 0.05 %), strategy.commission.cash_per_contract — գումար մեկ կոնտրակտի համար, strategy.commission.cash_per_order — մեկ իրականացման համար
slippageTicks 0 Slippage տիկերով
pyramiding 0 Քանի էնտրին մեկ կողմում կարող է բաց մնալ; 0 — մեկ
positionModel strategy.model.netting Մի ընդհանուր դիրք կամ առանձին երկար/կարճ (strategy.model.hedging)
processOrdersOnClose false Իմաստ ունի նկարվել market հայտերը ընթացիկ բարի փակման պահին
calcOnEveryTick false Թույլատրել հայտեր ձևավորվող բարի վրա
marginLong, marginShort, leverage 0, 0, 1 Մարժա տոկոսներով կամ leverage; при 0՝ լիկվիդացիա չի մոդելավորվում
applyFunding true Ուշադիր լինել funding rate-ին
fillModel strategy.fill.conservative Գնի ուղու ենթադրություն բարի ներսում

Պարամետրերի արժեքները թույլատրվում են միայն թվեր եւ կայուն կոնստանտներ პირდაპირ տեքստում։ Հ uttryck կամ input.* հայտման մեջ՝ դա կոմպիլացիոն սխալ է։ Պարամետր calcOnOrderFills ընդունվում է, բայց այս build-ում չի գործում. թեստերի «Свойства» ներդիրում այն նշված է՝ «не действует в этой сборке»։

Եթե հայտի qty = na, ապա հայտի չափը որոշվում է defaultQtyType-ով՝

Տիպ defaultQtyValue նշանակում է
strategy.qty.fixed Քանակը մետաղադրամներով (բազային արժույթ)
strategy.qty.cash Գումարը ծածկագրված դիմացկուն արժույթով
strategy.qty.percent_of_equity Տոկոս ներկայիս կապիտալից
strategy.qty.risk_percent Կապիտալի տոկոսը, որով ռիսկ եք կրել մինչև պաշտպանական stop-ը

s trategy.qty.risk_percent օգտագործելու համար պարտադիր է ունենալ strategy.exit stop-ով (loss կամ stop), հակառակ դեպքում կոմպիլյատորը կանգնեցնում է կոմպիլացիան՝ «պահանջվում է стоп, ըստ որի հաշվարկել չափը»։ Քանակը կկրքերանա ստորակայ ստորակետով՝ դեպի գործիքի քանակի քայլը։ Եթե կտրատելուց հետո մնում է զրո, հայտը մերժվում է եւ մեծանում է թեստերի ցուցիչը «Отвергнуто заявок (размер)»։

Հայտեր

Ֆունկցիա Ինչ է անում
strategy.entry(id, direction, qty, limit, stop, …) Բերում է դիրք կամ կատարում է տարանցում (reverse). Ունի հաշվի position model-ը եւ pyramiding-ը
strategy.order(id, direction, qty, limit, stop, …) Նույնը՝ առանց position model-ի եւ pyramiding-ի հաշվի
strategy.exit(id, from_entry, qty, qty_percent, profit, limit, loss, stop, trail_price, trail_points, trail_offset, …) Պարզաբանում է ելքը — take-profit, stop-loss կամ trailing՝ բացված դիրքի համար
strategy.close(id, comment, qty, qty_percent) Փակում է դիրքը market order-ով
strategy.close_all(comment) Փակում է բոլոր դիրքերը
strategy.cancel(id), strategy.cancel_all() Հանում է դեռևս չիրականացված հայտերը

Ուղղությունը — strategy.long կամ strategy.short։ Բոլոր ֆունկցիաների մոտ հնարավոր է ունենալ ընտրովի when՝ when = false նշելով կանչը բաց է թողնվում։ Մուտքերին, ելքներին եւ փակարարներին կարելի է տալ comment — հայտի տեքստային թեգ։

  • Մուտքի տեսակը. Առանց limit եւ stop — market order; limit-ով — limit order; stop-ով — stop order; երկուսի առկայությամբ՝ stop-limit։ Սույն id-ով կրկնված strategy.entry փոխարինում է դեռ չիրականացված հայտը։
  • Ռիվերս (reverse). netting մոդելում հակառակ ուղղությամբ մուտքը փակելիս մի հրամանքով փակվում է ընթացիկ դիրքը եւ բացվում նորը։
  • Ելքի միավորները. profit եւ loss նշվում են tick-երով մուտքի գնի հանդեպ, limit եւ stop — ուղղակի արժեքներով (absolute prices). Trailing-ը սահմանվում է զույգով՝ trail_offset եւ trail_price կամ trail_points։
  • Ելք առանց մակարդակների ոչինչ չի անում. Կոմպիլյատորը զգուշացնում է՝ «strategy.exit առանց միևնույն մակարդակի (profit/loss/stop/limit/trail) — դատարկ գործողություն»։
  • Stop-ի տեղափոխում. Նույն id-ով կրկնված strategy.exit փոխարինում է գոյություն ունեցող ելքը — այս եղանակով շարժում են stop-ը։

Ստրատեգիայի վիճակը կարելի է կարդալ ռեժիսորների միջոցով՝ strategy.position_size (ստորագրով, կարճ դիրքը բացասական է), strategy.position_avg_price, strategy.equity, strategy.netprofit, strategy.openprofit, strategy.opentrades, strategy.closedtrades, strategy.funding_paid եւ այլն — ամբողջ ցանկը՝ ըստ ուղեցույցի։

Ինչպես թեստերը իրականացնում են հայտերը

Հայտը, որը հայտված է վրա բարի, չի իրականացվում շուտ քան հաջորդ բարը։ Պ_DECISION-ը ընդունվում է բարի փակման պահին, եւ իրականացնելը նույն գնով կնշանակեր “զարկ տալ ապագային նայել”։

Заявка Исполнение
Рыночная Հաջորդ բարի բացման ժամանակ՝ գումարած slippage։ Եթե processOrdersOnClose = true — ընթացիկ բարի փակման պահին
Лимитная Երբ գինը անցնում է լիմիթը՝ ըստ լիմիթի արժեքի։ Եթե բարը բացվել է լիմիթից այն կողմ — ըստ բացման
Стоп Երբ գինը անցնում է стопը՝ ըստ стопի գնի, գումարած slippage։ Գեպի դեպքում — ըստ բացման գումարած slippage

Գնի ուղին բարի ներսում. Տեսական ուղին բարի ներսում թեստերը իրականում չի գիտի և ենթադրում է այն։ Մոդել strategy.fill.conservative (Լռելյայն) ընդունում է, որ գինը նախ գնացել է ավելի վատուկ ծայրի՝ աճող բարի համար՝ բացում → նվազագույն → առավելագույն → փակել; նվազող բարի համար՝ հակառակն։ Եթե մեկ բարի մեջ հայտնվեցին եւ стоп, եւ тейք, նախ-ինկում կհապաղի стоп-ը։ Մոդել strategy.fill.optimistic ենթադրում է հակառակն՝ ծառայում է միայն համեմատության համար։ Այս build-ում մոլորակի փոքր таймֆрейմով проигрывания չկա՝ «Ուղին» սյունակում յուրաքանչյուր գործարք նշված է որպես մոդելով ենթադրյալ։

Ծախսերը.

  • Կոմիսիա. Եթե commissionValue նշված չէ, թեստերը կիրառելու են լռելյայն տարկը՝ 0.02% limit executions-ի համար եւ 0.05% market/stop executions-ի համար։ Ձեր հաշվի տարկները եւ ռիբեյթները տերմինալին անհայտ են։ Վրայով նշված թիվը տարածվում է բոլոր իրագործումների վրա։
  • Slippage — slippageTicks ընդդիմությամբ ձեր վրա market եւ stop اجرا-ների ժամանակ։ Limit executions-ը չեն проскальзывают։
  • Funding rate գանձվում է յուրաքանչյուր իրական հաշվարկի պահին՝ ըստ փաստացի rate-ի եւ հաշվարկի բարի փակման գնի։ Դա պահանջում է funding rate տվյալներ՝ ֆյուչերսների համար նշվածը покрытия աղյուսակում։
  • Մարժա. Երբ ներկայանում են marginLong/marginShort կամ leverage>1, թեստերը մոդելավորում է պարզեցված isolated margin։ Լոնգ դիրքը լիկվիդացվում է երբ արժեքը ընկնում է դեպի entry × (1 − m/2), կարճը՝ երբ արժեքը բարձրանում է դեպի entry × (1 + m/2), որտեղ m — սկիզբային մարժայի մասնաբաժինը։ Լիկվիդացված գործարքը կորցնում է ամբողջ սկիզբային մարժան։

Գործարքները, որոնք չեն փակվել մինչ պատմության վերջը, փակվում են վերջին բարի փակման գնով՝ պատճառով «վերջ տվյալների»։

Ստրատեգիայի թեստեր

Ավելացրեք ստրատեգիան գրաֆիկին

Խմբագրիչում սեղմեք Ավելացնել գրաֆիկին (Ctrl+Enter): սխալներով սկրիպտը գրաֆիկ չի հայտնվի։

Բացեք թեստերը

Խմբագրիչի գործիքների վահանակում սեղմեք Ստրատեգիայի թեստեր… — կոճակը ակտիվ է միայն այն սկրիպտների համար, որտեղ կա strategy(...)։ Մյուս ճանապարհը՝ ստրատեգիայի կարգավորումների шестерёнка-ից գրաֆիկի լեգենդում՝ կոճակը Ստրատեգիայի թեստեր…։

Սպասեք պրոցեսին

Թեստերը հաշվում են միայն այն մոմերի հիման վրա, որոնք բեռված են գրաֆիկում։ Առանց դրանց պատուհանը ցույց է տալիս «Стратегия ещё не считалась: дождитесь загрузки свечей»։ Երբ գալիս են նոր մոմերը, արդյունքը ինքնաբերաբար վերակենսանացվում է; Пересчитать կոճակը սկսում է լրիվ պրագոնը ձեռքով։

Եթե գրաֆիկում մի քանի ստրատեգիաներ կան, անհրաժեշտը կարելի է ընտրել թեստերի պատուհանում։

Վкладка Ինչ կա դրա մեջ
Аմփոփում Պլիտներ՝ «Чистая прибыль», «Профит-фактор», «Макс. просадка (по закрытиям)», «Доля прибыльных», «SQN»; տող Чего этот бэктест не знает; կապիտալի կորեր, «купил-и-держи», կապիտալ առանց funding rate եւ երկու просадка
Ցուցանիշներ Արդյունք, ռիսկ (просадка по закрытиям եւ բարի ներսում առանձին, Sharpe, Sortino, Calmar), գործարքներ (փաստացի շահութաբերների մասնաբաժինը, միջին եւ ամենամեծ, շարքեր), ծախսեր (կոմիսիա եւ funding rate)
Գործարքներ Գործարքների աղյուսակ՝ մուտք, ելք, պատճառ, ծավալ, P&L, run-up, просадка, կոմիսիա, funding rate։ Սեղմումը տողի վրա կենտրոնացնում է գրաֆիկը մուտքի բարի վրա; Ctrl+C պատճենում է ընտրված տողերը
Սեփականություններ Հայտի պարամետրերը, բարերի տիրույթը, գնային քայլը, քանակի քայլը, նվազագույն լոտը, կոմիսիան, պրագոնի հաշվիչները՝ մերժված հայտեր, пропущенные ըստ pyramiding, լիկվիդացիաներ, funding հաշվարկներ

Վերնագրում՝ կատարման մոդելի նշանները՝ conservative կամ optimistic, եւ close-fill եթե processOrdersOnClose = true է։ Նշանները optimistic եւ close-fill նշանակում են, որ իրականում արդյունքը, ամենայն հավանականությամբ, ավելի վատ կլինի։

Ի՞նչ չի կարող կարդալ ստրատեգիան

Կենդանի order book եւ time and sales (լենտա). Ստրատեգիան, որը կարդում է book.* կամ tape.*, չի կոմպիլացվի՝ «Стратегия читает … у стакана и ленты нет истории, бэктест был бы вымыслом»։ Для истории order book-ի համար պետք է օգտագործել depth.*, իսկ գործարքների պատմության համար՝ delta.* եւ cluster.* (footprint cluster-ներ)։

Screener. screener.* նույնպես հասանելի է միայն վերջին բարի վրա, սակայն կոմպիլյատորը թույլատրում է такую стратегию։ Պատմության մեջ screener-ի արժեքները na են, հետեւաբար պայմանները այնտեղ չեն կատարվում եւ հաշվետվությունում դրանցից գործարքներ չեն հայտնվի։

Ապագային նայելը. request.security(..., lookahead = true) ստրատեգիայի դեպքում խմբագրիչը ցույց է տալիս նախազգուշացում՝ «Стратегия заглядывает вперёд … отчёт помечен как недостижимый в реальном времени»։ Տեսեք այս հաշվետվությունը որպես վերագնահատված՝ պատմությունում ստրատեգիան կարող է տեսնել արժեքներ, որոնք իրական ժամանակում դեռ գոյություն չեն ունեցել։ Մանրամասներ՝ Շուկայի տվյալներ բաժնում։

Օրինակ

Պրոբոյ ալիք՝ delta-ով հաստատմամբ. Մուտք՝ փակման պահին այն կողմում, որը դուրս է եկել len վերջին բարերից, եթե բարի delta-ն նույն ուղղությանն է. Stop՝ ATR-ում, take՝ կրկնակի։

Loot
strategy("Пробой канала с дельтой", overlay = true,
         initialCapital = 10000,
         defaultQtyType = strategy.qty.percent_of_equity, defaultQtyValue = 20,
         commissionValue = 0.05, slippageTicks = 2)

len      = input.int(20, "Канал, баров", minval = 5, maxval = 200)
stopAtr  = input.float(1.5, "Стоп, ATR", minval = 0.5, maxval = 10, step = 0.1)
needFlow = input.bool(true, "Подтверждать дельтой")

upper = ta.highest(high, len)[1]
lower = ta.lowest(low, len)[1]
atr   = ta.atr(14)

flowLong  = not needFlow or (delta.available and delta.value > 0)
flowShort = not needFlow or (delta.available and delta.value < 0)

if close > upper and flowLong and strategy.position_size <= 0 {
    strategy.entry("L", strategy.long, comment = "пробой вверх")
}
if close < lower and flowShort and strategy.position_size >= 0 {
    strategy.entry("S", strategy.short, comment = "пробой вниз")
}

stopTicks = math.round(atr * stopAtr / sym.tick_size)
strategy.exit("L-x", from_entry = "L", loss = stopTicks, profit = stopTicks * 2)
strategy.exit("S-x", from_entry = "S", loss = stopTicks, profit = stopTicks * 2)

plot(upper, "Верх канала", color = color.teal)
plot(lower, "Низ канала", color = color.red)

Եթե բորսան չունի delta (օրինակ՝ Binance Alpha) եւ միացված է «Подтверждать дельтой», ստրատեգիան չի կատարի ոչ մի գործարք՝ delta.available այնտեղ կեղծ է։ Դա na-ի օրենքն է աշխատում, ոչ թե սխալ։

Սահմանափակումներ

  • Մեկայն սիմուլյացիա — իրական հայտեր գոյություն չունեն։
  • Limit հայտերը իրականացվում են այնպես, կարծես դուք առաջինն եք հերթում. սա՝ maker-աստրատեգիաների հիմնական աղբյուրն է՝ վերագնահատված արդյունքների համար։
  • Ձեր գործարքները գինը չեն շարժում, մաս-իրականացումներ չկան — հայտը կամ ամբողջովին իրականացվում է, կամ ոչ մի կերպ։
  • Գնի ուղին բարի ներսում ենթադրվում է մոդելով, ոչ թե վերցված փոքրեռի timeframe-ից։
  • Լիկվիդացիան պարզեցված է — բորսայի լիկվիդացիոն շարժիչը, ADL եւ ապահովագրական ֆոնդը չեն մոդելավորվում։
  • Կոմիսիան — լռելյայն տարկ է, ոչ ձեր հաշվի տարկը։
  • Տվյալների բացակայությունը չի նշանակում շարժմամունք: մոմը առանց footprint cluster-ների նույնպես ենթադրում է շարժում։
  • Արդյունքը կախված է նրանից, որքան պատմություն բեռված է գրաֆիկում։

Հաջորդ քայլը

FAQ

Կարո՞ղ է LootScript-ով ստրատեգիան առեւտուր անել բորսայում?
Ոչ։ Ստրատեգիայի հայտերը կատարում է տերմինալի ներսում աշխատող սիմուլյատորը, իսկ իրական հայտեր բորսայում չի ուղարկում։ Սկրիպտներին հասանելիություն չի տրվում ցանցին և ձեր API բանալիներին։
Ինչպե՞ս բացել Ստրատեգիայի թեստերը?
Ավելացրեք ստրատեգիան գրաֆիկին և սեղմեք «Ստրատեգիայի թեստեր…» Սկրիպտերի Խմբագրիչի վահանակում կամ գրաֆիկի լեգենդում գտնվող ստրատեգիայի կարգավորումների մեջ։
Եթե կոմիսիան չսահմանել, ինչ կոմիսիա է օգտագործում թեստերը?
Լռելյայն տարիֆը՝ 0,02 % limit կատարումների համար և 0,05 % market և stop-loss կատարումների համար։ Տերմինալը չի գիտի ձեր հաշվի տարիֆը — սահմանեք ինքներդ commissionValue։
Ինչու order book-ով ստրատեգիան չի կոմպիլացվում?
Կենդանի order book-ի և time and sales-ի համար պատմություն չկա, և դրանց վրա բեքթեստը կլիներ հորինված։ Order book-ի պատմության համար օգտագործեք depth.*, գործարքների համար՝ delta.* և cluster.*.