Załóż konto | Przypomnij hasło
Filtruj wg spółki:
możliwość otwierania krótkich pozycji, lista spółek
Wyświetleń: 8002. Obserwuje: 1 osób.
Post: #1 
2010-06-23 22:34

Usunięty

Posty: 0
Shouty: 0
0
Witam!

Czy jest gdzieś lista:
a) wszystkich spółek, których akcje można zakupywać w grze giełdowej
b) wszystkich spółek, dla których jest możliwa krótka sprzedaż w grze giełdowej?

Pozdrawiam!

Post: #2 
2010-06-24 22:28

Usunięty

Posty: 0
Shouty: 0
0
Dzięki za odpowiedź!

Pytam, dlatego, że znalazłem taki system transakcyjny (www.amibroker.com/library/detail.php?id=60) do programu AmiBroker. Zoptymalizowałem go w programie i wskazywał, że zysk wynosi aż 100%. Natomiast, kiedy go teraz stosuję na grze giełdowej, od paru dni, kiedy to robię, przynosi mi ogółem straty. Optymalizowałem system tylko pod kątem długich pozycji, jednak uwzględniłem wszystkie wpisy, które pobieram z http://bossa.pl/pub/metastock/mstock/metaall.zip, czyli również indeksy giełdowe itd., co jak zgaduję nie było zbyt dobrą decyzją. Widzę również, że statystyka ostatnich sesji to dużo więcej spółek, których cena spada, niż tych, których rośnie. Stąd też pomyślałem, że jeszcze raz zoptymalizuję ten sam system, ale tym razem w opcjach uwzględnię prowizję oraz krótkie i długie pozycje, a do tego optymalizację przeprowadzę tylko na tych spółkach, które są wymienione w notowaniach. (Ponieważ lista spółek, dla których można zastosować krótką pozycję jest krótsza, niż lista wszystkich spółek w polu "notowania", to zapewne zoptymalizuję dwa razy osobno - dla długiej i krótkiej pozycji).

Zastanawiam się nad paroma opcjami optymalizacji. Druga zakładka to "Trades", wszystkie delay są ustawione na zero. Natomiast na grze giełdowej i prawdziwej giełdzie opóźnienia nie są stałe, ale zależą od różnych czynników; do tego w zakładce "trades" nie jest podana jednostka do "delay", więc nie wiem, jaką wartość wpisać.

Na razie nie będę się bawił z zakładką "stops" i pozostawię je "disabled".

No i najważniejsza rzecz, czyli prowizje. Domyślam się, że jest to zakładka "general", sekcja "commisions & rates". Mam tam do wyboru commision table, percent, $ per trade, $ per share/contract oraz wartości do wypełnienia annual interest rate (domyślnie zero), account margin (domyślnie 100), gdzie "100 means no margin account". Z tego, co wiem, w tej grze prowizja to 0,39% od transakcji, jednak nie mniej, niż 5 zł. Jak mogę coś takiego ustawić?

No a systemami transakcyjnymi zainteresowałem się, ponieważ na początku próbowałem samodzielnie analizować wykresy przy pomocy tygodniowej EMA oraz dziennego oscylatora stochastycznego (tak jak to opisane w książce Eldera o trójekranowym systemie), jednak ta metoda generowała mi więcej strat, niż zysków.

Pozdrawiam!

Edytowany 1 raz-y, ostatni raz: 2019-12-15 20:51:52

Post: #3 
2010-06-25 10:32

topola

Tańczący z wykresami
Warszawa
Posty: 512
Shouty: 28054
0
Systemy to długa historia. Sam przez rok bawiłem się pisaniem i przerabianiem systemów w Ami i wiem, że trzeba uwzględnić bardzo wiele czynników, trzeba nie przesadzać z optymalizacją, dobrać odpowiednią ilość danych etc. Generalnie temat na grubą książkę, których sporo jest na rynku.

Radzę poczytać trochę i wtedy się zabierać za testy, ustrzeżesz się wielu błędów.

I rzeczy typu prowizje, radzę zapisywać w kodzie systemu, a nie w ustawieniach backtestera.
https://humanista-na-gieldzie.blogspot.com

Post: #4 
2010-06-25 13:55

Usunięty

Posty: 0
Shouty: 0
0
Dzięki za odpowiedź!

Czy możesz polecić jakieś książki poświęcone systemom transakcyjnym? Trochę znam język MetaStocka, ale skoro koniec końców zdecydowałem się na AmiBrokera, to zapewne zacznę od "Introduction to AmiBroker" by Howard B. Bandy, a dokładniej "Chapter 8 - AFL - AmiBroker Formula Language", choć szczerze powiem, że trochę nie podoba mi się to wprowadzenie do AFL, gdyż poza krótkim wstępem, jest to przede wszystkim wyliczenie dostępnych funkcji. Dużo lepsze było wprowadzenie do języka MetaStocka, które jakiś czas temu czytałem. No a następnie z tej samej książki "Chaper 7 - Trading System Development" - wygląda na dobrze napisany, choć omawiający jedynie podstawy tworzenia systemów transakcyjnych.

