All Downloads are FREE. Search and download functionalities are using the official Maven repository.

test.common.TestFieldFactory Maven / Gradle / Ivy

package test.common;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneOffset;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;

import org.dromara.northstar.common.constant.ChannelType;
import org.dromara.northstar.common.constant.DateTimeConstant;
import org.dromara.northstar.common.constant.TickType;

import xyz.redtorch.pb.CoreEnum.ContingentConditionEnum;
import xyz.redtorch.pb.CoreEnum.CurrencyEnum;
import xyz.redtorch.pb.CoreEnum.DirectionEnum;
import xyz.redtorch.pb.CoreEnum.ExchangeEnum;
import xyz.redtorch.pb.CoreEnum.ForceCloseReasonEnum;
import xyz.redtorch.pb.CoreEnum.HedgeFlagEnum;
import xyz.redtorch.pb.CoreEnum.OffsetFlagEnum;
import xyz.redtorch.pb.CoreEnum.OrderPriceTypeEnum;
import xyz.redtorch.pb.CoreEnum.OrderStatusEnum;
import xyz.redtorch.pb.CoreEnum.ProductClassEnum;
import xyz.redtorch.pb.CoreEnum.TimeConditionEnum;
import xyz.redtorch.pb.CoreEnum.VolumeConditionEnum;
import xyz.redtorch.pb.CoreField.BarField;
import xyz.redtorch.pb.CoreField.CancelOrderReqField;
import xyz.redtorch.pb.CoreField.ContractField;
import xyz.redtorch.pb.CoreField.GatewaySettingField;
import xyz.redtorch.pb.CoreField.OrderField;
import xyz.redtorch.pb.CoreField.SubmitOrderReqField;
import xyz.redtorch.pb.CoreField.TickField;
import xyz.redtorch.pb.CoreField.TradeField;

public class TestFieldFactory {
	
	private String gatewayId;
	
	public TestFieldFactory(String gatewayId) {
		this.gatewayId = gatewayId;
	}
	
	public SubmitOrderReqField makeOrderReq(String symbol, DirectionEnum direction, OffsetFlagEnum offsetFlag, int openVol, double price, double stopPrice) {
		return SubmitOrderReqField.newBuilder()
				.setOriginOrderId(UUID.randomUUID().toString())
				.setContract(makeContract(symbol))
				.setDirection(direction)
				.setOffsetFlag(offsetFlag)
				.setOrderPriceType(OrderPriceTypeEnum.OPT_LimitPrice)
				.setVolume(openVol)
				.setHedgeFlag(HedgeFlagEnum.HF_Speculation)
				.setTimeCondition(TimeConditionEnum.TC_GFD)
				.setVolumeCondition(VolumeConditionEnum.VC_AV)
				.setForceCloseReason(ForceCloseReasonEnum.FCR_NotForceClose)
				.setContingentCondition(ContingentConditionEnum.CC_Immediately)
				.setMinVolume(1)
				.setGatewayId(gatewayId)
				.setStopPrice(stopPrice)
				.setPrice(price)
				.build();
	}
	
	public CancelOrderReqField makeCancelReq(SubmitOrderReqField orderReq) {
		return CancelOrderReqField.newBuilder()
				.setGatewayId(orderReq.getGatewayId())
				.setOriginOrderId(orderReq.getOriginOrderId())
				.build();
	}
	
	public ContractField makeContract(String symbol) {
		return ContractField.newBuilder()
				.setGatewayId(gatewayId)
				.setChannelType(ChannelType.SIM.toString())
				.setCurrency(CurrencyEnum.CNY)
				.setContractId(symbol + "@SHFE@FUTURES@" + gatewayId)
				.setExchange(ExchangeEnum.SHFE)
				.setFullName(symbol)
				.setThirdPartyId(symbol + "@" + ChannelType.SIM)
				.setLongMarginRatio(0.08)
				.setShortMarginRatio(0.08)
				.setMultiplier(10)
				.setPriceTick(1)
				.setCommissionRate(0.0001)
				.setProductClass(ProductClassEnum.FUTURES)
				.setUnifiedSymbol(symbol + "@SHFE@FUTURES")
				.setSymbol(symbol)
				.build();
	}
	
