开仓按照名义价值计算数量
This commit is contained in:
parent
8ac9a8ec1a
commit
1f882561d2
@ -51,6 +51,7 @@ public class AutoGridStrategy extends BaseStrategy {
|
|||||||
private final Logger logger = LoggerFactory.getLogger(AutoGridStrategy.class);
|
private final Logger logger = LoggerFactory.getLogger(AutoGridStrategy.class);
|
||||||
|
|
||||||
// 运行参数
|
// 运行参数
|
||||||
|
/** 每格购买价值(报价币金额),下单数量 = baseQuantity / price */
|
||||||
private BigDecimal baseQuantity;
|
private BigDecimal baseQuantity;
|
||||||
private BigDecimal atrMultiplier;
|
private BigDecimal atrMultiplier;
|
||||||
private String gridGrpScript;
|
private String gridGrpScript;
|
||||||
@ -613,9 +614,15 @@ public class AutoGridStrategy extends BaseStrategy {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BigDecimal quantity = quantityFromBaseValue(normalizedPrice);
|
||||||
|
if (quantity.compareTo(BigDecimal.ZERO) <= 0) {
|
||||||
|
logger.warn("按购买价值换算数量无效:价值={},价格={}", baseQuantity, normalizedPrice);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
String clientOrderId = buildClientOrderId("BUY", normalizedPrice);
|
String clientOrderId = buildClientOrderId("BUY", normalizedPrice);
|
||||||
try {
|
try {
|
||||||
JSONObject orderInfo = buildOrderRequest("buy", "open", "limit", normalizedPrice, baseQuantity);
|
JSONObject orderInfo = buildOrderRequest("buy", "open", "limit", normalizedPrice, quantity);
|
||||||
orderInfo.put("clientOid", clientOrderId);
|
orderInfo.put("clientOid", clientOrderId);
|
||||||
|
|
||||||
JSONObject result = bitGetClient.placeOrder(orderInfo);
|
JSONObject result = bitGetClient.placeOrder(orderInfo);
|
||||||
@ -625,8 +632,9 @@ public class AutoGridStrategy extends BaseStrategy {
|
|||||||
gridBuyOrder.exchangeOrderId = exchangeOrderId;
|
gridBuyOrder.exchangeOrderId = exchangeOrderId;
|
||||||
pendingBuyOrders.put(priceKey(normalizedPrice), gridBuyOrder);
|
pendingBuyOrders.put(priceKey(normalizedPrice), gridBuyOrder);
|
||||||
|
|
||||||
logger.info("挂买单成功:价格={},订单号={}", normalizedPrice, exchangeOrderId);
|
logger.info("挂买单成功:价格={},数量={}(价值={}),订单号={}",
|
||||||
submitOrderSync(exchangeOrderId, clientOrderId, normalizedPrice, baseQuantity,
|
normalizedPrice, quantity, baseQuantity, exchangeOrderId);
|
||||||
|
submitOrderSync(exchangeOrderId, clientOrderId, normalizedPrice, quantity,
|
||||||
OrderSide.BUY, OrderStatus.NEW);
|
OrderSide.BUY, OrderStatus.NEW);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("挂买单失败,价格={}", normalizedPrice, e);
|
logger.error("挂买单失败,价格={}", normalizedPrice, e);
|
||||||
@ -1052,7 +1060,8 @@ public class AutoGridStrategy extends BaseStrategy {
|
|||||||
? "POS_" + entryPrice.toPlainString()
|
? "POS_" + entryPrice.toPlainString()
|
||||||
: "SYNC_POS_" + price.toPlainString();
|
: "SYNC_POS_" + price.toPlainString();
|
||||||
if (quantity == null) {
|
if (quantity == null) {
|
||||||
quantity = baseQuantity;
|
BigDecimal refPrice = entryPrice != null ? entryPrice : price;
|
||||||
|
quantity = quantityFromBaseValue(refPrice);
|
||||||
}
|
}
|
||||||
GridSellOrder sellOrder = new GridSellOrder(clientOid, clientPositionId, price, quantity);
|
GridSellOrder sellOrder = new GridSellOrder(clientOid, clientPositionId, price, quantity);
|
||||||
sellOrder.exchangeOrderId = exchangeOrderId;
|
sellOrder.exchangeOrderId = exchangeOrderId;
|
||||||
@ -1232,7 +1241,7 @@ public class AutoGridStrategy extends BaseStrategy {
|
|||||||
JSONObject row = new JSONObject();
|
JSONObject row = new JSONObject();
|
||||||
row.put("type", "待成交买单");
|
row.put("type", "待成交买单");
|
||||||
row.put("price", formatPrice(order.buyPrice));
|
row.put("price", formatPrice(order.buyPrice));
|
||||||
row.put("quantity", baseQuantity.toPlainString());
|
row.put("quantity", quantityFromBaseValue(order.buyPrice).toPlainString());
|
||||||
row.put("takeProfit", "-");
|
row.put("takeProfit", "-");
|
||||||
rows.add(row);
|
rows.add(row);
|
||||||
}
|
}
|
||||||
@ -1350,6 +1359,16 @@ public class AutoGridStrategy extends BaseStrategy {
|
|||||||
return qty.setScale(quantityPrecision, RoundingMode.DOWN);
|
return qty.setScale(quantityPrecision, RoundingMode.DOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 购买价值换算为合约/币数量:数量 = baseQuantity / price
|
||||||
|
*/
|
||||||
|
private BigDecimal quantityFromBaseValue(BigDecimal price) {
|
||||||
|
if (baseQuantity == null || price == null || price.compareTo(BigDecimal.ZERO) <= 0) {
|
||||||
|
return BigDecimal.ZERO;
|
||||||
|
}
|
||||||
|
return normalizeQuantity(baseQuantity.divide(price, quantityPrecision + 8, RoundingMode.DOWN));
|
||||||
|
}
|
||||||
|
|
||||||
private String priceKey(BigDecimal price) {
|
private String priceKey(BigDecimal price) {
|
||||||
return normalizePrice(price).toPlainString();
|
return normalizePrice(price).toPlainString();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user