From bc9801d6adf582325e8213df11f597f82deda973 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Fri, 12 Jul 2024 11:02:41 +0800
Subject: [PATCH] 1
---
src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java | 40 ++++++++++++++++++++++++++--------------
1 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java b/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
index 1cfbda1..a423405 100644
--- a/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
+++ b/src/main/java/project/contract/job/ContractOrderCalculationServiceImpl.java
@@ -1,5 +1,6 @@
package project.contract.job;
+import java.text.DecimalFormat;
import java.util.List;
import org.slf4j.Logger;
@@ -21,6 +22,8 @@
private ContractOrderService contractOrderService;
private DataService dataService;
private WalletService walletService;
+ public final static String STATE_SUBMITTED = "submitted";
+ public final static String STATE_CREATED = "created";
/**
* 平仓线 110%(订金价值 /收益=110%)
*/
@@ -53,6 +56,7 @@
/*
* 0 买涨
*/
+ logger.info("当前价格:"+close+"---------价格:"+Arith.add(order.getTrade_avg_price(), order.getPips()));
if (close >= Arith.add(order.getTrade_avg_price(), order.getPips())) {
settle(order, "profit", close);
}
@@ -80,30 +84,31 @@
/**
* 盈亏计算
- *
+ *
* @param profit_loss profit 盈 loss亏
* @param currentPrice 当前点位
*/
public void settle(ContractOrder order, String profit_loss, double currentPrice) {
- /**
- * 偏差点位
- */
- double point = Arith.div(Math.abs(Arith.sub(currentPrice, order.getTrade_avg_price())), order.getPips());
-
- /*
- * 根据偏 差点数和手数算出盈亏金额
- */
- double amount = Arith.mul(Arith.mul(order.getPips_amount(), point), order.getVolume());
-
+ double mul = Arith.mul(order.getDeposit_open(), order.getLever_rate());//仓位
+ double div = Arith.div(mul, order.getTrade_avg_price());//持有币的数量
+ double amount = Arith.mul(div, Arith.sub(currentPrice, order.getTrade_avg_price()));
+ logger.info("---------盈亏金额:"+amount);
+ logger.info("---------盈亏:"+profit_loss);
if ("profit".equals(profit_loss)) {
/**
* 盈 正数
*/
- order.setProfit(Arith.add(0.0D, amount));
+ order.setProfit(Arith.add(0.0D, Math.abs(amount)));
} else if ("loss".equals(profit_loss)) {
- order.setProfit(Arith.sub(0.0D, amount));
+ order.setProfit(Arith.sub(0.0D,Math.abs(amount) ));
}
+
+ double changeRatio;
+ changeRatio = Arith.mul(Arith.div(order.getProfit(), order.getDeposit_open()), 100);
+ DecimalFormat df = new DecimalFormat("#.##");
+ order.setChange_ratio(Double.valueOf(df.format(changeRatio)));
+
/**
* 多次平仓价格不对,后续修
*/
@@ -161,6 +166,7 @@
* 收益
*/
double profit = 0;
+
List<ContractOrder> list = contractOrderService.findSubmitted(order.getPartyId().toString(), null, null);
for (int i = 0; i < list.size(); i++) {
ContractOrder close_line = list.get(i);
@@ -168,7 +174,7 @@
}
Wallet wallet = this.walletService.saveWalletByPartyId(order.getPartyId().toString());
double totleMoney = wallet.getMoney();
- if (Arith.add(profit, totleMoney) <= 0) {
+ if (Arith.add(profit,totleMoney) <= 0) {
/**
* 触发全仓强平
*/
@@ -178,6 +184,7 @@
ContractOrder close_line = list.get(i);
if (!order.getOrder_no().equals(close_line.getOrder_no())) {
try {
+
while (true) {
if (ContractLock.add(close_line.getOrder_no())) {
this.contractOrderService.saveClose(close_line.getPartyId().toString(),
@@ -188,7 +195,9 @@
break;
}
ThreadUtils.sleep(500);
+
}
+
} catch (Exception e) {
logger.error("error:", e);
} finally {
@@ -207,8 +216,11 @@
* 低于系统默认平仓线,进行强平
*/
this.contractOrderService.saveClose(order.getPartyId().toString(), order.getOrder_no());
+ return;
}
+
}
+
}
public void setDataService(DataService dataService) {
this.dataService = dataService;
--
Gitblit v1.9.3