Zacząłem czytać Twojego bloga i muszę przyznać, że mnie zainteresował. Dlaczego jednak zrezygnowałeś z korzystania z systemów transakcyjnych? Czy głównie dlatego, że wymagają one większego kapitału początkowego?

"Rzeczy typu prowizje", czyli również zlecenia stop?

Pozdrawiam!

Post: #5 
2010-06-25 14:03

topola

Tańczący z wykresami
Warszawa
Posty: 512
Shouty: 28054
0
Cieszę się, że zaglądasz na bloga

"rzeczy tupu prowizje" - mam tu na myśli w zasadzie wszystkie elementy systemu, od stopów, cen wykonania transakcji etc. Jak sobie ustawisz zlecenie stop na poziomie Ref(C,-1)-0,2*ATR(15) to nie ma opcji, żeby Ci wykonywało po tej cenie, trzeba to zapisać w kodzie systemu.

Odpuściłem właśnie z racji portfela. Nie ma sensu robić systemów na kontrakty akcyjne, a na koszyki akcji czy też FW20 nie mam odpowiedniej poduszki kapitałowej. Z kolei systemy na FX wymagają opanowania języka znacznie bardziej złożonego niż AFL. Poza tym uważam, że można mieć dobre rezultaty oceniając rynek narzędziami też systematycznymi, ale nie aż tak mechanicznymi, np. stałe zasady wejścia, wyjścia, MM etc.

Co do nauki AFL to raczej opierałem się na module HELP oraz różnych artykułach ze strony Ami. Nie wiedziałem, że jest do tego jakaś książka. Podstawowe rzeczy można zapisać bez problemu, gorzej z funkcjami trudniejszymi, czyli np. wykorzystanie Equity jako odniesienia dla wielkości otwieranej pozycji i tym podobne sprawy.
https://humanista-na-gieldzie.blogspot.com

Post: #6 
2010-06-25 19:46

Usunięty

Posty: 0
Shouty: 0
0
Dzięki za odpowiedź!

Czy masz jakieś książki o tworzeniu systemów transakcyjnych w pdf-ach?

Pozdrawiam!

Post: #7 
2010-06-25 20:32

topola

Tańczący z wykresami
Warszawa
Posty: 512
Shouty: 28054
0
Wszystkie książki, które opisuję w wątku o literaturze giełdowej można znaleźć w necie
https://humanista-na-gieldzie.blogspot.com

Post: #8 
2010-06-25 21:17

Usunięty

Posty: 0
Shouty: 0
0
Dzięki!

W zasadzie to celem, do którego teraz dążę jest dodanie do systemu transakcyjnego:
1. jakichś rozsądnych stopów + wyświetlenie ich w kolumnie po użyciu "Automatic Analysis" -> "Scan"
2. rozsądnej wielkości pozycji + wyświetlenie jej
3. zakodować prowizje!!! (czy mógłbyś mi, proszę, powiedzieć jak mogę to zakodować, bo w zasadzie nie będę miał potrzeby zmieniania tego później, zgaduję, że to tylko parę linijek kodu, a bez tego raczej nie uzyskam sensownych wyników optymalizacji systemu)

Ceny wykonania transakcji mogę sobie raczej odpuścić. Jeśli system daje mi sygnał "kupuj" to od razu kupuję PKC.

Jeżeli dobrze rozumiem, to na grze giełdowej wielkość prowizji wynosi 0,39% lub przynajmniej 5 zł. Stąd też przydatne by było jakoś obliczać przewidywany zysk lub też stosunek ryzyka do zysku i wybierać tylko te najbardziej opłacalne.

