PARTNER SERWISU
fnzzdcgz
1 2 3 4 5

kącik AmiBroker

cyzo
3
Grupa: SubskrybentP1
Dołączył: 2009-06-17
Wpisów: 753
Wysłane: 12 grudnia 2012 22:31:17
Cześć,

Zabrałem się na studiowanie AFL'a, ale jakoś średnio mi to idzie.

Próbuję w celach szkoleniowych sklecić prosty system na wybicie z kanału. Mniejsza o skuteczność - zależy mi na zrozumieniu składni:

Warunki:

1. Jeżeli cena zamknięcia przebije max. z 10-dni kup na następnej sesji po cenie otwarcia.
2. Sprzedaj (na danej sesji), jeżeli cena spadnie (od ceny najwyższej od otwarcia pozycji) o wartość 3*ATR z 14 dni. - czyli Trailing Stop ma być.

Na obecną chwilę zmontowałem takie coś:

okres=10;
DUp =HHV(Ref(H,-1),okres);
Buy=Cross(Close;,DUp);
Sell=ApplyStop(2,2, 2 * ATR( 10 ),1, True );

Problemy:
1. Nie wiem jak zapisać zlecenie kupna po cenie otwarcia na następnej sesji. Doszukałem się funkcji BuyPrice - ale nie wychodzi mi. Przypuszczam, że polecenie powinno zawierać wyrażenie Ref(O,1)...ale co dalej? :/
2. Ze stopem w ogóle nie potrafię sobie poradzić. Jeżeli formułę Stopa piszę ręcznie to w opcjach musi wszystko być wyłączone, czy w jakiś sposób również trzeba skonfigurować?

chilltrade
0
Dołączył: 2013-01-15
Wpisów: -39
Wysłane: 16 stycznia 2013 16:00:46
Cześć cyzo :)

oto formuła którą chciałbyś napisać:

"

Max10dni=Ref(HHV(H,10),-1);
warKup=Cross(C,Max10dni);

SL=3*ATR(14);

SetBacktestMode(backtestRegular);

Buy=warKup;
Sell=0;
ApplyStop(2,2,SL,1);



"

aby akcje kupić następnego dnia po sygnale po cenie otwarcia musisz wejść:
ANALYSIS --> backtestes settings --> trades --> longtrades --> buy price = open ;;; buy delay=1


stop jest w kodzie, więc w ustawieniach lepiej wszystko powyłączać (chociaż amik raczej powinien patrzeć do kodu niż do ustawień ręcznych)


i jeszcze mała uwaga apropo tego co tu napisałeś:

Sell=ApplyStop(2,2, 2 * ATR( 10 ),1, True );


zamiast true powinno być false. Gdy jest false sl nie obniża się, gdy true - opada.


Proszę
Edytowany: 16 stycznia 2013 16:07

cyzo
3
Grupa: SubskrybentP1
Dołączył: 2009-06-17
Wpisów: 753
Wysłane: 21 stycznia 2013 21:51:33
Witam,

Dzięki za wskazówki.... ale :) :

1. Czym w zasadzie różni się Twoje Ref(HHV(H,10),-1); od mojego HHV(Ref(H,-1),10); Składnia inna, ale wynik ten sam? Albo inaczej...czy mój zapis jest błędny - jedynie w tym przypadku udało się, że wynik jest poprawny?

2. SetBacktestMode(backtestRegular); - niestety błąd składni Error30
3. Stop nie działa - a przynajmniej nie wyświetla sygnałów sprzedaży czerwonymi strzałkami. Tu dodam, że usunąłem linijkę SetBacktestMode(backtestRegular);

Pzdr.,


toopaz
0
Dołączył: 2009-05-20
Wpisów: 19
Wysłane: 31 stycznia 2013 22:44:57
jeszcze w sprawie stoploss, taki prosty procentowy, tak, żeby rósł razem z ceną ale nie opadał