	public TickField makeTickField(String symbol, double price) {
		return TickField.newBuilder()
				.setGatewayId(gatewayId)
				.setChannelType(ChannelType.SIM.toString())
				.setUnifiedSymbol(symbol + "@SHFE@FUTURES")
				.setActionDay(LocalDate.now().format(DateTimeConstant.D_FORMAT_INT_FORMATTER))
				.setActionTime(LocalTime.now().format(DateTimeConstant.T_FORMAT_WITH_MS_INT_FORMATTER))
				.setActionTimestamp(System.currentTimeMillis())
				.addAllAskPrice(List.of(price + 1D, 0D, 0D, 0D, 0D))
				.addAllBidPrice(List.of(price - 1D, 0D, 0D, 0D, 0D))
				.setLastPrice(price)
				.setStatus(TickType.NORMAL_TICK.getCode())
				.setTradingDay(LocalDate.now().format(DateTimeConstant.D_FORMAT_INT_FORMATTER))
				.build();
	}
	
	public BarField makeBarField(String symbol, double price, double deltaRange, LocalDateTime ldt) {
		double dif1 = ThreadLocalRandom.current().nextDouble(deltaRange);
		double dif2 = ThreadLocalRandom.current().nextDouble(deltaRange);
		double dif3 = ThreadLocalRandom.current().nextDouble(deltaRange);
		return BarField.newBuilder()
				.setGatewayId(gatewayId)
				.setChannelType(ChannelType.SIM.toString())
				.setUnifiedSymbol(symbol)
				.setUnifiedSymbol(symbol + "@SHFE@FUTURES")
				.setActionDay(ldt.toLocalDate().format(DateTimeConstant.D_FORMAT_INT_FORMATTER))
				.setActionTime(ldt.toLocalTime().format(DateTimeConstant.T_FORMAT_FORMATTER))
				.setActionTimestamp(ldt.toInstant(ZoneOffset.ofHours(8)).toEpochMilli())
				.setTradingDay(ldt.toLocalDate().format(DateTimeConstant.D_FORMAT_INT_FORMATTER))
				.setOpenPrice(price + dif1)
				.setHighPrice(price + Math.max(dif3, Math.max(dif1, dif2)))
				.setLowPrice(price + Math.min(dif3, Math.min(dif1, dif2)))
				.setClosePrice(price)
				.build();
	}
	
	public GatewaySettingField makeGatewaySetting() {
		return GatewaySettingField.newBuilder()
				.setGatewayId(gatewayId)
				.build();
	}
	
	public OrderField makeOrderField(String symbol, double price, int vol, DirectionEnum dir, OffsetFlagEnum offset) {
		return OrderField.newBuilder()
				.setOriginOrderId(UUID.randomUUID().toString())
				.setContract(makeContract(symbol))
				.setPrice(price)
				.setTotalVolume(vol)
				.setDirection(dir)
				.setOffsetFlag(offset)
				.setTradingDay(LocalDate.now().format(DateTimeConstant.D_FORMAT_INT_FORMATTER))
				.build();
	}
	
	public OrderField makeOrderField(String symbol, double price, int vol, DirectionEnum dir, OffsetFlagEnum offset, OrderStatusEnum status) {
		return OrderField.newBuilder()
				.setOriginOrderId(UUID.randomUUID().toString())
				.setContract(makeContract(symbol))
				.setPrice(price)
				.setTotalVolume(vol)
				.setDirection(dir)
				.setOffsetFlag(offset)
				.setOrderStatus(status)
				.setTradingDay(LocalDate.now().format(DateTimeConstant.D_FORMAT_INT_FORMATTER))
				.setGatewayId(gatewayId)
				.build();
	}
	
	public TradeField makeTradeField(String symbol, double price, int vol, DirectionEnum dir, OffsetFlagEnum offset) {
		return TradeField.newBuilder()
				.setOriginOrderId(UUID.randomUUID().toString())
				.setContract(makeContract(symbol))
				.setPrice(price)
				.setVolume(vol)
				.setDirection(dir)
				.setOffsetFlag(offset)
				.setTradingDay(LocalDate.now().format(DateTimeConstant.D_FORMAT_INT_FORMATTER))
				.setGatewayId(gatewayId)
				.build();
	}

	public TradeField makeTradeField(String symbol, double price, int vol, DirectionEnum dir, OffsetFlagEnum offset, String tradingDay) {
		return TradeField.newBuilder()
				.setOriginOrderId(UUID.randomUUID().toString())
				.setContract(makeContract(symbol))
				.setPrice(price)
				.setVolume(vol)
				.setDirection(dir)
				.setOffsetFlag(offset)
				.setTradingDay(tradingDay)
				.setTradeTimestamp(LocalDateTime.of(LocalDate.parse(tradingDay, DateTimeConstant.D_FORMAT_INT_FORMATTER), LocalTime.now()).toInstant(ZoneOffset.ofHours(8)).toEpochMilli())
				.setGatewayId(gatewayId)
				.build();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy