PARTNER SERWISU
chdsqljr

Amibroker. Zastąpienie trailingstopa stopem na sztywno.

endriu11111111
0
Dołączył: 2011-05-01
Wpisów: 6
Wysłane: 2 kwietnia 2015 13:08:40
W poniższym kodzie...:

twojezyskinagieldzie.pl/zarzad...

Kod:
wstop = 0.05*Close;

Plot(Close,"Close",colorBlack,styleCandle);

ma1 = MA(Close,21);
ma2 = MA(Close,55);

Plot(ma1,"",colorRed);
Plot(ma2,"",colorBlue);

Buy = Cross(ma1,ma2);
BuyPrice = Close;
Sell = 0;
SellPrice = Close;
SetTradeDelays(0,0,0,0);

//ApplyStop(stopTypeTrailing,stopModePoint,wartstop);

LiniaStop = Null;
pozycja = 0;
wartoscStop = 0;

for(i=0; i<BarCount; i++)
{
    if(Buy[i]==1)
    {
        pozycja = 1;
        wartoscStop = Close[i]-wstop[i];
    }
    if(pozycja == 1 AND Close[i]<=wartoscStop)
    {
        Sell[i] = 1;
        pozycja = 0;
    }
    if(Close[i]-wstop[i]>wartoscStop)
        wartoscStop = Close[i]-wstop[i];
    
    if(pozycja == 1)
        LiniaStop[i] = wartoscStop;
}

PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeHollowDownArrow,colorGreen,0,High);

Plot(LiniaStop,"",colorRed,styleDots);

SetPositionSize(1,spsShares);


... Pan Rafał Wysocki w prostym systemiku stosuje zwizualizowanie trailingstopa przy pomocy pętli for. Ja chciałbym natomiast poniższy aby w/w systemik reagował nie na trailing tylko na stoploss sztywny.

Wiem, że można by zastosować (ApplyStop,stopModePoint,wartstop) i usunąć całą pętle for, ale wtedy owszem system odpowiedznio działał, ale bez wizualizacji stopa na wykresie. Kombinuję, że aby w tym kodzie uzyskać należało by zamienieć..:

Kod:
LiniaStop[i] = wartoscStop;


..na coś w rodzaju

Kod:
LiniaStop[i] = cena - wstop po której została zawarta ostania transakcja.


... ale po pierwsze nie wiem czy da się coś takiego zrobić, a po drugie nie wiem jak to zapisać.
Edytowany: 2 kwietnia 2015 13:10

3citrony
2
Dołączył: 2009-07-17
Wpisów: 243
Wysłane: 2 kwietnia 2015 13:23:08
Kod:

wstop = 0.05*Close;

Plot(Close,"Close",colorBlack,styleCandle);

ma1 = MA(Close,21);
ma2 = MA(Close,55);

Plot(ma1,"",colorRed);
Plot(ma2,"",colorBlue);

Buy = Cross(ma1,ma2);
BuyPrice = Close;
Sell = 0;
SellPrice = Close;
SetTradeDelays(0,0,0,0);

//ApplyStop(stopTypeTrailing,stopModePoint,wartstop);

LiniaStop = Null;
pozycja = 0;
wartoscStop = 0;

for(i=0; i<BarCount; i++)
{
    if(Buy[i]==1)
    {
        pozycja = 1;
        wartoscStop = Close[i]-wstop[i]; //TU JEST INICJALIZACJA WARTOSCI STOP jako cena close - 0.05*Close
    }
    if(pozycja == 1 AND Close[i]<=wartoscStop)
    {
        Sell[i] = 1;
        pozycja = 0;
    }
    //if(Close[i]-wstop[i]>wartoscStop)
    //    wartoscStop = Close[i]-wstop[i];
   
    if(pozycja == 1)
        LiniaStop[i] = wartoscStop;
}

PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeHollowDownArrow,colorGreen,0,High);

Plot(LiniaStop,"",colorRed,styleDots);

SetPositionSize(1,spsShares);


Nie wiem czy Cie dobrze rozumiem. Ten kod co wkleiłeś ma stopa kroczącego. Tzn. że wartość stop podąża za kursem, gdy ten rośnie. W skrócie wartość stopa jest zmienną. A Ty chcesz by była stałą? Wystarczy więc ją zainicjować wartością, która Cie interesuje, a potem jej nie zmieniać (zakomentować kod który zmienia jej wartość)
Edytowany: 2 kwietnia 2015 13:26

endriu11111111
0
Dołączył: 2011-05-01
Wpisów: 6
Wysłane: 2 kwietnia 2015 13:44:17
Cytat:
Nie wiem czy Cie dobrze rozumiem. Ten kod co wkleiłeś ma stopa kroczącego. Tzn. że wartość stop podąża za kursem, gdy ten rośnie. W skrócie wartość stopa jest zmienną. A Ty chcesz by była stałą? Wystarczy więc ją zainicjować wartością, która Cie interesuje, a potem jej nie zmieniać (zakomentować kod który zmienia jej wartość)


