Perry J. Kaufman - 3-jų dienų sandorio peržiūra
Perry J. Kaufman
Be abejonės, mano mėgstamiausias trumpalaikis prekybos metodas – 3 dienų sandoris. Tai supaprastinta Džordžo Daglaso Teiloro prekybos metodo versija, pirmą kartą paskelbta 1950 metais. Tik pagalvokite – prieš 75 metus! Tuo metu iš ateities sandorių rinkų egzistavo tik grūdų rinka.
Pilną Teiloro metodo versiją galima rasti internete.
Strategijos esmė paprasta: pirkti trečiosios kritimo dienos pabaigoje, išlaikyti poziciją dvi dienas ir išeiti iš rinkos. Trumpajai pozicijai galioja atvirkštinė taisyklė: parduoti trečiosios kilimo dienos pabaigoje ir išpirkti poziciją po dviejų dienų. Pirminėje versijoje numatytos papildomos sąlygos, visų pirma skirtos prekybai grūdais.
Teiloras taip pat turėjo taisykles, nurodančias praleisti atskiras dienas. Siekdamas atsižvelgti į kainų pokyčių seką ir volatilumą, jis naudojo specialią įrašų sistemą („book method“). Tokio grafiko pavyzdį galima rasti bet kurioje iš mano knygų „Prekybos sistemos ir metodai“. Visiškai įgyvendinti Teiloro metodą nėra paprasta, tačiau šiuolaikinės priemonės leidžia palengvinti užduotį ir atnaujinti strategiją.
Bazinio modelio naudojimas
Nuo 2000 m. taikydami ilgųjų ir trumpųjų sandorių taisykles biržiniam fondui SPY, gauname signalus, parodytus 1 paveiksle. Strategijos rezultatai pateikti 2 paveiksle.


Tipinių taisyklių pridėjimas
- šiek tiek kitokie įėjimo ir išėjimo laikotarpiai
- trendo filtras
- pelno fiksavimas, jei iki planuojamo išėjimo kaina patiria ekstremalius svyravimus
- įėjimo filtras esant žemam volatilumui
- įėjimo filtras esant ekstremaliai aukštam volatilumui
- atsisakymas įeiti tam tikrą savaitės dieną
Mano asmeninė taisyklė: nepridėti nieko, kas nesuteikia esminio pagerėjimo. Kitaip strategija tik be reikalo tampa sudėtingesnė. Kuo mažiau taisyklių, tuo paprastai patikimesnė sistema. Turėkime tai omenyje.
Įėjimo ir išėjimo laikotarpiai
Optimizuotos taisyklės – pirkimas po vienos dienos kritimo – pasinaudoja stabilia SPY augimo tendencija, atidarant ilgąją poziciją bet kurią kritimo dieną. Rezultatas – 1 882 sandoriai, palyginti su 140 pagal pradines taisykles. Trumpųjų sandorių rezultatai gerėja, tačiau taip pat didėja nuostolių amplitudė. Vis dėlto 20 773 dolerių pelnas gerokai viršija 7 762 dolerius. Tokį rezultatą sunku ignoruoti. Toliau lygiagrečiai tikrinsime abu parametrų rinkinius.

Trendo filtras
Atkreipkite dėmesį ir į 4 pav. – pradinės strategijos rodikliai dabar yra labai panašūs tiek ilgosioms, tiek trumposioms pozicijoms. Optimizuotos strategijos atveju ilgųjų pozicijų rezultatai pablogėjo, o trumpųjų – pagerėjo. Kaip elgtis toliau?
Paliksiu pradinį modelį su 80 dienų trendo filtru, o iš optimizuoto modelio filtrą pašalinsiu.
Įterptinyje „Modifikuotas 3 dienų sandoris „EasyLanguage“ kalba“ pateiktas programos kodas su visomis šiomis galimybėmis. Jas galima testuoti atskirai arba kartu.

Volatilumo filtras
Galbūt viršutinė ir apatinė ribos leis pagerinti abu rodiklius – patikrinkime jas kartu.
Šiame teste volatilumas skaičiuojamas kaip dabartinio realaus diapazono ir vidutinio realaus diapazono per N dienų santykis, t. y. naudojama santykinis volatilumas. Vietoj jo galima rinktis numanomą volatilumą – pavyzdžiui, VIX indeksą.
Pradiniam 3×2 variantui geriausiais pasirodė 15 dienų laikotarpis, apatinė riba 0,25 ir viršutinė riba 3,25. Optimizuotam variantui – 30 dienų laikotarpis, apatinė riba 0,75 ir viršutinė riba 3,75.
Pagerėjimas buvo nedidelis, tačiau jis paveikė visas sandorių grupes (5 pav.). Todėl aš naudoju šį filtrą.

