JAK TO UGRYŹĆ

O jezykach programowania w platformach i nie tylko.
karus123
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 07 lis 2007, 00:32

JAK TO UGRYŹĆ

Nieprzeczytany post autor: karus123 »

EA pracuje w dwóch kierunkach część transakcji zamyka w proficie a część zostawia. Chodzi mi o złapanie momentu gdy ogólny bilans cyklu jest dodatni i zamknięciu wtedy wszystkiego oraz rozpoczęciu następnego cyklu od nowa. Za chiny ludowe nie wiem jak to ugryźć balance konta caly czas rośnie z tych zamykanych części natomiast equity balansuje ale nigdy nie przekracza aktualnego balance jednak jest taki moment gdy equity jest wyże niż początkowy balance w momencie startu EA. Myślałem o czymś takim by EA sprawdzał poziom balance przed otwarciem pierwszego zlecenia i gdzieś tą wartość zapisywał i traktował w danym cyklu jako wartość stalą a potem cały czas od aktualnego equity ją odejmował i gdy różnica przekroczy wartość zdefiniowaną przez użytkownika nazwijmy ją zysk to EA zamyka wszystko i startuje od nowa np zaczynamy od 1000$ EA to zapisuje ustawiamy warunek zysk 5$ i w momencie gdy equity osiągnie 1000+5 EA zamyka wszystko po czym sprawdza poziom balance teraz jest to już 1005$ i rusza znowu gdy equity dojdzie do 1005+5 znów zamyka wszystko i rozpoczyna nowy cykl. Niestety nie wiem jak to ubrać w kod. Czy mógłby ktoś z was mi wrzucić jak taki kod powinien wyglądać.

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: JAK TO UGRYŹĆ

Nieprzeczytany post autor: z6yszko »

Ja to robię tak:
1. W Init() obliczam

Kod: Zaznacz cały

equity_start = AccountEquity()-currentProfit;
gdzie currentProfit musisz obliczyć ze wszystkich otwartych pozycji (zrób sobie taką procedurę która przeliczy uwzględniając commission i swap). Punkt zamknięcia możesz określić w następujący sposób:

Kod: Zaznacz cały

if (((AccountEquity()/equity_start)-1)*100 >= min_step_profit_perc) {
			CloseAll();
		}
gdzie min_step_profit_perc to parametr, a CloseAll() to własna funkcja zamykająca wszystkie pozycje.
Trzeba jeszcze pamiętać, żeby obliczyć nowe equity_start (w głównej funkcji start())

Kod: Zaznacz cały

if (isOpen() == false) equity_start = AccountEquity();
oczywiście isOpen() to również moja funkcja sprawdzająca czy coś jest otwarte.
A teraz zagadka dla bystrzaków: dlaczego w init() należy zastosować equity_start = AccountEquity()-currentProfit; zamiast po prostu przyjąć AccountEquity()?

karus123
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 07 lis 2007, 00:32

Re: JAK TO UGRYŹĆ

Nieprzeczytany post autor: karus123 »

Dzięki. profit ze wszystkich otwartych ok ale będzie w międzyczasie profit z zamkniętych z zyskiem w danym cyklu i tu już jest problem jak to zapisać by bott zliczał tylko te z danego cyklu czyli sama ta procedurka o której piszesz wymaga rozwiązania

-- Dodano: wt 17-09-2013, 21:53 --

poza tym nie bardzo rozumiem dlaczego używasz tylko equity a nie balance przecież przed otwarciem pierwszego zlecenia jego wartość wynosi 0 i taką samą wartość będzie miało w nowym cyklu na początku. już na samą logikę mi nie pasuje ale może czegoś nie zrozumiałem

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: JAK TO UGRYŹĆ

Nieprzeczytany post autor: z6yszko »

No właśnie nie zrozumiałeś. To działa właśnie tak jak chcesz żeby działało.
Na początku kroku ustawiasz to equity_start, a w trakcie działania po zamknięciu części zyskownych pozycji AccountEquity() będzie już te zamknięte pozycje uwzględniało. Zmienna currentProfit może przyjmować wartości ujemne lub dodatnie. W tym przypadku będą to zazwyczaj wartości ujemne. Ale jak dodasz tę wartość do ciągle rosnącego AccountEquity(), to w pewnym momencie suma będzie większa niż początkowy equity_start. Zakładasz sobie o ile większa (parametr min_step_profit_perc zakłada o ile procent większa) i jak to przeskoczy to zamykasz wszystko i zaczynasz nowy cykl.

A dlaczego używam equity a nie balance - to właśnie moja zagadka :)
Pomęcz się trochę, jutro odpowiem.

Jeśli mimo wszystko nie będziesz wiedział jak to zrobić to napisz. W ostateczności wyślę brakujące funkcje.

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: JAK TO UGRYŹĆ

Nieprzeczytany post autor: JAREK67 »

Ale jeżeli robot staruje to nie ma jeszcze otwartych pozycji. Czyli mozna przyjąć equity_start = Equity(). Nie rozumiem skąd ten current_profit w Init(). Nie ma żadnego profitu na starcie.

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: JAK TO UGRYŹĆ

Nieprzeczytany post autor: z6yszko »

Jarek, pomyśl jeszcze.
Zapewniam że to ma sens :)
Jutro wracam wieczorem, więc jeśli nie zdążę to odpowiem w czwartek rano.

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: JAK TO UGRYŹĆ

Nieprzeczytany post autor: JAREK67 »

Wydaje mi się że samo equity_start = Equity() wystarczy przy starcie robota. Trzeba je zapamiętac i potem się do niego odnosic.

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: JAK TO UGRYŹĆ

Nieprzeczytany post autor: z6yszko »

Żeby poprawnie działało to musi być tak jak napisałem. Dzisiaj już nie opiszę dokładnie o co chodzi, bo jutro czeka mnie podróż i muszę się wyspać.
Odpowiem dokładnie po powrocie.

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: JAK TO UGRYŹĆ

Nieprzeczytany post autor: JAREK67 »

Ja robię tak ja opisałem i działa poprawnie ;)

z6yszko
Gaduła
Gaduła
Posty: 266
Rejestracja: 17 sty 2011, 10:09

Re: JAK TO UGRYŹĆ

Nieprzeczytany post autor: z6yszko »

A co będzie jeśli wyłączysz platformę?

ODPOWIEDZ