Sell = Cross (C,High * 0.952);
Stoploss = Cross (C,High * 0.952);
Plot(Stoploss, "Stop", colorYellow, styleThick, styleNoLine, styleLabel);
jeżeli wstawiam w dowolną formułę to działa ale plotuje bardzo dziwnie na dole wykresu, tak trochę bez sensu, pewnie to co zrobiłem też jest bez sensu
dopiero wchodzę w amibrokera, tak, że proszę o wyrozumiałość
proszę o pomoc

chilltrade
0
Dołączył: 2013-01-15
Wpisów: -39
Wysłane: 1 lutego 2013 19:43:02
cyzo napisał(a):
Witam,

Dzięki za wskazówki.... ale :) :

1. Czym w zasadzie różni się Twoje Ref(HHV(H,10),-1); od mojego HHV(Ref(H,-1),10); Składnia inna, ale wynik ten sam? Albo inaczej...czy mój zapis jest błędny - jedynie w tym przypadku udało się, że wynik jest poprawny?

2. SetBacktestMode(backtestRegular); - niestety błąd składni Error30
3. Stop nie działa - a przynajmniej nie wyświetla sygnałów sprzedaży czerwonymi strzałkami. Tu dodam, że usunąłem linijkę SetBacktestMode(backtestRegular);

Pzdr.,


Hej,

1. W sumie nie wiem, ja po prostu pisałem po swojemu :)
2. U mnie działa, masz najnowszego amika? może na jakimś starym trupie jedziesz który nie wbudowanych nowszych funkcji.
3. U mnie działa :)


kliknij, aby powiększyć


spróbuj wyświetlić strzałki od nowa na każdej zakładce (tej na dole pod wykresem). Nie wiem czemu ale u mnie widać strzałki tylko na jednej z zakładek. Przy przełączaniu pomiędzy nimi za każdym razem klikam "pokaż strzałki" i szukam gdzie się pojawią :) Nie mam pojęcia czemu nie widzę tego wszędzie.


kliknij, aby powiększyć



Pozdr ;]

toopaz
0
Dołączył: 2009-05-20
Wpisów: 19
Wysłane: 1 lutego 2013 22:23:48
toopaz napisał(a):
jeszcze w sprawie stoploss, taki prosty procentowy, tak, żeby rósł razem z ceną ale nie opadał

Sell = Cross (C,High * 0.952);
Stoploss = Cross (C,High * 0.952);
Plot(Stoploss, "Stop", colorYellow, styleThick, styleNoLine, styleLabel);
jeżeli wstawiam w dowolną formułę to działa ale plotuje bardzo dziwnie na dole wykresu, tak trochę bez sensu, pewnie to co zrobiłem też jest bez sensu
dopiero wchodzę w amibrokera, tak, że proszę o wyrozumiałość
proszę o pomoc


da się to plotować czy nie?
proszę o sugestie

chilltrade
0
Dołączył: 2013-01-15
Wpisów: -39
Wysłane: 2 lutego 2013 00:40:21
Spoko spoko, już piszę, wycziluj :P

Da się ale musisz to inaczej zapisać. Np tak:


LiniaStop=Ref(LLV(L,10),-1);//minimum z 10 sesji
Plot(LiniaStop,"Stop",colorRed);//drukowanie minimum z 10 sesji
przeciecie=Cross(LiniaStop,L);//przecięcie LOW z linią stopu
PlotShapes(shapeDownArrow*przeciecie,colorRed);//rysowanie strzałki po przecięciu



Ten kod powinien wyrzucić coś takiego:


kliknij, aby powiększyć


mam nadzieję że trochę pomogłem ;]


Edytowany: 2 lutego 2013 00:41

toopaz
0
Dołączył: 2009-05-20
Wpisów: 19
Wysłane: 2 lutego 2013 11:41:12
wszystko działa, dzięki, ale nie do końca spełnia to moje warunki, poniżej kod
Buy = Cross(EMA( Open , 7 ),EMA( Open , 14 ))AND C > 0.49 AND C < 400 AND EMA(V,10) >=5000 ;
Filter =EMA (V,10) >=5000;
Sell = Cross (C,High * 0.950);
Stoploss = Cross (C,High * 0.950);
PlotShapes(IIf(Buy==1, shapeUpArrow , shapeNone), colorWhite, 0,Low, Offset=-50);
Plot stoploss ???????


