1 トレードの最大損失が、「有効証拠金額 × リスク率」になるようなロット数を計算で求めればよい。
例えば、有効証拠金額 100 万円、リスク率 1% であれば、損切りにかかった時の金額が -1 万円 となるようなロット数を求める。
1.0 ロットのポジションで損切り幅が range
の時の想定損失額を ClAccountInfoHelper::OrderProfitCheck()
で取得している。
「有効証拠金額 × リスク率」をこの金額で割ることで必要なロット数を計算している。
double GetLotSize(double range, double risk) { double price = l_SymbolInfo.Bid(); double sl = l_SymbolInfo.Bid() + range; double loss = - l_AccountInfo.OrderProfitCheck(l_SymbolInfo.Name(), ORDER_TYPE_SELL, 1.0, price, sl); double stepvol = l_SymbolInfo.LotsStep(); double lot = MathFloor((l_AccountInfo.Equity() * (risk / 100.0)) / loss / stepvol) * stepvol; double minvol = l_SymbolInfo.LotsMin(); if(lot < minvol) { lot = minvol; } double maxvol = l_SymbolInfo.LotsMax(); if(lot > maxvol) { lot = maxvol; } return(lot); }
上のサンプルコードは、下記の記事で紹介した標準ライブラリのラッパークラスを参照していることに留意。