提示
代码只能运行在恒易交易系统上
问题
- 每次不能全部抓住收益,总是很快就平单
- 每一单的亏损较大,胜率有时较高,有时很低
package com.hengyi.strategytemplate.strategy;
import com.alibaba.fastjson.JSONObject;
import com.hengyi.tradesystem.entity.KLine;
import com.hengyi.tradesystem.entity.OrderProfit;
import com.hengyi.tradesystem.entity.Strategy;
import com.hengyi.tradesystem.enums.AlarmLevel;
import com.hengyi.tradesystem.enums.KLineType;
import com.hengyi.tradesystem.enums.OrdersType;
import com.hengyi.tradesystem.strategy.impl.BaseStrategy;
import com.hengyi.tradesystem.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.List;
/**
* RSI策略
*
* @author dongzp
* @version 1.0
* @desc ssss
**/
@Slf4j
@Component
public class RsiStrategy extends BaseStrategy {
@Override
public void init(String accountStrategyId, String strategyId, String accountId, String backTestId, Long jobId, String symbol, OrdersType ordersType, JSONObject runParams) {
super.init(accountStrategyId, strategyId, accountId, backTestId, jobId, symbol, ordersType, runParams);
}
@Override
public void pre(Strategy strategy) {
System.out.println("=======================执行策略之前============================");
}
@Override
public void run(Strategy strategy,Long currentTime) {
// 回测不发送邮件
setSendMail(false);
// 这里可以根据策略需要编写业务代码
System.out.println("执行策略中,当前日期:" + DateUtils.dateToStr(DateUtils.timestampToDate(currentTime)));
List<KLine> kLineList = getKLineList("5m", 20);
// 判断买点
double[] rsi = getRsi(kLineList,6);
double[][] kdj = getKdj(kLineList, 9, 3, 3);
double nowRsi = rsi[rsi.length - 1];
double nowK = kdj[0][kdj[0].length - 1];
double nowD = kdj[1][kdj[1].length - 1];
double nowJ = kdj[2][kdj[2].length - 1];
// 放量
int longVolumeNum = getLongVolumeNum(kLineList,10,3,true);
// 卖点
int entityUpNum = getEntityNum(kLineList, KLineType.ENTITY_UP, 10,true);
int longEntityUpNum = getLongEntityNum(kLineList,KLineType.ENTITY_UP,10,3,true);
int longShadowUpNum = getLongShadowNum(kLineList,KLineType.SHADOW_UP,10,3,true);
// 买点
int entityDownNum = getEntityNum(kLineList, KLineType.ENTITY_DOWN, 10,true);
int longEntityDownNum = getLongEntityNum(kLineList, KLineType.ENTITY_DOWN, 10, 3,true);
int longShadowDownNum = getLongShadowNum(kLineList,KLineType.SHADOW_DOWN,10,3,true);
log.info("交易对:{} RSI:{}, KDJ:{},{},{}",getSymbol(),nowRsi,nowK,nowD,nowJ);
String openQty = getRunParams().getString("openQty");
log.info("策略开仓的数量设置的是:{},当前最新价:{}",openQty,getNewPrice(true));
Boolean hasOpen = hasOpenOrder();
if(hasOpen){
OrderProfit orderProfit = getOrderProfit();
log.info("目前盈亏率:{} 盈亏金额:{}U 开仓成本:{} 标记价格:{}",orderProfit.getProfitRate(),orderProfit.getProfitValue(),orderProfit.getAvgPrice(),orderProfit.getMarkPrice());
if(orderProfit.getProfitRate().compareTo(new BigDecimal("-0.1")) <= 0){
// 亏损达到10%
closePosition();
alarm("止损平单","您的订单是达到了10%的亏损平掉的", AlarmLevel.INFO);
}
// 开仓均价
BigDecimal openAvgPrice = orderProfit.getAvgPrice();
if(orderProfit.getMarkPrice().compareTo(openAvgPrice) > 0){
// 收益超过5% 出现阴线或者放量就抛出
int openEntityDownNum = getEntityNum(kLineList,KLineType.ENTITY_DOWN,3,true);
int openLongEntityDownNum = getLongEntityNum(kLineList,KLineType.ENTITY_DOWN,1,3,true);
int openLongVolumeNum = getLongVolumeNum(kLineList,1,3,true);
if(orderProfit.getProfitRate().compareTo(new BigDecimal("0.1")) >= 0 && (openLongEntityDownNum > 0 || openLongVolumeNum > 0 || openEntityDownNum >= 3)){
closePosition();
alarm("止盈平单","您的订单是最近出现打的波动被平掉的", AlarmLevel.INFO);
return;
}
if((longEntityUpNum >= 2 || entityUpNum >= 7 || longShadowUpNum > 0) && (nowJ >= 100 || (nowK >=80 && nowD >=80 && nowJ >=80)) && nowRsi >=85){
// 判断是否有
closePosition();
alarm("止盈平单","您的订单是根据指标到达设定值被平掉的", AlarmLevel.INFO);
}
}
}else{
if((longVolumeNum >= 0 || longEntityDownNum >= 1 || longShadowDownNum >= 1 || entityDownNum >=7) && ((nowJ <= -1 || (nowK <=20 && nowD <=20 && nowJ <=20)) && nowRsi <= 18)){
openLong(String.valueOf(System.currentTimeMillis()),"",openQty);
}
}
}
@Override
public void post(Strategy strategy) {
System.out.println("=======================执行策略之后=======================");
}
}













网友评论