mała modyfikacja - problem

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
kris007
Pasjonat
Pasjonat
Posty: 551
Rejestracja: 23 sty 2008, 22:50

mała modyfikacja - problem

Nieprzeczytany post autor: kris007 »

mam nadzieję że luktom nie będzie miał nic przeciwko ale chciałem nieco dostosować do swich potrzeb jego dzieło: luktom visual order editor,
konkretnie chodzi mi o trailingstop który obecnie rusza jak tylko zlecenie wychodzi na plus utrzymując określoną odległość, ja bym chciał aby ruszał w chwili gdy cena jest ponad określoną wartość trail ale liczoną od otwarcia zlecenia a nie od SL i tu może to proste ale coś mi nie wychodzi.

Kod: Zaznacz cały

      if(OrderStopLoss()>0 || default_sl_level>0) {
       if(ObjectFind("lvoe_sl_" + OrderTicket())==-1) {
       
        if(OrderStopLoss()==0) {
         ObjectCreate("lvoe_sl_" + OrderTicket(),OBJ_HLINE,0,Time[0],OrderOpenPrice()-orderDir(OrderType())*default_sl_level*Point);
        } else {
         ObjectCreate("lvoe_sl_" + OrderTicket(),OBJ_HLINE,0,Time[0],OrderStopLoss());
        }
        ObjectSet("lvoe_sl_" + OrderTicket(),OBJPROP_COLOR,sl_color); 
        ObjectSet("lvoe_sl_" + OrderTicket(),OBJPROP_STYLE,sl_style); 
        if(default_trailing_stop>0) {
          ObjectSetText("lvoe_sl_" + OrderTicket(),"#"+OrderTicket()+" stop loss, ts="+default_trailing_stop,11);
        } else {
          ObjectSetText("lvoe_sl_" + OrderTicket(),"#"+OrderTicket()+" stop loss",11);
        }
       
       } else {

        int tspos=StringFind(ObjectDescription("lvoe_sl_"+OrderTicket()),"ts=");

        if(tspos!=-1) {
            int ts=StrToInteger(StringSubstr(ObjectDescription("lvoe_sl_"+OrderTicket()),tspos+3));

            if(OrderType()==OP_BUY) {
                 if(Bid-OrderStopLoss()>ts*Point) {  //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                       ObjectSet("lvoe_sl_"+OrderTicket(),OBJPROP_PRICE1,Bid-ts*Point);
                 }
            }

            if(OrderType()==OP_SELL) {
                 if(OrderStopLoss()-Ask>ts*Point) { //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                       ObjectSet("lvoe_sl_"+OrderTicket(),OBJPROP_PRICE1,Ask+ts*Point);
                       
                 }
            }
        }
próbowałem zmienić to tak

Kod: Zaznacz cały

            if(OrderType()==OP_BUY) {
                 if(Bid-OrderOpenPrice()>ts*Point) { //<<<<<<<<<<<<<<<<<<<<<< tu zmieniłem <<<<<<<
                       ObjectSet("lvoe_sl_"+OrderTicket(),OBJPROP_PRICE1,Bid-ts*Point);
                 }
            }

            if(OrderType()==OP_SELL) {
                 if(OrderOpenPrice()-Ask>ts*Point) { //<<<<<<<<<<<<<<<<<<<<<< tu zmieniłem <<<<<<<
                       ObjectSet("lvoe_sl_"+OrderTicket(),OBJPROP_PRICE1,Ask+ts*Point);
i w sumie działa, gdyby nie mały drobiazg, otóż jak cena się cofa to to Trail też sie cofa zamiast zostać na ostatniej wartości, może ktoś podpowie co tu zmienić aby było dobrze.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Kod: Zaznacz cały

if(OrderType()==OP_BUY) {
                 if(Bid>=OrderOpenPrice()+trial*Point) {
                       ObjectSet("lvoe_sl_"+OrderTicket(),OBJPROP_PRICE1,Bid-ts*Point);
                 }
            }

            if(OrderType()==OP_SELL) {
                 if(Ask<=OrderOpenPrice()-trial*Point) {
                       ObjectSet("lvoe_sl_"+OrderTicket(),OBJPROP_PRICE1,Ask+ts*Point);
Nie zapomnij dodać zmiennej trial na początku kodu jako extern int
Trial będzie poziomem aktywacji liczonej od ceny otwarcia, po której będzie zaczynał działać trailing stop.
Solą życia jest kasa.

Awatar użytkownika
kris007
Pasjonat
Pasjonat
Posty: 551
Rejestracja: 23 sty 2008, 22:50

Nieprzeczytany post autor: kris007 »

no niestety, inaczej zapisane ale dokładnie tak samo się zachowuje, gdy cena sie cofa, cofa trail do tyłu, kurcze o coś innego pewnie chodzi, ale dziwne że liczone od OrderStopLoss() nie cofa a od OrderOpenPrice() tak

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Musi działać. Ten temat wałkowałem już tydzień temu, testowałem i wszystko gra. Jeśli dodasz trial do extern int :

Kod: Zaznacz cały

extern bool   use_cl=false;
extern int    default_cl_level=200;

extern bool   delete_on_deinit=true;

extern int    default_trailing_stop=10;
extern int    trial=25;
to zmienna "trial" będzie poziomem aktywacji, a zmienna "default_trailing_stop" będzie odległością kroczenia lini SL za ceną.
Zmienną "trial" możesz sobie nazwać jak chcesz :)
Solą życia jest kasa.

Awatar użytkownika
kris007
Pasjonat
Pasjonat
Posty: 551
Rejestracja: 23 sty 2008, 22:50

Nieprzeczytany post autor: kris007 »

no wszystko rozumiem ale naprawdę sie cofa :)

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Jutro wieczorem jeszcze potestuję. Ale jedno mnie zastanawia :
Linijka kodu :

Kod: Zaznacz cały

if(Bid>=OrderOpenPrice()+trial*Point)
odpowiada za to kiedy trailing stop ma się uruchomić, a linijka :

Kod: Zaznacz cały

ObjectSet("lvoe_sl_"+OrderTicket(),OBJPROP_PRICE1,Bid-ts*Point);
odpowiada za samo działanie funkcji trailing stop i kroczenie SL.
Więc skoro w drugiej linijce nic nie zmieniamy to dlaczego w oryginalnym pliku SL się nie cofa ?
Solą życia jest kasa.

Awatar użytkownika
kris007
Pasjonat
Pasjonat
Posty: 551
Rejestracja: 23 sty 2008, 22:50

Nieprzeczytany post autor: kris007 »

ach gdybym ja to wiedział to bym tego postu nie zakładał :)
w każdym razie pozornie nieistotna zmiana OrderStopLoss() na OrderOpenPrice() poza samym sposobem obliczenia kiedy ma ruszyć trail, najwyraźniej ma jakiś wpływ na to, może coś sie jeszcze odwołuje do tego OrderStopLoss() a po zmianie już nie ma kontroli i cofa trail, nie wiem, brak mi pomysłu i strzelam.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Sprawdzałem teraz moją wersję i u mnie się nie cofa. Jak cena minie mój poziom to SL przesuwa się na odpowiednią pozycję ,a cena jak wraca to SL pozostaje na tym samym miejscu. Żeby rozwiać wątpliwości załączam plik z przerobionym prze ze mnie TS.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Solą życia jest kasa.

Awatar użytkownika
kris007
Pasjonat
Pasjonat
Posty: 551
Rejestracja: 23 sty 2008, 22:50

Nieprzeczytany post autor: kris007 »

personov pisze:Sprawdzałem teraz moją wersję i u mnie się nie cofa. Jak cena minie mój poziom to SL przesuwa się na odpowiednią pozycję ,a cena jak wraca to SL pozostaje na tym samym miejscu. Żeby rozwiać wątpliwości załączam plik z przerobionym prze ze mnie TS.
no ok, w kodzie dokladnie tak samo jak robiłem i dzieje się na tym Twoim tak samo jak wspominałem, no pewnie Cię to dziwi ale zerknij na zrzuty, zrobione są na szybko, małe wahania są obecnie ale widać ruch w górę.
Niesprawdziłem tylko jednego, czy na buy też tak się dzieje.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

A u mnie się nie cofa :)
Różnica w naszych testach jest tylko taka, że ja testowałem tylko na BUY i u brokera czterocyfrowego.
Może ktoś jeszcze przetestuje ? Są chętni ?
Może nich się wypowie Cavajero, bo to dla niego przerabiałem ten plik i podobno działa bez zarzutu. Jak chcesz kris007 to napisz do niego na PW.
Ostatnio zmieniony 23 lis 2010, 23:06 przez personov, łącznie zmieniany 2 razy.
Solą życia jest kasa.

ODPOWIEDZ