void Strategy::updatePositions(const Quote *quote) {
//同步持仓:持仓盈亏
Instrument *instrument = getInstrument(quote->instrumentId);
Position *longPosition = getPosition(quote->instrumentId,PositionSide::longSide);
if(longPosition)
longPosition->positionProfit = (quote->lastPrice - longPosition->positionCost) * instrument->volumeMultiple * longPosition->totalPosition;
Position *shortPosition = getPosition(quote->instrumentId,PositionSide::shortSide);
if(shortPosition)
shortPosition->positionProfit = (shortPosition->positionCost - quote->lastPrice) * instrument->volumeMultiple * shortPosition->totalPosition;
}
void Strategy::updatePositions(const Trade *trade) {
//同步持仓:合约、买卖、总仓、今仓、可平量、持仓均价、持仓盈亏、占用保证金
}
void Strategy::updateAccounts(const Quote *quote) {
//同步账户:持仓盈亏、动态权益、可用资金
account.positionProfit = 0;
for(Position *position : positions) {
account.positionProfit = account.positionProfit + position->positionProfit;
}
account.equity = account.preEquity + account.closeProfit + account.positionProfit - account.commission;
account.available = account.equity - account.currMargin - account.frozenMargin - account.frozenCommission + account.credit;
}
void Strategy::updateAccounts(const Order *order) {
//同步账户:冻结保证金、冻结手续费
account.frozenMargin = 0;
account.frozenCommission = 0;
for(Order *order : getPendingOrders()) {
account.frozenMargin = account.frozenMargin + order->frozenMargin;
account.frozenCommission = account.frozenCommission + order->frozenCommission;
}
}
void Strategy::updateAccounts(const Trade *trade) {
//同步账户:平仓盈亏、持仓盈亏、手续费、动态权益、占用保证金、可用资金
}