kliknij, aby powiększyć
Edytowany: 2 lutego 2013 12:01

toopaz
0
Dołączył: 2009-05-20
Wpisów: 19
Wysłane: 2 lutego 2013 13:00:32
w poprzednim poście coś namieszałem z linkiem do obrazka

tak to powinno działać wg. mnie


kliknij, aby powiększyć

chilltrade
0
Dołączył: 2013-01-15
Wpisów: -39
Wysłane: 2 lutego 2013 16:38:11
Pozwoliłem sobie odpowiedź na Twoje pytanie toopaz wrzucić na bloga :) Zmieniłem tylko stopa z 5% na 10%, bo za często się na takim ciasnym wylatywało.

Jest tam kod który rysuje średnie, stop loss oraz moment wejścia i wyjścia.

O takie coś Ci chodziło?


kliknij, aby powiększyć




chilltrade.wordpress.com/2013/...


toopaz
0
Dołączył: 2009-05-20
Wpisów: 19
Wysłane: 2 lutego 2013 19:12:43
tak o to chodziło, dzięki bardzo za zaangażowanie
do tego dokładam jeszcze filtry na cenę akcji (filtruje śmieci) oraz wolumen (w miarę płynne spółki)dane portfela i strategia gotowa, można zmieniać wielkości i robić backtesty
nie filtruję całego rynku tylko specjalnie dobrane spółki, które mam w zakładce Apply to filter
kod AFL
EMA1=EMA(O,7);
EMA2=EMA(O,14);
sl=H*0.9;

Buy = Cross(EMA1,EMA2) AND C > 0.49 AND C < 300 AND EMA(V,15) >=5000 ;//filtr ceny i wolumenu
Filter =EMA (V,15) >=5000;
Sell=Cross(HHV(sl,Buy),L);

//2 linijki pod spodem będą rysować strzałki na wykresie bez backtestów
//PlotShapes(shapeUpArrow*Buy,colorLime);
//PlotShapes(shapeDownArrow*Sell,colorRed);

Plot(EMA1,"EMA7",colorGreen,styleThick);
Plot(EMA2,"EMA14",colorRed,styleThick);
Plot(HHV(sl,Buy),"stop",colorWhite,styleThick);

_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{Name}} – {{Interval}} {{Date}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );

SetOption("InitialEquity", 100000 );// dane potrfela poniżej
SetTradeDelays(1,1,1,1);//kupno na następnej sesji po sygnale
RoundLotSize = 1;
posqty = Optimize("PosQty", 10, 5, 8, 1 );
PositionSize = -100/posqty;
PositionScore = 100-RSI(); // prefer stocks that have low RSI;
PosQty = 10;//ilość pozycji w portfelu
SetOption("MaxOpenPositions", PosQty );
PositionSize = -100/PosQty;
SetOption("futuresmode",False); //tryb futures wylaczony
SetOption("Minposvalue",5500); //min pozycja za kwote 1400 ze wzgledu na prowizje
SetOption("commissionmode",1); //rodzaj prowizji(procentowy)
SetOption("commissionamount",0.39); //wartosc prowizji
_SECTION_END();

cyzo
3
Grupa: SubskrybentP1
Dołączył: 2009-06-17
Wpisów: 753
Wysłane: 10 lutego 2013 22:07:33
Proste i przyjemne...w trendzie.
Jestem bardzo ciekaw jakie ta prosta strategia przyniesie efekty, gdy dołożymy warunek zajmowania pozycji tylko kiedy jest trend wzrostowy.
Jak to zakodować?

chilltrade
0
Dołączył: 2013-01-15
Wpisów: -39
Wysłane: 10 lutego 2013 23:34:05
zależy jak określasz trend

