Zwiększanie wielkości pozycji wraz ze wzrostem kapitału

O jezykach programowania w platformach i nie tylko.
FXNewsTrader
Stały bywalec
Stały bywalec
Posty: 22
Rejestracja: 21 cze 2011, 08:24

Zwiększanie wielkości pozycji wraz ze wzrostem kapitału

Nieprzeczytany post autor: FXNewsTrader »

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

crn
Gaduła
Gaduła
Posty: 117
Rejestracja: 17 mar 2009, 22:07

Nieprzeczytany post autor: crn »

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.

Awatar użytkownika
Mustafa
Pasjonat
Pasjonat
Posty: 777
Rejestracja: 20 lip 2010, 10:54

Nieprzeczytany post autor: Mustafa »

może tak;

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.

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

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ć..

FXNewsTrader
Stały bywalec
Stały bywalec
Posty: 22
Rejestracja: 21 cze 2011, 08:24

Nieprzeczytany post autor: FXNewsTrader »

Działa :)
Bardzo dziękuję.

Tig3r pisze:

Kod: Zaznacz cały

lot=0.01;
if(AccountBalance()> 9000)  lot=0.02;
if(AccountBalance()> 13500) lot=0.03;

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

FXNewsTrader pisze:Działa Smile
A tak działa wg tego co opisałeś:

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ć..

Ribelo
Stały bywalec
Stały bywalec
Posty: 44
Rejestracja: 18 lut 2010, 20:28

Nieprzeczytany post autor: Ribelo »

BTW prościej zrobić to tak chyba...

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)
W zmiennych ustawianych przez użytkownika dodaj:

Kod: Zaznacz cały

extern double  lot = 0.00;
extern double  money.per.min.lot = 1000;
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.

FXNewsTrader
Stały bywalec
Stały bywalec
Posty: 22
Rejestracja: 21 cze 2011, 08:24

Nieprzeczytany post autor: FXNewsTrader »

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.

Awatar użytkownika
Mustafa
Pasjonat
Pasjonat
Posty: 777
Rejestracja: 20 lip 2010, 10:54

Nieprzeczytany post autor: Mustafa »

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.

Awatar użytkownika
bbq
Pasjonat
Pasjonat
Posty: 604
Rejestracja: 10 maja 2011, 17:12

Nieprzeczytany post autor: bbq »

Mustafa pisze:no to tak;
A nie tak jak Tig3r napisał

Kod: Zaznacz cały

lot=0.01;
if(AccountBalance()> 14000)  lot=0.02; 
....
Zanim zarobi 4000 może przecież strącić 9000

A w ogóle może AccountEquity()>14000

Jeśli jestem w błędzie to proszę mnie poprawić...

ODPOWIEDZ