Chcete systém s 90% úspěšností obchodů? Tady je!

Jednotlivé obchodní systémy se liší v řadě parametrů. Jedním z těch, které bedlivě sleduji je procento úspěšných obchodů z celkového množství. Vyšší procento úspěšnosti je důležité pro psychiku tradera, i když samozřejmě nemusí znamenat nejvyšší absolutní zhodnocení. Obecně se systémy s více než 70% úspěšnosti považují za dobré a systémy s 80% za špičkové. Proč neudělat 90%?

Systém s 90%ní pravděpodobností úspěchu – statistiky později – má následující pravidla hry:

  1. Obchodují se pouze akcie z koše S&P 100.
  2. Obchoduje se pouze 1 x denně v závěru seance (tedy za Market-On-Close).
  3. Systém je long-only.
  4. Kupují se pouze akcie, u nichž je cena nad 200-denním průměrem.
  5. Kupují se pouze akcie, u nichž RSI(2) < 10.
  6. Pozice se škálují. První den se koupí pouze 10% z celkového kapitálu vyhrazeného na danou akcii. Pokud je v některém z dalších dnů v závěru seance cena nižší než původní cena, za níž se koupilo 10%, koupí se za tuto nižší cenu dalších 20%. Analogicky v některém z dalších dnů se dokoupí 30% v případě, kdy je cena ještě níže a konečně pokud je počtvrté cena ještě níže, dokoupí se posledních 40%.
  7. Každý den je otevřena maximálně jedna pozice. V případě, že je možné otevřít více pozic, otevře se ta s nejnižším RSI(2). V případě, kdy je možné jak otevřít novou pozici, tak (u jiné akcie) dokoupit do existující pozice, rozhoduje o tom, která akce má přednost rovněž RSI(2).
  8. Žádné STOP-LOSSY.
  9. Výstup na EOD nastává v momentě, kdy cena akcie je větší než pětidenní klouzavý průměr. Je přitom jedno, zda bylo koupeno 10%, 10%+20%, 10%+20%+30% nebo 10%+20%+30%+40%.

Zdrojový kód pro tento AOS v VB.NET pro Right-Edge je zde:

#Region „Imports statements“
Imports System
Imports System.Drawing
Imports System.Collections.Generic
Imports System.Linq
Imports RightEdge.Common
Imports RightEdge.Common.ChartObjects
Imports RightEdge.Indicators
Imports Microsoft.VisualBasic
#End Region#Region „System class“
Public Class MySystem
Inherits MySystemBase
Public LastTrade As DateTime = #1/1/1980# ‚datum posledního obchodu, kvůli podmínce na 1 obchod denněPublic Overloads Overrides Sub Startup()
SystemData.EnableTradeOnClose = True ‚ umožníme prodávat a kupovat on close
AddHandler SystemData.BarClosing, AddressOf BarClosing
End SubPublic Sub BarClosing(ByVal sender As Object, ByVal args As NewBarEventArgs)
Dim orderedSymbolScripts As List(Of MySymbolScript) = SymbolScripts.OrderBy(Function(ss) ss.RankValue).ToList() ‚seřadíme tickery podle RSI(2)
For i As Integer = 0 To orderedSymbolScripts.Count – 1
orderedSymbolScripts(i).Rank = i + 1
Next
‚pro každý z nich spustíme metodu BarClosing
For Each SymbolScript As MySymbolScript In orderedSymbolScripts
SymbolScript.BarClosing()
Next
End Sub
End Class
#End RegionPublic Class MySymbolScript
Inherits MySymbolScriptBase
Private mySMA200 As SMA
Private mySMA5 As SMA
Private myRSI2 As RelativeStrengthPrivate m_RankValue As Double
Public Property RankValue() As Double
Get
Return m_RankValue
End Get
Private Set(ByVal value As Double)
m_RankValue = value
End Set
End Property

Private m_Rank As Integer
Public Property Rank() As Integer
Get
Return m_Rank
End Get
Set(ByVal value As Integer)
m_Rank = value
End Set
End Property

Public Overloads Overrides Sub Startup()
‚inicializace
mySMA200 = New SMA(200, Close)
mySMA200.ChartSettings.Color = Color.Red
mySMA5 = New SMA(5, Close)
mySMA5.ChartSettings.Color = Color.Blue
myRSI2 = New RelativeStrength(2, Close)
myRSI2.ChartSettings.Color = Color.DarkOrange
End Sub

Public Overloads Overrides Sub NewBar()
‚ tohle se vypočítá pro každý BAR
If Double.IsNaN(myRSI2.Current) Then
RankValue = 0
Else
RankValue = Math.Abs(myRSI2.Current)
End If
End Sub

