Risk Management

O jezykach programowania w platformach i nie tylko.
tmkk90
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 12 lip 2010, 19:13

Risk Management

Nieprzeczytany post autor: tmkk90 »

Witam, czy mógłby ktoś podać kod pozwalający ustawiać poziom ryzyka.

Chodzi mi o to, żeby działało na tej zasadzie która jest opisana w tym linku : http://www.forex.nawigator.biz/dyskusje ... php?t=2088


Znalazłem, takie coś:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//---- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         //----
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//---- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
Tylko nie za bardzo wiem co to jest Decrease Factor :/ moglby ktoś wytłumaczyć?

Awatar użytkownika
batman
Gaduła
Gaduła
Posty: 159
Rejestracja: 19 kwie 2011, 07:55

Nieprzeczytany post autor: batman »

Decrease Factor dodatkowo zmniejsza zaangazowanie kapitalu gdy poprzednie transakcje byly stratne. Gdy jest "zly czas" dla Twojego EA to lepiej ryzykowac jeszcze mniej. Tak to rozumiem.

Najprostsza wersja w ktorej zaangazowalnie zalezy liniowo od wielkosci kapitalu to:

double LotsOptimized()
{
double lot=Lots;
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000,1);
return(lot);
}

Czyli jak zarabiasz - AccountFreeMargin() rosnie, to wklad rosnie, a jak tracisz, to maleje.

A jak grasz na mikrolotach, to zamiast:
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000,1);
wez
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000,2);
czyli zaokraglaj do drugiego miejsca po przecinku.


PS
Wyczacz ale nie przeczytalem watku do ktorego podajesz link - wiec moze chodzilo Ci o cos innego?

tmkk90
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 12 lip 2010, 19:13

Nieprzeczytany post autor: tmkk90 »

Właśnie o to mi chodziło :) wielkie dzięki

Dodano po 6 minutach:

Jeszcze jedno pytanie, co do Decrease Factor. Przyjmuje on konkretne liczby np

Kod: Zaznacz cały

extern double DecreaseFactor     = 3;
Co one oznaczają? Czym będzie się różniło, jeżeli np. podam, że decrease factor równa się 2, albo np. 5? Czy jest to ilość stratnych pozycji pod rząd?

Awatar użytkownika
altmer
Gaduła
Gaduła
Posty: 115
Rejestracja: 05 gru 2010, 00:04

Nieprzeczytany post autor: altmer »

DecreaseFactor jest 'zewnętrzną' zmienną (niejako spoza skryptu, użytkownik może ją modyfikować poza kodem, choć oczywiście kod też może też ją modyfikować na swój sposób - nie tutaj) i mianownikiem dzielenia w tym:

Kod: Zaznacz cały

lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1)
a im większy mianownik DecreaseFactor, tym mniejsza wartość ułamka, czyli tutaj tym większy będzie wynikowy rozmiar lot-ów.

Natomiast ilość stratnych pozycji z rzędu jest zmienną "losses" pobieraną z historii transakcji przez kod skryptu i przeliczaną wewnątrz tego skryptu -

tutaj jest liczenie stratnych pod rząd:
if(OrderProfit()<0) losses++;
Ostatnio zmieniony 23 lip 2011, 20:18 przez altmer, łącznie zmieniany 2 razy.

tmkk90
Stały bywalec
Stały bywalec
Posty: 50
Rejestracja: 12 lip 2010, 19:13

Nieprzeczytany post autor: tmkk90 »

wielkie dzięki ;)

gufi79
Bywalec
Bywalec
Posty: 14
Rejestracja: 17 lis 2006, 01:43

Nieprzeczytany post autor: gufi79 »

a mnie to nei dziala za nic w swiecie mozecie mi to bardziej szczegolowo opisac i dopisac pozostale ustawienie ktore musza sie tu pojawic?
potrzebuje tylko wzrostu i spadku lotow w zaleznosci od marginu nic zwiazanego z iloscia spadkow itd

ODPOWIEDZ