Często, czy to na forach, czy też za pośrednictwem komunikatorów ludzi pytają dlaczego ich EA nie działa, po czym okazuje się, że w kodzie nie sprawdzają, czy wyliczona na podstawie ich money management wartość wielkości pozycji jest dopuszczalna przez brokera.
A sprawa jest bardzo prosta – wystarczy przepuścić obliczoną wielkość przez funkcję normalizującą, taką jak ta:
double normalizeLots(double value) { double minLots=MarketInfo(Symbol(),MODE_MINLOT); double maxLots=MarketInfo(Symbol(),MODE_MAXLOT); if(value < minLots) value = minLots; if(value > maxLots) value = maxLots; int digits = 1; if(minLots == 0.01) digits = 2; if (minLots ==0.05) { return(NormalizeDouble(2*value,1)/2); } return(NormalizeDouble(value,digits)); }
Funkcja zwróci wartość wielkości pozycji w dopuszczalnym przez brokera zakresie, jeśli wartość na wejściu wykracza poza ten zakres.
Autor: Łukasz Tomaszkiewicz