Max wielkość lota

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Max wielkość lota

Nieprzeczytany post autor: personov »

Proszę o podpowiedź jakim wyrażeniem mogę ująć max wielkość lota w stosunku do aktualnego balance. Chcę, żeby EA otwierało pozycję "za wszystko co ma". Np. poziom balance wynosi 3450 PLN, 0.1 lota ( min. wielkość) kosztuje 300 PLN. Jak podzielę balance/300 to wyjdzie 1.1 lota, ale zostaje reszta. W jaki sposób EA ma wiedzieć, że ma otworzyć tylko 1.1 lota a resztą się nie przejmować ? Zależy mi na tym, żeby to była jedna pozycja a nie 11 pozycji 0.1 lota
Solą życia jest kasa.

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

Wydaje mi się ( sprawdź!) że powinno to być coś w stylu:

Kod: Zaznacz cały

ilosc_lotow=AccountBalance()/MarketInfo(Symbol(), MODE_MARGINREQUIRED)
Orły nie jedzą much

Godot
Stały bywalec
Stały bywalec
Posty: 32
Rejestracja: 09 kwie 2008, 17:46

Nieprzeczytany post autor: Godot »

Witam
Kiedyś z ciekawości skleciłem taką funkcję. Nie jest zbyt szybka, ale może Ci się przyda.
Parametry: OP_BUY, OP_SELL

Kod: Zaznacz cały

double MaxLots2Open(int cmd)
{
   double lots, minstep, ret = 0.0;
   lots    = MarketInfo(Symbol(), MODE_MINLOT);
   minstep = MarketInfo(Symbol(),MODE_LOTSTEP);
   AccountFreeMarginCheck(Symbol(), cmd, lots);
   while(GetLastError() != 134) {
      ret = lots;
      lots += minstep;
      AccountFreeMarginCheck(Symbol(), cmd, lots);
   }
return(ret);
}
Nie sądzę, by ktokolwiek był na tyle mądry, aby ocenić, co jest możliwe, a co nie.

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

Nieprzeczytany post autor: personov »

Dzięki Panowie.
rrozak - właśnie o to mi chodziło.
Solą życia jest kasa.

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

Nieprzeczytany post autor: personov »

Jednak wyrażenie funkcji :

Kod: Zaznacz cały

ilosc_lotow=AccountBalance()/MarketInfo(Symbol(), MODE_MARGINREQUIRED)
bierze pod uwagę resztę, która zostaje.
Jak wychodzi np.1.983 lota to EA chce otworzyć 1.983 lota :) co jest niemożliwe. Jeśli EA zaokrągli to wyjdzie 2 loty, a na to jest za mało środków.
Ale pogrzebałem, pobawiłem się i doszedłem do celu. Oto gotowy kod :

Kod: Zaznacz cały

ilość _lotów=MathFloor(AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP)
Może się komuś przyda.
Solą życia jest kasa.

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

MaxFloor() zwróci liczbę całkowitą. Raczej należałoby ilość lotów znormalizować używając NormalizeDouble().
Orły nie jedzą much

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

Nieprzeczytany post autor: personov »

Pytanie z innej beczki :
Wartość lota to MODE_MARGINREQUIRED
a wartość pipsa jak będzie ?
Solą życia jest kasa.

rrozak
Stały bywalec
Stały bywalec
Posty: 76
Rejestracja: 19 mar 2010, 16:43

Nieprzeczytany post autor: rrozak »

MODE_TICKVALUE
Orły nie jedzą much

Awatar użytkownika
w_ujek edek
Stały bywalec
Stały bywalec
Posty: 39
Rejestracja: 28 kwie 2009, 10:57

Nieprzeczytany post autor: w_ujek edek »

personov pisze: Ale pogrzebałem, pobawiłem się i doszedłem do celu. Oto gotowy kod :

Kod: Zaznacz cały

ilość _lotów=MathFloor(AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP)
Może się komuś przyda.
dobra robota :D

a w jaki sposob otrzymac polowe maksymalego zaangazowania?

Dodano po 21 minutach:

juz mam wystarczy dodac zaraz po

Kod: Zaznacz cały

(AccountFreeMargin()

Kod: Zaznacz cały

 *0.5
(gdzie 0.5 to wielkosc naszej pozycji wzgeledm wielkosci konta) i reszte przepisac

czyli bedzie to wygladalo tak

Kod: Zaznacz cały

ilość _lotów=MathFloor(AccountFreeMargin()*0.5/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP)
jeszcze raz dzieki persenov

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

Nieprzeczytany post autor: personov »

A jak zaokrąglić wynik do x liczb po przecinku ? Np. wychodzi mi 1.200000 lota, a ja chcę żeby pokazywało 1.2.
Oczywiście chodzi mi o informacje w "Comment", bo w kodzie mi to nie przeszkadza.
Solą życia jest kasa.

ODPOWIEDZ