20 January 2014

Proste zarządzanie ryzykiem w MQL 4

Dopasowanie wielkości otwieranej pozycji do wolnych środków w MT4 można zrealizować poprzez proste skrypty. Dla początkujących bardzo ważne jest ustalenie zasad handlu. Kilka kolejnych strat kusi aby podjąć większe ryzyko - "bo przecież w końcu musi się coś udać". Podobnie jest z kolejno trafionymi pozycjami - "skoro już wiem jak grać to czemu nie zarobić więcej". Oczywiście są to błędy czyszczące konto. Na rynku warto grać swoje i określić ryzyko dla przyjętych poziomów SL. Dla początkujących pojęcie ryzyka spekulacyjnego, operacyjnego i strategicznego najczęściej zamyka się w życzeniu (często nazywane planem) - "dziś zarobię dużo kasy". Ryzyko spekulacyjne jest związane z wydarzeniami - często źle interpretowanymi przez grających, ryzyko operacyjne i strategiczne to jest dopiero plan. Operacyjne kiedy planujesz zaryzykować dziś 400 pipsów (5 cyfrowych), a strategiczne kiedy planujesz stracić w miesiącu 10% kapitału. Planowanie zysków na lewarowanym rynku walutowym warto odłożyć na czas kiedy się pojawią, bo niezrealizowanie założeń często popycha graczy do otwierania złych pozycji. W przedstawionym kodzie wielkość pozycji będzie się zmieniała wraz z kapitałem. Uwzględniłem również poziom StopOut - w Admiral Markets 30%, SL to 40 pipsów, a TP = 3 x SL. Kod powstał na szybko ale jest przetestowany - zmiana komentarzy zmieni go na BUY - znacznik "//"
//+------------------------------------------------------------------+
//|Trade (5 digits).mq4
//|Copyright 2014, FiveWithFour@gmail.com
//|http://www.FiveWithFour.blogspot.com
//+------------------------------------------------------------------+

#property copyright "FiveWithFour@gmail.com"
#property link      "http://www.FiveWithFour.blogspot.com"

int start()
   {
   double dFreeMargin = 0;
   double dTickValue = 0;
   double dSpread = 0;
   double dRiskValue = 0.03;  // procentowe ryzyko dla pojedynczej pozycji - 1 = 100%
   double dRiskInPips = 40;   // SL dla pozycji
   double dLot = 0;
   double dLots = 0;
   
   dFreeMargin = AccountFreeMargin();
   dTickValue = (MarketInfo(Symbol(), MODE_TICKVALUE) * 0.1);
   dSpread = MarketInfo(Symbol(), MODE_SPREAD);
     
   dLot = ((dFreeMargin * dRiskValue) * dTickValue) / (dRiskInPips + dSpread);
   dLots = dLot - (dLot * 0.3); //Account Stop Level - AdmiralMarkets = 30%
   OrderSend(Symbol(), OP_SELL, NormalizeDouble(dLots, 2), Bid, 1, Bid+(dRiskInPips*Point), Bid-(3*dRiskInPips*Point), "Trade SELL", 10002, 0, CLR_NONE);
   // OrderSend(Symbol(), OP_BUY, NormalizeDouble(dLots, 2), Ask, 3, Ask-dRiskInPips*Point, Ask+(3*dRiskInPips*Point), "Trade BUY", 10001, 0, CLR_NONE);
   return(0);
   }