本文整理汇总了Java中eu.verdelhan.ta4j.Tick类的典型用法代码示例。如果您正苦于以下问题:Java Tick类的具体用法?Java Tick怎么用?Java Tick使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Tick类属于eu.verdelhan.ta4j包,在下文中一共展示了Tick类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。
示例1: calculate
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Override
protected NR7Breakout calculate(int index) {
if (index <= nr7Index) {
return null;
}
for (int i = firstIndex; i <= index; i++) {
Tick tick = timeSeries.getTick(i);
Tick nr7Tick = timeSeries.getTick(nr7Index);
if (tick.getClosePrice().isGreaterThan(nr7Tick.getMaxPrice())) { // Return the first bullish signal found
return new NR7Breakout(nr7Tick, tick, Sentiment.BULLISH);
}
if (tick.getClosePrice().isLessThan(nr7Tick.getMinPrice())) { // Return the first bearish signal found
return new NR7Breakout(nr7Tick, tick, Sentiment.BEARISH);
}
}
return null;
}
开发者ID:woodberry,项目名称:ta-toolbox,代码行数:18,代码来源:NR7BreakoutIndicator.java
示例2: createTickData
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
public static List<Tick> createTickData(String stubData, String separator, Pattern header, DateTimeFormatter dtf) {
List<Tick> ticks = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(StubDataTestUtils.class.getResourceAsStream(stubData)));
String line;
try {
while ((line = bufferedReader.readLine()) != null) {
String[] data = line.split(separator);
if (data == null || (header != null && header.matcher(line).matches()) || line.startsWith(COMMENT_LINE)) { // Headers, comments, no data
continue;
}
DateTime dt = dtf != null ? DateTime.parse(data[TIMESTAMP], dtf) : DateTime.parse(data[TIMESTAMP]);
Tick tick = new Tick(dt, Double.parseDouble(data[OPEN]), Double.parseDouble(data[HIGH]), Double.parseDouble(data[LOW]),
Double.parseDouble(data[CLOSE]), Double.parseDouble(data[VOLUME]));
ticks.add(tick);
}
bufferedReader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
return ticks;
}
开发者ID:woodberry,项目名称:ta-toolbox,代码行数:22,代码来源:StubDataTestUtils.java
示例3: testLinearRegressionIndicator
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Test
public void testLinearRegressionIndicator() {
/*
* Example adapted from: http://onlinestatbook.com/2/regression/intro.html
*/
List<Tick> ticks = Arrays.asList(
new Tick(DateTime.parse("2001-01-01"), 0,0,0,1,0),
new Tick(DateTime.parse("2001-01-02"), 0,0,0,2,0),
new Tick(DateTime.parse("2001-01-03"), 0,0,0,1.3,0),
new Tick(DateTime.parse("2001-01-04"), 0,0,0,3.75,0),
new Tick(DateTime.parse("2001-01-05"), 0,0,0,2.25,0)
);
TimeSeries timeSeries = new TimeSeries(ticks);
LinearRegressionIndicator linearRegressionIndicator = new LinearRegressionIndicator(new ClosePriceIndicator(timeSeries), timeSeries.getEnd());
assertDecimalEquals(linearRegressionIndicator.getValue(0), 1.21);
assertDecimalEquals(linearRegressionIndicator.getValue(1), 1.635);
assertDecimalEquals(linearRegressionIndicator.getValue(2), 2.06);
assertDecimalEquals(linearRegressionIndicator.getValue(3), 2.485);
assertDecimalEquals(linearRegressionIndicator.getValue(4), 2.91);
}
开发者ID:woodberry,项目名称:ta-toolbox,代码行数:22,代码来源:LinearRegressionIndicatorTest.java
示例4: createOHLCDataset
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
/**
* Builds a JFreeChart OHLC dataset from a ta4j time series.
* @param series a time series
* @return an Open-High-Low-Close dataset
*/
private static OHLCDataset createOHLCDataset(TimeSeries series) {
final int nbTicks = series.getTickCount();
Date[] dates = new Date[nbTicks];
double[] opens = new double[nbTicks];
double[] highs = new double[nbTicks];
double[] lows = new double[nbTicks];
double[] closes = new double[nbTicks];
double[] volumes = new double[nbTicks];
for (int i = 0; i < nbTicks; i++) {
Tick tick = series.getTick(i);
dates[i] = new Date(tick.getEndTime().toEpochSecond() * 1000);
opens[i] = tick.getOpenPrice().toDouble();
highs[i] = tick.getMaxPrice().toDouble();
lows[i] = tick.getMinPrice().toDouble();
closes[i] = tick.getClosePrice().toDouble();
volumes[i] = tick.getVolume().toDouble();
}
OHLCDataset dataset = new DefaultHighLowDataset("btc", dates, highs, lows, opens, closes, volumes);
return dataset;
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:30,代码来源:CandlestickChart.java
示例5: calculate
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Override
protected Boolean calculate(int index) {
if (index < 1) {
// Harami is a 2-candle pattern
return false;
}
Tick prevTick = series.getTick(index-1);
Tick currTick = series.getTick(index);
if (prevTick.isBearish() && currTick.isBullish()) {
final Decimal prevOpenPrice = prevTick.getOpenPrice();
final Decimal prevClosePrice = prevTick.getClosePrice();
final Decimal currOpenPrice = currTick.getOpenPrice();
final Decimal currClosePrice = currTick.getClosePrice();
return currOpenPrice.isLessThan(prevOpenPrice) && currOpenPrice.isGreaterThan(prevClosePrice)
&& currClosePrice.isLessThan(prevOpenPrice) && currClosePrice.isGreaterThan(prevClosePrice);
}
return false;
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:19,代码来源:BullishHaramiIndicator.java
示例6: calculate
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Override
protected Boolean calculate(int index) {
if (index < 1) {
// Harami is a 2-candle pattern
return false;
}
Tick prevTick = series.getTick(index-1);
Tick currTick = series.getTick(index);
if (prevTick.isBullish() && currTick.isBearish()) {
final Decimal prevOpenPrice = prevTick.getOpenPrice();
final Decimal prevClosePrice = prevTick.getClosePrice();
final Decimal currOpenPrice = currTick.getOpenPrice();
final Decimal currClosePrice = currTick.getClosePrice();
return currOpenPrice.isGreaterThan(prevOpenPrice) && currOpenPrice.isLessThan(prevClosePrice)
&& currClosePrice.isGreaterThan(prevOpenPrice) && currClosePrice.isLessThan(prevClosePrice);
}
return false;
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:19,代码来源:BearishHaramiIndicator.java
示例7: calculate
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Override
protected Boolean calculate(int index) {
if (index < 1) {
// Engulfing is a 2-candle pattern
return false;
}
Tick prevTick = series.getTick(index-1);
Tick currTick = series.getTick(index);
if (prevTick.isBullish() && currTick.isBearish()) {
final Decimal prevOpenPrice = prevTick.getOpenPrice();
final Decimal prevClosePrice = prevTick.getClosePrice();
final Decimal currOpenPrice = currTick.getOpenPrice();
final Decimal currClosePrice = currTick.getClosePrice();
return currOpenPrice.isGreaterThan(prevOpenPrice) && currOpenPrice.isGreaterThan(prevClosePrice)
&& currClosePrice.isLessThan(prevOpenPrice) && currClosePrice.isLessThan(prevClosePrice);
}
return false;
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:19,代码来源:BearishEngulfingIndicator.java
示例8: calculate
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Override
protected Boolean calculate(int index) {
if (index < 1) {
// Engulfing is a 2-candle pattern
return false;
}
Tick prevTick = series.getTick(index-1);
Tick currTick = series.getTick(index);
if (prevTick.isBearish() && currTick.isBullish()) {
final Decimal prevOpenPrice = prevTick.getOpenPrice();
final Decimal prevClosePrice = prevTick.getClosePrice();
final Decimal currOpenPrice = currTick.getOpenPrice();
final Decimal currClosePrice = currTick.getClosePrice();
return currOpenPrice.isLessThan(prevOpenPrice) && currOpenPrice.isLessThan(prevClosePrice)
&& currClosePrice.isGreaterThan(prevOpenPrice) && currClosePrice.isGreaterThan(prevClosePrice);
}
return false;
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:19,代码来源:BullishEngulfingIndicator.java
示例9: calculate
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Override
protected Decimal calculate(int index) {
if (index == 0) {
return Decimal.THOUSAND;
}
Tick currentTick = series.getTick(index);
Tick previousTick = series.getTick(index - 1);
Decimal previousValue = getValue(index - 1);
if (currentTick.getVolume().isLessThan(previousTick.getVolume())) {
Decimal currentPrice = currentTick.getClosePrice();
Decimal previousPrice = previousTick.getClosePrice();
Decimal priceChangeRatio = currentPrice.minus(previousPrice).dividedBy(previousPrice);
return previousValue.plus(priceChangeRatio.multipliedBy(previousValue));
}
return previousValue;
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:19,代码来源:NVIIndicator.java
示例10: calculate
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Override
protected Decimal calculate(int index) {
if (index == 0) {
return Decimal.THOUSAND;
}
Tick currentTick = series.getTick(index);
Tick previousTick = series.getTick(index - 1);
Decimal previousValue = getValue(index - 1);
if (currentTick.getVolume().isGreaterThan(previousTick.getVolume())) {
Decimal currentPrice = currentTick.getClosePrice();
Decimal previousPrice = previousTick.getClosePrice();
Decimal priceChangeRatio = currentPrice.minus(previousPrice).dividedBy(previousPrice);
return previousValue.plus(priceChangeRatio.multipliedBy(previousValue));
}
return previousValue;
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:19,代码来源:PVIIndicator.java
示例11: averageDirectionalMovement
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Test
public void averageDirectionalMovement()
{
MockTick tick1 = new MockTick(0, 0, 13, 7);
MockTick tick2 = new MockTick(0, 0, 11, 5);
MockTick tick3 = new MockTick(0, 0, 15, 3);
MockTick tick4 = new MockTick(0, 0, 14, 2);
MockTick tick5 = new MockTick(0, 0, 13, 0.2);
List<Tick> ticks = new ArrayList<Tick>();
ticks.add(tick1);
ticks.add(tick2);
ticks.add(tick3);
ticks.add(tick4);
ticks.add(tick5);
MockTimeSeries series = new MockTimeSeries(ticks);
AverageDirectionalMovementDownIndicator admdown = new AverageDirectionalMovementDownIndicator(series, 3);
assertDecimalEquals(admdown.getValue(0), 1);
assertDecimalEquals(admdown.getValue(1), 4d/3);
assertDecimalEquals(admdown.getValue(2), 4d/3 * 2d/3);
assertDecimalEquals(admdown.getValue(3), (4d/3 * 2d/3) * 2d/3 + 1d/3);
assertDecimalEquals(admdown.getValue(4), ((4d/3 * 2d/3) * 2d/3 + 1d/3) * 2d/3 + 1.8 * 1d/3);
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:25,代码来源:AverageDirectionalMovementDownIndicatorTest.java
示例12: setUp
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Before
public void setUp() {
Random r = new Random();
List<Tick> ticks = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
double open = r.nextDouble();
double close = r.nextDouble();
double max = Math.max(close+r.nextDouble(), open+r.nextDouble());
double min = Math.min(0, Math.min(close-r.nextDouble(), open-r.nextDouble()));
ZonedDateTime dateTime = ZonedDateTime.now();
Tick tick = new BaseTick(dateTime, open, close, max, min, i);
ticks.add(tick);
}
this.series = new BaseTimeSeries("test", ticks);
this.openPriceIndicator = new OpenPriceIndicator(this.series);
this.minPriceIndicator = new MinPriceIndicator(this.series);
this.maxPriceIndicator = new MaxPriceIndicator(this.series);
this.volumeIndicator = new VolumeIndicator(this.series);
this.closePriceIndicator = new ClosePriceIndicator(this.series);
this.emaIndicator = new EMAIndicator(this.closePriceIndicator, 20);
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:23,代码来源:PreviousValueIndicatorTest.java
示例13: averageDirectionalMovement
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Test
public void averageDirectionalMovement()
{
List<Tick> ticks = new ArrayList<Tick>();
ticks.add(new MockTick(0, 0, 10, 2));
ticks.add(new MockTick(0, 0, 12, 2));
ticks.add(new MockTick(0, 0, 15, 2));
ticks.add(new MockTick(0, 0, 11, 2));
ticks.add(new MockTick(0, 0, 13, 7));
MockTimeSeries series = new MockTimeSeries(ticks);
AverageDirectionalMovementUpIndicator admup = new AverageDirectionalMovementUpIndicator(series, 3);
assertDecimalEquals(admup.getValue(0), 1);
assertDecimalEquals(admup.getValue(1), 4d/3);
assertDecimalEquals(admup.getValue(2), 4d/3 * 2d/3 + 1);
assertDecimalEquals(admup.getValue(3), (4d/3 * 2d/3 + 1) * 2d/3);
assertDecimalEquals(admup.getValue(4), (4d/3 * 2d/3 + 1) * 2d/3 * 2d/3 + 2d/3);
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:19,代码来源:AverageDirectionalMovementUpIndicatorTest.java
示例14: sumOfVolume
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Test
public void sumOfVolume() {
List<Tick> ticks = new ArrayList<Tick>();
ticks.add(new MockTick(0, 10));
ticks.add(new MockTick(0, 11));
ticks.add(new MockTick(0, 12));
ticks.add(new MockTick(0, 13));
ticks.add(new MockTick(0, 150));
ticks.add(new MockTick(0, 155));
ticks.add(new MockTick(0, 160));
VolumeIndicator volumeIndicator = new VolumeIndicator(new MockTimeSeries(ticks), 3);
assertDecimalEquals(volumeIndicator.getValue(0), 10);
assertDecimalEquals(volumeIndicator.getValue(1), 21);
assertDecimalEquals(volumeIndicator.getValue(2), 33);
assertDecimalEquals(volumeIndicator.getValue(3), 36);
assertDecimalEquals(volumeIndicator.getValue(4), 175);
assertDecimalEquals(volumeIndicator.getValue(5), 318);
assertDecimalEquals(volumeIndicator.getValue(6), 465);
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:21,代码来源:VolumeIndicatorTest.java
示例15: getValue
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Test
public void getValue()
{
List<Tick> ticks = new ArrayList<Tick>();
ticks.add(new MockTick(0, 0, 10, 2));
ticks.add(new MockTick(0, 0, 12, 2));
ticks.add(new MockTick(0, 0, 15, 2));
ticks.add(new MockTick(0, 0, 11, 2));
ticks.add(new MockTick(0, 0, 13, 7));
MockTimeSeries series = new MockTimeSeries(ticks);
DirectionalUpIndicator dup = new DirectionalUpIndicator(series, 3);
assertDecimalEquals(dup.getValue(0), 1);
assertDecimalEquals(dup.getValue(1), (4d/3) / (14d/3));
assertDecimalEquals(dup.getValue(2), (4d/3 * 2d/3 + 1) / (14d/3 * 2d/3 + 15d/3));
assertDecimalEquals(dup.getValue(3), ((4d/3 * 2d/3 + 1) * 2d/3) / (((14d/3 * 2d/3 + 15d/3) * 2d/3) + 11d/3));
assertDecimalEquals(dup.getValue(4), ((4d/3 * 2d/3 + 1) * 2d/3 * 2d/3 + 2d/3) / (((((14d/3 * 2d/3 + 15d/3) * 2d/3) + 11d/3) * 2d/3) + 13d/3));
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:20,代码来源:DirectionalUpIndicatorTest.java
示例16: setUp
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Before
public void setUp() {
List<Tick> ticks = new ArrayList<Tick>();
ticks.add(new MockTick(0, 0, 16, 8));
ticks.add(new MockTick(0, 0, 12, 6));
ticks.add(new MockTick(0, 0, 18, 14));
ticks.add(new MockTick(0, 0, 10, 6));
ticks.add(new MockTick(0, 0, 32, 6));
ticks.add(new MockTick(0, 0, 2, 2));
ticks.add(new MockTick(0, 0, 0, 0));
ticks.add(new MockTick(0, 0, 8, 1));
ticks.add(new MockTick(0, 0, 83, 32));
ticks.add(new MockTick(0, 0, 9, 3));
this.timeSeries = new MockTimeSeries(ticks);
average = new MedianPriceIndicator(timeSeries);
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:20,代码来源:MedianPriceIndicatorTest.java
示例17: averageDirectionalMovement
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Test
public void averageDirectionalMovement()
{
List<Tick> ticks = new ArrayList<Tick>();
ticks.add(new MockTick(0, 0, 13, 7));
ticks.add(new MockTick(0, 0, 11, 5));
ticks.add(new MockTick(0, 0, 15, 3));
ticks.add(new MockTick(0, 0, 14, 2));
ticks.add(new MockTick(0, 0, 13, 0.2));
MockTimeSeries series = new MockTimeSeries(ticks);
DirectionalDownIndicator ddown = new DirectionalDownIndicator(series, 3);
assertDecimalEquals(ddown.getValue(0), 1);
assertDecimalEquals(ddown.getValue(1), (4d/3) / (13d/3));
assertDecimalEquals(ddown.getValue(2), (4d/3 * 2d/3) / (13d/3 * 2d/3 + 15d/3));
assertDecimalEquals(ddown.getValue(3), ((4d/3 * 2d/3) * 2d/3 + 1d/3) / (((13d/3 * 2d/3 + 15d/3) * 2d/3) + 14d/3));
assertDecimalEquals(ddown.getValue(4), (((4d/3 * 2d/3) * 2d/3 + 1d/3) * 2d/3 + 1.8 * 1d/3) / (((((13d/3 * 2d/3 + 15d/3) * 2d/3) + 14d/3) * 2d/3) + 13d/3));
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:20,代码来源:DirectionalDownIndicatorTest.java
示例18: getValue
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Test
public void getValue() {
List<Tick> ticks = new ArrayList<Tick>();
ticks.add(new MockTick(0, 12, 15, 8));
ticks.add(new MockTick(0, 8, 11, 6));
ticks.add(new MockTick(0, 15, 17, 14));
ticks.add(new MockTick(0, 15, 17, 14));
ticks.add(new MockTick(0, 0, 0, 2));
AverageTrueRangeIndicator atr = new AverageTrueRangeIndicator(new MockTimeSeries(ticks), 3);
assertDecimalEquals(atr.getValue(0), 1);
assertDecimalEquals(atr.getValue(1), 8d/3);
assertDecimalEquals(atr.getValue(2), 8d/3 * 2d/3 + 3);
assertDecimalEquals(atr.getValue(3), (8d/3 * 2d/3 + 3) * 2d/3 + 1);
assertDecimalEquals(atr.getValue(4), ((8d/3 * 2d/3 + 3) * 2d/3 + 1) * 2d/3 + 15d/3);
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:17,代码来源:AverageTrueRangeIndicatorTest.java
示例19: getValue
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Test
public void getValue() {
List<Tick> ticks = new ArrayList<Tick>();
ticks.add(new MockTick(0, 12, 15, 8));
ticks.add(new MockTick(0, 8, 11, 6));
ticks.add(new MockTick(0, 15, 17, 14));
ticks.add(new MockTick(0, 15, 17, 14));
ticks.add(new MockTick(0, 0, 0, 2));
TrueRangeIndicator tr = new TrueRangeIndicator(new MockTimeSeries(ticks));
assertDecimalEquals(tr.getValue(0), 7);
assertDecimalEquals(tr.getValue(1), 6);
assertDecimalEquals(tr.getValue(2), 9);
assertDecimalEquals(tr.getValue(3), 3);
assertDecimalEquals(tr.getValue(4), 15);
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:17,代码来源:TrueRangeIndicatorTest.java
示例20: setUp
import eu.verdelhan.ta4j.Tick; //导入依赖的package包/类
@Before
public void setUp() {
List<Tick> ticks = new ArrayList<Tick>();
ticks.add(new MockTick(44.98, 45.05, 45.17, 44.96));
ticks.add(new MockTick(45.05, 45.10, 45.15, 44.99));
ticks.add(new MockTick(45.11, 45.19, 45.32, 45.11));
ticks.add(new MockTick(45.19, 45.14, 45.25, 45.04));
ticks.add(new MockTick(45.12, 45.15, 45.20, 45.10));
ticks.add(new MockTick(45.15, 45.14, 45.20, 45.10));
ticks.add(new MockTick(45.13, 45.10, 45.16, 45.07));
ticks.add(new MockTick(45.12, 45.15, 45.22, 45.10));
ticks.add(new MockTick(45.15, 45.22, 45.27, 45.14));
ticks.add(new MockTick(45.24, 45.43, 45.45, 45.20));
ticks.add(new MockTick(45.43, 45.44, 45.50, 45.39));
ticks.add(new MockTick(45.43, 45.55, 45.60, 45.35));
ticks.add(new MockTick(45.58, 45.55, 45.61, 45.39));
ticks.add(new MockTick(45.45, 45.01, 45.55, 44.80));
ticks.add(new MockTick(45.03, 44.23, 45.04, 44.17));
ticks.add(new MockTick(44.23, 43.95, 44.29, 43.81));
ticks.add(new MockTick(43.91, 43.08, 43.99, 43.08));
ticks.add(new MockTick(43.07, 43.55, 43.65, 43.06));
ticks.add(new MockTick(43.56, 43.95, 43.99, 43.53));
ticks.add(new MockTick(43.93, 44.47, 44.58, 43.93));
data = new MockTimeSeries(ticks);
}
开发者ID:mdeverdelhan,项目名称:ta4j-origins,代码行数:27,代码来源:IchimokuIndicatorTest.java
注:本文中的eu.verdelhan.ta4j.Tick类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论