goldenChat base source add

This commit is contained in:
aidev
2026-05-23 15:11:48 +09:00
commit a4ea7762b5
2081 changed files with 1155760 additions and 0 deletions
@@ -0,0 +1,77 @@
/*
* SPDX-License-Identifier: MIT
*/
package ta4jexamples.analysis;
import java.text.DecimalFormat;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.ta4j.core.BarSeries;
import org.ta4j.core.BaseStrategy;
import org.ta4j.core.Indicator;
import org.ta4j.core.Rule;
import org.ta4j.core.Strategy;
import org.ta4j.core.Trade;
import org.ta4j.core.TradingRecord;
import org.ta4j.core.analysis.cost.CostModel;
import org.ta4j.core.analysis.cost.LinearBorrowingCostModel;
import org.ta4j.core.analysis.cost.LinearTransactionCostModel;
import org.ta4j.core.backtest.BarSeriesManager;
import org.ta4j.core.indicators.averages.SMAIndicator;
import org.ta4j.core.indicators.helpers.ClosePriceIndicator;
import org.ta4j.core.num.Num;
import org.ta4j.core.rules.OverIndicatorRule;
import org.ta4j.core.rules.UnderIndicatorRule;
import ta4jexamples.datasources.BitStampCsvTradesFileBarSeriesDataSource;
/**
* This class displays an example of the transaction cost calculation.
*/
public class TradeCost {
private static final Logger LOG = LogManager.getLogger(TradeCost.class);
public static void main(String[] args) {
// Getting the bar series
BarSeries series = BitStampCsvTradesFileBarSeriesDataSource.loadBitstampSeries();
// Building the short selling trading strategy
Strategy strategy = buildShortSellingMomentumStrategy(series);
// Setting the trading cost models
double feePerTrade = 0.0005;
double borrowingFee = 0.00001;
CostModel transactionCostModel = new LinearTransactionCostModel(feePerTrade);
CostModel borrowingCostModel = new LinearBorrowingCostModel(borrowingFee);
// Running the strategy
BarSeriesManager seriesManager = new BarSeriesManager(series, transactionCostModel, borrowingCostModel);
Trade.TradeType entryTrade = Trade.TradeType.SELL;
TradingRecord tradingRecord = seriesManager.run(strategy, entryTrade);
DecimalFormat df = new DecimalFormat("##.##");
LOG.debug("------------ Borrowing Costs ------------");
tradingRecord.getPositions()
.forEach(position -> LOG.debug("Borrowing cost for {} periods is: {}",
df.format(position.getExit().getIndex() - position.getEntry().getIndex()),
df.format(position.getHoldingCost().doubleValue())));
LOG.debug("------------ Transaction Costs ------------");
tradingRecord.getPositions()
.forEach(position -> LOG.debug("Transaction cost for selling: {} -- Transaction cost for buying: {}",
df.format(position.getEntry().getCost().doubleValue()),
df.format(position.getExit().getCost().doubleValue())));
}
private static Strategy buildShortSellingMomentumStrategy(BarSeries series) {
Indicator<Num> closingPrices = new ClosePriceIndicator(series);
SMAIndicator shortEma = new SMAIndicator(closingPrices, 10);
SMAIndicator longEma = new SMAIndicator(closingPrices, 50);
Rule shortOverLongRule = new OverIndicatorRule(shortEma, longEma);
Rule shortUnderLongRule = new UnderIndicatorRule(shortEma, longEma);
String strategyName = "Momentum short-selling strategy";
return new BaseStrategy(strategyName, shortOverLongRule, shortUnderLongRule);
}
}