Najwyższa cena od otwartego zlecenia

O jezykach programowania w platformach i nie tylko.
Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Najwyższa cena od otwartego zlecenia

Nieprzeczytany post autor: Kris82 »

Witam serdecznie,

W jaki sposób mogę obliczyć najwyższą cenę od otwartego zlecenia. Dokładnie rzecz biorąc myślałem na tym aby zrobić taki ruchomy takeprofit.
Miał by on działać w następujący sposób:

Mam otwarte zlecenie sprzedaży na 1.6600 załóżmy ze cena wzrosła do poziomu 1.7600 i chciałbym aby został ustawiony takeprofit na poziomie 1.5600 czyli od ceny otwarcia zlecenia odejmuję najwyższą cenę, po czym dodaje do ceny otwarcia różnice uzyskując w ten sposób wartość jaka ma być przypisana do takeprofit.

Nie wiem jak obliczyć ihightes od konkretnego otwartego zlecenia.

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

Re: Najwyższa cena od otwartego zlecenia

Nieprzeczytany post autor: personov »

Musisz utworzyć zmienną

Kod: Zaznacz cały

double high;
I teraz nadpisujesz tą wartość :

Kod: Zaznacz cały

if(Bid>high)high=Bid;
Ta wartość high będzie zawsze tą najwyższą jaką osiągnęła cena.
Tylko musisz pomyśleć nad tym, żeby nie nadpisywało zawsze tylko wtedy kiedy chcesz np. odkąd jest otwarte zlecenie do czasu jak zlecenie zostanie zamknięte. Wtedy zerujesz

Kod: Zaznacz cały

high=0;
Solą życia jest kasa.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Najwyższa cena od otwartego zlecenia

Nieprzeczytany post autor: ninjaproject »

personov pisze:
04 paź 2020, 21:03
Musisz utworzyć zmienną

Kod: Zaznacz cały

double high;
I teraz nadpisujesz tą wartość :

Kod: Zaznacz cały

if(Bid>high)high=Bid;
Ta wartość high będzie zawsze tą najwyższą jaką osiągnęła cena.
Tylko musisz pomyśleć nad tym, żeby nie nadpisywało zawsze tylko wtedy kiedy chcesz np. odkąd jest otwarte zlecenie do czasu jak zlecenie zostanie zamknięte. Wtedy zerujesz

Kod: Zaznacz cały

high=0;
Bez sensu.
Napisałeś tyle, że Bid=Bid.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Najwyższa cena od otwartego zlecenia

Nieprzeczytany post autor: ninjaproject »

Trzeba według czasu otwarcia zlecenia odczytać index świecy z funkcji iBarShift().
I wtedy odszukać wartość iHighest(), lub iLowest().
A czas otwarcia zlecenia trzeba odczytać z takiej bardziej złożonej pętli.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

Kris82
Stały bywalec
Stały bywalec
Posty: 34
Rejestracja: 11 lip 2012, 00:27

Re: Najwyższa cena od otwartego zlecenia

Nieprzeczytany post autor: Kris82 »

Problem częściowo rozwiązany, skrypt działa prawidłowo. Czy może mi ktoś pomóc umieścić to w pętli tak aby każde otwarte zlecenie miało zmodyfikowany TakeProfit. Zgodnie z tym założeniem
Mam otwarte zlecenie sprzedaży na 1.6600 załóżmy ze cena wzrosła do poziomu 1.7600 i chciałbym aby został ustawiony takeprofit na poziomie 1.5600 czyli od ceny otwarcia zlecenia odejmuję najwyższą cenę, po czym dodaje do ceny otwarcia różnice uzyskując w ten sposób wartość jaka ma być przypisana do takeprofit.

Kod: Zaznacz cały

void OnStart()
  {
   int Ticket = 63964457; // numer zlecenia, w moim przypadku jest to Sell

   if(OrderSelect(Ticket, SELECT_BY_TICKET) == true)
     {
      datetime CurrentOpenTime = OrderOpenTime();
      int      shift=iBarShift("EURUSD",PERIOD_M5,CurrentOpenTime);
      
      Print("Czas otwarcia pozycji ",Ticket," jest ",CurrentOpenTime,".");
      Print("Ilosc barów od otwartej pozycji do obecnego czasu ",TimeToStr(CurrentOpenTime)," is ",shift);
      
 
      int indexBarHighestOpen   = iHighest("EURUSD", PERIOD_M5, MODE_OPEN,   shift, 0);
      Print("Najwyższy bar ",indexBarHighestOpen);
      double openPrice = iHigh("EURUSD", PERIOD_M5, indexBarHighestOpen);
      Print("Cena najwyższego baru ",openPrice);
     }
   else
      Print("Nie udało się wybrać pozycję ",Ticket,". Błąd = ",GetLastError());
      RefreshRates();
  }

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Najwyższa cena od otwartego zlecenia

Nieprzeczytany post autor: ninjaproject »