W trakcie lektury Helpa nasunęło mi się parę wątpliwości. (AmiBroker 5.20 User's Guide -> Tutorial -> AmiBroker Formula Language).

1. Do czego są te buyprice, sellprice? Przecież gdy buy=1 to daje mi sygnał kupna, wtedy kupuję, a skoro kupuję np. po każdej cenie to i tak nie zależy to, po jakiej cenie kupię ode mnie, a od tego, jak się sytuacja na rynku przedstawia (czy ktoś chce sprzedać oraz ile).

2. Nie do końca też zrozumiałem, skąd on bierze te wartości wektora "Periods".

3. Czy na dobry początek taki prosty stop (znaleziony w "Back-testing your...") będzie się sprawdzał:
Buy = ...;
Sell = 0; //selling only by stop (albo zostawię sell takie jak oryginalnie było w systemie)
TrailStopAmount = 2 * ATR(20);
Capital = 100000;
Risk = 0.01 * Capital; //ja użyję 0.02
PositionSize = (Risk/TrailStopAmount) * BuyPrice;
ApplyStop(2, 2, TrailStopAmount, 1);
Opatrzone zostało komentarzem: "The total equity per symbol is $100,000, we set the risk level a 1% of total equity. Risk level is defined as follows: if a trailing stop on a $50 stock is at, say $45 (the value of two ATR's against the position), the $5 loss is divided into the $1000 risk to give 200 shares to buy. So, the loss risk is $1000 but the allocation risk is 200 shares x $50/share or $10,000. So, we are allocating 10% of the equity to the purchase but only risking $1000".

Do tej pory się zastanawiam, dlaczego ten system (www.amibroker.com/library/detail.php?id=60) po optymalizacji (PeriodsA = 2, PeriodsB = 3) wskazuje mi na zysk 100%, a zastosowany na grze giełdowej od paru dni generuje spore straty.

Pozdrawiam!

Edytowany 3 raz-y, ostatni raz: 2019-12-15 20:51:52

Post: #9 
2010-06-25 22:14

topola

Tańczący z wykresami
Warszawa
Posty: 512
Shouty: 28054
0
Hmm, nie jestem aż tak mocno zaawansowany w kwestii języka AFL, musiałbyś pytać na forum futures.pl.

1.1 - po co Ci stopy przy scanie? Przecież scan służy chyba do czegoś innego
1.2 - wielkość pozycji w zależności od kapitału to stosunkowo złożone funkcje "Equity" oraz "AddToComposite", nie wiem, gdzie i jak chcesz to wyświetlać
1.3 - Prowizje robisz formułą "SetOption", pogrzeb w helpie dla konkretnych ustawień, bo są różne możliwe.

I teraz jadąc dalej...

2.1 - funkcja "buy" podaje warunki, jakie muszą być spełnione, aby dokonać kupna. Natomiast musisz jeszcze wybrać cenę, po której zostanie zrealizowana transakcja i do tego właśnie służą funkcje "buyprice", "sellprice", "shortprice" oraz "coverprice".

Bez tych zmiennych system nie ruszy. Domyślnie są one skonfigurowane w ekranie "settings/trades" w testerze, ale jest tam bardzo mało opcji. W praktyce w kodzie piszesz np. tak:

Buy = Close > ref(close,-1); - kupno, jeśli dzisiejsza Close jest większa od wczorajszej

BuyPrice = Close; - cena kupna na zamknięciu

lub przykład trudniejszy:

tick = 0.01;

Sell = Low < ref(low,-1)-tick; - sprzedajemy, jeśli low jest niższe niż wczorajsze low

SellPrice = IIf(Open < ref(low,-1)-tick,open,ref(low,-1)-tick; - cena z wczorajszego low pomniejszona o 1 tik, czyli najmniejszy krok notowań, który w typ wypadku ustawiłem na 0.01 . Dodatkowo może wystąpić luka (otwarcie poniżej wczorajszego Low), więc wtedy stop nam strzela, ale wykonanie następuje już po cenie Open, więc to też trzeba uwzględnić w kodzie.

Cena PKC powoduje poślizg, więc uwzględnia się poślizgi w prowizjach. Jak dajesz na FW20 prowizję 15 zł (kupno + sprzedaż po 7.50 zł) to warto podnieść do 3, gdyż uwzględniasz wtedy poślizg przy wykonaniu zleceń.

2.2 - Periods to jest zmienna, którą sam ustawiasz. Równie dobrze możesz napisać "dupa = 12" i wtedy wszędzie, gdzie wstawisz "dupa" będzie podstawiało 12. Po prostu ładnie nazwano zmienną i tyle. Przydaje się to, gdy coś wielokrotnie powtarzasz w kodzie. Wtedy zmieniasz tylko w jednym miejscu, a nie biegasz po kodzie, żeby zmienić we wszystkich.

2.3 - jak nie rozumiesz, co jest w kodzie zapisane to nie będzie Ci się sprawdzał

Z tego, co widzę jest to stop kroczący oparty na ryzyku do kapitału. I to tylko do stałego kapitału, czyli niezależnie od wartości portfela liczy stop dla kwoty 100 000. Do tego dorzucono tam wielkość pozycji w zależności od ryzyka, co jest dobre, bo sam stosuję, ale nie sprawdzi się do wszystkiego.

I co do końcówki...

Jak nie rozumiesz systemu to go nie stosuj. Systemy to sprawa złożona na tyle, że jeśli pominiesz jeden element (np. otwarcie luką spadkową) możesz mieć piękne wyniki na papierze, ale shit w realu.

Poza tym, trzeba pamiętać, że system ma zarabiać w długim terminie, a kilka dni to na pewno nie jest długi termin. Dziś z nudów napisałem system na FW20, który za ostatnią dekadę dał średniorocznie 10% zysku. Fajnie? No nie do końca, bo przez pierwsze 5,5 roku bujał się wokół zera i to dopiero ostatnie 4,5 roku dało cały zysk.

Chciałbyś system bijący na głowę wszelkie lokaty, który jednak przez 5,5 roku nie zarobił ani grosza? Oddam za darmo

Dlatego tak ważne jest poczytanie o zagrożeniach związanych z projektowaniem systemów, o błędach, które można popełnić oraz o aspektach, które należy uwzględnić.

A na zachętę daję Ci za free system, który w backtestach zarobił 5500% (ponad 47% rocznie) za ostatnią dekadę z maksymalnym obsunięciem kapitału nie większym niż 5% (i to wszystko po uwzględnieniu prowizji i poślizgów).

Buy = Low;
BuyPrice = Low;

Sell = High;
SellPrice = High;


Powodzenia
https://humanista-na-gieldzie.blogspot.com

Post: #10 
2010-06-26 16:30

Usunięty

Posty: 0
Shouty: 0
0
Dzięki wielkie za wyczerpującą odpowiedź :-)!

Hm, scan pokazuje, które akcje należy kupić, a które sprzedać. W takim razie co służy do automatycznego sugerowania, gdzie umieścić stopy oraz jaka ma być wielkość pozycji? Zapewne nic, poza ustawieniami scana, więc co szkodzi, żeby również scan na podstawie AFL je wyświetlał?

Piszesz o Equity i AddToComposite. Ale znalazłem w "Back-testing your trading ideas" zmienną PositionSize, która "allows control dollar amount or percentage of portfolio that is invested into the trade". A co do tego, gdzie dodawać to w "How to create your own exploration" znalazłem funkcję AddColumn, która u mnie mogła by wyglądać tak: AddColumn(PositionSize, "PositionSize", 1);. Dodaje ona kolumnę do wyników "Explore" (szkoda, że nie do "scan"; w zasadzie to czym dokładniej różni się "scan" od "explore", poza tym, że scan wyświetla sugerowane pozycje do zajęcia, zaś explore wartości wewnętrznych zmiennych systemu; do tego explore stosuje Filter = (Buy==1)).

Co do prowizji to "AFL Function Reference" -> "SetOption" posiada opcje CommisionMode (0 - use portfolio manager commission table, 1 - percent of trade, 2 - $ per trade, 3 - $ per share/contract) oraz CommisionAmount, czyli nie wygląda to na więcej, niż jest w Backtester settings -> Commisions & rates.

Domyślam się, że PositionSize oznacza maksymalną kwotę, którą przeznaczam na dany walor, czyli np. przy PositionSize = 100, cenie waloru = 25 kupuje mi cztery akcje. Wartość dodatnia PositionSize to kwota, zaś ujemna -100 do -1 to procentowa ilość środków dostępnych. Ja bym spróbował prowizję dodać w następujący sposób:

//Najpierw jakiś kod, który na podstawie stopu wylicza mi PositionSize.
ToBeSpent = 0;
IIf(PositionSize < 0, -0.01 * PositionSize * Capital, ToBeSpent = PositionSize);
IleAkcji = ZaokraglijWDol(ToBeSpent / BuyPrice);
//niestety nie wiem, jak zaokrąglić w dół
ToBeSpent = IleAkcji * BuyPrice;
ProwizjaA = IleAkcji * 0.005; //pół grosza od każdej akcji
ProwizjaB = 0.0039 * ToBeSpent; //0,39% z kwoty transakcji
Prowizja = IIf((ProwizjaA < 5) AND (ProwizjaB < 5), 5, //5 złotych
IIf(ProwizjaA > ProwizjaB, ProwizjaA, ProwizjaB) //bądź prowizja a lub b
)
Prowizja = Prowizja * 1.4; //aby uwzględnić poślizg, czyli slippage
SetOption("CommisionMode", 2);
SetOption("CommisionAmount", Prowizja);
//Mam nadzieję, ze wartości w "Backtester settings" nie będą mieć wyższego priorytetu, niż te z AFL. Martwię się tym dlatego, że znalazłem w helpie coś takiego: TrailStopAmount = 2 * ATR(20); Capital = 100 000; //IMPORTANT: Set it also in the Settings: Initial Equity!, z czego wynika, że zmienna Capital jest nic nie warta, skoro i tak to samo trzeba ustawić w Settings.


Co do PositionSize również to zdanie trochę mnie zastanawia "If less than 100% of available cash is invested then the remaining amount EARNS interest rate as defined in the settings".

Przy okazji przeglądając Backtester settings -> Portfolio zauważyłem, że Max. Open Positions jest ustawione na 4. To w takim razie, czemu scan sugeruje mi otwarcie około pięćdziesięciu otwartych pozycji, a nie co najwyżej czterech?

Tak sobie myślę, że BuyPrice = Close; chyba nie jest złą opcją.

O Period pytałem w kontekście "AmiBroker 5.20 User's Guide" -> Tutorial -> AmiBroker Formula Language -> Understanding how AFL works -> ostatnia tabelka. Nie mam pojęcia, dlaczego akuratnie takie wartości tam się znajdują w wierszu Period. Choć to w sumie nie takie istotne.

Piszesz, że "jeśli pominiesz jeden element (np. otwarcie luką spadkową) możesz mieć piękne wyniki na papierze, ale shit w realu". Właśnie nie do końca rozumiem, dlaczego taka rozbieżność między wynikami na papierze i w rzeczywistości. Doszedłem do takich wniosków, że wpływ na to ma poślizg, prowizje i dobór akcji, dla których się optymalizuje. (Będe musiał jeszcze znaleźć, jak ograniczyć walory tylko do tych wymienionych w grze giełdowej, zapewne jest to gdzieś w Symbol -> Categories. Swoją drogą, czy w prawdziwych domach maklerskich możliwość otwarcia krótkich pozycji jest też tylko dla akcji z wig20?) Jakie jeszcze mogą być inne powody rozbieżności między backtestem i rzeczywistością i o co chodzi z tym otwarciem luki spadkowej?

Co do systemu zarabiającego w długim terminie. Optymalizacji dokonałem dla dwóch okresów. Pierwszy to 01.2006-01.2009, drugi to 01.2009-06.2010. Dla tego pierwszego zoptymalizowałem najpierw PeriodsA, później PeriodsB, następnie przetestowałem dla drugiego. W obu okresach wyszedł zysk, w drugim okresie większy. (Spróbowałem jeszcze tego samego, optymalizując PeriodsA i PeriodsB jednocześnie, jednak wynik był gorszy).

Ten ostatni system jest trywialny. Dziwią mnie w nim dwie linijki. Buy = Low oraz Sell = High. Myślałem, że raczej te wartości powinny wynosić zero dla "nie kupuj / sprzedawaj" oraz jeden dla "kup / sprzedaj". Chyba, że każda wartość różna od zera jest traktowana jako "kup / sprzedaj". Zakładam, że i tutaj występuje duża rozbieżność między rzeczywistością i backtestami, ale dlaczego? Jak by niby miał ten system działać? Przecież dawałby on codziennie dla każdego waloru jednocześnie sygnał kupna i sprzedaży, skoro Buy oraz Low są różne od zera? Co to niby ma oznaczać, że trzeba kupić czy sprzedać? No i drugi duży minus, za każdym razem trzeba by otwierać pozycję dla każdego możliwego waloru, trochę to dużo roboty na stronie internetowej biura maklerskiego lub w zakładce zlecenia gry giełdowej.

Piszesz, że "jak nie rozumiesz systemu to go nie stosuj". Oto, jak rozumiem działanie systemu GunnHiLo. Porównuje on ceny zamknięcia i średnie ruchome. (Wydaje mi się, że kroki 1-3 można by zapisać dużo prościej i są one niepotrzebnie zagmatwane - chyba, że coś przeoczyłem). Następnie rysuje wykresy HiLo oraz HiLoInvert dla średnich ruchomych z dwóch różnych okresów. W zależności od tego, który wykres przecina który, generuje sygnały kupna lub sprzedaży. Natomiast dane podane w "Explore" są w dużej mierze niezwiązane z systemem. Dziwi mnie jednak, że GunnHiLo jest najpopularniejszym systemem do AmiBrokera na http://systems4trading.com/, skoro występuje taka duża rozbieżność między backtestem i rzeczywistością.

==== Krok pierwszy ====
Narysuj wykres cen zamknięcia, a następnie:
CLOSE>Ref(Ma(H,PeriodsA) -> HLd = +1 [cena zamknięcia większa od wczorajszej średniej ruchomej cen maksymalnych dla PeriodsA dni]
CLOSE HLd = -1
w przeciwnym razie -> HLd = 0
Myślę, że można by spróbować, czy dla eksponencjalnej średniej
ruchomej nie będzie lepszych wyników, niż dla zwykłej.
==== Krok drugi ====
HLv jest równe HLd, jeśli HLd było wczoraj różne od zera
W zasadzie to nie wiem, po co to HLv=ValueWhen(HLd != 0,HLd,1);. Przecież jeśli HLd było wczoraj różne od zera
to jest to zwykłe przypisanie HLv = HLd. Natomiast jeśli HLd było wczoraj zerem to pozostawia domyślną wartość HLv,
czyli zapewne zero, ponieważ nigdzie zmienna nie była inicjalizowana z wartością początkową. Czyli zawsze wykonuje HLv = HLd.
==== Krok trzeci ====
HLv = -1 -> HiLo = Ma(H,PeriodsA)
HLv = +1 lub 0 -> HiLo = Ma(L,PeriodsA)
==== Kroki 1-3 ====
W zasadzie to kroki 1-3 sprowadzają się tylko do tego, że:
CLOSE>Ref(Ma(H,PeriodsA) => HiLo = Ma(L,PeriodsA)
CLOSE HiLo = Ma(H,PeriodsA)
w przeciwnym razie => HiLo = Ma(L,PeriodsA)
No, chyba, że coś źle zrozumiałem .
==== Krok czwarty ====
Narysuj wykres HiLo.
==== Krok piąty ====
Wykonaj kroki 1-4 dla wartości PeriodsB, ostatnią zmienną nazwij HiLoInvert.
==== Krok szósty ====
HiLo przecina od dołu HiLoInvert -> kupuj
HiLo przecina od góry HiLoInvert -> sprzedawaj
==== Krok siódmy ====
Pierwszy raz pojawi się sygnał kupna, to go zostawia. Później kolejne sygnały kupna usuwa, aż do
momentu, gdy w pojawi się zarówno sygnał kupna jak i sprzedaży (ale o co chodzi?).
==== Krok ósmy ====
Sygnały otwarcia i zamknięcia krótkiej pozycji to cały pozostały czas, kiedy nie zajmujemy pozycji długiej.
==== Prowizje, slippage, wielkość pozycji, stopy ====
Myślę, że jest to odpowiednie miejsce do wyliczenia:
a - miejsca, gdzie by umieścić zlecenia stop
b - spodziewanego profitu
c - ryzyka na podstawie zależności ceny zamknięcia, ceny stopu i ceny spodziewanego profitu
d - wielkości pozycji na podstawie ryzyka
e - prowizji na podstawie wielkości pozycji
f - poślizgu, jako 40% wielkości prowizji
Podałem w tym poście fragment kodu, który mógłby być odpowiedzialny za punkty e-f,
jednak nie bardzo wiem, jak zapisać punkty a-d.
==== Explore ====
Pokazuj tylko sygnały kupna.
0 - Trigger Price -> wczorajszy HiLo
1 - Close -> dzisiejsza cena zamknięcia
2 - Volume -> siedemnastodniowa średnia ruchoma wolumenu
3 - %17/50 -> MA(C,17) / MA(C,50)
4 - 17 C MA -> MA(C,17)
5 - 50 C MA -> MA(C,50)


Napisałeś, że "Z tego, co widzę jest to stop kroczący oparty na ryzyku do kapitału. I to tylko do stałego kapitału, czyli niezależnie od wartości portfela liczy stop dla kwoty 100 000. Do tego dorzucono tam wielkość pozycji w zależności od ryzyka, co jest dobre, bo sam stosuję, ale nie sprawdzi się do wszystkiego". Gdzie Ty widzisz te wszystkie rzeczy?

Pozdrawiam!

Edytowany 2 raz-y, ostatni raz: 2019-12-15 20:51:52

Post: #11 
2010-06-26 16:46

topola

Tańczący z wykresami
Warszawa
Posty: 512
Shouty: 28054
0
SCAN - this starts the signal scan mode - AmiBroker will search through defined range of symbols and quotations for buy/sell signals defined by your trading rules.If one of the buy/sell conditions is fulfilled, AmiBroker will display a line describing when and on which symbol the signal has occurred. Next AmiBroker proceeds to the end of the range so multiple signals on single symbol may be generated.

I tyle. Skan to poszukiwanie sygnałów kupna i nic więcej. Rzecz drugorzędna i najlepiej o nim zapomnij.

Funkcja PositionSize definiuje wielkość pozycji. Nie tylko proste zarządzanie, ale możesz dać, żeby uzależniało wielkość od zmienności, ryzyka etc. Kwestia na dłuższą opowieść.

Co to jest scan już wyjaśniłem, więc pewnie już wiesz, że ma się on nijak do ilości otwartych pozycji.

Napiszę teraz tak ogólnie, bez wdawania się w szczegóły. Musisz usiąść i zacząć uczyć się języka AFL. Widzę, że mylisz konkretne funkcje, chcesz wykorzystywać narzędzia nie do tego, do czego zostały napisane etc. Usiądź, poczytaj po kolei wszystkie tutoriale, później rozgryzaj po kolei funkcje, które są Ci potrzebne.

Optymalizacja musi być robiona z głową, więc radzę najpierw poczytać teorię zamiast się dziwić, że wyniki wirtualne i realne się różnią.

Co do ostatniego pytania, te wszystkie rzeczy widzę w kodzie. Jak zrozumiesz mechanikę kodu i kilka podstawowych funkcji to będziesz w stanie wyłapać co i jak.

Nauka, nauka, nauka. Wtedy świat jest mniej złożony.

Pozdrawiam!
https://humanista-na-gieldzie.blogspot.com

Post: #12 
2010-06-26 23:40

Usunięty

Posty: 0
Shouty: 0
0
Dzięki za odpowiedź!

No to zgromadziłem sobie trochę lektury. Język AmiBrokera:
http://www.amibroker.com/guide_pl/tutorial.html
http://www.amibroker.com/guide/tutorial.html
UsersGuide.pdf -> AmiBroker 5.20 User's Guide -> str. 328..356, 859..872, 882..913
Introduction to Amibroker by Howard B. Bandy -> str. 249..270, 271..476
oraz do zrozumienia funkcje Equity, AddToComposite, SetOption, PositionSize, ValueWhen
O systemach transakcyjnych:
LeBeau Charles, Lucas David - Komputerowa analiza rynków terminowych (za wyjątkiem rozdziału drugiego)
Van K. Tharp - Giełda, wolność i pieniądze. Poradnik spekulanta, "Trade your way to financial freedom" (poodwracam sobie strony w pdfedit :p)

Przeczytam, to będę wiedział więcej, co umożliwi bardziej konstruktywną rozmowę. Niemniej jednak dalej jestem ciekaw, gdzie widzisz stop i wielkość pozycji w zależności od ryzyka w kodzie GunnHiLo. Zadałem sobie trochę trudu i przeanalizowałem cały kod (końcówka poprzedniego mojego postu), ale nie znalazłem . Do tego to, co określiłem jako kroki 1-3 wydaje mi się czymś, co można by zapisać prościej, jak również nie widzę potrzeby ValueWhen (help na temat tej funkcji zbyt wiele mi nie pomógł).

Zastanawia mnie jeszcze, jak dobierasz sobie akcje obserwowane, dla których ręcznie analizujesz wykresy (formacje, linie trendu itd.)? Bo przecież przejrzenie wszystkich wykresów akcji to trochę za dużo.

Pozdrawiam!

Post: #13 
2010-06-27 11:16

topola

Tańczący z wykresami
Warszawa
Posty: 512
Shouty: 28054
0
Jest sporo dobrej literatury, Kaufman chyba też coś skrobnął. Przejrzyj wątek na forum o literaturze, tam w opisach akcentowałem co jest ważne dla systemowców.

Co do tego kodu to widzę tam funkcję ApplyStop, która jest de facto stopem, a w niej zawarte jest odwołanie TrailStopAmount, gdzie wykorzystywana jest zmienność w postaci ATR. Z kolei funkcja PositionSize również wykorzystuje TrailStopAmount oraz Risk w odniesieniu do portfela. Zatem mamy stop kroczący oparty na zmienności oraz wielkość pozycji uzależnioną od odległości stopa od ceny oraz założonej ryzykowanej wielkości portfela.

W kwestii dobierania akcji to obecnie koncentruję się na grze kontraktami akcyjnymi, zwłaszcza FPKO, który moim zdaniem najlepiej oddaje ruchy indeksów (FW20 jest dla mnie jeszcze za duży). Gdy walczyłem na akcjach to brałem akcje z mWig40, jako koszyk, który przeglądałem i z którego brałem akcje, bo spółki te mają niezłą płynność, a dzięki temu w miarę stabilny kurs.

Jeśli szukasz spółek o konkretnych parametrach technicznych, proponuję porobić eksploracje i przefiltrować wszystkie spółki pod kątem oczekiwanych cech.
https://humanista-na-gieldzie.blogspot.com

Post: #14 
2010-06-28 04:03

Usunięty

Posty: 0
Shouty: 0
0
Dzięki za odpowiedź!

Te dwie książki wybrałem właśnie na podstawie wpisów na Twoim blogu poświęconych publikacjom o giełdzie.

Czy na pewno patrzymy na ten sam kod? Link do niego podałem w swoim drugim poście (http://www.amibroker.com/library/detail.php?id=60). Przyjrzałem mu się po raz kolejny i nie widzę tam żadnego ApplyStop. Widzę za to IIf, Ref, Ma, ValueWhen, Cross, Exrem i to właściwie wszystkie funkcje, które tam dostrzegam.

Zastanawia mnie też jedna rzecz, która chyba bardziej dotyczy samego korzystania z AmiBrokera. W "Automatic analysis" wybrałem "all symbols", "n last days, n = 1", wcisnąłem "scan". Pojawiły mi się w "results" cztery kolumny "ticker", "trade", "date", "close". Większość dat to 2010-06-25, czyli rzeczywiście ostatni jeden dzień. Ale skąd się pojawić mogły wiersze takie jak dla 2010-06-24, 23, 22, 21, 18, a nawet pojedyncze wpisy z marca i kwietnia?

Pozdrawiam!

Edytowany 1 raz-y, ostatni raz: 2019-12-15 20:51:52

Post: #15 
2010-06-28 09:08

topola

Tańczący z wykresami
Warszawa
Posty: 512
Shouty: 28054
0
W takim razie patrzyliśmy na inny kod A w tym z linku widzę jedynie system oparty na jednym wskaźniku, bez stopów i zarządzania kapitałem. Jedynie StopAndReverse.

Co do problemu ze skanowaniem to nie wiem, jaka może być przyczyna. Może nie przestawiłeś kropki w miejsce obok "n last days"
https://humanista-na-gieldzie.blogspot.com

Post: #16 
2010-07-07 00:57

Usunięty

Posty: 0
Shouty: 0
0
Witam!

Próbowałem znaleźć jakieś kompletne kompendium wiedzy na temat zleceń stop. Niestety wygląda na to, że większość artykułów omawia tylko "stop loss" oraz "take profit". Z pewnością jest dużo więcej rodzajów zleceń stop (a co więcej kilka z nich może być używanych jednocześnie). Natomiast pomoc programu AmiBroker niewiele mi pomaga. Czy mógłbyś zasugerować jakąś książkę, artykuł czy stronę internetową poświęconą zleceniom stop?

I przy okazji - gdybym się zdecydował na ustalenie zlecenia stop jako poziomu wsparcia i oporu, czyli dla długiej pozycji stopu w minimum z ostatnich 20 dni sprzed otwarcia pozycji - w jaki sposób to zakodować? Chodzi mi o ostatnich 20 dni, ale sprzed otwarcia pozycji. Zwykłe Ref(..., -20) raczej nie wystarczy. Pomyślałem, że może dałoby radę jakoś połączyć funkcje ApplyStop z Ref, choć niezbyt wiem jak.

Pozdrawiam!

Post: #17 
2010-07-07 07:56

topola

Tańczący z wykresami
Warszawa
Posty: 512
Shouty: 28054
0
O stopach nie kojarzę jakiejś konkretnej książki. Raczej każda pozycja po trochu uzupełnia wiedzę, więc radzę podchodzić do tematu całościowo. O rodzajach stopów pisałem trochę tutaj, warto też zajrzeć tutaj.

Co do samego Ami-kodu, wydaje mi się, że warto połączyć to z warunkami Buy oraz ExRem. Wtedy będziesz mógł określić dzień wystąpienia sygnału i w odniesieniu do niego liczyć dalsze rzeczy. Ewentualnie ValueWhen.

Najwyższą i najniższą cenę z zakresu robi się funkcją HHV oraz LLV.

Niestety nie bardzo mam czas napisać ten kod dla Ciebie, musisz sam kombinować.
https://humanista-na-gieldzie.blogspot.com

Post: #18 
2010-08-05 23:09

Usunięty

Posty: 0
Shouty: 0
0
Dzięki za poprzednią odpowiedź :-). Tymczasem miałbym takie małe pytanie odnośnie wielkości pozycji.

PositionSize = -25;


Dajmy na to, że mam ustalone 25%. Jeśli mam np. 10 000 i dwa zlecenia to wydaję 5 000. Załóżmy, że następnie mając 5 000 system wskazuje mi pięć zleceń o wykonania w danym dniu. Biorąc 25% z tej kwoty zabraknie mi na piąte zlecenie (4 * 1 250). Chyba, że wygląda to tak, że pierwsze zlecenie jest za 25% * 5 000 = 1 250. Drugie za 25% * (5 000 - 1 250) = 937,50, trzecie za 25% * 2812,5 itd. Zgaduję jednak, że tak nie jest, bo wprowadzałoby to dziwny czynnik losowy w postaci tego, które z równoważnych zleceń zostanie wykonane jako pierwsze. Czyżby więc w takiej sytuacji system automatycznie zmniejszał 25% do maksymalnego możliwego procentu, czyli w tym wypadku 20%, wykonywał pięć zleceń, każde za 1 000 i zostawiał mnie bez gotówki?

I tak przy okazji - chyba o to pytałem, ale gdzieś zniknął drugi post w tym temacie. Czy na prawdziwej GPW jest możliwość otwierania krótkich pozycji, a przynajmniej dla akcji z WIG20? Czy zależy to od biura maklerskiego?

Pozdrawiam!

Post: #19 
2010-08-06 14:22

topola

Tańczący z wykresami
Warszawa
Posty: 512
Shouty: 28054
0
Z tego, co pamiętam funkcja PositionSize odnosi się jedynie do początkowej wartości portfela, a nie do aktualnej. Więc zaczynając z 10 000 i ustawiając wielkość pozycji na 25% kupujesz za 2 500, a jak później portfel Ci urośnie do np. 17 827 to i tak kupi Ci za 2 500. Dlatego trzeba kombinować z Equity i AddToComposite, żeby odwoływało się do aktualnej wartości portfela.

Co do wykonywania zleceń to nie zmniejsza nigdy wielkości, żeby wszystkie wykonać. Wykona 4 z 5 i tyle.

Natomiast kwestia wykonywania zleceń to bardziej złożona sprawa i zależy od konstrukcji systemu. Jeśli grasz na jednym walorze (spółce, kontrakcie) i korzystasz z funkcji ExRem to nigdy nie otworzy Ci więcej niż jednej pozycji. Zatem ustawiając wielkość na 25% nigdy nie jesteś zaangażowany powyżej tej wartości.

Natomiast grając na koszyku musisz już trochę pozarządzać portfelem. Najczęściej bywa tak, że masz kilka spółek i zlecenia wykonuje w miarę występowania sygnałów. Zatem wrzucasz do testu 40 spółek, ale wielkość pozycji maksymalnie na 25%. Wtedy na pierwsze 4 sygnały zareaguje Ci otwarciem pozycji, natomiast kolejne sygnały zignoruje, dopóki nie będzie wolnych środków.
https://humanista-na-gieldzie.blogspot.com

GPWŚwiatWaluty
 Notowania GPW
WIG84255.4-0.22%13:14
WIG202470.0-0.37%13:29
WIG20 Fut2474.0-0.64%13:14
WIG20USD612.1-0.03%13:14
mWIG406232.2+0.17%13:14
sWIG8024136.0-0.04%13:14
 Notowania Świat
Dow38239.7+0.40%04-26
SP500 Fut5139.8+0.16%13:19
Nikkei37934.8+0.81%04-26
DAX18151.0-0.06%13:13
Ropa WTI83.8-0.04%13:29
Złoto2342.4+0.10%13:29
 Notowania Waluty
EUR/PLN4.32729+0.21%13:29
CHF/PLN4.42697+0.24%13:29
USD/PLN4.03545-0.01%13:29
EUR/USD1.07232+0.22%13:29
GBP/USD1.25384+0.32%13:29
USD/JPY155.895-1.26%13:29
Forum
» Dywidendy 2023 [0]
» Zbiorczy temat z prośbą o... [6]
» prośba o dodanie ETCGLDRMAU [0]
» Prośba [2][CRC]
» WIG 20 ZMIANY [3]
» Zmiana nazwy spółki [1][GLC]
» sprzedaż wycofanego ALUMETALu [5][CNT]
» Co się dzieje ? [6][K2H]
» Nie da się sprzedać [2][CNT]
» Prośba o dodanie Render Cube... [1]
Blogi - najnowsze wpisy
»thomasoo: Kozak podbija giełde XDD
»gra: Dni bez sesji 2016
»sygnaly-at: Jeden wykres zastępuje 1000 słów - MSW
»gra: Podsumowanie roku w grze, 2014 w liczbach
»gra: GPW dni bez sesji w roku 2015
Dane giełdowe dostarcza Statica - statica.pl