cyzo
3
Grupa: SubskrybentP1
Dołączył: 2009-06-17
Wpisów: 753
Wysłane: 12 lutego 2013 08:52:00
No... i tu zaczynają się schody. Chcąc utrzymać prostotę systemu dodałem warunek kupna, w którym cena ma się utrzymywać powyżej średniej z X okresów :
np. CLOSE>EMA(C,200)

Niestety za równo ta długość średniej jak i inne tylko pogorszają wyniki. Co prawda ilość transakcji znacznie spada... ale chyba nie tędy droga.

chilltrade
0
Dołączył: 2013-01-15
Wpisów: -39
Wysłane: 12 lutego 2013 09:39:20
Cytat:
PositionScore = 100-RSI(); // prefer stocks that have low RSI


To jest niezbyt mądre, spóły o niskim RSI nie rosną, więc nie kupujesz spółek rosnących. RSI wysokie znaczy że spółka rośnie. RSI - relative strength index - indeks siły reletywnej jak sama nazwa wskazuje, kupuj albo silniejsze albo nie dawaj wcale warunku z RSI, ale na pewno nie słabsze ! ;]

Może się wydawać że RSI uratuje Cię przed kupnem na górce, a tak naprawdę uniemożliwia kupno tego co rośnie.
Możesz najwyżej pooptymalizować sobie RSI i zobaczyć jakie wartości dla Twojej strategii są najlepsze.

toopaz
0
Dołączył: 2009-05-20
Wpisów: 19
Wysłane: 12 lutego 2013 22:11:24
spróbuję to wyjaśnić jak ja to widzę i robię
- zawsze ustalam parametry strategi w zależności od kapitału jaki posiadam niżej jako przykład

kliknij, aby powiększyć

następnie szukam sygnałów poprzez explore - niżej przykład z dzisiaj

kliknij, aby powiększyć

po wybraniu spółki kupuję ją po sygnale na drugi dzień z limitem ceny close z dnia sygnału

kliknij, aby powiększyć

jak widać jest stop początkowy, zwykle ok 4 d0 6% w zależności od zaangażowanego kapitału i stopnia ryzyka a tak działa stop początkowy

kliknij, aby powiększyć

jeżeli wszystko idzie po naszej myśli to zyski rosną

kliknij, aby powiększyć

lub zadziała stop kroczący, też ustalamy w zależności od naszej strategii, nie za mały bo nas wywali i nie za duży bo są straty, trudno tutaj radzić ja mam ok. 7 do 9%

kliknij, aby powiększyć

podaję to jako przykłady i mam nadzieję, że przyczyniłem się do wyjaśnienia pewnych problemów opisanych w postach wyżej
opisałem to bo zamieściłem przykład takiej formuły, która nie jest pełna, bo jest rozbudowana o te elementy które podałem i jeszcze kilka, których nie mogę podać
nie wiem, czy dobrze zrobiłem z tymi linkami i czy wszystko będzie widać?
pozdrawiam
Edytowany: 12 lutego 2013 22:36

cyzo
3
Grupa: SubskrybentP1
Dołączył: 2009-06-17
Wpisów: 753
Wysłane: 13 lutego 2013 22:53:27
Cześć,

Podczas zabawy parametrami prostego systemu wybicia z kanału udało mi się z 10 tyś zrobić 40 mln:)
Ustawiłem abstrakcyjnego stopa na poziomie 0.1*ATR(14) - ale wynik w raporcie jest.

Moje pytanie:
1. Co jest nie tak z tym systemem? - czego nie widzę? co generuje takie abstrakcyjne wyniki?
2. Po ustawieniu kupna po cenienie OPEN na następnej sesji po wystąpieniu sygnału wyniki systemu "padają na pysk". Dla czego?

Wycinek raportu:
Net Profit % 398603.32 %
Annual Return % 70.09 %
Winners 246 (91.45 %)
Max. system % drawdown -8.22 %

