Zwiększanie wielkości pozycji wraz ze wzrostem kapitału
-
- Stały bywalec
- Posty: 22
- Rejestracja: 21 cze 2011, 08:24
Zwiększanie wielkości pozycji wraz ze wzrostem kapitału
Witam Was,
Potrzebuję pomocy.
Mam EA, któremu brakuje jednej funkcji, chciałbym aby wraz ze wzrostem kapitału zwiększał wielkość otwieranych pozycji.
Np Od do 4500 0.01 lota, powyżej 4500 do 9000 0.02 lota itd...
Czy ktoś wie jak to zrobić?
Dzięki za wszelką pomoc.
Pozdrawiam
Potrzebuję pomocy.
Mam EA, któremu brakuje jednej funkcji, chciałbym aby wraz ze wzrostem kapitału zwiększał wielkość otwieranych pozycji.
Np Od do 4500 0.01 lota, powyżej 4500 do 9000 0.02 lota itd...
Czy ktoś wie jak to zrobić?
Dzięki za wszelką pomoc.
Pozdrawiam
Piszesz funkcje ktora to oblicza 
1. przy wyslaniu pierwszej pozycji zapamietaj stosunek wielkosc pozycji - kapital.
2. Przed kazdym wyslaniem pozycji obliczac nowa wiekszosc. tzn. liczysz za ile lotow zagrac, zeby stosunek byl taki sam.
edit (bo niedoczytalem): Jezeli masz jakies nie wyliczalne granice, to jedyna mozliwoscia jest wpisanie tych przedzialow i masa ifow. Tutaj radzilbym plik teskstowy z tymi przedzialami, wtedy przy najdrobneijszej zmienie nie bedziesz musial edytowac setek if'ow.

1. przy wyslaniu pierwszej pozycji zapamietaj stosunek wielkosc pozycji - kapital.
2. Przed kazdym wyslaniem pozycji obliczac nowa wiekszosc. tzn. liczysz za ile lotow zagrac, zeby stosunek byl taki sam.
edit (bo niedoczytalem): Jezeli masz jakies nie wyliczalne granice, to jedyna mozliwoscia jest wpisanie tych przedzialow i masa ifow. Tutaj radzilbym plik teskstowy z tymi przedzialami, wtedy przy najdrobneijszej zmienie nie bedziesz musial edytowac setek if'ow.
może tak;
Dodano po 6 minutach:
MM_ryzyko to procent ryzykowanego kapitału
Kod: Zaznacz cały
double MM_ryzyko = 2;
int moj_stop = 15;
double tickvalue = MarketInfo(Symbol(),MODE_TICKVALUE);
double ryzyko = AccountBalance()*MM_ryzyko/100;
double lot_size = ryzyko / tickvalue / moj_stop;
if(lot_size < MarketInfo(Symbol(),MODE_MINLOT)) lot_size = MarketInfo(Symbol(),MODE_MINLOT);
if(lot_size > MarketInfo(Symbol(),MODE_MAXLOT)) lot_size = MarketInfo(Symbol(),MODE_MAXLOT);
Dodano po 6 minutach:
MM_ryzyko to procent ryzykowanego kapitału
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.
Kod: Zaznacz cały
lot=0.01;
if(AccountBalance()> 9000) lot=0.02;
if(AccountBalance()> 13500) lot=0.03;
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
-
- Stały bywalec
- Posty: 22
- Rejestracja: 21 cze 2011, 08:24
Działa 
Bardzo dziękuję.

Bardzo dziękuję.
Tig3r pisze:Kod: Zaznacz cały
lot=0.01; if(AccountBalance()> 9000) lot=0.02; if(AccountBalance()> 13500) lot=0.03;
A tak działa wg tego co opisałeś:FXNewsTrader pisze:Działa Smile
Kod: Zaznacz cały
lot=0.01;
if(AccountBalance()> 4500) lot=0.02;
if(AccountBalance()> 9000) lot=0.03;
if(AccountBalance()> 13500) lot=0.04;
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..
BTW prościej zrobić to tak chyba...
W zmiennych ustawianych przez użytkownika dodaj:
Masz teraz dwie opcje do wyboru. Albo podać lot na sztywno a momencie kiedy lot = 0, lot jest liczony według podanego kapitału na jaki ma przypaść najmniejsza wartość lota dostępna u brokera.
Kod: Zaznacz cały
double LotCalculate() {
double LotStep = MarketInfo ( symbol, MODE_LOTSTEP );
double MinLots = MarketInfo ( symbol, MODE_MINLOT );
double MaxLots = MarketInfo ( symbol, MODE_MAXLOT );
int Decimal = 1;
if ( LotStep == 0.01 ) {
Decimal = 2;
}
if ( lot == 0 ) {
if ( open.trades == 0 ) {
calculated.lot = AccountEquity() * ( 1 / ( money.per.min.lot ) );
calculated.lot = MathFloor ( calculated.lot ) / 100;
calculated.lot = NormalizeDouble ( calculated.lot, Decimal );
}
}
if ( calculated.lot < MinLots ) {
calculated.lot = MinLots;
}
if ( calculated.lot > MaxLots ) {
calculated.lot = MaxLots;
}
return ( calculated.lot );
}//End int CalculateStopLoss(int type, double price)
Kod: Zaznacz cały
extern double lot = 0.00;
extern double money.per.min.lot = 1000;
-
- Stały bywalec
- Posty: 22
- Rejestracja: 21 cze 2011, 08:24
Dziękuję za wszystkie odpowiedzi.
Ale jeszcze trochę skomplikuje.
Chciałbym aby wielkość lota rosła wraz z zyskiem tzn:
Załóżmy, że ktoś zaczyna z 10 000 na start strategia otwiera mu pozycje po 0.01 lota, po osiągnięciu zysku w wysokości 4000 dopiero wtedy podnosi wielkość pozycji do 0.02 lota.. itd.
Ale jeszcze trochę skomplikuje.
Chciałbym aby wielkość lota rosła wraz z zyskiem tzn:
Załóżmy, że ktoś zaczyna z 10 000 na start strategia otwiera mu pozycje po 0.01 lota, po osiągnięciu zysku w wysokości 4000 dopiero wtedy podnosi wielkość pozycji do 0.02 lota.. itd.
no to tak;
Kod: Zaznacz cały
lot=0.01;
if(AccountProfit()> 4000) lot=0.02;
if(AccountProfit()> 9000) lot=0.03;
if(AccountProfit()> 13500) lot=0.04;
itd...
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.
A nie tak jak Tig3r napisałMustafa pisze:no to tak;
Kod: Zaznacz cały
lot=0.01;
if(AccountBalance()> 14000) lot=0.02;
....
A w ogóle może AccountEquity()>14000
Jeśli jestem w błędzie to proszę mnie poprawić...