JAK TO UGRYŹĆ
JAK TO UGRYŹĆ
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ć.
Re: JAK TO UGRYŹĆ
Ja to robię tak:
1. W Init() obliczam
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:
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())
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()?
1. W Init() obliczam
Kod: Zaznacz cały
equity_start = AccountEquity()-currentProfit;
Kod: Zaznacz cały
if (((AccountEquity()/equity_start)-1)*100 >= min_step_profit_perc) {
CloseAll();
}
Trzeba jeszcze pamiętać, żeby obliczyć nowe equity_start (w głównej funkcji start())
Kod: Zaznacz cały
if (isOpen() == false) equity_start = AccountEquity();
A teraz zagadka dla bystrzaków: dlaczego w init() należy zastosować equity_start = AccountEquity()-currentProfit; zamiast po prostu przyjąć AccountEquity()?
Re: JAK TO UGRYŹĆ
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
-- 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
Re: JAK TO UGRYŹĆ
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.
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.
Re: JAK TO UGRYŹĆ
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.
Re: JAK TO UGRYŹĆ
Jarek, pomyśl jeszcze.
Zapewniam że to ma sens
Jutro wracam wieczorem, więc jeśli nie zdążę to odpowiem w czwartek rano.
Zapewniam że to ma sens

Jutro wracam wieczorem, więc jeśli nie zdążę to odpowiem w czwartek rano.
Re: JAK TO UGRYŹĆ
Wydaje mi się że samo equity_start = Equity() wystarczy przy starcie robota. Trzeba je zapamiętac i potem się do niego odnosic.
Re: JAK TO UGRYŹĆ
Ż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.
Odpowiem dokładnie po powrocie.
Re: JAK TO UGRYŹĆ
Ja robię tak ja opisałem i działa poprawnie 

Re: JAK TO UGRYŹĆ
A co będzie jeśli wyłączysz platformę?