Dlaczego nie działa?

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
profession
Pasjonat
Pasjonat
Posty: 503
Rejestracja: 19 mar 2008, 08:44

Dlaczego nie działa?

Nieprzeczytany post autor: profession »

Mam pewien fragment wycięty z EA, który nie działa tak jak powinien. Moja platforma nie pozwala na otwieranie zlecenia wraz z TP i SL dlatego chce modyfikować SL tak by działał jak TrallingStop. Chce by zaraz po otworzeniu pozycji ustawiałk SL na pewną wartość a potem przesuwało ją jeśli cena będzie się poruszać w oczekiwanym przeze mnie kierunku. Pozycja ma być zamknięta przez ten SL. I owszem poniższy kod tak działa jednak zauważyłem, że EA stawia SL po kilku godzinach od otwarcia pozycji dlaczego? Czy zaznaczone na czerwono Bid i Ask są prawidłowo?

Jeśli nie chce wam się modyfikować proszę o kod: Po otworzeniu pozycji odrazu za pomocą modyfikacji ustawiam SL X pipsów od otwarcia. Następnie SL wędruje wraz z ceną (Trailing stop o wartości X pipsów.)

Dzięki i pozdrawiam.

p.s. Chodzi o Najprostszy możliwy Traaling Stop bo w necie jest ich wiele jednak są bardziej skomplikowane.

Nie jestem biegły w programowaniu, pewnie są tu jakies podstawowe błedy logiczne.
void TrailingStairs(int ticket,int trldistance)
{
int Spred=Ask - Bid;
if (OrderType()==OP_BUY)
{
/* if((Bid-OrderOpenPrice())>(Point*trldistance))
{ */
if(OrderStopLoss()<Ask-Point*trldistance || (OrderStopLoss()==0))
{
OrderModify(ticket,OrderOpenPrice(),Ask-Point*trldistance,OrderTakeProfit(),0,Green);
if (PolLots)
if (NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT))
{
OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Bid,3,Green);
}
else
{
OrderClose(ticket,OrderLots(),Bid,3,Green);
}
/* }*/
}
}
else
{
/* if((OrderOpenPrice()-Ask)>(Point*trldistance))
{ */
if((OrderStopLoss()>(Bid+Point*trldistance)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Point*trldistance,OrderTakeProfit(),0,Red);
if (PolLots)
if (NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT))
{
OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Ask,3,Green);
}
else
{
OrderClose(ticket,OrderLots(),Ask,3,Green);
}
}
/* } */
}
}

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

Nieprzeczytany post autor: personov »

profession pisze:Moja platforma nie pozwala na otwieranie zlecenia wraz z TP i SL dlatego chce modyfikować SL tak by działał jak TrallingStop.
??!!
A Twoja platforma wogóle obsluguje strategie w języku MQL4 ?
Solą życia jest kasa.

Awatar użytkownika
CoVal
Gaduła
Gaduła
Posty: 320
Rejestracja: 06 paź 2005, 22:45

Nieprzeczytany post autor: CoVal »

To, ze twoja platforma nie pozwala na jednoczesne otwarcie pozycji i ustawienie SL&TP nie jest dziwne - wielu brokerow ma to tak zorganizowane.

A dlaczego ci nie modyfikuje ?
trudno powiedziec... pare pomyslow:

1 - dla porzadku - moglbys powyrzucac z tego co wkleiles wszystkie te czesci ktore nie sa kodem a tylko komentarzem do kodu - to troche zaciemnia czytanie kodu...

2 - problem moze tkwic nie w samej twojej funkcji TrailingStair() ale w kodzie funkcji nadrzednej ktora ja wywoluje.

3 - istotne sa takie wartosci jak parametr funkcji: int trldistance...
bo moze on po prostu jest zbyt maly dla tej strategii i tego brokera.
jezeli np. spread masz 3 pips a broker nie pozwala ustawic SL blizej niz np. 5 pips, to ty liczac SL dla longa od ceny ASK (dlaczego nie BID ?) od razu widac, ze trldistance > 8... czy tak na pewno masz ?

