You can subscribe to this list here.
| 2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(148) |
Jun
(48) |
Jul
(107) |
Aug
(292) |
Sep
(301) |
Oct
(530) |
Nov
(142) |
Dec
(37) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
|
Feb
|
Mar
(4) |
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: xanaot <xa...@us...> - 2007-10-03 19:59:53
|
Update of /cvsroot/tail/Tail/src/test/net/sf/tail/report/html In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv24481/src/test/net/sf/tail/report/html Modified Files: CompleteHtmlGeneratorExecutor.java Log Message: Refatoração nas classes de geração de report. Index: CompleteHtmlGeneratorExecutor.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/report/html/CompleteHtmlGeneratorExecutor.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** CompleteHtmlGeneratorExecutor.java 3 Oct 2007 17:47:00 -0000 1.3 --- CompleteHtmlGeneratorExecutor.java 3 Oct 2007 19:59:55 -0000 1.4 *************** *** 4,10 **** --- 4,13 ---- import java.io.FileNotFoundException; import java.io.IOException; + import java.util.ArrayList; import java.util.HashSet; + import java.util.List; import java.util.Set; + import net.sf.tail.AnalysisCriterion; import net.sf.tail.Indicator; import net.sf.tail.OperationType; *************** *** 13,21 **** import net.sf.tail.TimeSeries; import net.sf.tail.Walker; import net.sf.tail.analysis.criteria.TotalProfitCriterion; import net.sf.tail.analysis.evaluator.BestStrategyEvaluator; import net.sf.tail.analysis.walk.WalkForward; import net.sf.tail.indicator.simple.ClosePriceIndicator; ! import net.sf.tail.indicator.tracker.EMAIndicator; import net.sf.tail.io.reader.CedroTimeSeriesLoader; import net.sf.tail.report.Report; --- 16,30 ---- import net.sf.tail.TimeSeries; import net.sf.tail.Walker; + import net.sf.tail.analysis.criteria.AverageProfitCriterion; + import net.sf.tail.analysis.criteria.BuyAndHoldCriterion; + import net.sf.tail.analysis.criteria.NumberOfTicksCriterion; + import net.sf.tail.analysis.criteria.RewardRiskRatioCriterion; import net.sf.tail.analysis.criteria.TotalProfitCriterion; + import net.sf.tail.analysis.criteria.VersusBuyAndHoldCriterion; import net.sf.tail.analysis.evaluator.BestStrategyEvaluator; import net.sf.tail.analysis.walk.WalkForward; import net.sf.tail.indicator.simple.ClosePriceIndicator; ! import net.sf.tail.indicator.tracker.ParabolicSarIndicator; ! import net.sf.tail.indicator.tracker.SMAIndicator; import net.sf.tail.io.reader.CedroTimeSeriesLoader; import net.sf.tail.report.Report; *************** *** 24,27 **** --- 33,37 ---- import net.sf.tail.strategy.IndicatorCrossedIndicatorStrategy; + import org.joda.time.DateTime; import org.joda.time.Period; *************** *** 34,38 **** try { ! timeSeries = ctsl.load(new FileInputStream("BaseBovespa/15min/ambv4.csv"), "Ambev (ambv4)"); } catch (FileNotFoundException e) { e.printStackTrace(); --- 44,48 ---- try { ! timeSeries = ctsl.load(new FileInputStream("BaseBovespa/diario/petr4Dia.csv"), "Petrobras (petr4)"); } catch (FileNotFoundException e) { e.printStackTrace(); *************** *** 46,58 **** for (int i = 4; i < 20; i++) { ! Indicator<Double> tracker = new EMAIndicator(close, i); Strategy strategy = new IndicatorCrossedIndicatorStrategy(close, tracker); strategies.add(strategy); } ! Report r = w.walk(strategies, new SlicerByTimePeriod(timeSeries, new Period().withMonths(1), SlicerType.MEMORIZED), new TotalProfitCriterion()); ! CompleteHtmlGenerator complete = new CompleteHtmlGenerator(r, new Period().withMonths(1)); complete.generate(); --- 56,80 ---- for (int i = 4; i < 20; i++) { ! Indicator<Double> tracker = new SMAIndicator(close, i); Strategy strategy = new IndicatorCrossedIndicatorStrategy(close, tracker); strategies.add(strategy); } + + Indicator<Double> tracker = new ParabolicSarIndicator(timeSeries); + Strategy strategy = new IndicatorCrossedIndicatorStrategy(close, tracker); + strategies.add(strategy); ! Report r = w.walk(strategies, new SlicerByTimePeriod(timeSeries, new Period().withMonths(10), new DateTime(2000, 1, 1, 0, 0, 0, 0), SlicerType.MEMORIZED), new TotalProfitCriterion()); ! List<AnalysisCriterion> criteria = new ArrayList<AnalysisCriterion>(); ! criteria.add(new BuyAndHoldCriterion()); ! criteria.add(new RewardRiskRatioCriterion()); ! criteria.add(new AverageProfitCriterion()); ! criteria.add(new NumberOfTicksCriterion()); ! criteria.add(new VersusBuyAndHoldCriterion(new TotalProfitCriterion())); ! ! ! CompleteHtmlGenerator complete = new CompleteHtmlGenerator(r, criteria, new Period().withMonths(1)); complete.generate(); |
|
From: xanaot <xa...@us...> - 2007-10-03 19:57:59
|
Update of /cvsroot/tail/Tail/reports/templates/slice In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv23465/reports/templates/slice Modified Files: sliceReport.ftl Log Message: Refatoração nas classes de geração de report. Index: sliceReport.ftl =================================================================== RCS file: /cvsroot/tail/Tail/reports/templates/slice/sliceReport.ftl,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** sliceReport.ftl 3 Sep 2007 21:55:30 -0000 1.1 --- sliceReport.ftl 3 Oct 2007 19:57:59 -0000 1.2 *************** *** 36,42 **** <tr class="total"> <td>TOTAL</td> ! <td>${decision.series.getTick(decision.trades.get(0).entry.index).getDateName()}</td> <td>-</td> ! <td>${decision.series.getTick(decision.trades.get(decision.trades.size() - 1).exit.index).getDateName()}</td> <td>-</td> <#list criteria as criterion> --- 36,42 ---- <tr class="total"> <td>TOTAL</td> ! <td>${decision.series.getTick(decision.series.begin).getDateName()}</td> <td>-</td> ! <td>${decision.series.getTick(decision.series.end).getDateName()}</td> <td>-</td> <#list criteria as criterion> |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 19:12:40
|
Update of /cvsroot/tail/TailS/src/java/net/sf/tails/i18n In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv1860/src/java/net/sf/tails/i18n Added Files: DSL_IDE.properties Log Message: criado syntax highlighting --- NEW FILE: DSL_IDE.properties --- RUBY_KEYWORDS= alias and begin break case catch class def do elsif else fail ensure for end if in module next not or raise redo rescue retry return then throw super unless undef until when while yield TAIL_KEYWORDS= ema sma |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 19:12:40
|
Update of /cvsroot/tail/TailS/src/java/net/sf/tails/dsl In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv1578/src/java/net/sf/tails/dsl Log Message: Directory /cvsroot/tail/TailS/src/java/net/sf/tails/dsl added to the repository |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 19:12:40
|
Update of /cvsroot/tail/TailS In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv1860 Modified Files: .classpath Log Message: criado syntax highlighting Index: .classpath =================================================================== RCS file: /cvsroot/tail/TailS/.classpath,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** .classpath 26 Sep 2007 21:13:25 -0000 1.8 --- .classpath 3 Oct 2007 19:12:07 -0000 1.9 *************** *** 11,14 **** --- 11,15 ---- <classpathentry kind="src" path="dsl"/> <classpathentry combineaccessrules="false" kind="src" path="/Tail"/> + <classpathentry combineaccessrules="false" kind="src" path="/syntax"/> <classpathentry kind="output" path="bin"/> </classpath> |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 19:12:40
|
Update of /cvsroot/tail/TailS/src/java/net/sf/tails/swing/frame/report In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv1860/src/java/net/sf/tails/swing/frame/report Modified Files: NewReportFrame.java Log Message: criado syntax highlighting Index: NewReportFrame.java =================================================================== RCS file: /cvsroot/tail/TailS/src/java/net/sf/tails/swing/frame/report/NewReportFrame.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** NewReportFrame.java 3 Oct 2007 18:51:52 -0000 1.7 --- NewReportFrame.java 3 Oct 2007 19:12:07 -0000 1.8 *************** *** 10,13 **** --- 10,17 ---- import javax.swing.JOptionPane; + import org.gjt.sp.jedit.syntax.JEditTextArea; + + import dsl.TailSTokenMarker; + import net.sf.tail.Strategy; import net.sf.tail.analysis.StockAnalysis; *************** *** 36,40 **** private javax.swing.JScrollPane radioGroupScrollPane; private javax.swing.JTabbedPane newReportTabbedPane; ! private javax.swing.JTextArea customStrategyTextArea; private javax.swing.JLabel reportNameLabel; private javax.swing.JTextField reportNameField; --- 40,44 ---- private javax.swing.JScrollPane radioGroupScrollPane; private javax.swing.JTabbedPane newReportTabbedPane; ! private JEditTextArea customStrategyTextArea; private javax.swing.JLabel reportNameLabel; private javax.swing.JTextField reportNameField; *************** *** 63,67 **** customReportPanel = new javax.swing.JPanel(); customStrategyPane = new javax.swing.JScrollPane(); ! customStrategyTextArea = new javax.swing.JTextArea(); customStrategyCreateButton = new javax.swing.JButton(); customStrategyCancelButton = new javax.swing.JButton(); --- 67,71 ---- customReportPanel = new javax.swing.JPanel(); customStrategyPane = new javax.swing.JScrollPane(); ! customStrategyTextArea = new JEditTextArea(); customStrategyCreateButton = new javax.swing.JButton(); customStrategyCancelButton = new javax.swing.JButton(); *************** *** 142,147 **** newReportTabbedPane.addTab("Default Report", defaultReportPanel); ! customStrategyTextArea.setColumns(20); ! customStrategyTextArea.setRows(5); customStrategyTextArea.addKeyListener(new KeyListener(){ @Override --- 146,150 ---- newReportTabbedPane.addTab("Default Report", defaultReportPanel); ! customStrategyTextArea.setTokenMarker(new TailSTokenMarker()); customStrategyTextArea.addKeyListener(new KeyListener(){ @Override |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 19:12:40
|
Update of /cvsroot/tail/TailS/src/java/net/sf/tails/dsl In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv1860/src/java/net/sf/tails/dsl Added Files: TailSTokenMarker.java Log Message: criado syntax highlighting --- NEW FILE: TailSTokenMarker.java --- package net.sf.tails.dsl; import java.util.ResourceBundle; import org.gjt.sp.jedit.syntax.CTokenMarker; import org.gjt.sp.jedit.syntax.KeywordMap; import org.gjt.sp.jedit.syntax.Token; public class TailSTokenMarker extends CTokenMarker { private static String[] rubyKeyWords; private static String[] tailKeyWords; private static KeywordMap TailSKeywords; public TailSTokenMarker() { super(false,getKeywords()); ResourceBundle bundle = ResourceBundle.getBundle("net.sf.tails.i18n.DSL_IDE"); rubyKeyWords = bundle.getString("RUBY_KEYWORDS").split(" "); tailKeyWords = bundle.getString("TAIL_KEYWORDS").split(" "); } public static KeywordMap getKeywords() { if(TailSKeywords == null) { TailSKeywords = new KeywordMap(false); for (String key : rubyKeyWords) { TailSKeywords.add(key, Token.LABEL); } for (String key : tailKeyWords) { TailSKeywords.add(key, Token.KEYWORD2); } } return TailSKeywords; } } |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 18:58:32
|
Update of /cvsroot/tail/Tail/dsl In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv26852/dsl Modified Files: rubyDSLutils.rb Log Message: arrumando testes Index: rubyDSLutils.rb =================================================================== RCS file: /cvsroot/tail/Tail/dsl/rubyDSLutils.rb,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** rubyDSLutils.rb 20 Sep 2007 23:11:38 -0000 1.2 --- rubyDSLutils.rb 3 Oct 2007 18:58:32 -0000 1.3 *************** *** 15,18 **** --- 15,22 ---- end + def sma (number) + Tail::SMAIndicator.new($close, number) + end + def cross (indicator1, indicator2) Tail::IndicatorCrossedIndicatorStrategy.new(indicator1, indicator2) |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 18:58:32
|
Update of /cvsroot/tail/Tail/src/test/net/sf/tail/analysis In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv26852/src/test/net/sf/tail/analysis Modified Files: StockAnalysisTest.java Log Message: arrumando testes Index: StockAnalysisTest.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/analysis/StockAnalysisTest.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** StockAnalysisTest.java 4 Sep 2007 13:09:16 -0000 1.4 --- StockAnalysisTest.java 3 Oct 2007 18:58:32 -0000 1.5 *************** *** 74,78 **** walker = new WalkForward(evaluator); report = walker.walk(strategies, slicer, applyedCriterion); ! this.stockAnalysis = new StockAnalysis(stock, applyedCriterion, slicer, evaluator); } --- 74,78 ---- walker = new WalkForward(evaluator); report = walker.walk(strategies, slicer, applyedCriterion); ! report.setName(""); this.stockAnalysis = new StockAnalysis(stock, applyedCriterion, slicer, evaluator); } *************** *** 80,89 **** @Test public void testCreateReport() { ! assertEquals(report, stockAnalysis.createReport(strategies)); } @Test public void testAddCriterionAndCriteria() { ! stockAnalysis.createReport(strategies); stockAnalysis.addCriterion(new NumberOfTicksCriterion()); assertEquals(1, stockAnalysis.getAdditionalCriteria().size()); --- 80,89 ---- @Test public void testCreateReport() { ! assertEquals(report, stockAnalysis.createReport("",strategies)); } @Test public void testAddCriterionAndCriteria() { ! stockAnalysis.createReport("",strategies); stockAnalysis.addCriterion(new NumberOfTicksCriterion()); assertEquals(1, stockAnalysis.getAdditionalCriteria().size()); |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 18:58:32
|
Update of /cvsroot/tail/Tail/src/test/net/sf/tail/io In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv26852/src/test/net/sf/tail/io Modified Files: SerializerTest.java Log Message: arrumando testes Index: SerializerTest.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/io/SerializerTest.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** SerializerTest.java 26 Sep 2007 19:36:22 -0000 1.6 --- SerializerTest.java 3 Oct 2007 18:58:32 -0000 1.7 *************** *** 90,94 **** } ! stockAnalysis.createReport(strategies); strategies = new HashSet<Strategy>(); --- 90,94 ---- } ! stockAnalysis.createReport("",strategies); strategies = new HashSet<Strategy>(); *************** *** 101,105 **** } ! stockAnalysis.createReport(strategies); strategies = new HashSet<Strategy>(); --- 101,105 ---- } ! stockAnalysis.createReport("",strategies); strategies = new HashSet<Strategy>(); *************** *** 112,116 **** } ! stockAnalysis.createReport(strategies); StockAnalysisSerializer serializer = new StockAnalysisSerializer(); --- 112,116 ---- } ! stockAnalysis.createReport("",strategies); StockAnalysisSerializer serializer = new StockAnalysisSerializer(); |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 18:58:32
|
Update of /cvsroot/tail/Tail/src/test/net/sf/tail In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv26852/src/test/net/sf/tail Modified Files: StockAnalysisXmlSerializerTest.java Log Message: arrumando testes Index: StockAnalysisXmlSerializerTest.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/StockAnalysisXmlSerializerTest.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** StockAnalysisXmlSerializerTest.java 26 Sep 2007 19:36:21 -0000 1.5 --- StockAnalysisXmlSerializerTest.java 3 Oct 2007 18:58:32 -0000 1.6 *************** *** 58,62 **** } ! stockAnalysis.createReport(strategies); strategies = new HashSet<Strategy>(); --- 58,62 ---- } ! stockAnalysis.createReport("",strategies); strategies = new HashSet<Strategy>(); *************** *** 69,73 **** } ! stockAnalysis.createReport(strategies); strategies = new HashSet<Strategy>(); --- 69,73 ---- } ! stockAnalysis.createReport("",strategies); strategies = new HashSet<Strategy>(); *************** *** 80,84 **** } ! stockAnalysis.createReport(strategies); StockAnalysisSerializer serializer = new StockAnalysisSerializer(); --- 80,84 ---- } ! stockAnalysis.createReport("",strategies); StockAnalysisSerializer serializer = new StockAnalysisSerializer(); |
|
From: Thies <tg...@us...> - 2007-10-03 18:57:45
|
Update of /cvsroot/tail/Tail/src/test/net/sf/tail/analysis/criteria In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv26367/src/test/net/sf/tail/analysis/criteria Modified Files: AverageProfitCriterionTest.java VersusBuyAndHoldCriterionTest.java NumberOfTicksCriterionTest.java Log Message: Criterio VersusBuyAndHold agora compara qualquer outro critério com o BuyAndHold. Também foi acertado o critério NumberOfTicks Index: NumberOfTicksCriterionTest.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/analysis/criteria/NumberOfTicksCriterionTest.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** NumberOfTicksCriterionTest.java 23 Aug 2007 12:51:10 -0000 1.3 --- NumberOfTicksCriterionTest.java 3 Oct 2007 18:57:45 -0000 1.4 *************** *** 36,40 **** AnalysisCriterion buyAndHold = new NumberOfTicksCriterion(); ! assertEquals(4d, buyAndHold.calculate(series, trades)); } --- 36,40 ---- AnalysisCriterion buyAndHold = new NumberOfTicksCriterion(); ! assertEquals(5d, buyAndHold.calculate(series, trades)); } *************** *** 55,59 **** AnalysisCriterion buyAndHold = new NumberOfTicksCriterion(); ! assertEquals(4d, buyAndHold.summarize(series, decisions)); } } --- 55,59 ---- AnalysisCriterion buyAndHold = new NumberOfTicksCriterion(); ! assertEquals(5d, buyAndHold.summarize(series, decisions)); } } Index: VersusBuyAndHoldCriterionTest.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/analysis/criteria/VersusBuyAndHoldCriterionTest.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** VersusBuyAndHoldCriterionTest.java 23 Aug 2007 12:51:10 -0000 1.4 --- VersusBuyAndHoldCriterionTest.java 3 Oct 2007 18:57:45 -0000 1.5 *************** *** 26,30 **** trades.add(new Trade(new Operation(3, OperationType.BUY), new Operation(5, OperationType.SELL))); ! AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(); assertEquals(1.10 * 1.05 / 1.05, buyAndHold.calculate(series, trades)); } --- 26,30 ---- trades.add(new Trade(new Operation(3, OperationType.BUY), new Operation(5, OperationType.SELL))); ! AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(new TotalProfitCriterion()); assertEquals(1.10 * 1.05 / 1.05, buyAndHold.calculate(series, trades)); } *************** *** 44,48 **** Decision dummy2 = new DummyDecision(tradesToDummy2); decisions.add(dummy2); ! AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(); assertEquals(1.10 * 1.05 / 1.05, buyAndHold.summarize(series, decisions), 0.01); } --- 44,48 ---- Decision dummy2 = new DummyDecision(tradesToDummy2); decisions.add(dummy2); ! AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(new TotalProfitCriterion()); assertEquals(1.10 * 1.05 / 1.05, buyAndHold.summarize(series, decisions), 0.01); } *************** *** 55,59 **** trades.add(new Trade(new Operation(2, OperationType.BUY), new Operation(5, OperationType.SELL))); ! AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(); assertEquals(0.95 * 0.7 / 0.7, buyAndHold.calculate(series, trades)); } --- 55,59 ---- trades.add(new Trade(new Operation(2, OperationType.BUY), new Operation(5, OperationType.SELL))); ! AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(new TotalProfitCriterion()); assertEquals(0.95 * 0.7 / 0.7, buyAndHold.calculate(series, trades)); } *************** *** 64,70 **** List<Trade> trades = new ArrayList<Trade>(); ! AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(); assertEquals(1 / 0.7, buyAndHold.calculate(series, trades)); } } --- 64,95 ---- List<Trade> trades = new ArrayList<Trade>(); ! AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(new TotalProfitCriterion()); assertEquals(1 / 0.7, buyAndHold.calculate(series, trades)); } + @Test + public void testCalculateWithAverageProfit() + { + SampleTimeSeries series = new SampleTimeSeries(new double[] { 100, 95, 100, 80, 85, 130 }); + List<Trade> trades = new ArrayList<Trade>(); + trades.add(new Trade(new Operation(0, OperationType.BUY), new Operation(1, OperationType.SELL))); + trades.add(new Trade(new Operation(2, OperationType.BUY), new Operation(5, OperationType.SELL))); + + AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(new AverageProfitCriterion()); + + assertEquals(Math.pow(95d/100 * 130d/100, 1d/5) / Math.pow(130d / 100, 1d/6), buyAndHold.calculate(series, trades) ,0.0001); + } + @Test + public void testCalculateWithNumberOfTicks() + { + SampleTimeSeries series = new SampleTimeSeries(new double[] { 100, 95, 100, 80, 85, 130 }); + List<Trade> trades = new ArrayList<Trade>(); + trades.add(new Trade(new Operation(0, OperationType.BUY), new Operation(1, OperationType.SELL))); + trades.add(new Trade(new Operation(2, OperationType.BUY), new Operation(5, OperationType.SELL))); + + AnalysisCriterion buyAndHold = new VersusBuyAndHoldCriterion(new NumberOfTicksCriterion()); + + assertEquals(5d/6d, buyAndHold.calculate(series, trades)); + } + } Index: AverageProfitCriterionTest.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/analysis/criteria/AverageProfitCriterionTest.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** AverageProfitCriterionTest.java 23 Aug 2007 12:51:10 -0000 1.10 --- AverageProfitCriterionTest.java 3 Oct 2007 18:57:45 -0000 1.11 *************** *** 63,67 **** trades.add(new Trade(new Operation(0, OperationType.BUY), new Operation(2, OperationType.SELL))); AnalysisCriterion averageProfit = new AverageProfitCriterion(); ! assertEquals(1.048, averageProfit.calculate(series, trades), 0.001); } --- 63,67 ---- trades.add(new Trade(new Operation(0, OperationType.BUY), new Operation(2, OperationType.SELL))); AnalysisCriterion averageProfit = new AverageProfitCriterion(); ! assertEquals(Math.pow(110d/100, 1d/3), averageProfit.calculate(series, trades), 0.001); } *************** *** 73,77 **** trades.add(new Trade(new Operation(2, OperationType.BUY), new Operation(5, OperationType.SELL))); AnalysisCriterion averageProfit = new AverageProfitCriterion(); ! assertEquals(0.9, averageProfit.calculate(series, trades), 0.01); } --- 73,77 ---- trades.add(new Trade(new Operation(2, OperationType.BUY), new Operation(5, OperationType.SELL))); AnalysisCriterion averageProfit = new AverageProfitCriterion(); ! assertEquals(Math.pow(95d/100 * 70d/100, 1d / 5), averageProfit.calculate(series, trades), 0.01); } |
|
From: Thies <tg...@us...> - 2007-10-03 18:57:44
|
Update of /cvsroot/tail/Tail/src/test/net/sf/tail/analysis/evaluator In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv26367/src/test/net/sf/tail/analysis/evaluator Modified Files: DecisionTest.java Log Message: Criterio VersusBuyAndHold agora compara qualquer outro critério com o BuyAndHold. Também foi acertado o critério NumberOfTicks Index: DecisionTest.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/analysis/evaluator/DecisionTest.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** DecisionTest.java 23 Aug 2007 12:51:08 -0000 1.10 --- DecisionTest.java 3 Oct 2007 18:57:45 -0000 1.11 *************** *** 82,86 **** Decision decision = new Decision(fakeStrategy, series, null, runner.run(fakeStrategy, series.getBegin(), series .getEnd()), new HistoryRunner(OperationType.BUY)); ! assertEquals(Math.pow(3d, 1d / 3), decision.evaluateCriterion(new AverageProfitCriterion()), 0.0001); } --- 82,86 ---- Decision decision = new Decision(fakeStrategy, series, null, runner.run(fakeStrategy, series.getBegin(), series .getEnd()), new HistoryRunner(OperationType.BUY)); ! assertEquals(Math.pow(3d, 1d / 4), decision.evaluateCriterion(new AverageProfitCriterion()), 0.0001); } |
|
From: Thies <tg...@us...> - 2007-10-03 18:57:44
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/criteria In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv26367/src/java/net/sf/tail/analysis/criteria Modified Files: BuyAndHoldCriterion.java VersusBuyAndHoldCriterion.java NumberOfTicksCriterion.java Log Message: Criterio VersusBuyAndHold agora compara qualquer outro critério com o BuyAndHold. Também foi acertado o critério NumberOfTicks Index: NumberOfTicksCriterion.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/criteria/NumberOfTicksCriterion.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** NumberOfTicksCriterion.java 4 Sep 2007 13:09:14 -0000 1.6 --- NumberOfTicksCriterion.java 3 Oct 2007 18:57:44 -0000 1.7 *************** *** 13,21 **** public double calculate(TimeSeries series, List<Trade> trades) { int nTicks = 0; for (Trade trade : trades) { nTicks += trade.getExit().getIndex() - trade.getEntry().getIndex(); } ! return nTicks; } --- 13,25 ---- public double calculate(TimeSeries series, List<Trade> trades) { + if(trades.size() == 0) + return 0d; + int nTicks = 0; + for (Trade trade : trades) { nTicks += trade.getExit().getIndex() - trade.getEntry().getIndex(); } ! return nTicks + 1; } Index: VersusBuyAndHoldCriterion.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/criteria/VersusBuyAndHoldCriterion.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** VersusBuyAndHoldCriterion.java 4 Sep 2007 13:09:14 -0000 1.6 --- VersusBuyAndHoldCriterion.java 3 Oct 2007 18:57:44 -0000 1.7 *************** *** 6,9 **** --- 6,11 ---- import net.sf.tail.AnalysisCriterion; + import net.sf.tail.Operation; + import net.sf.tail.OperationType; import net.sf.tail.TimeSeries; import net.sf.tail.Trade; *************** *** 12,21 **** public class VersusBuyAndHoldCriterion implements AnalysisCriterion { ! private AnalysisCriterion totalProfit = new TotalProfitCriterion(); ! ! private AnalysisCriterion buyAndHold = new BuyAndHoldCriterion(); public double calculate(TimeSeries series, List<Trade> trades) { ! return totalProfit.calculate(series, trades) / buyAndHold.calculate(series, trades); } --- 14,28 ---- public class VersusBuyAndHoldCriterion implements AnalysisCriterion { ! private AnalysisCriterion criterion; + public VersusBuyAndHoldCriterion(AnalysisCriterion criterion) { + this.criterion = criterion; + } + public double calculate(TimeSeries series, List<Trade> trades) { ! List<Trade> fakeTrades = new ArrayList<Trade>(); ! fakeTrades.add(new Trade(new Operation(series.getBegin(), OperationType.BUY), new Operation(series.getEnd(), OperationType.SELL))); ! ! return criterion.calculate(series, trades) / criterion.calculate(series, fakeTrades); } Index: BuyAndHoldCriterion.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/criteria/BuyAndHoldCriterion.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** BuyAndHoldCriterion.java 4 Sep 2007 13:09:14 -0000 1.6 --- BuyAndHoldCriterion.java 3 Oct 2007 18:57:44 -0000 1.7 *************** *** 2,9 **** import java.util.ArrayList; - import java.util.LinkedList; import java.util.List; import net.sf.tail.AnalysisCriterion; import net.sf.tail.TimeSeries; import net.sf.tail.Trade; --- 2,9 ---- import java.util.ArrayList; import java.util.List; import net.sf.tail.AnalysisCriterion; + import net.sf.tail.OperationType; import net.sf.tail.TimeSeries; import net.sf.tail.Trade; *************** *** 17,31 **** public double summarize(TimeSeries series, List<Decision> decisions) { ! List<Trade> trades = new LinkedList<Trade>(); ! ! for (Decision decision : decisions) { ! trades.addAll(decision.getTrades()); ! } ! return calculate(series, trades); } public double calculate(TimeSeries series, Trade trade) { ! List<Trade> trades = new ArrayList<Trade>(); ! trades.add(trade); ! return calculate(series, trades); } --- 17,28 ---- public double summarize(TimeSeries series, List<Decision> decisions) { ! ! return calculate(series, new ArrayList<Trade>()); } public double calculate(TimeSeries series, Trade trade) { ! if(trade.getEntry().getType() == OperationType.BUY) ! return series.getTick(trade.getExit().getIndex()).getClosePrice() / series.getTick(trade.getEntry().getIndex()).getClosePrice(); ! else ! return series.getTick(trade.getEntry().getIndex()).getClosePrice() / series.getTick(trade.getExit().getIndex()).getClosePrice(); } |
|
From: Carlos <ma...@us...> - 2007-10-03 18:51:53
|
Update of /cvsroot/tail/TailS/src/java/net/sf/tails/swing/helper In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv23168/src/java/net/sf/tails/swing/helper Modified Files: FrameHelper.java Log Message: Adicionado o campo para o usuario colocar o nome do report, ajeitado o posicionamento dos componentes na tela. Index: FrameHelper.java =================================================================== RCS file: /cvsroot/tail/TailS/src/java/net/sf/tails/swing/helper/FrameHelper.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** FrameHelper.java 1 Oct 2007 23:16:58 -0000 1.8 --- FrameHelper.java 3 Oct 2007 18:51:52 -0000 1.9 *************** *** 107,116 **** public static String readFile(String name) throws Exception { BufferedReader in = new BufferedReader(new FileReader(name)); ! String str = ""; while (in.ready()) { ! str += in.readLine(); } ! return str; } --- 107,116 ---- public static String readFile(String name) throws Exception { BufferedReader in = new BufferedReader(new FileReader(name)); ! String text = ""; while (in.ready()) { ! text += in.readLine(); } ! return text; } |
|
From: Carlos <ma...@us...> - 2007-10-03 18:51:51
|
Update of /cvsroot/tail/TailS/src/java/net/sf/tails/swing/frame/report In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv23168/src/java/net/sf/tails/swing/frame/report Modified Files: NewReportFrame.java Log Message: Adicionado o campo para o usuario colocar o nome do report, ajeitado o posicionamento dos componentes na tela. Index: NewReportFrame.java =================================================================== RCS file: /cvsroot/tail/TailS/src/java/net/sf/tails/swing/frame/report/NewReportFrame.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** NewReportFrame.java 1 Oct 2007 23:54:08 -0000 1.6 --- NewReportFrame.java 3 Oct 2007 18:51:52 -0000 1.7 *************** *** 1,11 **** package net.sf.tails.swing.frame.report; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; - import java.util.Scanner; import java.util.Set; import javax.script.ScriptException; import javax.swing.JFrame; import net.sf.tail.Strategy; --- 1,12 ---- package net.sf.tails.swing.frame.report; + import java.awt.Dimension; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Set; import javax.script.ScriptException; import javax.swing.JFrame; + import javax.swing.JOptionPane; import net.sf.tail.Strategy; *************** *** 14,17 **** --- 15,19 ---- import net.sf.tail.dsl.ruby.RubyDSL; import net.sf.tails.swing.frame.Index; + import net.sf.tails.swing.helper.FrameHelper; /** *************** *** 27,40 **** private javax.swing.JButton createButtonDefaultPanel; private javax.swing.JButton cancelButtonDefaultPanel; ! private javax.swing.JPanel jPanel1; private javax.swing.JPanel defaultReportPanel; ! private javax.swing.JPanel jPanel3; ! private javax.swing.JRadioButton jRadioButton10; private javax.swing.JRadioButton jRadioButton8; ! private javax.swing.JRadioButton jRadioButton9; ! private javax.swing.JScrollPane customStrategyJPane; ! private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTabbedPane newReportTabbedPane; private javax.swing.JTextArea customStrategyTextArea; private StockAnalysis stockAnalysis; private Index index; --- 29,42 ---- private javax.swing.JButton createButtonDefaultPanel; private javax.swing.JButton cancelButtonDefaultPanel; ! private javax.swing.JPanel customReportPanel; private javax.swing.JPanel defaultReportPanel; ! private javax.swing.JPanel radioGroupPanel; private javax.swing.JRadioButton jRadioButton8; ! private javax.swing.JScrollPane customStrategyPane; ! private javax.swing.JScrollPane radioGroupScrollPane; private javax.swing.JTabbedPane newReportTabbedPane; private javax.swing.JTextArea customStrategyTextArea; + private javax.swing.JLabel reportNameLabel; + private javax.swing.JTextField reportNameField; private StockAnalysis stockAnalysis; private Index index; *************** *** 56,70 **** createButtonDefaultPanel = new javax.swing.JButton(); cancelButtonDefaultPanel = new javax.swing.JButton(); ! jScrollPane2 = new javax.swing.JScrollPane(); ! jPanel3 = new javax.swing.JPanel(); jRadioButton8 = new javax.swing.JRadioButton(); ! jRadioButton9 = new javax.swing.JRadioButton(); ! jRadioButton10 = new javax.swing.JRadioButton(); ! jPanel1 = new javax.swing.JPanel(); ! customStrategyJPane = new javax.swing.JScrollPane(); customStrategyTextArea = new javax.swing.JTextArea(); customStrategyCreateButton = new javax.swing.JButton(); customStrategyCancelButton = new javax.swing.JButton(); createButtonDefaultPanel.setText("Create"); createButtonDefaultPanel.addActionListener(new java.awt.event.ActionListener() { --- 58,76 ---- createButtonDefaultPanel = new javax.swing.JButton(); cancelButtonDefaultPanel = new javax.swing.JButton(); ! radioGroupScrollPane = new javax.swing.JScrollPane(); ! radioGroupPanel = new javax.swing.JPanel(); jRadioButton8 = new javax.swing.JRadioButton(); ! customReportPanel = new javax.swing.JPanel(); ! customStrategyPane = new javax.swing.JScrollPane(); customStrategyTextArea = new javax.swing.JTextArea(); customStrategyCreateButton = new javax.swing.JButton(); customStrategyCancelButton = new javax.swing.JButton(); + reportNameField = new javax.swing.JTextField(); + reportNameLabel = new javax.swing.JLabel(); + reportNameLabel.setText("Report Name: "); + reportNameField.setSize(170, 20); + reportNameField.setMaximumSize(new Dimension(170, 20)); + createButtonDefaultPanel.setText("Create"); createButtonDefaultPanel.addActionListener(new java.awt.event.ActionListener() { *************** *** 81,85 **** }); ! jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); indicatorsButtonGroup.add(jRadioButton8); jRadioButton8.setText("SMA"); --- 87,91 ---- }); ! radioGroupScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); indicatorsButtonGroup.add(jRadioButton8); jRadioButton8.setText("SMA"); *************** *** 88,151 **** jRadioButton8.setMargin(new java.awt.Insets(0, 0, 0, 0)); ! indicatorsButtonGroup.add(jRadioButton9); ! jRadioButton9.setText("SMA"); ! jRadioButton9.setBorder(javax.swing.BorderFactory.createTitledBorder("")); ! jRadioButton9.setBorderPainted(true); ! jRadioButton9.setMargin(new java.awt.Insets(0, 0, 0, 0)); ! ! indicatorsButtonGroup.add(jRadioButton10); ! jRadioButton10.setText("SMA"); ! jRadioButton10.setBorder(javax.swing.BorderFactory.createTitledBorder("")); ! jRadioButton10.setBorderPainted(true); ! jRadioButton10.setMargin(new java.awt.Insets(0, 0, 0, 0)); ! ! javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); ! jPanel3.setLayout(jPanel3Layout); ! jPanel3Layout.setHorizontalGroup( ! jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(jPanel3Layout.createSequentialGroup() ! .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addComponent(jRadioButton8) ! .addComponent(jRadioButton9) ! .addComponent(jRadioButton10)) .addGap(314, 314, 314)) ); ! jPanel3Layout.setVerticalGroup( ! jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jRadioButton8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 82, Short.MAX_VALUE) - .addComponent(jRadioButton9) - .addGap(65, 65, 65) - .addComponent(jRadioButton10) .addContainerGap()) ); ! jScrollPane2.setViewportView(jPanel3); ! javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(defaultReportPanel); ! defaultReportPanel.setLayout(jPanel2Layout); ! jPanel2Layout.setHorizontalGroup( ! jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(jPanel2Layout.createSequentialGroup() ! .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addComponent(cancelButtonDefaultPanel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(createButtonDefaultPanel)) ! .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 385, Short.MAX_VALUE)) .addContainerGap()) ); ! jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {createButtonDefaultPanel, cancelButtonDefaultPanel}); ! jPanel2Layout.setVerticalGroup( ! jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() ! .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 218, javax.swing.GroupLayout.PREFERRED_SIZE) ! .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 50, Short.MAX_VALUE) ! .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(createButtonDefaultPanel) .addComponent(cancelButtonDefaultPanel)) ! .addContainerGap()) ); newReportTabbedPane.addTab("Default Report", defaultReportPanel); --- 94,142 ---- jRadioButton8.setMargin(new java.awt.Insets(0, 0, 0, 0)); ! javax.swing.GroupLayout radioGroupPanelLayout = new javax.swing.GroupLayout(radioGroupPanel); ! radioGroupPanel.setLayout(radioGroupPanelLayout); ! radioGroupPanelLayout.setHorizontalGroup( ! radioGroupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(radioGroupPanelLayout.createSequentialGroup() ! .addGroup(radioGroupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addComponent(jRadioButton8)) .addGap(314, 314, 314)) ); ! radioGroupPanelLayout.setVerticalGroup( ! radioGroupPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(radioGroupPanelLayout.createSequentialGroup() .addComponent(jRadioButton8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 82, Short.MAX_VALUE) .addContainerGap()) ); ! radioGroupScrollPane.setViewportView(radioGroupPanel); ! javax.swing.GroupLayout defaultTabPanel = new javax.swing.GroupLayout(defaultReportPanel); ! defaultReportPanel.setLayout(defaultTabPanel); ! defaultTabPanel.setHorizontalGroup( ! defaultTabPanel.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(defaultTabPanel.createSequentialGroup() ! .addGap(12) ! .addGroup(defaultTabPanel.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, defaultTabPanel.createSequentialGroup() .addComponent(cancelButtonDefaultPanel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(createButtonDefaultPanel)) ! .addComponent(radioGroupScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 385, Short.MAX_VALUE)) .addContainerGap()) ); ! defaultTabPanel.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {createButtonDefaultPanel, cancelButtonDefaultPanel}); ! defaultTabPanel.setVerticalGroup( ! defaultTabPanel.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, defaultTabPanel.createSequentialGroup() ! .addGap(12) ! .addComponent(radioGroupScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 251, javax.swing.GroupLayout.PREFERRED_SIZE) ! .addGap(6) ! .addGroup(defaultTabPanel.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(createButtonDefaultPanel) .addComponent(cancelButtonDefaultPanel)) ! ) ); newReportTabbedPane.addTab("Default Report", defaultReportPanel); *************** *** 166,170 **** }); ! customStrategyJPane.setViewportView(customStrategyTextArea); customStrategyCreateButton.setText("Create"); --- 157,161 ---- }); ! customStrategyPane.setViewportView(customStrategyTextArea); customStrategyCreateButton.setText("Create"); *************** *** 182,187 **** }); ! javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); ! jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) --- 173,178 ---- }); ! javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(customReportPanel); ! customReportPanel.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) *************** *** 189,193 **** .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addComponent(customStrategyJPane, javax.swing.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(customStrategyCancelButton) --- 180,184 ---- .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addComponent(customStrategyPane, javax.swing.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() .addComponent(customStrategyCancelButton) *************** *** 203,214 **** .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() ! .addComponent(customStrategyJPane, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(customStrategyCreateButton) .addComponent(customStrategyCancelButton)) ! .addContainerGap()) ); ! newReportTabbedPane.addTab("Custom Report", jPanel1); newReportTabbedPane.getAccessibleContext().setAccessibleName("Default Report"); --- 194,205 ---- .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() ! .addComponent(customStrategyPane, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(customStrategyCreateButton) .addComponent(customStrategyCancelButton)) ! .addGap(18)) ); ! newReportTabbedPane.addTab("Custom Report", customReportPanel); newReportTabbedPane.getAccessibleContext().setAccessibleName("Default Report"); *************** *** 218,228 **** layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addComponent(newReportTabbedPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() ! .addComponent(newReportTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 327, Short.MAX_VALUE)) ); pack(); --- 209,233 ---- layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) ! .addGroup(layout.createSequentialGroup() ! .addGap(10) ! .addComponent(reportNameLabel) ! .addComponent(reportNameField)) ! .addGroup(layout.createSequentialGroup() ! .addGap(10) ! .addComponent(newReportTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) ! .addGap(10)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() + .addGap(10) + .addComponent(reportNameLabel) + .addGap(10) .addContainerGap() ! .addComponent(newReportTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 327, Short.MAX_VALUE) ! .addGap(10)) ! .addGroup(layout.createSequentialGroup() ! .addGap(10) ! .addComponent(reportNameField)) ); pack(); *************** *** 244,251 **** try { ! TailDSL dsl = new RubyDSL(read("/rubyDSLutils.rb"),stockAnalysis.getStock().getSeries()); Set<Strategy> strategies; strategies = dsl.evalStrategies(customStrategyTextArea.getText()); ! stockAnalysis.createReport(strategies); index.loadReports(stockAnalysis); this.dispose(); --- 249,261 ---- try { ! TailDSL dsl = null; ! try { ! dsl = new RubyDSL(FrameHelper.readFile("/rubyDSLutils.rb"),stockAnalysis.getStock().getSeries()); ! } catch (Exception e) { ! JOptionPane.showMessageDialog(null, "File not found: rubyDSLutils.rb .", "Error", 2); ! } Set<Strategy> strategies; strategies = dsl.evalStrategies(customStrategyTextArea.getText()); ! stockAnalysis.createReport(reportNameField.getText(), strategies); index.loadReports(stockAnalysis); this.dispose(); *************** *** 260,270 **** } ! private static String read(String name) { ! String text = ""; ! Scanner scanner = new Scanner(NewReportFrame.class.getResourceAsStream(name)); ! while (scanner.hasNextLine()) { ! text += scanner.nextLine() + "\n"; ! } ! return text; ! } } --- 270,273 ---- } ! } |
|
From: Carlos <ma...@us...> - 2007-10-03 18:50:11
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/analysis In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv22106/src/java/net/sf/tail/analysis Modified Files: StockAnalysis.java Log Message: Colocando o método setName no report e setando o nome ro report em cada report do stockAnalysis. Index: StockAnalysis.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/StockAnalysis.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** StockAnalysis.java 26 Sep 2007 19:36:21 -0000 1.7 --- StockAnalysis.java 3 Oct 2007 18:49:58 -0000 1.8 *************** *** 42,47 **** } ! public Report createReport(Set<Strategy> strategies) { Report report = walker.walk(strategies, slicer, applyedCriterion); reports.add(report); for (AnalysisCriterion criterion : additionalCriteria) { --- 42,48 ---- } ! public Report createReport(String reportName, Set<Strategy> strategies) { Report report = walker.walk(strategies, slicer, applyedCriterion); + report.setName(reportName); reports.add(report); for (AnalysisCriterion criterion : additionalCriteria) { |
|
From: Carlos <ma...@us...> - 2007-10-03 18:50:07
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/report In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv22106/src/java/net/sf/tail/report Modified Files: Report.java Log Message: Colocando o método setName no report e setando o nome ro report em cada report do stockAnalysis. Index: Report.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/report/Report.java,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Report.java 27 Sep 2007 00:17:18 -0000 1.19 --- Report.java 3 Oct 2007 18:49:59 -0000 1.20 *************** *** 145,147 **** --- 145,151 ---- throw new IllegalArgumentException("Criteria not found"); } + + public void setName(String name) { + this.name = name; + } } |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 17:47:08
|
Update of /cvsroot/tail/Tail/src/test/net/sf/tail/analysis/walk In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv24435/src/test/net/sf/tail/analysis/walk Modified Files: WalkForwardTest.java Log Message: tirando warnings Index: WalkForwardTest.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/analysis/walk/WalkForwardTest.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** WalkForwardTest.java 4 Sep 2007 13:09:16 -0000 1.17 --- WalkForwardTest.java 3 Oct 2007 17:47:00 -0000 1.18 *************** *** 88,92 **** assertEquals(20d / 30, decisions.get(0).evaluateCriterion()); assertEquals(15d / 32, decisions.get(1).evaluateCriterion()); - // TODO Fazer um teste maior, com umas 3 estrategias e uns 5 periodos } --- 88,91 ---- |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 17:47:02
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/series In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv24435/src/java/net/sf/tail/series Modified Files: SlicerByTimePeriod.java Log Message: tirando warnings Index: SlicerByTimePeriod.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/series/SlicerByTimePeriod.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** SlicerByTimePeriod.java 1 Oct 2007 17:11:16 -0000 1.6 --- SlicerByTimePeriod.java 3 Oct 2007 17:47:00 -0000 1.7 *************** *** 42,48 **** public TimeSeriesSlicer applyForSeries(TimeSeries newSeries) { ! return new SlicerByTimePeriod(newSeries,period, periodBegin, slicerType); } ! public TimeSeriesSlicer applyForType(SlicerType type) { if (type == this.slicerType) { --- 42,48 ---- public TimeSeriesSlicer applyForSeries(TimeSeries newSeries) { ! return new SlicerByTimePeriod(newSeries, period, periodBegin, slicerType); } ! public TimeSeriesSlicer applyForType(SlicerType type) { if (type == this.slicerType) { *************** *** 51,55 **** return new SlicerByTimePeriod(this.series, this.period, this.periodBegin, type); } ! private void split() { LOG.debug(String.format("Spliting %s ", series)); --- 51,55 ---- return new SlicerByTimePeriod(this.series, this.period, this.periodBegin, type); } ! private void split() { LOG.debug(String.format("Spliting %s ", series)); *************** *** 59,63 **** Interval interval = new Interval(begin, end); ! int index = 0; while (series.getTick(index).getDate().isBefore(interval.getStart())) --- 59,63 ---- Interval interval = new Interval(begin, end); ! int index = series.getBegin(); while (series.getTick(index).getDate().isBefore(interval.getStart())) *************** *** 137,141 **** } ! public String getPeriodName() { return this.periodBegin.toString("hh:mm dd/MM/yyyy - ") + series.getTick(series.getEnd()).getDate().toString("hh:mm dd/MM/yyyy"); --- 137,141 ---- } ! public String getPeriodName() { return this.periodBegin.toString("hh:mm dd/MM/yyyy - ") + series.getTick(series.getEnd()).getDate().toString("hh:mm dd/MM/yyyy"); |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 17:47:00
|
Update of /cvsroot/tail/Tail/src/test/net/sf/tail/report/xls In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv24435/src/test/net/sf/tail/report/xls Modified Files: CompleteXlsGeneratorExecutor.java Log Message: tirando warnings Index: CompleteXlsGeneratorExecutor.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/report/xls/CompleteXlsGeneratorExecutor.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** CompleteXlsGeneratorExecutor.java 1 Oct 2007 23:47:04 -0000 1.3 --- CompleteXlsGeneratorExecutor.java 3 Oct 2007 17:47:00 -0000 1.4 *************** *** 22,31 **** import net.sf.tail.analysis.criteria.RewardRiskRatioCriterion; import net.sf.tail.analysis.criteria.TotalProfitCriterion; - import net.sf.tail.analysis.criteria.VersusBuyAndHoldCriterion; import net.sf.tail.analysis.evaluator.BestStrategyEvaluator; import net.sf.tail.analysis.walk.WalkForward; import net.sf.tail.indicator.simple.ClosePriceIndicator; ! import net.sf.tail.indicator.tracker.ParabolicSarIndicator; ! import net.sf.tail.indicator.tracker.SMAIndicator; import net.sf.tail.io.reader.CedroTimeSeriesLoader; import net.sf.tail.report.Report; --- 22,29 ---- import net.sf.tail.analysis.criteria.RewardRiskRatioCriterion; import net.sf.tail.analysis.criteria.TotalProfitCriterion; import net.sf.tail.analysis.evaluator.BestStrategyEvaluator; import net.sf.tail.analysis.walk.WalkForward; import net.sf.tail.indicator.simple.ClosePriceIndicator; ! import net.sf.tail.indicator.tracker.EMAIndicator; import net.sf.tail.io.reader.CedroTimeSeriesLoader; import net.sf.tail.report.Report; *************** *** 33,39 **** import net.sf.tail.series.SlicerByTimePeriod; import net.sf.tail.strategy.IndicatorCrossedIndicatorStrategy; ! import net.sf.tail.strategy.IndicatorOverIndicatorStrategy; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.joda.time.Period; --- 31,38 ---- import net.sf.tail.series.SlicerByTimePeriod; import net.sf.tail.strategy.IndicatorCrossedIndicatorStrategy; ! import net.sf.tail.strategy.MinValueStopperStrategy; import org.apache.poi.hssf.usermodel.HSSFWorkbook; + import org.joda.time.DateTime; import org.joda.time.Period; *************** *** 46,50 **** try { ! timeSeries = ctsl.load(new FileInputStream("BaseBovespa/diario/petr4Dia.csv"), "Ambev (ambv4)"); } catch (FileNotFoundException e) { e.printStackTrace(); --- 45,49 ---- try { ! timeSeries = ctsl.load(new FileInputStream("BaseBovespa/diario/petr4Dia2000.csv"), "Ambev (ambv4)"); } catch (FileNotFoundException e) { e.printStackTrace(); *************** *** 57,79 **** ! // for (int i = 4; i < 60; i++) { ! // Indicator<Double> tracker = new EMAIndicator(close, i); ! // Strategy strategy = new IndicatorCrossedIndicatorStrategy(close, tracker); ! // strategies.add(strategy); ! // } ! ! for (int i = 4; i < 20; i++) { ! Indicator<Double> tracker = new SMAIndicator(close, i); ! Strategy strategy = new IndicatorOverIndicatorStrategy(close, tracker); strategies.add(strategy); ! } ! Indicator<Double> tracker = new ParabolicSarIndicator(timeSeries); ! Strategy strategy = new IndicatorCrossedIndicatorStrategy(close, tracker); ! strategies.add(strategy); ! ! Report r = w.walk(strategies, new SlicerByTimePeriod(timeSeries, new Period().withMonths(10), ! SlicerType.MEMORIZED), new TotalProfitCriterion()); CompleteXlsGenerator xls = new CompleteXlsGenerator(); --- 56,76 ---- ! for (int i = 4; i < 60; i++) { ! Indicator<Double> tracker = new EMAIndicator(close, i); ! Strategy strategy = new MinValueStopperStrategy(close, new IndicatorCrossedIndicatorStrategy(tracker, close), 5); strategies.add(strategy); ! } + // for (int i = 4; i < 20; i++) { + // Indicator<Double> tracker = new SMAIndicator(close, i); + // Strategy strategy = new IndicatorOverIndicatorStrategy(tracker, close); + // strategies.add(strategy); + // } + // Indicator<Double> tracker = new ParabolicSarIndicator(timeSeries); + // Strategy strategy = new IndicatorCrossedIndicatorStrategy(tracker, close); + // strategies.add(strategy); ! Report r = w.walk(strategies, new SlicerByTimePeriod(timeSeries, new Period().withMonths(6),new DateTime().withDate(2000, 1, 1), ! SlicerType.REGULAR), new TotalProfitCriterion()); CompleteXlsGenerator xls = new CompleteXlsGenerator(); *************** *** 85,91 **** criteria.add(new AverageProfitCriterion()); criteria.add(new NumberOfTicksCriterion()); - criteria.add(new VersusBuyAndHoldCriterion()); ! workbook = xls.generate(r, criteria, new Period().withMonths(10)); FileOutputStream fileOut = new FileOutputStream("report.xls"); --- 82,87 ---- criteria.add(new AverageProfitCriterion()); criteria.add(new NumberOfTicksCriterion()); ! workbook = xls.generate(r, criteria, new Period().withMonths(6)); FileOutputStream fileOut = new FileOutputStream("report.xls"); |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 17:47:00
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/walk In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv24435/src/java/net/sf/tail/analysis/walk Modified Files: WalkForward.java Removed Files: AbstractWalker.java Log Message: tirando warnings Index: WalkForward.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/analysis/walk/WalkForward.java,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** WalkForward.java 23 Aug 2007 12:47:26 -0000 1.18 --- WalkForward.java 3 Oct 2007 17:46:59 -0000 1.19 *************** *** 1,18 **** package net.sf.tail.analysis.walk; import net.sf.tail.Evaluator; import net.sf.tail.TimeSeries; import net.sf.tail.TimeSeriesSlicer; import net.sf.tail.Walker; ! public class WalkForward extends AbstractWalker implements Walker { public WalkForward(Evaluator evaluator) { ! super(evaluator); } ! @Override ! public TimeSeries getSeries(TimeSeriesSlicer slicer, int frame) { ! return slicer.getSlice(frame); } } --- 1,58 ---- package net.sf.tail.analysis.walk; + import java.util.LinkedList; + import java.util.List; + import java.util.Set; + + import org.apache.log4j.Logger; + + import net.sf.tail.AnalysisCriterion; import net.sf.tail.Evaluator; + import net.sf.tail.SlicerType; + import net.sf.tail.Strategy; import net.sf.tail.TimeSeries; import net.sf.tail.TimeSeriesSlicer; import net.sf.tail.Walker; + import net.sf.tail.analysis.evaluator.Decision; + import net.sf.tail.report.Report; ! public class WalkForward implements Walker { ! ! ! ! private static final Logger LOG = Logger.getLogger(WalkForward.class); ! ! private Evaluator evaluator; public WalkForward(Evaluator evaluator) { ! this.evaluator = evaluator; } ! public Report walk(Set<Strategy> strategies, TimeSeriesSlicer slicer, AnalysisCriterion criterion) { ! ! TimeSeriesSlicer regularSlicer = slicer.applyForType(SlicerType.REGULAR); ! ! LOG.info("Running strategies"); ! List<Decision> decisions = new LinkedList<Decision>(); ! ! Decision lastDecision = evaluator.evaluate(strategies, slicer.getSlice(0), criterion); ! ! LOG.info("First best decision calculated: " + lastDecision); ! ! for (int i = 1; i < slicer.getSlices(); i++) { ! TimeSeries currentSeries = slicer.getSlice(i); ! TimeSeries regularSeries = regularSlicer.getSlice(i); ! ! Decision bestAppliedForCurrentSeries = lastDecision.applyFor(regularSeries); ! LOG.info(String ! .format("Applying last best decision for time series %d: %s", i, bestAppliedForCurrentSeries)); ! decisions.add(bestAppliedForCurrentSeries); ! ! lastDecision = evaluator.evaluate(strategies, currentSeries, criterion); ! LOG.info("Best decision for period " + i + ": " + lastDecision); ! ! } ! return new Report(criterion, slicer, decisions); } + } --- AbstractWalker.java DELETED --- |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 17:47:00
|
Update of /cvsroot/tail/Tail/src/test/net/sf/tail/report/html In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv24435/src/test/net/sf/tail/report/html Modified Files: CompleteHtmlGeneratorExecutor.java Log Message: tirando warnings Index: CompleteHtmlGeneratorExecutor.java =================================================================== RCS file: /cvsroot/tail/Tail/src/test/net/sf/tail/report/html/CompleteHtmlGeneratorExecutor.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** CompleteHtmlGeneratorExecutor.java 26 Sep 2007 18:25:35 -0000 1.2 --- CompleteHtmlGeneratorExecutor.java 3 Oct 2007 17:47:00 -0000 1.3 *************** *** 20,24 **** import net.sf.tail.io.reader.CedroTimeSeriesLoader; import net.sf.tail.report.Report; - import net.sf.tail.report.html.CompleteHtmlGenerator; import net.sf.tail.runner.HistoryRunner; import net.sf.tail.series.SlicerByTimePeriod; --- 20,23 ---- |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 17:47:00
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/report/xls In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv24435/src/java/net/sf/tail/report/xls Modified Files: CompleteXlsGenerator.java CellStylist.java SliceXlsGenerator.java Log Message: tirando warnings Index: CellStylist.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/report/xls/CellStylist.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** CellStylist.java 27 Sep 2007 01:05:26 -0000 1.5 --- CellStylist.java 3 Oct 2007 17:47:00 -0000 1.6 *************** *** 5,14 **** import java.io.FileInputStream; import java.io.IOException; - import java.text.Format; - import java.text.NumberFormat; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; - import org.apache.poi.hssf.usermodel.HSSFDataFormat; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFPatriarch; --- 5,11 ---- Index: CompleteXlsGenerator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/report/xls/CompleteXlsGenerator.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** CompleteXlsGenerator.java 27 Sep 2007 01:05:26 -0000 1.11 --- CompleteXlsGenerator.java 3 Oct 2007 17:47:00 -0000 1.12 *************** *** 11,17 **** import net.sf.tail.report.Report; - import org.apache.poi.hssf.usermodel.HSSFCell; - import org.apache.poi.hssf.usermodel.HSSFDataFormat; - import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.joda.time.Period; --- 11,14 ---- Index: SliceXlsGenerator.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/report/xls/SliceXlsGenerator.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** SliceXlsGenerator.java 27 Sep 2007 01:05:26 -0000 1.6 --- SliceXlsGenerator.java 3 Oct 2007 17:47:00 -0000 1.7 *************** *** 3,7 **** import java.io.File; import java.io.IOException; - import java.util.ArrayList; import java.util.LinkedList; import java.util.List; --- 3,6 ---- |
|
From: Márcio V. d. S. <mv...@us...> - 2007-10-03 17:47:00
|
Update of /cvsroot/tail/Tail/src/java/net/sf/tail/strategy In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv24435/src/java/net/sf/tail/strategy Modified Files: MinValueStopperStrategy.java Log Message: tirando warnings Index: MinValueStopperStrategy.java =================================================================== RCS file: /cvsroot/tail/Tail/src/java/net/sf/tail/strategy/MinValueStopperStrategy.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** MinValueStopperStrategy.java 25 Aug 2007 12:30:00 -0000 1.7 --- MinValueStopperStrategy.java 3 Oct 2007 17:46:59 -0000 1.8 *************** *** 41,45 **** public String getName() { ! return String.format("%s stoper: %i", this.getClass().getSimpleName(), loss); } } --- 41,45 ---- public String getName() { ! return String.format("%s stoper: %s", this.getClass().getSimpleName(), ""+ loss); } } |