Mój kod (część twórczości należy do Chill'a:) ): - przykład na podstawie KGHM.
pds=9;
Maxpdsdni=Ref(HHV(H,pds),-1);
warKup=Cross(C,Maxpdsdni);

SL=0.1*ATR(14);



Buy=warKup;
Sell=0;
ApplyStop(2,2,SL,1);



Plot(Maxpdsdni,"DU",colorBlue,styleLine);

//ta sekcja wstawia wykres cenowy
_SECTION_BEGIN("Price");
//SetTradeDelays(1,1,1,1);//kupno na następnej sesji po sygnale
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{Name}} – {{Interval}} {{Date}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();

Pzdr.,
Cyzo

anty_teresa
PREMIUM
522
Grupa: Zespół StockWatch.pl
Dołączył: 2008-10-24
Wpisów: 11 191
Wysłane: 13 lutego 2013 23:48:31
Coś mi się wydaje, że ten stop co stworzyłeś wychodzi tego samego dnia po minimum z sesji. Wstaw długość przebywania na pozycji average bars held

chilltrade
0
Dołączył: 2013-01-15
Wpisów: -39
Wysłane: 14 lutego 2013 00:11:01
Cytat:
2. Po ustawieniu kupna po cenienie OPEN na następnej sesji po wystąpieniu sygnału wyniki systemu "padają na pysk". Dla czego?


a jak jest teraz ustawione? Close bez przesunięcia czasowego? Czy Open bez przesunięcia czasowego?

Bo jeśli Open, to znaczy że jeżeli system na koniec dnia daje sygnał kupna to Ty kupujesz go po cenie otwacia, zanim sygnał padł, więc dużo niżej ;]

cyzo
3
Grupa: SubskrybentP1
Dołączył: 2009-06-17
Wpisów: 753
Wysłane: 14 lutego 2013 09:16:47
anty_teresa napisał(a):
Coś mi się wydaje, że ten stop co stworzyłeś wychodzi tego samego dnia po minimum z sesji. Wstaw długość przebywania na pozycji average bars held


No własnie stop działa na następnej sesji od wystąpienia sygnału. Wydaje mi się, że stop jest po prostu mierzony od wartości H danej swieczki i nie bierze pod uwagę zdarzeń w trakcie sesji, gdzie L było znacznie niżej od ceny otwarcia.

chilltrade napisał(a):
a jak jest teraz ustawione? Close bez przesunięcia czasowego? Czy Open bez przesunięcia czasowego?

Dobre wyniki wychodziły przy OPEN bez przesunięcia czasowego.
Złe wyniki przy OPEN z przesunięciem o 1 dzień.

Jaka w takim razie jest "lepsza" praktyka do testów - ustawiać OPEN czy CLOSE i na tej samej sesji czy na następnej?
Oczywiście chodzi o krótko/średnio terminowy system (max do 2 tyg.) grania z trendem. Po wystąpieniu sygnału mam możliwość faktycznie zająć pozycję na tej samej sesji po cenie CLOSE lub na nastęnej po OPEN.

Pzdr.,

Użytkownicy przeglądający ten wątek Gość


1 2 3 4 5

Na silniku Yet Another Forum.net wer. 1.9.1.8 (NET v2.0) - 2008-03-29
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.
Czas generowania strony: 0,463 sek.

lqpjnkyr
vbgaqmfc
mulqwzip
Portfel StockWatch
Data startu Różnica Wartość
Portfel 4 fazy rynku
01-01-2017 +75 454,67 zł +377,27% 95 454,67 zł
Portfel Dywidendowy
03-04-2020 +60 637,62 zł 254,44% 125 556,00 zł
Portfel ETF
01-12-2023 +4 212,35 zł 20,98% 24 333,09 zł
mxrbgvqb
ibkpkwcs
cookie-monstah

Serwis wykorzystuje ciasteczka w celu ułatwienia korzystania i realizacji niektórych funkcjonalności takich jak automatyczne logowanie powracającego użytkownika czy odbieranie statystycznych o oglądalności. Użytkownik może wyłączyć w swojej przeglądarce internetowej opcję przyjmowania ciasteczek, lub dostosować ich ustawienia.

Dostosuj   Ukryj komunikat