Public Sub BarClosing()
If Bars.Count < 2 Then
Return
End If
If OpenPositions.Count = 0 Then
If Close.Current / mySMA200.Current > 1 Then
If myRSI2.Current < SystemParameters(„rsi“) And DateDiff(„h“, Me.TradingSystem.LastTrade, Bars.Current.BarStartTime) > 23 Then ‚pouze 1 obchod za den
OpenPosition(PositionType.Long, OrderType.MarketOnClose, 0, SystemParameters(„pocatek“) \ Close.Current)
Me.TradingSystem.LastTrade = Bars.Current.BarStartTime ‚čas posledního obchodu
End If
End If
Else
If Close.Current > mySMA5.Current Then ‚jestliže cena je větší než SMA(5)
For Each pos As Position In OpenPositions
pos.CloseAtMarket() ‚zavři všechno
Next
Else
If OpenPositions.Count = 1 Then
Dim myPosition As Position = OpenPositions(0)
If myPosition.Trades.Count = 1 Then ‚nakup druhou !!!
If Close.Current / myPosition.Trades(0).Price.SymbolPrice < 1 Then
PositionManager.AddToPosition(myPosition.ID, myPosition.Trades(0).Size * 2, OrderType.Market, 0, String.Format(„Pyramida {0}“, myPosition.Trades.Count))
End If
ElseIf myPosition.Trades.Count = 2 Then ‚nakup třetí
If Close.Current / myPosition.Trades(1).Price.SymbolPrice < 1 Then
PositionManager.AddToPosition(myPosition.ID, myPosition.Trades(0).Size * 3, OrderType.Market, 0, String.Format(„Pyramida {0}“, myPosition.Trades.Count))
End If
ElseIf myPosition.Trades.Count = 3 Then ‚nakup čtvrtou
If Close.Current / myPosition.Trades(2).Price.SymbolPrice < 1 Then
PositionManager.AddToPosition(myPosition.ID, myPosition.Trades(0).Size * 4, OrderType.Market, 0, String.Format(„Pyramida {0}“, myPosition.Trades.Count))
End If
End If
End If
End If
End If
End Sub
End Class

Toť zatím vše, statistiky níže. Zhodnocení je počítáno od 1.1.2006 s hypotetickou vstupní částkou 100000 USD.

zhodnoceni

Příspěvek byl publikován v rubrice AOS. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

309 komentářů: Chcete systém s 90% úspěšností obchodů? Tady je!

  1. Petr napsal:

    Chtěl jsem si dneska v Excelu zobrazit letošní equity a zjistil jsem, že vlastně moc nevím jaké čísla jsou ta správná. Zkusil jsem NAV, což sice vypovídá o aktuální hodnotě portfolia každý den, ale zbytečně zahrnuje otevřenou ztrátu. Rád bych tedy zobrazoval něco jako starting cash plus uzavřené obchody plus poplatky, ale nějak to nemůžu z Activity Statementu vyčíst, dělá mi v tom zmatek páka a půjčené peníze. Řešil a vyřešil jste to někdo? O nic moc nejde, jen ta equity s otevřenou ztrátou vypadá daleko horší než vlastně nakonec vyjde.

    Jinak je zajímavé, že počet příspěvků tady pěkně koreluje se ziskovostí strategie. Když se daří, je ticho, když jsou ztráty, příspěvků plno :-) Tak snad jsem to teď nezakřikl.

    • misch napsal:

      Nestačilo by pro vyhlazenější křivku zobrazovat rozdíl NAV-uPnL? Tyhle údaje by měly jít vytáhnout snadno.

      • Anonym napsal:

        Jo, to dává smysl a vypadá to líp. Trochu mi do toho IB hážou vidle různou strukturou statementu a zprasenou syntaxí HTML (class mimo uvozovky je nádhera), ale přemluvil jsem to. Díky.

    • Petr napsal:

      Tak jsem to asi fakt zakřikl :)

      • Honza napsal:

        casem to zas muselo prijit :-)

        • zolo napsal:

          Ešte len teraz to vyzerá zaujímavo.

          • Robo napsal:

            Tak tak. Index dolu > 3% a strategia plne nalozena.

            • torgar napsal:

              Ja jsem s velkou slavou spustil aos 29.9. do ostreho provozu. Umim si to holt dobre nacasovat…

              • jb5 napsal:

                To je nepříjemný skok do reality… Ale z dlouhodobého hlediska je skoro jedno, kdy strategii pustím. Samozřejmě je lepší se hned od začátku dívat na rostoucí equity, ale z backtestu vím, že takovéto korekce tady byly, jsou a budou, a strategie je schopná se zase vrátit na vítěznou vlnu, proto mě to nechává relativně v klidu. Osobně jsem na ostro nasadil letos 1.7., tři měsíce jsem si mnul ruce, jak to krásně roste a najednou během pár dnů jsem v mínusu, ale to je život. Navíc zatím je to „pouze“ otevřená ztráta, může se to kdykoli zase otočit. A i kdyby toto byl počátek té tolik očekávané krize, tak jsem připraven na ztráty, protože potom s velkou pravděpodobností přijde období krásného růstu. Proto jsem připraven nalít do strategie další peníze, až se to začne po případné krizi zase vracet. Uvidíme, jak se to vyvine :-)

  2. Petr napsal:

    Admine, prosímtě, včerejší trady jsou chyba, nebo jsi přidal nějakou optimalizaci na výstupy?

    • admin napsal:

      Ahoj, bohužel jde o chybu na mojí straně související se změnou času. Strategie je furt stejná.

      • jb5 napsal:

        Změnu času řeším tak, že na obchodním stroji mám časové pásmo EST, takže ji vlastně neřeším :-)

      • Kuba napsal:

        Admine doporučuju nastavit čas na serveru, kde ti běží aos, na americký čas, potom ti všechny tyhle problémy odpadnou.

Napsat komentář

Vaše emailová adresa nebude zveřejněna.