Kris82 pisze:
05 paź 2020, 15:27
Problem częściowo rozwiązany, skrypt działa prawidłowo. Czy może mi ktoś pomóc umieścić to w pętli tak aby każde otwarte zlecenie miało zmodyfikowany TakeProfit. Zgodnie z tym założeniem
Mam otwarte zlecenie sprzedaży na 1.6600 załóżmy ze cena wzrosła do poziomu 1.7600 i chciałbym aby został ustawiony takeprofit na poziomie 1.5600 czyli od ceny otwarcia zlecenia odejmuję najwyższą cenę, po czym dodaje do ceny otwarcia różnice uzyskując w ten sposób wartość jaka ma być przypisana do takeprofit.

Kod: Zaznacz cały

void OnStart()
  {
   int Ticket = 63964457; // numer zlecenia, w moim przypadku jest to Sell

   if(OrderSelect(Ticket, SELECT_BY_TICKET) == true)
     {
      datetime CurrentOpenTime = OrderOpenTime();
      int      shift=iBarShift("EURUSD",PERIOD_M5,CurrentOpenTime);
      
      Print("Czas otwarcia pozycji ",Ticket," jest ",CurrentOpenTime,".");
      Print("Ilosc barów od otwartej pozycji do obecnego czasu ",TimeToStr(CurrentOpenTime)," is ",shift);
      
 
      int indexBarHighestOpen   = iHighest("EURUSD", PERIOD_M5, MODE_OPEN,   shift, 0);
      Print("Najwyższy bar ",indexBarHighestOpen);
      double openPrice = iHigh("EURUSD", PERIOD_M5, indexBarHighestOpen);
      Print("Cena najwyższego baru ",openPrice);
     }
   else
      Print("Nie udało się wybrać pozycję ",Ticket,". Błąd = ",GetLastError());
      RefreshRates();
  }
Oczywiście, że mogę napisać ci EA z taką funkcjonalnością.
Skontaktuj się ze mną na PW.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

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

Re: Najwyższa cena od otwartego zlecenia

Nieprzeczytany post autor: personov »

ninjaproject pisze:
04 paź 2020, 22:49
personov pisze:
04 paź 2020, 21:03
Musisz utworzyć zmienną

Kod: Zaznacz cały

double high;
I teraz nadpisujesz tą wartość :

Kod: Zaznacz cały

if(Bid>high)high=Bid;
Ta wartość high będzie zawsze tą najwyższą jaką osiągnęła cena.
Tylko musisz pomyśleć nad tym, żeby nie nadpisywało zawsze tylko wtedy kiedy chcesz np. odkąd jest otwarte zlecenie do czasu jak zlecenie zostanie zamknięte. Wtedy zerujesz

Kod: Zaznacz cały

high=0;
Bez sensu.
Napisałeś tyle, że Bid=Bid.
Nieprawda. Ten zapis mówi dokładnie, że jeśli aktualna cena jest wyższa od zapisanej "high" to zapisz "high" jako aktualną cenę.
Czyli "high" będzie zawsze uaktualniane jeśli cena będzie wyższa. "High" będzie zawsze najwyższą ceną jaka wystąpiła.
Solą życia jest kasa.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 4944
Rejestracja: 30 lip 2019, 13:15

Re: Najwyższa cena od otwartego zlecenia

Nieprzeczytany post autor: ninjaproject »

personov pisze:
06 paź 2020, 00:12
ninjaproject pisze:
04 paź 2020, 22:49
personov pisze:
04 paź 2020, 21:03
Musisz utworzyć zmienną

Kod: Zaznacz cały

double high;
I teraz nadpisujesz tą wartość :

Kod: Zaznacz cały

if(Bid>high)high=Bid;
Ta wartość high będzie zawsze tą najwyższą jaką osiągnęła cena.
Tylko musisz pomyśleć nad tym, żeby nie nadpisywało zawsze tylko wtedy kiedy chcesz np. odkąd jest otwarte zlecenie do czasu jak zlecenie zostanie zamknięte. Wtedy zerujesz

Kod: Zaznacz cały

high=0;
Bez sensu.
Napisałeś tyle, że Bid=Bid.
Nieprawda. Ten zapis mówi dokładnie, że jeśli aktualna cena jest wyższa od zapisanej "high" to zapisz "high" jako aktualną cenę.
Czyli "high" będzie zawsze uaktualniane jeśli cena będzie wyższa. "High" będzie zawsze najwyższą ceną jaka wystąpiła.
OK, ale to nie tak się robi.
Napisałem jak to się robi.
EA powinno:
1. Stawiać zlecenie, np. na kliknięcie na guziku (i tu można dodać całe zarzadzanie ryzykiem),
2. Jak stawia zlecenie, to można dodać magic number i nawet komentarz.
3. Następnie, EA w pętli przeszukuje otwarte zlecenia.
4. Identyfikuje tylko te, które mają zadany magic number, symbol (na którym EA działa), i ew. komentarz.
5. Odczytuje czas zlecenia (OrderOpenTime()).
6. Odczytuje index świecy zlecenia z iBarShift().
7. Odczytuje cenę najwyższą z iHigh(iHighest()) w zakresie od indexu świecy zlecenia do np. świecy 1, lub 0.
8. Wykonuje co trzeba.
Trejder, Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4/5.

ODPOWIEDZ