Pelno fiksavimas
Naudojant pradinius parametrus 3×2 (kairėje 6 pav. lentelėje) rezultatai yra nevienareikšmiški. Geriausias pelno tikslo koeficientas buvo 1,25 tiek ilgosioms, tiek trumposioms pozicijoms – šiek tiek daugiau nei vienas ATR. Optimizuotoje strategijoje geriausiais pasirodė 2,0 ilgosioms ir 1,0 trumposioms pozicijoms.
Pelningumas šiek tiek sumažėjo, pelningų sandorių dalis šiek tiek padidėjo, o trumpųjų sandorių rezultatai pagerėjo. Optimizuotame teste (lentelės dešinėje) sumažėjo tiek pelningumas, tiek nuosmukis.
Pati idėja gali būti naudinga, tačiau optimizuotos versijos rezultatai nėra įtikinami. Pradinėje versijoje šį elementą vis dėlto galima išlaikyti.

Savaitės diena
7 pav. matyti, kad antradienio pašalinimas suteikia nedidelį bendrą beveik visų rodiklių pagerėjimą, išskyrus pelningumą. Padidėja pelno koeficientas – pelno ir nuostolio santykis – bei pelningų sandorių skaičius. Palyginti su 5 pav. pateiktais duomenimis, pagerėjimai yra panašūs tiek pradinėje, tiek optimizuotoje versijose. Nors efektas ir nedidelis, tačiau atsisakymas įeiti į rinką antradieniais suteikia jums dar vieną laisvadienį!

Galutiniai rezultatai
Pasirinkimas priklauso nuo jūsų. Optimizuota versija duoda dvigubai daugiau pelno nei pradinė, tačiau didžiausią dėmesį skiria ilgosioms pozicijoms. Trumposios pozicijos gali būti visiškai pašalintos. Tačiau tuomet rezultatai taps labai panašūs į trendinę sistemą, o strategija neužtikrins portfelio, sudaryto iš kelių sistemų, diversifikacijos.
Atlikus nedidelius patobulinimus, pradinė versija parodė didesnį pelningumą ir geresnius bendrus statistinius rodiklius. Ilgųjų ir trumpųjų sandorių rezultatai joje yra panašūs, todėl ji, tikėtina, užtikrins gerą diversifikaciją. Aš pasirinkčiau pradinę versiją, atlikęs tik keletą pakeitimų.
Jei norite, galite atlikti savo bandymus naudodami programą iš įterptinio lango.