4 - przede wszystkim zobacz czy w dzienniku system zwraca ci jakies informacje o bledach ? to najlesze zrodlo informacji o bledach... jesli zwraca, to jakie ?

5 - sam kod:

Kod: Zaznacz cały

 if(OrderStopLoss()<Ask-Point*trldistance || (OrderStopLoss()==0)) 
            { 
             OrderModify(ticket,OrderOpenPrice(),Ask-Point*trldistance,OrderTakeProfit(),0,Green); 
wydaje sie byc w porzadku, ale nigdzie nie okreslasz na ktorej z pozycji chcesz zmienic SL - dlatego tez przed powyzszym kodem proponuje wybor otwartej pozycji przy pomocy funkcji:

Kod: Zaznacz cały

OrderSelect()
6 - taka dodatkowa sugestia - pisanie kazdej z linii kodu ktory ma wiele IF-ow i innych funkcji analizuje sie o wiele lepiej jezeli zapiszesz je z odpowiednimi wcieciami, np. cos takiego:

Kod: Zaznacz cały

void TrailingStairs(int ticket,int trldistance) 
      { 
       int Spred=Ask - Bid; 
       if (OrderType()==OP_BUY) 
          { 
           if(OrderStopLoss()<Ask-Point*trldistance || (OrderStopLoss()==0)) 
            { 
             OrderModify(ticket,OrderOpenPrice(),Ask-Point*trldistance,OrderTakeProfit(),0,Green); 
             if(PolLots) 
                if(NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT)) 
                  { 
                   OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Bid,3,Green); 
                  } 
                else 
                  { 
                   OrderClose(ticket,OrderLots(),Bid,3,Green); 
                  } 
            } 
          } 
        else 
          { 
           if((OrderStopLoss()>(Bid+Point*trldistance)) || (OrderStopLoss()==0)) 
             { 
              OrderModify(OrderTicket(),OrderOpenPrice(),Bid+Point*trldistance,OrderTakeProfit(),0,Red); 
              if(PolLots) 
                if(NormalizeDouble(OrderLots()/2,2)>MarketInfo(Symbol(), MODE_MINLOT)) 
                  { 
                   OrderClose(ticket,NormalizeDouble(OrderLots()/2,2),Ask,3,Green); 
                  } 
                else 
                  { 
                   OrderClose(ticket,OrderLots(),Ask,3,Green); 
                  } 
             } 
          } 
       }
- wtedy od razu widac ktore nawiasy naleza do ktorego warunku i jaka jest wzajemna zaleznosc poszczegolnych wielostopniowych warunkow....
(tak na marginesie - w powyzszym przypadku mozesz pominac wszystkie nawiasy klamrowe ktore obejmuja tylko jedna linie kodu).

pzdr,

CoVal

Awatar użytkownika
mike_05
Maniak
Maniak
Posty: 1668
Rejestracja: 02 wrz 2010, 11:55

Nieprzeczytany post autor: mike_05 »

A nie lepiej, skoro broker nie przyjmuje zlecenia "kompleksowego", wybrać stopniowanie zlecenia przez złożenie bez SL i TP i po zatwierdzeniu przez serwer, modyfikacja pozycji SL i TP?

tak pracuje wiele EA
Jeżeli chcesz odnieść sukces, naucz się cenić ludzi.

Awatar użytkownika
NiceFox
Pasjonat
Pasjonat
Posty: 454
Rejestracja: 05 lis 2009, 13:22

Nieprzeczytany post autor: NiceFox »

sprawdź u innego brokera czy działa, powodem może być używanie plugina blokującego czasowo niektóre funkcje mql-a.
Pieniądze rosną na drzewie cierpliwości.

ODPOWIEDZ