package com.xcong.excoin; import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.common.enumerates.CoinTypeEnum; import com.xcong.excoin.common.enumerates.RabbitPriceTypeEnum; import com.xcong.excoin.modules.contract.dao.ContractHoldOrderDao; import com.xcong.excoin.modules.contract.entity.ContractHoldOrderEntity; import com.xcong.excoin.modules.contract.service.RabbitOrderService; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.dao.MemberWalletContractDao; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity; import com.xcong.excoin.rabbit.pricequeue.OrderModel; import com.xcong.excoin.rabbit.pricequeue.OrderOperatePriceService; import com.xcong.excoin.rabbit.pricequeue.WebsocketPriceService; import com.xcong.excoin.rabbit.producer.OrderProducer; import com.xcong.excoin.utils.CalculateUtil; import com.xcong.excoin.utils.CoinTypeConvert; import com.xcong.excoin.utils.RedisUtils; import com.xcong.excoin.utils.ThreadPoolUtils; import lombok.SneakyThrows; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @author wzy * @date 2020-08-14 **/ @SpringBootTest public class WholeTest { @Resource private MemberDao memberDao; @Autowired private ContractHoldOrderDao contractHoldOrderDao; @Autowired private RabbitOrderService rabbitOrderService; @Autowired private MemberWalletContractDao memberWalletContractDao; @Test public void forceClosePriceTest() { MemberEntity memberEntity = memberDao.selectById(5L); try { CalculateUtil.getForceSetPriceForWhole("BTC/USDT", memberEntity); } catch (Exception e) { e.printStackTrace(); } } @Test public void closingOrderTest() { List ids = new ArrayList<>(); ids.add(836L); rabbitOrderService.cancelHoldOrder(ids); } @Test public void wholeContractWalletTest() { List memberEntities = memberDao.selectAllMember(); for (MemberEntity member : memberEntities) { CoinTypeEnum[] values = CoinTypeEnum.values(); for (CoinTypeEnum value : values) { MemberWalletContractEntity walletContract = new MemberWalletContractEntity(); if (value.name().equals(CoinTypeEnum.USDT.name())) { continue; } walletContract.setMemberId(member.getId()); walletContract.setAvailableBalance(AppContants.INIT_MONEY); walletContract.setFrozenBalance(AppContants.INIT_MONEY); walletContract.setTotalBalance(AppContants.INIT_MONEY); walletContract.setBorrowedFund(AppContants.INIT_MONEY); walletContract.setWalletCode(value.name()); memberWalletContractDao.insert(walletContract); } } } @Test public void bondAmountTest() { BigDecimal openPrice = BigDecimal.valueOf(412.52124800); System.out.println(CalculateUtil.getBondAmount(openPrice, BigDecimal.valueOf(6), 1, 5)); } @Autowired private OrderProducer orderProducer; // 面值*(多单张数*多单开仓价-空单张数*空单开仓价)-余额-已实现盈亏 / 面值*(多单张数-空单张数)-(维持保证金率+TAKER手续费)*面值*(开多张数+开空张数) /* 面值 : 0.1000 * 678 多单张数 : 300 开仓价 : 11400.53000000 -> 3420159 空单张数 : 300 开仓价 : 11398.27000000 -> 3419481 余额 : 562.92683993 -495.12 手续费率 : 0.0460 */ @Test public void forceSetPriceTest() { MemberEntity memberEntity = memberDao.selectById(15L); System.out.println(CalculateUtil.getForceSetPriceForWhole("BTC/USDT", memberEntity)); } @Test public void profitOrLessTest() { MemberEntity memberEntity = memberDao.selectById(15L); ContractHoldOrderEntity contractHoldOrderEntity = contractHoldOrderDao.selectById(144L); System.out.println(CalculateUtil.calProfitOrLoss(contractHoldOrderEntity, memberEntity)); } @Resource private RedisUtils redisUtils; @Test public void redisTest() { for (int i = 827; i < 999; i++) { redisUtils.del(AppContants.CLOSING_ORDER_PREFIX + i); } } @Resource private WebsocketPriceService websocketPriceService; @Test public void wholeBombTest() { websocketPriceService.wholeBomb("BTC/USDT", "9000"); } @Test public void forceTest() { MemberEntity memberEntity = memberDao.selectById(5L); CalculateUtil.getForceSetPriceForWhole(null, memberEntity); } public static void main(String[] args) { Map map = new ConcurrentHashMap<>(); map.put("1", "1"); map.put("2", "2"); map.put("3", "3"); map.put("4", "4"); map.put("5", "5"); new Thread(new Runnable() { @SneakyThrows @Override public void run() { for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey() + " - " + entry.getValue()); if (entry.getKey().equals("3")) { System.out.println(11); map.remove("3"); } Thread.sleep(1000); } System.out.println(map.get("3")); } }).start(); } @Test public void mapTest() { // websocketPriceService.wholeBomb(); OrderOperatePriceService.wholePriceDataOperation(63L); } @Test public void wholeForceTest() { // 8301.38608660 // System.out.println(new BigDecimal("9925.29996175").subtract(new BigDecimal("1623.91387515"))); BigDecimal aa = new BigDecimal("9925.29996175").subtract(new BigDecimal("8301.38608660").negate()).subtract(new BigDecimal("1623.91387515")).subtract(new BigDecimal("0.1").multiply(new BigDecimal(50)).multiply(new BigDecimal("32478.27750300"))); BigDecimal bb = new BigDecimal(50).multiply(new BigDecimal("0.1")); BigDecimal divide = aa.divide(bb, 8, BigDecimal.ROUND_DOWN); System.out.println(divide); // -(账户权益-委托保证金-全仓维持保证金-全仓未实现盈利-数量*面值*开仓价格)/(数量*面值) // 30818.00028568 -- // 29157.72306836 -- } @Test public void wholeForceNewTest() { BigDecimal newPrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey("BTC/USDT"))); MemberEntity memberEntity = memberDao.selectById(16L); ContractHoldOrderEntity holdOrder = contractHoldOrderDao.selectById(772L); System.out.println(CalculateUtil.calWholePriceTwo(memberEntity, holdOrder, 2)); } @Test public void wholeForceNewTest2() { BigDecimal holdBond = new BigDecimal("1161.8951"); BigDecimal sku = new BigDecimal("0.1"); BigDecimal openPrice = new BigDecimal("58094.75"); int cnt = 50; BigDecimal total = new BigDecimal("9866.3820"); // 成本 数量*面值*开仓价 BigDecimal cost = sku.multiply(openPrice).multiply(new BigDecimal(cnt)); // 费率 BigDecimal ratio = openPrice.multiply(new BigDecimal("0.005")); // 总账户 - 维持保证金 BigDecimal orderProfitOrLoss = total.subtract(holdBond); // 权益 BigDecimal qy = BigDecimal.ZERO; BigDecimal prefix = cost.subtract(ratio); BigDecimal divideChild; // if (ContractHoldOrderEntity.OPENING_TYPE_MORE == contractHoldOrderEntity.getOpeningType()) { divideChild = prefix.subtract(orderProfitOrLoss).subtract(qy); // } else { // divideChild = prefix.add(orderProfitOrLoss).add(qy); // } // BigDecimal divideChild = walletContract.getTotalBalance().add(totalProfitOrLoss).subtract(holdBond).subtract(cost).add(newPrice.multiply(new BigDecimal("0.005"))); BigDecimal divideParent = sku.multiply(new BigDecimal(cnt)); System.out.println(divideChild.divide(divideParent, 8, BigDecimal.ROUND_DOWN)); } }