Modifikuotas 3-jų dienų sandoris EasyLanguage kalba
// PJK: modifikuotas 3 dienų sandoris
// © P. J. Kaufman, 2018, 2020, 2023–2024. Visos teisės saugomos.
// ATRprofitfactor — naudoti ATR periodą pelno tikslui apskaičiuoti
// Dayofweek: 1 = sekmadienis
inputs: longentry(3), longexit(2), shortentry(4), shortexit(2),
trendper(0), profperiod(5), longproffactor(0), shortproffactor(0), longonly(true), dontusedayofweek(0),
usestocks(false), maxvol(0), minvol(0), volperiod(20);
vars: currentdir(0), upcount(0), downcount(0), prevupcount(0),
prevdowncount(0), trend(0), size(1), prevdir(0), positionATR(0), stockinvestment(10000), volOK(false), futuresinvestment(25000), basisperiod(20), DOW(0), avol(0), ATR(0), volratio(0), ATRprofit(0), raw(0);
if trendper > 0 then begin
if high > highest(high[1],trendper) then trend = 1 else if low < lowest(low[1],trendper) then trend = -1;
end;
DOW = dayofweek(date);
// ATR pagrįstas volatilumas
if volperiod <> 0 then begin
ATR = avgtruerange(volperiod);
if ATR[1] <> 0 then volratio = truerange/ATR[1];
end;
// pozicijos dydis
if usestocks then begin
size = stockinvestment/close[1];
end
else begin
positionATR = avgtruerange(basisperiod);
if positionATR <> 0 then
size = futuresinvestment/ (positionATR*bigpointvalue);
end;
// ATR pagrįstas pelno tikslas
if profperiod <> 0 then ATRprofit = avgtruerange(profperiod);
// serijos ilgio ir jos krypties skaičiavimas
prevupcount = upcount; prevdowncount = downcount;
prevdir = currentdir;
if close > close[1] then begin
if close[1] > close[2] then
upcount = upcount + 1 else begin
currentdir = 1;
upcount = 1;
downcount = 0;
end;
end
else if close < close[1] then begin
if close[1] < close[2] then
downcount = downcount + 1
else begin
currentdir = -1;
downcount = 1;
upcount = 0;
end;
end;
// išėjimai
if marketposition > 0 and ((barssinceentry >= longexit) or (trendper <> 0 and trend < 0)) then
sell ("Lexit") all contracts this bar on close
else if marketposition < 0 and ((barssinceentry >= shortexit) or
(trendper <> 0 and trend > 0)) then buy to cover ("Sexit") all contracts this bar on close;
// pelno fiksavimas antrąją dieną
if marketposition > 0 and profperiod <> 0 and longproffactor <> 0 then
sell ("LongPT2") all contracts next bar at entryprice + longproffactor*ATRprofit limit;
if marketposition < 0 and profperiod <> 0 and shortproffactor <> 0 then
buy to cover ("ShortPT2") all contracts next bar at entryprice - shortproffactor*ATRprofit limit;
// nauja ilgoji pozicija uždarymo metu arba kito atidarymo metu
// ankstesnė kryptis buvo žemyn, o serijos ilgis pasiekė nustatytą reikšmę
if currentdir <= 0 and downcount >= longentry then begin
// uždaryti ankstesnę trumpąją poziciją
if marketposition < 0 then buy to cover ("Lreverse") all contracts this bar on close;
// patikrinti kitos dienos sąlygas
volOK = volperiod = 0 or ((minvol = 0 or volratio > minvol) and
(maxvol = 0 or volratio < maxvol));
if (trendper = 0 or trend > 0) and (dontusedayofweek = 0 or dontusedayofweek <> DOW) and volOK then begin
// pavedimas uždarymo metu
buy ("upday") size contracts this bar on close;
// nustatyti pelno tikslą
if profperiod <> 0 and longproffactor <> 0 then
sell ("LongPT") all contracts next bar at entryprice + longproffactor*ATRprofit limit;
end;
end
// nauja trumpoji pozicija
else if longonly = false and currentdir >= 0 and upcount
>= shortentry then begin
// uždaryti ankstesnę ilgąją poziciją
if marketposition > 0 then sell ("Sreverse") all contracts this bar on close;
if (trendper = 0 or trend < 0) and (dontusedayofweek
= 0 or dontusedayofweek <> DOW)
and volOK then begin
// pavedimas uždarymo metu
sell short ("downday") size contracts this bar on close;
// nustatyti pelno tikslą
if profperiod <> 0 and shortproffactor <> 0 then
buy to cover ("ShortPT") all contracts next bar at entryprice - shortproffactor*ATRprofit limit;
end;
end;
// naujos pozicijos šiandienos uždarymo metu
if marketposition = 0 and currentdir[1] <= 0 and
downcount[1] >= longentry and (trendper =
0 or trend[1] > 0) then begin
if close < close[1] and volOK[1] then begin
buy size contracts this bar on close;
end;
end
else if marketposition = 0 and longonly = false and currentdir >= 0 and
upcount[1] >= shortentry and (trendper = 0 or trend[1] < 0) then begin
if close > close[1] and volOK then begin
sell short size contracts this bar on close;
end;
end;
Apie autorių
Beje, Perry J. Kaufmanas 1995 metais yra sukūręs Adaptive Moving Average (AMA) slankųjį vidurkį. Plačiau apie tai skaitykite straipsnį.
Straipsnio kodas
Papildoma literatūra
Informacija
Svetainėje pateikta ir bendravime su dalyviais / vartotojais naudojama informacija yra tik informacinio (mokomojo) pobūdžio, joje nėra pateikiami investicinių tyrimų paslaugų, finansinės analizės rezultatai, ji nėra investavimo rekomendacijos ar patarimai ir (arba) bet kokios kitos bendro pobūdžio rekomendacijos, susijusios su konkrečių sandorių su konkrečiomis finansinėmis priemonėmis sudarymu.
Mūsų mokykla nesuteikia jokių garantijų, kad baigus mokymus bus galima uždirbti pinigų finansų rinkose. Mes neatsakome už bet kokį gautą nuostolį, ar pelną, kurio galite negauti, ir kitą riziką, kuri gali kilti dėl svetainės medžiagos naudojimo. Rezultatai, kuriuos pasieksite naudodamiesi svetainėje paskelbta mokymo medžiaga, priklauso nuo daugelio veiksnių, įskaitant individualius besimokančiojo mokymosi gebėjimus, sąžiningą namų darbų atlikimą, taip pat nuo ekonominių veiksnių rinkose tuo metu, kai naudojamasi įgytomis žiniomis.