Wielkie dzięki kolego. O to właśnie mi chodziło. A mógłby mi kolega jeszcze pomóc w dopisaniu do tego Exrem, żeby powtórzenie buy nie powodowało skoku sztywnego stopa ?.

images66.fotosik.pl/764/74db81...
Edytowany: 2 kwietnia 2015 13:49


3citrony
2
Dołączył: 2009-07-17
Wpisów: 243
Wysłane: 2 kwietnia 2015 14:36:31
Co chcesz osiągnąć? Dokumentacja ExRem mówi, że ta funkcja usuwa sygnały. A Ty chcesz zostawić coś co Ci się usuwa. Jeśli dobrze rozumiem to wystarczy, że tam, gdzie masz "wartoscStop = 0;" wpiszesz zamiast 0 stopa i zakomentujesz linie "wartoscStop = Close[i]-wstop[i];"

endriu11111111
0
Dołączył: 2011-05-01
Wpisów: 6
Wysłane: 3 kwietnia 2015 12:30:58
Cytat:
Co chcesz osiągnąć? Dokumentacja ExRem mówi, że ta funkcja usuwa sygnały. A Ty chcesz zostawić coś co Ci się usuwa. Jeśli dobrze rozumiem to wystarczy, że tam, gdzie masz "wartoscStop = 0;" wpiszesz zamiast 0 stopa i zakomentujesz linie "wartoscStop = Close[i]-wstop[i];"


Exrem-em chcę wyeliminować powtórzenia sygnałów (ponowne przecięcia EMA w odpowiednim kierunku) w których dochodzi do niepotrzebnego ponownego obliczania stopa (kółka w kolorze czerwonym).

images70.fotosik.pl/766/0dfa2a...
Edytowany: 3 kwietnia 2015 12:31

endriu11111111
0
Dołączył: 2011-05-01
Wpisów: 6
Wysłane: 3 kwietnia 2015 13:47:23
Cytat:
Exrem-em chcę wyeliminować powtórzenia sygnałów (ponowne przecięcia EMA w odpowiednim kierunku) w których dochodzi do niepotrzebnego ponownego obliczania stopa (kółka w kolorze czerwonym).

images70.fotosik.pl/766/0dfa2a...


Udało mi się wyeliminować powtórzenie sygnału przy pomocy Exrem:

Kod:
wstop = 0.05*Close;

Plot(Close,"Close",colorBlack,styleCandle);

ma1 = MA(Close,21);
ma2 = MA(Close,55);

Plot(ma1,"",colorRed);
Plot(ma2,"",colorBlue);

Buy = Cross(ma1,ma2);


BuyPrice = Close;
Sell = 0;
SellPrice = Close;
SetTradeDelays(0,0,0,0);


//ApplyStop(stopTypeTrailing,stopModePoint,wartstop);

LiniaStop = Null;
pozycja = 0;
wartoscStop = 0;

for(i=0; i<BarCount; i++)
{
    if(Buy[i]==1)
    {
        pozycja = 1;
        wartoscStop = Close[i]-wstop[i]; //TU JEST INICJALIZACJA WARTOSCI STOP jako cena close - 0.05*Close
    }
    if(pozycja == 1 AND Close[i]<=wartoscStop)
    {
        Sell[i] = 1;
        pozycja = 0;
    }
    //if(Close[i]-wstop[i]>wartoscStop)
    //    wartoscStop = Close[i]-wstop[i];
   
    if(pozycja == 1)
        LiniaStop[i] = wartoscStop;
}

Buy = ExRem(Buy,Sell);

PlotShapes(Buy*shapeUpArrow,colorGreen,0,Low);
PlotShapes(Sell*shapeHollowDownArrow,colorGreen,0,High);

Plot(LiniaStop,"",colorRed,styleDots);

SetPositionSize(1,spsShares);


Ale dalej nie mam prawidłowo działającej wizualicaji:

images69.fotosik.pl/767/93ae53...
Edytowany: 3 kwietnia 2015 13:59

endriu11111111
0
Dołączył: 2011-05-01
Wpisów: 6
Wysłane: 7 kwietnia 2015 20:03:09
Cytat:
Ale dalej nie mam prawidłowo działającej wizualicaji:


No to może inaczej. Czy ktoś pomoże dopisać do poniższego kodziku warunek sell (bez wizualizacji):

Kod:

ApplyStop(stopTypeLoss,stopModePoint,wstop);
wstop = 0.05*Close;

Plot(Close,"Close",colorBlack,styleCandle);

ma1 = MA(Close,21);
ma2 = MA(Close,55);

Plot(ma1,"",colorRed);
Plot(ma2,"",colorBlue);

Buy = Cross(ma1,ma2);


Taki Sell ... :

Kod:
Sell = wstop;


...nie działa
Edytowany: 7 kwietnia 2015 20:04

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



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,173 sek.

pqncupmh
bcbulhjx
jwpvdlqq
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ł
sfywprau
mgiewfdx
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