Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj	(revision 9804)
@@ -0,0 +1,216 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.DataAnalysis.Trading.Views</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common.Resources-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Common.Resources-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core.Views-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Core.Views-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.MainForm.WindowsForms-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.MainForm.WindowsForms-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.4">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic-3.4">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Views-3.4">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Views-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Visualization.ChartControlsExtensions-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Visualization.ChartControlsExtensions-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Windows.Forms.DataVisualization" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ISolutionEvaluationView.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="SolutionLineChartView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SolutionLineChartView.Designer.cs">
+      <DependentUpon>SolutionLineChartView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="SolutionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="SolutionView.Designer.cs">
+      <DependentUpon>SolutionView.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Symbolic\SolutionView.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="Symbolic\SolutionView.Designer.cs">
+      <DependentUpon>SolutionView.cs</DependentUpon>
+    </Compile>
+    <None Include="HeuristicLab.snk" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Symbolic\Interfaces\" />
+    <Folder Include="Symbolic\SingleObjective\" />
+    <Folder Include="Symbolic\Views\" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\HeuristicLab.Problems.DataAnalysis.Trading\3.4\HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj">
+      <Project>{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}</Project>
+      <Name>HeuristicLab.Problems.DataAnalysis.Trading-3.4</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/ISolutionEvaluationView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/ISolutionEvaluationView.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/ISolutionEvaluationView.cs	(revision 9804)
@@ -0,0 +1,28 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Problems.DataAnalysis.Views;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading.Views {
+  public interface ISolutionEvaluationView : IDataAnalysisSolutionEvaluationView {
+    new ISolution Content { get; set; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Plugin.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Plugin.cs.frame	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Plugin.cs.frame	(revision 9804)
@@ -0,0 +1,50 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading.Views {
+  [Plugin("HeuristicLab.Problems.DataAnalysis.Trading.Views","Provides views for trading rules.", "3.4.0.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.dll", PluginFileType.Assembly)]
+
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Common.Resources", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Core.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Data.Views", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.4")]
+  [PluginDependency("HeuristicLab.MainForm", "3.3")]
+  [PluginDependency("HeuristicLab.MainForm.WindowsForms", "3.3")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Views", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Trading", "3.4")]
+  [PluginDependency("HeuristicLab.Visualization.ChartControlsExtensions", "3.3")]
+  public class Plugin : PluginBase {
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Properties/AssemblyInfo.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Properties/AssemblyInfo.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Properties/AssemblyInfo.cs	(revision 9804)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.DataAnalysis.Trading.Views")]
+[assembly: AssemblyDescription("Provides views for trading rules.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2013 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("CD74CCD0-B38B-4802-9508-E09AB055A846")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.4.0.0")]
+[assembly: AssemblyFileVersion("3.4.0.9797")]
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Properties/AssemblyInfo.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Properties/AssemblyInfo.cs.frame	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Properties/AssemblyInfo.cs.frame	(revision 9804)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.DataAnalysis.Trading.Views")]
+[assembly: AssemblyDescription("Provides views for trading rules.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2013 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("CD74CCD0-B38B-4802-9508-E09AB055A846")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.4.0.0")]
+[assembly: AssemblyFileVersion("3.4.0.$WCREV$")]
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionLineChartView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionLineChartView.Designer.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionLineChartView.Designer.cs	(revision 9804)
@@ -0,0 +1,84 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+namespace HeuristicLab.Problems.DataAnalysis.Trading.Views {
+  partial class SolutionLineChartView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+      System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+      this.chart = new HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart();
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+      this.SuspendLayout();
+      // 
+      // chart
+      // 
+      chartArea1.Name = "ChartArea";
+      this.chart.ChartAreas.Add(chartArea1);
+      this.chart.Dock = System.Windows.Forms.DockStyle.Fill;
+      legend1.Alignment = System.Drawing.StringAlignment.Center;
+      legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+      legend1.Name = "Default";
+      this.chart.Legends.Add(legend1);
+      this.chart.Location = new System.Drawing.Point(0, 0);
+      this.chart.Name = "chart";
+      this.chart.Size = new System.Drawing.Size(358, 225);
+      this.chart.TabIndex = 0;
+      this.chart.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.Chart_MouseDoubleClick);
+      // 
+      // LineChartView
+      // 
+      this.AllowDrop = true;
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Controls.Add(this.chart);
+      this.Name = "LineChartView";
+      this.Size = new System.Drawing.Size(358, 225);
+      ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+
+    private HeuristicLab.Visualization.ChartControlsExtensions.EnhancedChart chart;
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionLineChartView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionLineChartView.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionLineChartView.cs	(revision 9804)
@@ -0,0 +1,150 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+using HeuristicLab.MainForm;
+using HeuristicLab.Problems.DataAnalysis.Views;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading.Views {
+  [View("Line Chart")]
+  [Content(typeof(ISolution))]
+  public partial class SolutionLineChartView : DataAnalysisSolutionEvaluationView, ISolutionEvaluationView {
+    private const string PRICEVARIABLE_SERIES_NAME = "Price";
+    private const string SIGNALS_SERIES_NAME = "Signals";
+    private const string ASSET_SERIES_NAME = "Asset";
+
+
+    public new ISolution Content {
+      get { return (ISolution)base.Content; }
+      set { base.Content = value; }
+    }
+
+    public SolutionLineChartView()
+      : base() {
+      InitializeComponent();
+      //configure axis
+      this.chart.CustomizeAllChartAreas();
+      this.chart.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
+      this.chart.ChartAreas[0].AxisX.ScaleView.Zoomable = true;
+      this.chart.ChartAreas[0].CursorX.Interval = 1;
+
+      this.chart.ChartAreas[0].CursorY.IsUserSelectionEnabled = true;
+      this.chart.ChartAreas[0].AxisY.ScaleView.Zoomable = true;
+      this.chart.ChartAreas[0].CursorY.Interval = 0;
+    }
+
+    private void RedrawChart() {
+      this.chart.Series.Clear();
+      if (Content != null) {
+        this.chart.Series.Add(SIGNALS_SERIES_NAME);
+        this.chart.Series[SIGNALS_SERIES_NAME].LegendText = SIGNALS_SERIES_NAME;
+        this.chart.Series[SIGNALS_SERIES_NAME].ChartType = SeriesChartType.FastLine;
+        this.chart.Series[SIGNALS_SERIES_NAME].Points.DataBindY(Content.Signals.ToArray());
+        this.chart.Series[SIGNALS_SERIES_NAME].Tag = Content;
+
+        IEnumerable<double> accumulatedPrice = GetAccumulatedPrices(Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.PriceVariable));
+        this.chart.Series.Add(PRICEVARIABLE_SERIES_NAME);
+        this.chart.Series[PRICEVARIABLE_SERIES_NAME].LegendText = PRICEVARIABLE_SERIES_NAME;
+        this.chart.Series[PRICEVARIABLE_SERIES_NAME].ChartType = SeriesChartType.FastLine;
+        this.chart.Series[PRICEVARIABLE_SERIES_NAME].Points.DataBindY(accumulatedPrice.ToArray());
+        this.chart.Series[PRICEVARIABLE_SERIES_NAME].Tag = Content;
+
+        IEnumerable<double> profit = OnlineProfitCalculator.GetProfits(Content.ProblemData.Dataset.GetDoubleValues(Content.ProblemData.PriceVariable), Content.Signals, Content.ProblemData.TransactionCosts);
+        IEnumerable<double> accumulatedProfits = GetAccumulatedPrices(profit);
+        this.chart.Series.Add(ASSET_SERIES_NAME);
+        this.chart.Series[ASSET_SERIES_NAME].LegendText = ASSET_SERIES_NAME;
+        this.chart.Series[ASSET_SERIES_NAME].ChartType = SeriesChartType.FastLine;
+        this.chart.Series[ASSET_SERIES_NAME].Points.DataBindY(accumulatedProfits.ToArray());
+        this.chart.Series[ASSET_SERIES_NAME].Tag = Content;
+
+        this.UpdateStripLines();
+      }
+    }
+
+    private IEnumerable<double> GetAccumulatedPrices(IEnumerable<double> xs) {
+      double sum = 0;
+      foreach (var x in xs) {
+        sum += x;
+        yield return sum;
+      }
+    }
+
+    #region events
+    protected override void RegisterContentEvents() {
+      base.RegisterContentEvents();
+      Content.ModelChanged += new EventHandler(Content_ModelChanged);
+      Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
+    }
+    protected override void DeregisterContentEvents() {
+      base.DeregisterContentEvents();
+      Content.ModelChanged -= new EventHandler(Content_ModelChanged);
+      Content.ProblemDataChanged -= new EventHandler(Content_ProblemDataChanged);
+    }
+
+    private void Content_ProblemDataChanged(object sender, EventArgs e) {
+      RedrawChart();
+    }
+
+    private void Content_ModelChanged(object sender, EventArgs e) {
+      RedrawChart();
+    }
+
+    protected override void OnContentChanged() {
+      base.OnContentChanged();
+      RedrawChart();
+    }
+
+    private void Chart_MouseDoubleClick(object sender, MouseEventArgs e) {
+      HitTestResult result = chart.HitTest(e.X, e.Y);
+      if (result.ChartArea != null && (result.ChartElementType == ChartElementType.PlottingArea ||
+                                       result.ChartElementType == ChartElementType.Gridlines) ||
+                                       result.ChartElementType == ChartElementType.StripLines) {
+        foreach (var axis in result.ChartArea.Axes)
+          axis.ScaleView.ZoomReset(int.MaxValue);
+      }
+    }
+    #endregion
+
+    private void UpdateStripLines() {
+      this.chart.ChartAreas[0].AxisX.StripLines.Clear();
+      this.CreateAndAddStripLine("Training", Color.FromArgb(20, Color.Green),
+        Content.ProblemData.TrainingPartition.Start,
+        Content.ProblemData.TrainingPartition.End);
+      this.CreateAndAddStripLine("Test", Color.FromArgb(20, Color.Red),
+        Content.ProblemData.TestPartition.Start,
+        Content.ProblemData.TestPartition.End);
+    }
+
+    private void CreateAndAddStripLine(string title, Color c, int start, int end) {
+      StripLine stripLine = new StripLine();
+      stripLine.BackColor = c;
+      stripLine.Text = title;
+      stripLine.Font = new Font("Times New Roman", 12, FontStyle.Bold);
+      stripLine.StripWidth = end - start;
+      stripLine.IntervalOffset = start;
+      this.chart.ChartAreas[0].AxisX.StripLines.Add(stripLine);
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionView.Designer.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionView.Designer.cs	(revision 9804)
@@ -0,0 +1,87 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading.Views {
+  partial class SolutionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.itemsGroupBox.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer
+      // 
+      // 
+      // itemsGroupBox
+      // 
+      this.itemsGroupBox.Text = "Regression Solution";
+      // 
+      // addButton
+      // 
+      this.toolTip.SetToolTip(this.addButton, "Add");
+      // 
+      // removeButton
+      // 
+      this.toolTip.SetToolTip(this.removeButton, "Remove");
+      // 
+      // RegressionSolutionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.Name = "RegressionSolutionView";
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.itemsGroupBox.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionView.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/SolutionView.cs	(revision 9804)
@@ -0,0 +1,44 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using HeuristicLab.MainForm;
+using HeuristicLab.PluginInfrastructure;
+using HeuristicLab.Problems.DataAnalysis.Views;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading.Views {
+  [View("TradingSolution View")]
+  [Content(typeof(Solution), true)]
+  public partial class SolutionView : DataAnalysisSolutionView {
+    public SolutionView() {
+      InitializeComponent();
+
+      var regressionSolutionEvaluationViewTypes = ApplicationManager.Manager.GetTypes(typeof(ISolutionEvaluationView), true);
+      foreach (Type viewType in regressionSolutionEvaluationViewTypes)
+        AddViewListViewItem(viewType, HeuristicLab.Common.Resources.VSImageLibrary.Graph);
+    }
+
+    public new Solution Content {
+      get { return (Solution)base.Content; }
+      set { base.Content = value; }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Symbolic/SolutionView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Symbolic/SolutionView.Designer.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Symbolic/SolutionView.Designer.cs	(revision 9804)
@@ -0,0 +1,105 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading.Views {
+  partial class SolutionView {
+    /// <summary> 
+    /// Required designer variable.
+    /// </summary>
+    private System.ComponentModel.IContainer components = null;
+
+    /// <summary> 
+    /// Clean up any resources being used.
+    /// </summary>
+    /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+    protected override void Dispose(bool disposing) {
+      if (disposing && (components != null)) {
+        components.Dispose();
+      }
+      base.Dispose(disposing);
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private void InitializeComponent() {
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
+      this.splitContainer.Panel1.SuspendLayout();
+      this.splitContainer.Panel2.SuspendLayout();
+      this.splitContainer.SuspendLayout();
+      this.itemsGroupBox.SuspendLayout();
+      this.detailsGroupBox.SuspendLayout();
+      this.SuspendLayout();
+      // 
+      // splitContainer
+      // 
+      // 
+      // splitContainer.Panel1
+      // 
+      this.splitContainer.Size = new System.Drawing.Size(480, 275);
+      this.splitContainer.SplitterDistance = 255;
+      // 
+      // itemsGroupBox
+      // 
+      this.itemsGroupBox.Size = new System.Drawing.Size(486, 294);
+      // 
+      // itemsListView
+      // 
+      this.itemsListView.Size = new System.Drawing.Size(249, 238);
+      // 
+      // detailsGroupBox
+      // 
+      this.detailsGroupBox.Size = new System.Drawing.Size(215, 246);
+      // 
+      // addButton
+      // 
+      this.toolTip.SetToolTip(this.addButton, "Add");
+      // 
+      // removeButton
+      // 
+      this.toolTip.SetToolTip(this.removeButton, "Remove");
+      // 
+      // viewHost
+      // 
+      this.viewHost.Size = new System.Drawing.Size(203, 221);
+      
+      // 
+      // SymbolicRegressionSolutionView
+      // 
+      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+      this.Name = "SymbolicRegressionSolutionView";
+      this.Size = new System.Drawing.Size(486, 294);
+      this.splitContainer.Panel1.ResumeLayout(false);
+      this.splitContainer.Panel2.ResumeLayout(false);
+      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
+      this.splitContainer.ResumeLayout(false);
+      this.itemsGroupBox.ResumeLayout(false);
+      this.detailsGroupBox.ResumeLayout(false);
+      this.ResumeLayout(false);
+
+    }
+
+    #endregion
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Symbolic/SolutionView.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Symbolic/SolutionView.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.Views/3.4/Symbolic/SolutionView.cs	(revision 9804)
@@ -0,0 +1,39 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Windows.Forms;
+using HeuristicLab.MainForm;
+using HeuristicLab.Problems.DataAnalysis.Trading.Views;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading.Views {
+  [Content(typeof(SymbolicSolution), true)]
+  [View("SymbolicTradingSolution View")]
+  public partial class SolutionView : DataAnalysis.Trading.Views.SolutionView {
+    public SolutionView() {
+      InitializeComponent();
+    }
+
+    protected new SymbolicSolution Content {
+      get { return (SymbolicSolution)base.Content; }
+      set { base.Content = value; }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.sln
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.sln	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading.sln	(revision 9804)
@@ -0,0 +1,52 @@
+﻿
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.DataAnalysis.Trading-3.4", "HeuristicLab.Problems.DataAnalysis.Trading\3.4\HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj", "{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7CE422F3-3DBB-4A1F-B45D-03D0C389DFD6}"
+	ProjectSection(SolutionItems) = preProject
+		Build.cmd = Build.cmd
+		PreBuildEvent.cmd = PreBuildEvent.cmd
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4", "HeuristicLab.Problems.DataAnalysis.Trading.Views\3.4\HeuristicLab.Problems.DataAnalysis.Trading.Views-3.4.csproj", "{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|x64.ActiveCfg = Debug|x64
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|x64.Build.0 = Debug|x64
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|x86.ActiveCfg = Debug|x86
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Debug|x86.Build.0 = Debug|x86
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|x64.ActiveCfg = Release|x64
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|x64.Build.0 = Release|x64
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|x86.ActiveCfg = Release|x86
+		{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}.Release|x86.Build.0 = Release|x86
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Debug|x64.ActiveCfg = Debug|x64
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Debug|x64.Build.0 = Debug|x64
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Debug|x86.ActiveCfg = Debug|x86
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Debug|x86.Build.0 = Debug|x86
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Release|x64.ActiveCfg = Release|x64
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Release|x64.Build.0 = Release|x64
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Release|x86.ActiveCfg = Release|x86
+		{CB3D0A1E-1BE8-476B-A53C-2B189E30064F}.Release|x86.Build.0 = Release|x86
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Calculators/OnlineProfitCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Calculators/OnlineProfitCalculator.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Calculators/OnlineProfitCalculator.cs	(revision 9804)
@@ -0,0 +1,122 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  public class OnlineProfitCalculator : IOnlineCalculator {
+
+    private int p;
+    private readonly double transactionCost;
+    private int c;
+    private double sum;
+    public double Profit {
+      get { return sum; }
+    }
+
+    public OnlineProfitCalculator(double transactionCost) {
+      this.transactionCost = transactionCost;
+      Reset();
+    }
+
+    #region IOnlineCalculator Members
+    public OnlineCalculatorError ErrorState {
+      get { return OnlineCalculatorError.None; }
+    }
+    public double Value {
+      get { return Profit; }
+    }
+    public void Reset() {
+      p = 0;
+      c = 0;
+      sum = 0.0;
+    }
+
+    public void Add(double actualReturn, double signal) {
+      double iterationReturn = 0.0;
+      if (c == 0) {
+        p = (int)signal;
+        iterationReturn = 0;
+        c++;
+      } else {
+        if (p == 0 && signal.IsAlmost(0)) {
+        } else if (p == 0 && signal.IsAlmost(1)) {
+          p = 1;
+          iterationReturn = -transactionCost;
+        } else if (p == 0 && signal.IsAlmost(-1)) {
+          p = -1;
+          iterationReturn = -transactionCost;
+        } else if (p == 1 && signal.IsAlmost(1)) {
+          iterationReturn = actualReturn;
+        } else if (p == 1 && signal.IsAlmost(0)) {
+          iterationReturn = actualReturn - transactionCost;
+          p = 0;
+        } else if (p == 1 && signal.IsAlmost(-1)) {
+          iterationReturn = actualReturn - transactionCost;
+          p = -1;
+        } else if (p == -1 && signal.IsAlmost(-1)) {
+          iterationReturn = -actualReturn;
+        } else if (p == -1 && signal.IsAlmost(0)) {
+          iterationReturn = -actualReturn - transactionCost;
+          p = 0;
+        } else if (p == -1 && signal.IsAlmost(1)) {
+          iterationReturn = -actualReturn - transactionCost;
+          p = 1;
+        }
+        c++;
+      }
+      sum += iterationReturn;
+    }
+    #endregion
+
+    public static double Calculate(IEnumerable<double> returns, IEnumerable<double> signals, double transactionCost, out OnlineCalculatorError errorState) {
+      errorState = OnlineCalculatorError.None;
+      return GetProfits(returns, signals, transactionCost).Sum();
+    }
+
+    public static IEnumerable<double> GetProfits(IEnumerable<double> returns, IEnumerable<double> signals, double transactionCost) {
+      var calc = new OnlineProfitCalculator(transactionCost);
+
+      IEnumerator<double> returnsEnumerator = returns.GetEnumerator();
+      IEnumerator<double> signalsEnumerator = signals.GetEnumerator();
+
+      // always move forward both enumerators (do not use short-circuit evaluation!)
+      while (returnsEnumerator.MoveNext() & signalsEnumerator.MoveNext()) {
+        double signal = signalsEnumerator.Current;
+        double @return = returnsEnumerator.Current;
+
+        double prevTotalProfit = calc.Profit;
+        calc.Add(@return, signal);
+        double curTotalProfit = calc.Profit;
+
+        yield return curTotalProfit - prevTotalProfit;
+      }
+
+      // check if both enumerators are at the end to make sure both enumerations have the same length
+      if (returnsEnumerator.MoveNext() || signalsEnumerator.MoveNext()) {
+        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Calculators/OnlineSharpeRatioCalculator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Calculators/OnlineSharpeRatioCalculator.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Calculators/OnlineSharpeRatioCalculator.cs	(revision 9804)
@@ -0,0 +1,89 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  public class OnlineSharpeRatioCalculator : IOnlineCalculator {
+
+    private OnlineMeanAndVarianceCalculator meanAndVarianceCalculator;
+    private OnlineProfitCalculator profitCalculator;
+
+    public double SharpeRatio {
+      get {
+        if (meanAndVarianceCalculator.Variance > 0)
+          return meanAndVarianceCalculator.Mean / Math.Sqrt(meanAndVarianceCalculator.Variance);
+        else return 0.0;
+      }
+    }
+
+    public OnlineSharpeRatioCalculator(double transactionCost) {
+      this.meanAndVarianceCalculator = new OnlineMeanAndVarianceCalculator();
+      this.profitCalculator = new OnlineProfitCalculator(transactionCost);
+      Reset();
+    }
+
+    #region IOnlineCalculator Members
+    public OnlineCalculatorError ErrorState {
+      get {
+        return meanAndVarianceCalculator.MeanErrorState | meanAndVarianceCalculator.VarianceErrorState | profitCalculator.ErrorState;
+      }
+    }
+    public double Value {
+      get { return SharpeRatio; }
+    }
+    public void Reset() {
+      profitCalculator.Reset();
+      meanAndVarianceCalculator.Reset();
+    }
+
+    public void Add(double actualReturn, double signal) {
+      double prevTotalProfit = profitCalculator.Profit;
+      profitCalculator.Add(actualReturn, signal);
+      double curTotalProfit = profitCalculator.Profit;
+
+      meanAndVarianceCalculator.Add(curTotalProfit - prevTotalProfit);
+    }
+    #endregion
+
+    public static double Calculate(IEnumerable<double> returns, IEnumerable<double> signals, double transactionCost, out OnlineCalculatorError errorState) {
+      IEnumerator<double> returnsEnumerator = returns.GetEnumerator();
+      IEnumerator<double> signalsEnumerator = signals.GetEnumerator();
+      OnlineSharpeRatioCalculator calculator = new OnlineSharpeRatioCalculator(transactionCost);
+
+      // always move forward both enumerators (do not use short-circuit evaluation!)
+      while (returnsEnumerator.MoveNext() & signalsEnumerator.MoveNext()) {
+        double signal = signalsEnumerator.Current;
+        double @return = returnsEnumerator.Current;
+        calculator.Add(@return, signal);
+      }
+
+      // check if both enumerators are at the end to make sure both enumerations have the same length
+      if (returnsEnumerator.MoveNext() || signalsEnumerator.MoveNext()) {
+        throw new ArgumentException("Number of elements in first and second enumeration doesn't match.");
+      } else {
+        errorState = calculator.ErrorState;
+        return calculator.SharpeRatio;
+      }
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/HeuristicLab.Problems.DataAnalysis.Trading-3.4.csproj	(revision 9804)
@@ -0,0 +1,203 @@
+﻿<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>9.0.30729</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E4EE5AFB-D552-447B-8A16-6CBE7938AF32}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>HeuristicLab.Problems.DataAnalysis.Trading</RootNamespace>
+    <AssemblyName>HeuristicLab.Problems.DataAnalysis.Trading-3.4</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+    <SignAssembly>true</SignAssembly>
+    <AssemblyOriginatorKeyFile>HeuristicLab.snk</AssemblyOriginatorKeyFile>
+    <FileUpgradeFlags>
+    </FileUpgradeFlags>
+    <OldToolsVersion>3.5</OldToolsVersion>
+    <UpgradeBackupLocation />
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
+    <OutputPath>bin\x64\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x64</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>..\..\..\..\trunk\sources\bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <OutputPath>bin\x86\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <DebugType>pdbonly</DebugType>
+    <PlatformTarget>x86</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HeuristicLab.Collections-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Collections-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Common-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Common-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Core-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Core-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Data-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Data-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Encodings.SymbolicExpressionTreeEncoding-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Operators-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Operators-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Optimization-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Optimization-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Parameters-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Parameters-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Persistence-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Persistence-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.PluginInfrastructure-3.3">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.PluginInfrastructure-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis-3.4">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.DataAnalysis.Symbolic-3.4">
+      <HintPath>c:\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.dll</HintPath>
+    </Reference>
+    <Reference Include="HeuristicLab.Problems.Instances-3.3">
+      <HintPath>..\..\..\..\..\..\Program Files\HeuristicLab 3.3\HeuristicLab.Problems.Instances-3.3.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Drawing" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Calculators\OnlineProfitCalculator.cs" />
+    <Compile Include="Calculators\OnlineSharpeRatioCalculator.cs" />
+    <Compile Include="Interfaces\IModel.cs" />
+    <Compile Include="Interfaces\IProblem.cs" />
+    <Compile Include="Interfaces\IProblemData.cs" />
+    <Compile Include="Interfaces\ISolution.cs" />
+    <Compile Include="Plugin.cs" />
+    <Compile Include="Problem.cs" />
+    <Compile Include="ProblemData.cs" />
+    <Compile Include="Solution.cs" />
+    <Compile Include="Symbolic\Interfaces\IEvaluator.cs" />
+    <Compile Include="Symbolic\Interfaces\IModel.cs" />
+    <Compile Include="Symbolic\Interfaces\ISingleObjectiveEvaluator.cs" />
+    <Compile Include="Symbolic\Interfaces\ISolution.cs" />
+    <Compile Include="Symbolic\Model.cs" />
+    <Compile Include="Symbolic\SingleObjective\Evaluator.cs" />
+    <Compile Include="Symbolic\SingleObjective\Problem.cs" />
+    <Compile Include="Symbolic\SingleObjective\ProfitEvaluator.cs" />
+    <Compile Include="Symbolic\SingleObjective\SharpeRatioEvaluator.cs" />
+    <Compile Include="Symbolic\SingleObjective\TrainingBestSolutionAnalyzer.cs" />
+    <Compile Include="Symbolic\SingleObjective\ValidationBestSolutionAnalyzer.cs" />
+    <Compile Include="Symbolic\Solution.cs" />
+    <None Include="HeuristicLab.snk" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <None Include="Plugin.cs.frame" />
+    <None Include="Properties\AssemblyInfo.cs.frame" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup />
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+  <PropertyGroup>
+    <PreBuildEvent>set Path=%25Path%25;$(ProjectDir);$(SolutionDir)
+set ProjectDir=$(ProjectDir)
+set SolutionDir=$(SolutionDir)
+set Outdir=$(Outdir)
+
+call PreBuildEvent.cmd
+</PreBuildEvent>
+  </PropertyGroup>
+</Project>
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/IModel.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/IModel.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/IModel.cs	(revision 9804)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  public interface IModel : IDataAnalysisModel {
+    IEnumerable<double> GetSignals(Dataset dataset, IEnumerable<int> rows);
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/IProblem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/IProblem.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/IProblem.cs	(revision 9804)
@@ -0,0 +1,25 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  public interface IProblem : IDataAnalysisProblem<IProblemData> {
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/IProblemData.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/IProblemData.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/IProblemData.cs	(revision 9804)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  public interface IProblemData : IDataAnalysisProblemData {
+    string PriceVariable { get; }
+    double TransactionCosts { get; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/ISolution.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/ISolution.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Interfaces/ISolution.cs	(revision 9804)
@@ -0,0 +1,36 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  public interface ISolution : IDataAnalysisSolution {
+    new IModel Model { get; }
+    new IProblemData ProblemData { get; }
+
+    IEnumerable<double> Signals { get; }
+    IEnumerable<double> TrainingSignals { get; }
+    IEnumerable<double> TestSignals { get; }
+    IEnumerable<double> GetSignals(IEnumerable<int> rows);
+
+    double TrainingSharpeRatio { get; }
+    double TestSharpeRatio { get; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Plugin.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Plugin.cs.frame	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Plugin.cs.frame	(revision 9804)
@@ -0,0 +1,42 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.PluginInfrastructure;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  [Plugin("HeuristicLab.Problems.DataAnalysis.Trading","Provides classes to optimize trading rules.", "3.4.0.$WCREV$")]
+  [PluginFile("HeuristicLab.Problems.DataAnalysis.Trading-3.4.dll", PluginFileType.Assembly)]
+
+  [PluginDependency("HeuristicLab.Collections", "3.3")]
+  [PluginDependency("HeuristicLab.Common", "3.3")]
+  [PluginDependency("HeuristicLab.Core", "3.3")]
+  [PluginDependency("HeuristicLab.Data", "3.3")]
+  [PluginDependency("HeuristicLab.Encodings.SymbolicExpressionTreeEncoding", "3.4")]
+  [PluginDependency("HeuristicLab.Operators", "3.3")]
+  [PluginDependency("HeuristicLab.Optimization", "3.3")]
+  [PluginDependency("HeuristicLab.Parameters", "3.3")]
+  [PluginDependency("HeuristicLab.Persistence", "3.3")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.DataAnalysis.Symbolic", "3.4")]
+  [PluginDependency("HeuristicLab.Problems.Instances", "3.3")]
+  public class Plugin : PluginBase {
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Problem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Problem.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Problem.cs	(revision 9804)
@@ -0,0 +1,42 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  [StorableClass]
+  [Item("Trading Problem", "A general trading problem.")]
+  [Creatable("Problems")]
+  public class Problem : DataAnalysisProblem<IProblemData>, IProblem {
+    [StorableConstructor]
+    protected Problem(bool deserializing) : base(deserializing) { }
+    protected Problem(Problem original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { 
+      return new Problem(this, cloner); }
+
+    public Problem()
+      : base() {
+      ProblemData = new ProblemData();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/ProblemData.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/ProblemData.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/ProblemData.cs	(revision 9804)
@@ -0,0 +1,1649 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  [StorableClass]
+  [Item("TradingProblemData", "Represents an item containing all data defining a trading problem.")]
+  public sealed class ProblemData : DataAnalysisProblemData, IProblemData {
+    private const string PriceVariableParameterName = "PriceVariable";
+    private const string TransactionCostsParameterName = "TransactionCosts";
+
+    #region default data
+    private static double[,] audInUsdDiff = new double[,] {
+    { 0.0000},
+    { 0.0003},
+    {-0.0004},
+    { 0.0000},
+    { 0.0003},
+    { 0.0003},
+    {-0.0005},
+    { 0.0001},
+    { 0.0004},
+    { 0.0001},
+    {-0.0005},
+    {-0.0014},
+    {-0.0002},
+    { 0.0000},
+    { 0.0011},
+    { 0.0024},
+    {-0.0022},
+    {-0.0035},
+    { 0.0003},
+    { 0.0005},
+    { 0.0014},
+    {-0.0003},
+    { 0.0001},
+    { 0.0001},
+    { 0.0001},
+    { 0.0008},
+    {-0.0004},
+    { 0.0012},
+    { 0.0001},
+    {-0.0001},
+    { 0.0004},
+    {-0.0004},
+    {-0.0007},
+    {-0.0007},
+    {-0.0011},
+    { 0.0001},
+    {-0.0003},
+    {-0.0009},
+    { 0.0001},
+    {-0.0009},
+    { 0.0006},
+    { 0.0006},
+    {-0.0006},
+    { 0.0015},
+    { 0.0003},
+    {-0.0005},
+    {-0.0010},
+    {-0.0005},
+    { 0.0002},
+    {-0.0005},
+    {-0.0002},
+    {-0.0010},
+    { 0.0015},
+    { 0.0001},
+    {-0.0010},
+    {-0.0003},
+    { 0.0004},
+    {-0.0022},
+    { 0.0008},
+    {-0.0007},
+    { 0.0004},
+    { 0.0036},
+    {-0.0005},
+    { 0.0002},
+    { 0.0009},
+    {-0.0002},
+    { 0.0004},
+    { 0.0012},
+    {-0.0005},
+    { 0.0004},
+    {-0.0010},
+    {-0.0006},
+    {-0.0028},
+    { 0.0007},
+    { 0.0009},
+    { 0.0005},
+    {-0.0001},
+    { 0.0001},
+    {-0.0011},
+    { 0.0004},
+    { 0.0007},
+    {-0.0004},
+    { 0.0005},
+    {-0.0008},
+    {-0.0005},
+    {-0.0011},
+    { 0.0004},
+    {-0.0008},
+    { 0.0016},
+    { 0.0008},
+    {-0.0002},
+    { 0.0000},
+    {-0.0015},
+    { 0.0002},
+    {-0.0008},
+    {-0.0005},
+    {-0.0001},
+    { 0.0002},
+    { 0.0038},
+    { 0.0007},
+    {-0.0001},
+    { 0.0000},
+    { 0.0015},
+    { 0.0000},
+    { 0.0009},
+    {-0.0008},
+    {-0.0001},
+    {-0.0006},
+    { 0.0019},
+    {-0.0002},
+    { 0.0002},
+    {-0.0017},
+    {-0.0003},
+    {-0.0004},
+    {-0.0017},
+    { 0.0003},
+    { 0.0000},
+    { 0.0001},
+    { 0.0003},
+    { 0.0006},
+    {-0.0001},
+    {-0.0009},
+    { 0.0007},
+    { 0.0004},
+    { 0.0002},
+    { 0.0001},
+    {-0.0001},
+    {-0.0013},
+    { 0.0009},
+    { 0.0003},
+    { 0.0004},
+    { 0.0001},
+    { 0.0001},
+    { 0.0001},
+    { 0.0007},
+    { 0.0013},
+    { 0.0029},
+    {-0.0011},
+    { 0.0003},
+    { 0.0001},
+    { 0.0003},
+    {-0.0005},
+    { 0.0003},
+    { 0.0004},
+    { 0.0008},
+    {-0.0006},
+    { 0.0005},
+    {-0.0001},
+    { 0.0000},
+    { 0.0003},
+    { 0.0013},
+    { 0.0005},
+    { 0.0002},
+    { 0.0005},
+    {-0.0005},
+    { 0.0012},
+    {-0.0006},
+    { 0.0001},
+    {-0.0012},
+    { 0.0015},
+    {-0.0005},
+    {-0.0005},
+    { 0.0012},
+    {-0.0006},
+    {-0.0001},
+    {-0.0002},
+    { 0.0000},
+    { 0.0003},
+    {-0.0008},
+    { 0.0010},
+    { 0.0003},
+    {-0.0006},
+    { 0.0001},
+    {-0.0001},
+    { 0.0014},
+    {-0.0011},
+    {-0.0002},
+    {-0.0001},
+    { 0.0005},
+    { 0.0006},
+    {-0.0018},
+    {-0.0007},
+    {-0.0001},
+    {-0.0001},
+    { 0.0002},
+    {-0.0008},
+    { 0.0027},
+    { 0.0006},
+    {-0.0005},
+    {-0.0003},
+    {-0.0003},
+    {-0.0001},
+    { 0.0005},
+    { 0.0003},
+    { 0.0004},
+    { 0.0013},
+    { 0.0006},
+    { 0.0000},
+    { 0.0011},
+    { 0.0003},
+    {-0.0008},
+    {-0.0003},
+    { 0.0005},
+    {-0.0004},
+    {-0.0015},
+    {-0.0006},
+    { 0.0008},
+    { 0.0016},
+    {-0.0009},
+    { 0.0007},
+    {-0.0009},
+    {-0.0005},
+    { 0.0001},
+    { 0.0005},
+    { 0.0002},
+    {-0.0011},
+    { 0.0006},
+    {-0.0016},
+    {-0.0013},
+    {-0.0006},
+    {-0.0004},
+    {-0.0002},
+    {-0.0006},
+    { 0.0014},
+    { 0.0002},
+    {-0.0006},
+    {-0.0007},
+    {-0.0001},
+    {-0.0010},
+    {-0.0012},
+    { 0.0009},
+    {-0.0009},
+    {-0.0006},
+    { 0.0000},
+    { 0.0014},
+    {-0.0011},
+    {-0.0002},
+    {-0.0012},
+    {-0.0003},
+    { 0.0003},
+    {-0.0010},
+    {-0.0008},
+    { 0.0001},
+    {-0.0005},
+    {-0.0011},
+    { 0.0006},
+    {-0.0008},
+    { 0.0012},
+    { 0.0007},
+    {-0.0009},
+    { 0.0005},
+    { 0.0017},
+    { 0.0003},
+    {-0.0011},
+    { 0.0034},
+    {-0.0017},
+    {-0.0006},
+    {-0.0008},
+    { 0.0004},
+    {-0.0005},
+    {-0.0006},
+    { 0.0001},
+    { 0.0009},
+    {-0.0036},
+    {-0.0010},
+    { 0.0005},
+    { 0.0000},
+    { 0.0003},
+    {-0.0007},
+    { 0.0021},
+    { 0.0003},
+    { 0.0005},
+    { 0.0003},
+    {-0.0005},
+    {-0.0001},
+    {-0.0011},
+    {-0.0009},
+    { 0.0007},
+    { 0.0003},
+    { 0.0006},
+    { 0.0001},
+    {-0.0002},
+    { 0.0006},
+    { 0.0005},
+    { 0.0005},
+    {-0.0008},
+    {-0.0008},
+    { 0.0005},
+    { 0.0006},
+    {-0.0007},
+    { 0.0003},
+    { 0.0005},
+    { 0.0000},
+    { 0.0003},
+    { 0.0010},
+    {-0.0018},
+    { 0.0003},
+    {-0.0001},
+    { 0.0008},
+    {-0.0015},
+    {-0.0008},
+    { 0.0032},
+    { 0.0009},
+    { 0.0005},
+    {-0.0014},
+    {-0.0003},
+    { 0.0029},
+    { 0.0002},
+    {-0.0002},
+    {-0.0002},
+    { 0.0005},
+    { 0.0008},
+    {-0.0007},
+    { 0.0014},
+    {-0.0004},
+    {-0.0003},
+    { 0.0004},
+    {-0.0001},
+    {-0.0007},
+    { 0.0002},
+    { 0.0002},
+    { 0.0005},
+    { 0.0012},
+    {-0.0018},
+    { 0.0014},
+    { 0.0004},
+    { 0.0012},
+    { 0.0002},
+    { 0.0009},
+    {-0.0007},
+    { 0.0002},
+    { 0.0000},
+    {-0.0011},
+    {-0.0002},
+    { 0.0008},
+    {-0.0010},
+    { 0.0013},
+    {-0.0003},
+    {-0.0001},
+    {-0.0002},
+    { 0.0001},
+    { 0.0003},
+    {-0.0012},
+    { 0.0009},
+    {-0.0003},
+    { 0.0005},
+    {-0.0018},
+    { 0.0013},
+    { 0.0004},
+    { 0.0006},
+    { 0.0003},
+    {-0.0016},
+    {-0.0005},
+    { 0.0005},
+    { 0.0004},
+    { 0.0000},
+    {-0.0007},
+    {-0.0007},
+    { 0.0008},
+    {-0.0007},
+    { 0.0008},
+    { 0.0004},
+    { 0.0003},
+    { 0.0019},
+    { 0.0003},
+    {-0.0004},
+    { 0.0021},
+    {-0.0013},
+    { 0.0006},
+    {-0.0009},
+    { 0.0012},
+    { 0.0011},
+    { 0.0003},
+    { 0.0011},
+    {-0.0003},
+    {-0.0007},
+    { 0.0001},
+    { 0.0009},
+    {-0.0002},
+    {-0.0012},
+    {-0.0010},
+    {-0.0002},
+    {-0.0007},
+    {-0.0001},
+    {-0.0008},
+    { 0.0001},
+    { 0.0001},
+    { 0.0005},
+    { 0.0007},
+    {-0.0004},
+    {-0.0007},
+    {-0.0003},
+    {-0.0005},
+    { 0.0006},
+    { 0.0001},
+    {-0.0012},
+    {-0.0004},
+    { 0.0014},
+    {-0.0005},
+    { 0.0007},
+    {-0.0001},
+    {-0.0002},
+    { 0.0010},
+    {-0.0015},
+    {-0.0003},
+    { 0.0009},
+    { 0.0000},
+    {-0.0009},
+    { 0.0010},
+    { 0.0016},
+    {-0.0002},
+    {-0.0001},
+    {-0.0004},
+    {-0.0011},
+    { 0.0004},
+    { 0.0010},
+    {-0.0007},
+    {-0.0003},
+    {-0.0008},
+    {-0.0012},
+    { 0.0003},
+    { 0.0016},
+    {-0.0019},
+    {-0.0006},
+    { 0.0006},
+    { 0.0006},
+    {-0.0002},
+    {-0.0004},
+    { 0.0003},
+    { 0.0008},
+    {-0.0013},
+    {-0.0012},
+    {-0.0002},
+    {-0.0005},
+    { 0.0010},
+    {-0.0009},
+    {-0.0003},
+    { 0.0016},
+    {-0.0013},
+    { 0.0003},
+    { 0.0003},
+    {-0.0007},
+    { 0.0016},
+    { 0.0002},
+    {-0.0013},
+    {-0.0002},
+    {-0.0009},
+    {-0.0003},
+    { 0.0010},
+    { 0.0002},
+    { 0.0013},
+    {-0.0006},
+    {-0.0006},
+    { 0.0001},
+    {-0.0005},
+    { 0.0018},
+    { 0.0002},
+    { 0.0006},
+    {-0.0002},
+    {-0.0004},
+    { 0.0000},
+    { 0.0016},
+    {-0.0011},
+    {-0.0004},
+    { 0.0002},
+    { 0.0001},
+    { 0.0025},
+    {-0.0011},
+    {-0.0008},
+    { 0.0009},
+    {-0.0001},
+    {-0.0005},
+    {-0.0001},
+    { 0.0005},
+    { 0.0001},
+    {-0.0008},
+    {-0.0001},
+    { 0.0003},
+    { 0.0008},
+    {-0.0011},
+    { 0.0003},
+    { 0.0004},
+    { 0.0005},
+    { 0.0014},
+    {-0.0002},
+    { 0.0008},
+    { 0.0004},
+    { 0.0019},
+    {-0.0005},
+    {-0.0005},
+    {-0.0005},
+    { 0.0000},
+    {-0.0006},
+    { 0.0015},
+    {-0.0011},
+    {-0.0017},
+    {-0.0002},
+    { 0.0007},
+    { 0.0004},
+    {-0.0018},
+    {-0.0001},
+    {-0.0002},
+    {-0.0001},
+    { 0.0005},
+    {-0.0003},
+    { 0.0000},
+    { 0.0007},
+    { 0.0006},
+    {-0.0014},
+    { 0.0006},
+    {-0.0003},
+    { 0.0002},
+    {-0.0002},
+    {-0.0002},
+    { 0.0002},
+    {-0.0009},
+    {-0.0001},
+    {-0.0001},
+    { 0.0000},
+    { 0.0012},
+    { 0.0000},
+    { 0.0003},
+    {-0.0008},
+    { 0.0004},
+    { 0.0000},
+    {-0.0003},
+    {-0.0013},
+    {-0.0005},
+    {-0.0005},
+    {-0.0001},
+    {-0.0004},
+    { 0.0006},
+    { 0.0000},
+    {-0.0008},
+    {-0.0004},
+    {-0.0024},
+    { 0.0003},
+    {-0.0005},
+    { 0.0007},
+    { 0.0003},
+    {-0.0004},
+    {-0.0004},
+    { 0.0003},
+    { 0.0000},
+    { 0.0014},
+    {-0.0004},
+    { 0.0000},
+    {-0.0009},
+    { 0.0012},
+    {-0.0008},
+    { 0.0028},
+    { 0.0003},
+    { 0.0001},
+    { 0.0010},
+    {-0.0005},
+    { 0.0004},
+    {-0.0005},
+    { 0.0001},
+    {-0.0005},
+    { 0.0017},
+    {-0.0012},
+    {-0.0002},
+    { 0.0010},
+    {-0.0009},
+    {-0.0001},
+    { 0.0003},
+    { 0.0001},
+    { 0.0031},
+    {-0.0005},
+    { 0.0004},
+    { 0.0002},
+    {-0.0001},
+    {-0.0003},
+    {-0.0013},
+    {-0.0015},
+    {-0.0003},
+    { 0.0010},
+    { 0.0010},
+    {-0.0002},
+    { 0.0027},
+    { 0.0004},
+    { 0.0001},
+    {-0.0007},
+    { 0.0000},
+    {-0.0002},
+    { 0.0011},
+    {-0.0009},
+    {-0.0003},
+    {-0.0006},
+    { 0.0007},
+    {-0.0015},
+    { 0.0004},
+    {-0.0002},
+    { 0.0002},
+    { 0.0001},
+    {-0.0005},
+    { 0.0000},
+    { 0.0003},
+    {-0.0011},
+    { 0.0001},
+    {-0.0001},
+    { 0.0002},
+    {-0.0006},
+    { 0.0003},
+    {-0.0004},
+    {-0.0005},
+    {-0.0005},
+    { 0.0000},
+    { 0.0007},
+    {-0.0032},
+    { 0.0001},
+    { 0.0007},
+    {-0.0008},
+    {-0.0004},
+    {-0.0004},
+    {-0.0004},
+    { 0.0010},
+    {-0.0001},
+    {-0.0001},
+    { 0.0002},
+    { 0.0000},
+    { 0.0001},
+    {-0.0009},
+    {-0.0002},
+    {-0.0009},
+    {-0.0002},
+    { 0.0002},
+    { 0.0002},
+    { 0.0010},
+    { 0.0002},
+    {-0.0005},
+    {-0.0005},
+    {-0.0021},
+    { 0.0008},
+    { 0.0000},
+    { 0.0006},
+    {-0.0006},
+    {-0.0007},
+    { 0.0007},
+    {-0.0007},
+    { 0.0005},
+    { 0.0011},
+    {-0.0006},
+    {-0.0004},
+    { 0.0012},
+    { 0.0001},
+    { 0.0010},
+    {-0.0002},
+    {-0.0004},
+    {-0.0004},
+    {-0.0003},
+    {-0.0006},
+    { 0.0011},
+    { 0.0000},
+    { 0.0012},
+    { 0.0001},
+    {-0.0003},
+    { 0.0011},
+    { 0.0007},
+    {-0.0007},
+    { 0.0005},
+    {-0.0002},
+    { 0.0008},
+    { 0.0002},
+    { 0.0008},
+    {-0.0002},
+    { 0.0005},
+    { 0.0002},
+    {-0.0009},
+    { 0.0003},
+    {-0.0008},
+    { 0.0004},
+    {-0.0009},
+    { 0.0006},
+    { 0.0011},
+    { 0.0010},
+    { 0.0006},
+    {-0.0006},
+    { 0.0005},
+    { 0.0002},
+    {-0.0035},
+    { 0.0008},
+    {-0.0006},
+    {-0.0011},
+    { 0.0008},
+    {-0.0003},
+    {-0.0005},
+    { 0.0004},
+    { 0.0000},
+    { 0.0002},
+    {-0.0011},
+    { 0.0001},
+    {-0.0009},
+    { 0.0007},
+    {-0.0003},
+    { 0.0005},
+    {-0.0005},
+    { 0.0002},
+    {-0.0021},
+    {-0.0004},
+    { 0.0000},
+    { 0.0014},
+    {-0.0004},
+    {-0.0006},
+    {-0.0031},
+    {-0.0006},
+    { 0.0004},
+    { 0.0001},
+    {-0.0012},
+    {-0.0011},
+    { 0.0004},
+    {-0.0002},
+    { 0.0000},
+    {-0.0004},
+    {-0.0002},
+    { 0.0013},
+    {-0.0007},
+    {-0.0007},
+    { 0.0001},
+    { 0.0001},
+    {-0.0010},
+    { 0.0001},
+    { 0.0006},
+    {-0.0001},
+    {-0.0008},
+    {-0.0015},
+    {-0.0008},
+    {-0.0001},
+    { 0.0010},
+    {-0.0004},
+    { 0.0000},
+    {-0.0016},
+    { 0.0000},
+    { 0.0001},
+    {-0.0004},
+    {-0.0001},
+    { 0.0014},
+    {-0.0025},
+    {-0.0006},
+    {-0.0011},
+    {-0.0002},
+    {-0.0001},
+    {-0.0005},
+    {-0.0005},
+    {-0.0014},
+    { 0.0000},
+    {-0.0007},
+    { 0.0021},
+    { 0.0002},
+    {-0.0005},
+    {-0.0009},
+    {-0.0002},
+    { 0.0020},
+    { 0.0004},
+    {-0.0011},
+    {-0.0018},
+    { 0.0005},
+    { 0.0005},
+    { 0.0000},
+    { 0.0000},
+    { 0.0004},
+    { 0.0008},
+    {-0.0004},
+    {-0.0007},
+    { 0.0001},
+    { 0.0009},
+    {-0.0001},
+    { 0.0010},
+    {-0.0005},
+    {-0.0023},
+    { 0.0004},
+    { 0.0022},
+    {-0.0013},
+    { 0.0003},
+    {-0.0003},
+    {-0.0003},
+    { 0.0010},
+    {-0.0002},
+    { 0.0000},
+    { 0.0002},
+    {-0.0004},
+    {-0.0007},
+    {-0.0005},
+    {-0.0003},
+    { 0.0005},
+    {-0.0010},
+    {-0.0004},
+    { 0.0001},
+    { 0.0003},
+    { 0.0000},
+    { 0.0008},
+    { 0.0001},
+    { 0.0004},
+    { 0.0002},
+    { 0.0001},
+    {-0.0005},
+    {-0.0005},
+    {-0.0003},
+    { 0.0016},
+    { 0.0006},
+    {-0.0014},
+    { 0.0016},
+    { 0.0016},
+    { 0.0009},
+    {-0.0002},
+    {-0.0002},
+    { 0.0005},
+    {-0.0005},
+    {-0.0004},
+    {-0.0008},
+    {-0.0003},
+    {-0.0001},
+    { 0.0005},
+    {-0.0002},
+    {-0.0004},
+    {-0.0003},
+    { 0.0003},
+    { 0.0003},
+    {-0.0003},
+    { 0.0003},
+    {-0.0004},
+    { 0.0000},
+    {-0.0008},
+    {-0.0013},
+    { 0.0007},
+    {-0.0011},
+    { 0.0015},
+    {-0.0008},
+    { 0.0007},
+    {-0.0002},
+    {-0.0004},
+    { 0.0005},
+    {-0.0008},
+    { 0.0000},
+    {-0.0008},
+    { 0.0007},
+    { 0.0007},
+    { 0.0011},
+    { 0.0000},
+    { 0.0003},
+    {-0.0005},
+    { 0.0003},
+    { 0.0012},
+    { 0.0005},
+    {-0.0006},
+    {-0.0002},
+    {-0.0007},
+    {-0.0027},
+    {-0.0012},
+    {-0.0005},
+    { 0.0005},
+    { 0.0002},
+    { 0.0001},
+    { 0.0003},
+    { 0.0003},
+    { 0.0002},
+    {-0.0002},
+    {-0.0003},
+    { 0.0009},
+    { 0.0003},
+    { 0.0003},
+    { 0.0006},
+    {-0.0002},
+    {-0.0003},
+    {-0.0004},
+    { 0.0011},
+    { 0.0000},
+    { 0.0000},
+    { 0.0000},
+    {-0.0007},
+    { 0.0001},
+    { 0.0019},
+    { 0.0011},
+    {-0.0011},
+    { 0.0002},
+    { 0.0009},
+    { 0.0002},
+    { 0.0004},
+    {-0.0001},
+    {-0.0008},
+    { 0.0001},
+    { 0.0003},
+    {-0.0002},
+    {-0.0002},
+    { 0.0002},
+    { 0.0003},
+    { 0.0000},
+    { 0.0010},
+    { 0.0013},
+    {-0.0004},
+    {-0.0009},
+    {-0.0005},
+    { 0.0018},
+    { 0.0018},
+    {-0.0006},
+    {-0.0006},
+    {-0.0009},
+    { 0.0005},
+    {-0.0004},
+    {-0.0001},
+    { 0.0012},
+    {-0.0002},
+    {-0.0006},
+    {-0.0024},
+    {-0.0002},
+    {-0.0011},
+    { 0.0003},
+    { 0.0009},
+    { 0.0002},
+    { 0.0002},
+    { 0.0003},
+    {-0.0002},
+    {-0.0002},
+    { 0.0000},
+    { 0.0000},
+    {-0.0010},
+    {-0.0007},
+    { 0.0009},
+    { 0.0001},
+    { 0.0020},
+    { 0.0001},
+    { 0.0005},
+    {-0.0003},
+    { 0.0004},
+    {-0.0005},
+    { 0.0005},
+    { 0.0002},
+    { 0.0001},
+    { 0.0001},
+    { 0.0004},
+    { 0.0008},
+    { 0.0000},
+    {-0.0008},
+    { 0.0002},
+    {-0.0012},
+    {-0.0004},
+    { 0.0004},
+    {-0.0001},
+    { 0.0010},
+    {-0.0009},
+    {-0.0007},
+    {-0.0006},
+    {-0.0002},
+    { 0.0001},
+    {-0.0004},
+    { 0.0002},
+    { 0.0000},
+    { 0.0000},
+    {-0.0012},
+    {-0.0002},
+    {-0.0002},
+    { 0.0009},
+    {-0.0008},
+    {-0.0001},
+    { 0.0008},
+    {-0.0001},
+    {-0.0002},
+    {-0.0004},
+    { 0.0009},
+    { 0.0001},
+    { 0.0005},
+    { 0.0015},
+    {-0.0001},
+    {-0.0002},
+    {-0.0004},
+    { 0.0009},
+    {-0.0010},
+    {-0.0005},
+    { 0.0004},
+    { 0.0011},
+    { 0.0009},
+    {-0.0003},
+    {-0.0002},
+    { 0.0006},
+    { 0.0003},
+    {-0.0003},
+    {-0.0002},
+    { 0.0015},
+    { 0.0003},
+    { 0.0001},
+    {-0.0001},
+    {-0.0001},
+    {-0.0005},
+    {-0.0001},
+    { 0.0003},
+    { 0.0002},
+    { 0.0001},
+    {-0.0002},
+    {-0.0008},
+    { 0.0003},
+    {-0.0001},
+    { 0.0000},
+    { 0.0002},
+    {-0.0002},
+    {-0.0001},
+    {-0.0005},
+    { 0.0002},
+    { 0.0000},
+    { 0.0000},
+    { 0.0004},
+    { 0.0000},
+    {-0.0013},
+    {-0.0043},
+    { 0.0007},
+    { 0.0001},
+    {-0.0007},
+    {-0.0001},
+    { 0.0003},
+    { 0.0013},
+    { 0.0005},
+    {-0.0007},
+    { 0.0002},
+    {-0.0014},
+    {-0.0002},
+    { 0.0000},
+    { 0.0020},
+    { 0.0009},
+    {-0.0018},
+    {-0.0005},
+    {-0.0009},
+    {-0.0005},
+    { 0.0008},
+    { 0.0005},
+    {-0.0004},
+    { 0.0004},
+    { 0.0001},
+    { 0.0003},
+    { 0.0003},
+    {-0.0008},
+    {-0.0007},
+    { 0.0008},
+    {-0.0004},
+    {-0.0028},
+    {-0.0006},
+    {-0.0022},
+    {-0.0009},
+    { 0.0003},
+    { 0.0003},
+    { 0.0000},
+    { 0.0021},
+    {-0.0017},
+    { 0.0009},
+    {-0.0001},
+    {-0.0005},
+    {-0.0015},
+    { 0.0009},
+    { 0.0009},
+    {-0.0009},
+    { 0.0010},
+    { 0.0000},
+    { 0.0018},
+    {-0.0011},
+    { 0.0001},
+    {-0.0008},
+    { 0.0009},
+    { 0.0022},
+    { 0.0011},
+    {-0.0002},
+    {-0.0018},
+    { 0.0019},
+    {-0.0004},
+    {-0.0004},
+    { 0.0002},
+    { 0.0027},
+    {-0.0012},
+    {-0.0003},
+    {-0.0002},
+    { 0.0013},
+    { 0.0002},
+    {-0.0003},
+    { 0.0002},
+    { 0.0003},
+    {-0.0002},
+    { 0.0020},
+    {-0.0003},
+    { 0.0002},
+    {-0.0001},
+    {-0.0001},
+    { 0.0006},
+    {-0.0012},
+    { 0.0011},
+    { 0.0001},
+    { 0.0001},
+    { 0.0004},
+    {-0.0002},
+    { 0.0029},
+    {-0.0016},
+    { 0.0005},
+    {-0.0029},
+    {-0.0002},
+    { 0.0013},
+    { 0.0011},
+    {-0.0003},
+    { 0.0002},
+    { 0.0001},
+    { 0.0001},
+    {-0.0005},
+    { 0.0000},
+    { 0.0009},
+    { 0.0016},
+    { 0.0005},
+    { 0.0003},
+    { 0.0004},
+    {-0.0001},
+    { 0.0020},
+    { 0.0006},
+    {-0.0006},
+    {-0.0004},
+    { 0.0012},
+    { 0.0012},
+    { 0.0017},
+    { 0.0017},
+    {-0.0004},
+    { 0.0001},
+    { 0.0001},
+    {-0.0006},
+    {-0.0003},
+    { 0.0004},
+    { 0.0008},
+    {-0.0014},
+    { 0.0011},
+    {-0.0003},
+    { 0.0004},
+    {-0.0001},
+    { 0.0017},
+    { 0.0008},
+    { 0.0005},
+    {-0.0002},
+    { 0.0001},
+    {-0.0013},
+    { 0.0009},
+    {-0.0008},
+    {-0.0003},
+    { 0.0013},
+    {-0.0002},
+    {-0.0004},
+    { 0.0007},
+    {-0.0009},
+    { 0.0002},
+    {-0.0002},
+    {-0.0006},
+    { 0.0003},
+    {-0.0003},
+    {-0.0004},
+    {-0.0006},
+    {-0.0004},
+    { 0.0006},
+    {-0.0006},
+    { 0.0019},
+    {-0.0012},
+    {-0.0002},
+    { 0.0003},
+    { 0.0001},
+    { 0.0001},
+    { 0.0002},
+    { 0.0004},
+    { 0.0000},
+    {-0.0013},
+    {-0.0017},
+    {-0.0017},
+    {-0.0006},
+    {-0.0003},
+    { 0.0006},
+    { 0.0001},
+    { 0.0007},
+    {-0.0004},
+    { 0.0000},
+    { 0.0019},
+    {-0.0008},
+    {-0.0006},
+    { 0.0003},
+    {-0.0004},
+    {-0.0002},
+    { 0.0008},
+    {-0.0007},
+    {-0.0004},
+    {-0.0001},
+    {-0.0004},
+    {-0.0003},
+    { 0.0004},
+    {-0.0008},
+    { 0.0015},
+    { 0.0011},
+    {-0.0013},
+    {-0.0003},
+    { 0.0000},
+    { 0.0006},
+    {-0.0003},
+    {-0.0003},
+    { 0.0005},
+    {-0.0016},
+    { 0.0005},
+    {-0.0002},
+    {-0.0009},
+    {-0.0001},
+    {-0.0004},
+    { 0.0007},
+    { 0.0004},
+    { 0.0015},
+    { 0.0005},
+    {-0.0007},
+    { 0.0002},
+    {-0.0007},
+    {-0.0009},
+    {-0.0029},
+    { 0.0003},
+    {-0.0002},
+    {-0.0010},
+    {-0.0001},
+    { 0.0005},
+    {-0.0003},
+    { 0.0002},
+    {-0.0006},
+    { 0.0008},
+    {-0.0010},
+    { 0.0005},
+    { 0.0003},
+    { 0.0009},
+    { 0.0002},
+    { 0.0001},
+    { 0.0002},
+    {-0.0010},
+    {-0.0017},
+    { 0.0004},
+    {-0.0007},
+    { 0.0019},
+    {-0.0001},
+    {-0.0004},
+    {-0.0023},
+    { 0.0015},
+    { 0.0009},
+    {-0.0006},
+    {-0.0001},
+    { 0.0000},
+    { 0.0001},
+    { 0.0003},
+    {-0.0002},
+    { 0.0039},
+    {-0.0007},
+    { 0.0000},
+    {-0.0002},
+    {-0.0005},
+    { 0.0007},
+    { 0.0010},
+    {-0.0004},
+    { 0.0006},
+    {-0.0003},
+    {-0.0006},
+    { 0.0003},
+    { 0.0022},
+    {-0.0030},
+    { 0.0010},
+    { 0.0005},
+    { 0.0000},
+    {-0.0005},
+    {-0.0004},
+    {-0.0010},
+    {-0.0001},
+    { 0.0000},
+    {-0.0002},
+    { 0.0003},
+    {-0.0003},
+    {-0.0007},
+    {-0.0001},
+    { 0.0016},
+    {-0.0009},
+    { 0.0001},
+    { 0.0005},
+    { 0.0016},
+    {-0.0013},
+    {-0.0003},
+    {-0.0002},
+    { 0.0014},
+    {-0.0008},
+    { 0.0026},
+    {-0.0003},
+    { 0.0007},
+    { 0.0011},
+    { 0.0005},
+    {-0.0001},
+    { 0.0004},
+    {-0.0003},
+    { 0.0006},
+    {-0.0013},
+    { 0.0002},
+    {-0.0003},
+    {-0.0010},
+    { 0.0000},
+    {-0.0007},
+    {-0.0001},
+    { 0.0008},
+    {-0.0010},
+    {-0.0005},
+    { 0.0010},
+    { 0.0013},
+    { 0.0008},
+    {-0.0004},
+    { 0.0020},
+    {-0.0002},
+    { 0.0005},
+    { 0.0003},
+    { 0.0004},
+    { 0.0005},
+    { 0.0007},
+    {-0.0008},
+    { 0.0003},
+    {-0.0008},
+    { 0.0011},
+    { 0.0005},
+    { 0.0002},
+    {-0.0005},
+    {-0.0011},
+    { 0.0001},
+    {-0.0002},
+    {-0.0003},
+    { 0.0016},
+    {-0.0005},
+    {-0.0002},
+    {-0.0008},
+    { 0.0023},
+    { 0.0015},
+    { 0.0001},
+    {-0.0004},
+    { 0.0015},
+    {-0.0002},
+    { 0.0003},
+    { 0.0001},
+    { 0.0002},
+    {-0.0007},
+    { 0.0005},
+    {-0.0001},
+    { 0.0007},
+    {-0.0007},
+    { 0.0018},
+    {-0.0002},
+    { 0.0005},
+    {-0.0002},
+    {-0.0004},
+    {-0.0001},
+    {-0.0001},
+    { 0.0002},
+    { 0.0009},
+    { 0.0003},
+    {-0.0006},
+    {-0.0003},
+    {-0.0022},
+    { 0.0002},
+    { 0.0004},
+    { 0.0004},
+    {-0.0005},
+    {-0.0008},
+    {-0.0001},
+    { 0.0000},
+    { 0.0010},
+    { 0.0001},
+    {-0.0005},
+    {-0.0003},
+    {-0.0005},
+    { 0.0005},
+    {-0.0003},
+    { 0.0000},
+    { 0.0002},
+    { 0.0001},
+    {-0.0014},
+    {-0.0005},
+    {-0.0001},
+    { 0.0006},
+    { 0.0004},
+    { 0.0005},
+    { 0.0017},
+    { 0.0009},
+    { 0.0008},
+    { 0.0017},
+    { 0.0006},
+    {-0.0003},
+    { 0.0004},
+    { 0.0000},
+    {-0.0015},
+    {-0.0001},
+    { 0.0000},
+    {-0.0008},
+    { 0.0000},
+    { 0.0004},
+    {-0.0006},
+    { 0.0001},
+    { 0.0001},
+    { 0.0003},
+    {-0.0001},
+    { 0.0001},
+    {-0.0011},
+    {-0.0011},
+    { 0.0010},
+    { 0.0004},
+    { 0.0008},
+    { 0.0007},
+    { 0.0004},
+    {-0.0023},
+    { 0.0023},
+    {-0.0001},
+    {-0.0004},
+    { 0.0000},
+    {-0.0003},
+    {-0.0008},
+    { 0.0005},
+    { 0.0004},
+    {-0.0004},
+    { 0.0001},
+    {-0.0007},
+    {-0.0001},
+    {-0.0006},
+    {-0.0012},
+    {-0.0027},
+    { 0.0002},
+    {-0.0012},
+    { 0.0013},
+    { 0.0000},
+    {-0.0008},
+    { 0.0009},
+    {-0.0015},
+    { 0.0007},
+    { 0.0002},
+    { 0.0001},
+    {-0.0013},
+    { 0.0002},
+    {-0.0004},
+    {-0.0002},
+    {-0.0027},
+    { 0.0013},
+    {-0.0005},
+    { 0.0006},
+    { 0.0000},
+    {-0.0005},
+    { 0.0011},
+    { 0.0000},
+    {-0.0003},
+    { 0.0018},
+    {-0.0003},
+    { 0.0006},
+    {-0.0008},
+    {-0.0006},
+    {-0.0015},
+    {-0.0009},
+    {-0.0017},
+    { 0.0005},
+    { 0.0007},
+    {-0.0006},
+    {-0.0004},
+    { 0.0016},
+    { 0.0000},
+    { 0.0003},
+    {-0.0019},
+    { 0.0003},
+    { 0.0005},
+    { 0.0003},
+    { 0.0001},
+    {-0.0002},
+    { 0.0007},
+    { 0.0001},
+    {-0.0012},
+    { 0.0008},
+    {-0.0011},
+    { 0.0008},
+    { 0.0010},
+    {-0.0003},
+    {-0.0003},
+    {-0.0006},
+    {-0.0004},
+    { 0.0000},
+    { 0.0011},
+    { 0.0003},
+    {-0.0005},
+    {-0.0002},
+    { 0.0001},
+    {-0.0004},
+    { 0.0008},
+    {-0.0007},
+    {-0.0005},
+    {-0.0005},
+    {-0.0003},
+    {-0.0005},
+    { 0.0006},
+    {-0.0014},
+    {-0.0001},
+    { 0.0003},
+    { 0.0009},
+    { 0.0012},
+    {-0.0023},
+    {-0.0004},
+    { 0.0002},
+    { 0.0001},
+    {-0.0019},
+    { 0.0012},
+    {-0.0022},
+    { 0.0001},
+    {-0.0004},
+    {-0.0001},
+    { 0.0012},
+    { 0.0001},
+    { 0.0000},
+    { 0.0004},
+    {-0.0008},
+    { 0.0006},
+    {-0.0007},
+    { 0.0008},
+    {-0.0009},
+    {-0.0005},
+    {-0.0001},
+    {-0.0004},
+    { 0.0001},
+    {-0.0005},
+    {-0.0004},
+    {-0.0012},
+    { 0.0002},
+    { 0.0011},
+    { 0.0008},
+    {-0.0009},
+    { 0.0010},
+    {-0.0003},
+    {-0.0006},
+    { 0.0005},
+    { 0.0002},
+    {-0.0003},
+    { 0.0016},
+    {-0.0006},
+    { 0.0000},
+    { 0.0008},
+    {-0.0002},
+    { 0.0000},
+    { 0.0000},
+    { 0.0003},
+    {-0.0011},
+    {-0.0009},
+    {-0.0013},
+    {-0.0003},
+    { 0.0009},
+    { 0.0007},
+    {-0.0005},
+    { 0.0012},
+    {-0.0009},
+    { 0.0004},
+    {-0.0008},
+    {-0.0011},
+    { 0.0013},
+    { 0.0013},
+    { 0.0005 }};
+
+    private static Dataset defaultDataset;
+    private static IEnumerable<string> defaultAllowedInputVariables;
+    private static string defaultPriceVariable;
+
+    static ProblemData() {
+      defaultDataset = new Dataset(new string[] { "AUD" }, audInUsdDiff);
+      defaultDataset.Name = "AUD in USD";
+      defaultDataset.Description = "Price of Australian dollar in US dollar.";
+      defaultAllowedInputVariables = new List<string>() { "AUD" };
+      defaultPriceVariable = "AUD";
+    }
+    #endregion
+
+    public IValueParameter<StringValue> PriceVariableParameter {
+      get { return (IValueParameter<StringValue>)Parameters[PriceVariableParameterName]; }
+    }
+    public IValueParameter<DoubleValue> TransactionCostsParameter {
+      get { return (IValueParameter<DoubleValue>)Parameters[TransactionCostsParameterName]; }
+    }
+    public string PriceVariable {
+      get { return PriceVariableParameter.Value.Value; }
+    }
+    public double TransactionCosts {
+      get { return TransactionCostsParameter.Value.Value; }
+    }
+
+    [StorableConstructor]
+    private ProblemData(bool deserializing) : base(deserializing) { }
+    [StorableHook(HookType.AfterDeserialization)]
+    private void AfterDeserialization() {
+      RegisterParameterEvents();
+    }
+
+    private ProblemData(ProblemData original, Cloner cloner)
+      : base(original, cloner) {
+      RegisterParameterEvents();
+    }
+    public override IDeepCloneable Clone(Cloner cloner) { return new ProblemData(this, cloner); }
+
+    public ProblemData()
+      : this(defaultDataset, defaultAllowedInputVariables, defaultPriceVariable) {
+    }
+
+    public ProblemData(Dataset dataset, IEnumerable<string> allowedInputVariables, string targetVariable)
+      : base(dataset, allowedInputVariables) {
+      var variables = InputVariables.Select(x => x.AsReadOnly()).ToList();
+      Parameters.Add(new ConstrainedValueParameter<StringValue>(PriceVariableParameterName, new ItemSet<StringValue>(variables), variables.First(x => x.Value == targetVariable)));
+      Parameters.Add(new FixedValueParameter<DoubleValue>(TransactionCostsParameterName, "The absolute cost of on buy/sell transaction (assumed to be constant and independent of transaction volume)", new DoubleValue(0.0002)));
+      RegisterParameterEvents();
+    }
+
+    private void RegisterParameterEvents() {
+      PriceVariableParameter.ValueChanged += new EventHandler(PriceVariableParameter_ValueChanged);
+      TransactionCostsParameter.Value.ValueChanged += new EventHandler(TransactionCostsParameter_ValueChanged);
+    }
+
+    private void TransactionCostsParameter_ValueChanged(object sender, EventArgs e) {
+      OnChanged();
+    }
+    private void PriceVariableParameter_ValueChanged(object sender, EventArgs e) {
+      OnChanged();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Properties/AssemblyInfo.cs.frame
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Properties/AssemblyInfo.cs.frame	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Properties/AssemblyInfo.cs.frame	(revision 9804)
@@ -0,0 +1,55 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("HeuristicLab.Problems.DataAnalysis.Trading")]
+[assembly: AssemblyDescription("Provides classes to optimize trading rules.")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("HeuristicLab")]
+[assembly: AssemblyCopyright("(c) 2002-2013 HEAL")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("BB953FDE-86BA-48A2-A684-5CD3A9BB3E31")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("3.4.0.0")]
+[assembly: AssemblyFileVersion("3.4.0.$WCREV$")]
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Solution.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Solution.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Solution.cs	(revision 9804)
@@ -0,0 +1,138 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Trading {
+  /// <summary>
+  /// Abstract base class for trading data analysis solutions
+  /// </summary>
+  [StorableClass]
+  public abstract class Solution : DataAnalysisSolution, ISolution {
+    private const string TrainingSharpeRatioResultName = "Sharpe ratio (training)";
+    private const string TestSharpeRatioResultName = "Sharpe ratio (test)";
+    private const string TrainingProfitResultName = "Profit (training)";
+    private const string TestProfitResultName = "Profit (test)";
+
+    public new IModel Model {
+      get { return (IModel)base.Model; }
+      protected set { base.Model = value; }
+    }
+
+    public new IProblemData ProblemData {
+      get { return (IProblemData)base.ProblemData; }
+      protected set { base.ProblemData = value; }
+    }
+
+    public double TrainingSharpeRatio {
+      get { return ((DoubleValue)this[TrainingSharpeRatioResultName].Value).Value; }
+      private set { ((DoubleValue)this[TrainingSharpeRatioResultName].Value).Value = value; }
+    }
+
+    public double TestSharpeRatio {
+      get { return ((DoubleValue)this[TestSharpeRatioResultName].Value).Value; }
+      private set { ((DoubleValue)this[TestSharpeRatioResultName].Value).Value = value; }
+    }
+    public double TrainingProfit {
+      get { return ((DoubleValue)this[TrainingProfitResultName].Value).Value; }
+      private set { ((DoubleValue)this[TrainingProfitResultName].Value).Value = value; }
+    }
+
+    public double TestProfit {
+      get { return ((DoubleValue)this[TestProfitResultName].Value).Value; }
+      private set { ((DoubleValue)this[TestProfitResultName].Value).Value = value; }
+    }
+
+    [StorableConstructor]
+    protected Solution(bool deserializing) : base(deserializing) { }
+    protected Solution(Solution original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public Solution(IModel model, IProblemData problemData)
+      : base(model, problemData) {
+      Add(new Result(TrainingSharpeRatioResultName, "Share ratio of the signals of the model on the training partition", new DoubleValue()));
+      Add(new Result(TestSharpeRatioResultName, "Sharpe ratio of the signals of the model on the test partition", new DoubleValue()));
+      Add(new Result(TrainingProfitResultName, "Profit of the model on the training partition", new DoubleValue()));
+      Add(new Result(TestProfitResultName, "Profit of the model on the test partition", new DoubleValue()));
+    }
+
+
+    protected override void OnModelChanged() {
+      base.OnModelChanged();
+      RecalculateResults();
+    }
+
+    protected override void OnProblemDataChanged() {
+      base.OnProblemDataChanged();
+      RecalculateResults();
+    }
+
+    protected override void RecalculateResults() {
+      CalculateTradingResults();
+    }
+
+    protected void CalculateTradingResults() {
+      double[] trainingSignals = TrainingSignals.ToArray(); // cache values
+      IEnumerable<double> trainingReturns = ProblemData.Dataset.GetDoubleValues(ProblemData.PriceVariable, ProblemData.TrainingIndices);
+      double[] testSignals = TestSignals.ToArray(); // cache values
+      IEnumerable<double> testReturns = ProblemData.Dataset.GetDoubleValues(ProblemData.PriceVariable, ProblemData.TestIndices);
+
+      OnlineCalculatorError errorState;
+      double trainingSharpeRatio = OnlineSharpeRatioCalculator.Calculate(trainingReturns, trainingSignals, ProblemData.TransactionCosts, out errorState);
+      TrainingSharpeRatio = errorState == OnlineCalculatorError.None ? trainingSharpeRatio : double.NaN;
+      double testSharpeRatio = OnlineSharpeRatioCalculator.Calculate(testReturns, testSignals, ProblemData.TransactionCosts, out errorState);
+      TestSharpeRatio = errorState == OnlineCalculatorError.None ? testSharpeRatio : double.NaN;
+
+      double trainingProfit = OnlineProfitCalculator.Calculate(trainingReturns, trainingSignals, ProblemData.TransactionCosts, out errorState);
+      TrainingProfit = errorState == OnlineCalculatorError.None ? trainingProfit : double.NaN;
+      double testProfit = OnlineProfitCalculator.Calculate(testReturns, testSignals, ProblemData.TransactionCosts, out errorState);
+      TestProfit = errorState == OnlineCalculatorError.None ? testProfit : double.NaN;
+
+    }
+
+    public virtual IEnumerable<double> Signals {
+      get {
+        return GetSignals(Enumerable.Range(0, ProblemData.Dataset.Rows));
+      }
+    }
+
+    public virtual IEnumerable<double> TrainingSignals {
+      get {
+        return GetSignals(ProblemData.TrainingIndices);
+      }
+    }
+
+    public virtual IEnumerable<double> TestSignals {
+      get {
+        return GetSignals(ProblemData.TestIndices);
+      }
+    }
+
+    public virtual IEnumerable<double> GetSignals(IEnumerable<int> rows) {
+      return Model.GetSignals(ProblemData.Dataset, rows);
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/IEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/IEvaluator.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/IEvaluator.cs	(revision 9804)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  public interface IEvaluator : ISymbolicDataAnalysisEvaluator<IProblemData> {
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/IModel.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/IModel.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/IModel.cs	(revision 9804)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  public interface IModel : DataAnalysis.Trading.IModel, ISymbolicDataAnalysisModel {
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/ISingleObjectiveEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/ISingleObjectiveEvaluator.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/ISingleObjectiveEvaluator.cs	(revision 9804)
@@ -0,0 +1,27 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  public interface ISingleObjectiveEvaluator : IEvaluator, ISymbolicDataAnalysisSingleObjectiveEvaluator<IProblemData> {
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/ISolution.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/ISolution.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Interfaces/ISolution.cs	(revision 9804)
@@ -0,0 +1,29 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  public interface ISolution : DataAnalysis.Trading.ISolution, ISymbolicDataAnalysisSolution {
+    new IModel Model { get; }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Model.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Model.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Model.cs	(revision 9804)
@@ -0,0 +1,75 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  /// <summary>
+  /// Represents a symbolic trading model
+  /// </summary>
+  [StorableClass]
+  [Item(Name = "Model (symbolic trading)", Description = "Represents a symbolic trading model.")]
+  public class Model : SymbolicDataAnalysisModel, IModel {
+
+    [StorableConstructor]
+    protected Model(bool deserializing) : base(deserializing) { }
+    protected Model(Model original, Cloner cloner)
+      : base(original, cloner) { }
+    public Model(ISymbolicExpressionTree tree, ISymbolicDataAnalysisExpressionTreeInterpreter interpreter)
+      : base(tree, interpreter, -10, 10) { }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new Model(this, cloner);
+    }
+
+    public IEnumerable<double> GetSignals(Dataset dataset, IEnumerable<int> rows) {
+      ISymbolicDataAnalysisExpressionTreeInterpreter interpreter = Interpreter;
+      ISymbolicExpressionTree tree = SymbolicExpressionTree;
+      return GetSignals(interpreter.GetSymbolicExpressionTreeValues(tree, dataset, rows));
+    }
+
+    // Transforms an enumerable of real values to an enumerable of trading signals (buy(1) / hold(0) / sell(-1))
+    public static IEnumerable<double> GetSignals(IEnumerable<double> xs) {
+      // two iterations over xs
+      // 1) determine min / max to calculate the mid-range value
+      // 2) range is split into three thirds
+      double max = double.NegativeInfinity;
+      double min = double.PositiveInfinity;
+      foreach (var x in xs) {
+        if (x > max) max = x;
+        if (x < min) min = x;
+      }
+      if (double.IsInfinity(max) || double.IsNaN(max) || double.IsInfinity(min) || double.IsNaN(min))
+        return xs.Select(x => 0.0);
+
+      double range = (max - min);
+      double midRange = range / 2.0 + min;
+      double offset = range / 6.0;
+      return from x in xs
+             select x > midRange + offset ? 1.0 : x < midRange - offset ? -1.0 : 0.0;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/Evaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/Evaluator.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/Evaluator.cs	(revision 9804)
@@ -0,0 +1,37 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+
+using HeuristicLab.Common;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  public abstract class SingleObjectiveEvaluator : SymbolicDataAnalysisSingleObjectiveEvaluator<IProblemData>, ISingleObjectiveEvaluator {
+    [StorableConstructor]
+    protected SingleObjectiveEvaluator(bool deserializing) : base(deserializing) { }
+    protected SingleObjectiveEvaluator(SingleObjectiveEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    protected SingleObjectiveEvaluator() : base() { }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/Problem.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/Problem.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/Problem.cs	(revision 9804)
@@ -0,0 +1,55 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  [Item("Symbolic Trading Problem (single objective)", "Represents a single objective symbolic trading problem.")]
+  [StorableClass]
+  [Creatable("Problems")]
+  public class SingleObjectiveProblem : SymbolicDataAnalysisSingleObjectiveProblem<IProblemData, ISingleObjectiveEvaluator, ISymbolicDataAnalysisSolutionCreator>, IProblem {
+    private const int InitialMaximumTreeDepth = 8;
+    private const int InitialMaximumTreeLength = 25;
+
+    [StorableConstructor]
+    protected SingleObjectiveProblem(bool deserializing) : base(deserializing) { }
+    protected SingleObjectiveProblem(SingleObjectiveProblem original, Cloner cloner) : base(original, cloner) { }
+    public override IDeepCloneable Clone(Cloner cloner) { return new SingleObjectiveProblem(this, cloner); }
+
+    public SingleObjectiveProblem()
+      : base(new ProblemData(), new SharpeRatioEvaluator(), new SymbolicDataAnalysisExpressionTreeCreator()) {
+      Maximization.Value = true;
+      MaximumSymbolicExpressionTreeDepth.Value = InitialMaximumTreeDepth;
+      MaximumSymbolicExpressionTreeLength.Value = InitialMaximumTreeLength;
+
+      InitializeOperators();
+    }
+
+    private void InitializeOperators() {
+      Operators.Add(new TrainingBestSolutionAnalyzer());
+      Operators.Add(new ValidationBestSolutionAnalyzer());
+      ParameterizeOperators();
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/ProfitEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/ProfitEvaluator.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/ProfitEvaluator.cs	(revision 9804)
@@ -0,0 +1,80 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  [Item("Profit Evaluator", "")]
+  [StorableClass]
+  public class ProfitEvaluator : SingleObjectiveEvaluator {
+    [StorableConstructor]
+    protected ProfitEvaluator(bool deserializing) : base(deserializing) { }
+    protected ProfitEvaluator(ProfitEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public ProfitEvaluator()
+      : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ProfitEvaluator(this, cloner);
+    }
+
+    public override bool Maximization { get { return true; } }
+
+    public override IOperation Apply() {
+      var solution = SymbolicExpressionTreeParameter.ActualValue;
+      IEnumerable<int> rows = GenerateRowsToEvaluate();
+
+      double quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, solution, ProblemDataParameter.ActualValue, rows);
+      QualityParameter.ActualValue = new DoubleValue(quality);
+
+      return base.Apply();
+    }
+
+    public static double Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, IProblemData problemData, IEnumerable<int> rows) {
+      IEnumerable<double> signals = GetSignals(interpreter, solution, problemData.Dataset, rows);
+      IEnumerable<double> returns = problemData.Dataset.GetDoubleValues(problemData.PriceVariable, rows);
+      OnlineCalculatorError errorState;
+      double profit = OnlineProfitCalculator.Calculate(returns, signals, problemData.TransactionCosts, out errorState);
+      if (errorState != OnlineCalculatorError.None) return 0.0;
+      else return profit;
+    }
+
+    private static IEnumerable<double> GetSignals(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, Dataset dataset, IEnumerable<int> rows) {
+      return Model.GetSignals(interpreter.GetSymbolicExpressionTreeValues(solution, dataset, rows));
+    }
+
+    public override double Evaluate(IExecutionContext context, ISymbolicExpressionTree tree, IProblemData problemData, IEnumerable<int> rows) {
+      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = context;
+      double profit = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, problemData, rows);
+      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null;
+      return profit;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/SharpeRatioEvaluator.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/SharpeRatioEvaluator.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/SharpeRatioEvaluator.cs	(revision 9804)
@@ -0,0 +1,80 @@
+﻿#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using System.Collections.Generic;
+using System.Linq;
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  [Item("Sharpe Ratio Evaluator", "")]
+  [StorableClass]
+  public class SharpeRatioEvaluator : SingleObjectiveEvaluator {
+    [StorableConstructor]
+    protected SharpeRatioEvaluator(bool deserializing) : base(deserializing) { }
+    protected SharpeRatioEvaluator(SharpeRatioEvaluator original, Cloner cloner)
+      : base(original, cloner) {
+    }
+    public SharpeRatioEvaluator()
+      : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SharpeRatioEvaluator(this, cloner);
+    }
+
+    public override bool Maximization { get { return true; } }
+
+    public override IOperation Apply() {
+      var solution = SymbolicExpressionTreeParameter.ActualValue;
+      IEnumerable<int> rows = GenerateRowsToEvaluate();
+
+      double quality = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, solution, ProblemDataParameter.ActualValue, rows);
+      QualityParameter.ActualValue = new DoubleValue(quality);
+
+      return base.Apply();
+    }
+
+    public static double Calculate(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, IProblemData problemData, IEnumerable<int> rows) {
+      IEnumerable<double> signals = GetSignals(interpreter, solution, problemData.Dataset, rows);
+      IEnumerable<double> returns = problemData.Dataset.GetDoubleValues(problemData.PriceVariable, rows);
+      OnlineCalculatorError errorState;
+      double sharpRatio = OnlineSharpeRatioCalculator.Calculate(returns, signals, problemData.TransactionCosts, out errorState);
+      if (errorState != OnlineCalculatorError.None) return 0.0;
+      else return sharpRatio;
+    }
+
+    private static IEnumerable<double> GetSignals(ISymbolicDataAnalysisExpressionTreeInterpreter interpreter, ISymbolicExpressionTree solution, Dataset dataset, IEnumerable<int> rows) {
+      return Model.GetSignals(interpreter.GetSymbolicExpressionTreeValues(solution, dataset, rows));
+    }
+
+    public override double Evaluate(IExecutionContext context, ISymbolicExpressionTree tree, IProblemData problemData, IEnumerable<int> rows) {
+      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = context;
+      double sharpRatio = Calculate(SymbolicDataAnalysisTreeInterpreterParameter.ActualValue, tree, problemData, rows);
+      SymbolicDataAnalysisTreeInterpreterParameter.ExecutionContext = null;
+      return sharpRatio;
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/TrainingBestSolutionAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/TrainingBestSolutionAnalyzer.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/TrainingBestSolutionAnalyzer.cs	(revision 9804)
@@ -0,0 +1,65 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Parameters;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  /// <summary>
+  /// An operator that analyzes the training best symbolic trading solution for single objective symbolic trading problems.
+  /// </summary>
+  [Item("Training-best Solution Analyzer (symbolic trading)", "An operator that analyzes the training best symbolic trading solution for single objective symbolic trading problems.")]
+  [StorableClass]
+  public sealed class TrainingBestSolutionAnalyzer : SymbolicDataAnalysisSingleObjectiveTrainingBestSolutionAnalyzer<ISolution>,
+  ISymbolicDataAnalysisInterpreterOperator {
+    private const string ProblemDataParameterName = "ProblemData";
+    private const string SymbolicDataAnalysisTreeInterpreterParameterName = "SymbolicDataAnalysisTreeInterpreter";
+    #region parameter properties
+    public ILookupParameter<IProblemData> ProblemDataParameter {
+      get { return (ILookupParameter<IProblemData>)Parameters[ProblemDataParameterName]; }
+    }
+    public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> SymbolicDataAnalysisTreeInterpreterParameter {
+      get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[SymbolicDataAnalysisTreeInterpreterParameterName]; }
+    }
+    #endregion
+
+    [StorableConstructor]
+    private TrainingBestSolutionAnalyzer(bool deserializing) : base(deserializing) { }
+    private TrainingBestSolutionAnalyzer(TrainingBestSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
+    public TrainingBestSolutionAnalyzer()
+      : base() {
+      Parameters.Add(new LookupParameter<IProblemData>(ProblemDataParameterName, "The problem data for the symbolic regression solution."));
+      Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The symbolic data analysis tree interpreter for the symbolic expression tree."));
+    }
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new TrainingBestSolutionAnalyzer(this, cloner);
+    }
+
+    protected override ISolution CreateSolution(ISymbolicExpressionTree bestTree, double bestQuality) {
+      var model = new Model((ISymbolicExpressionTree)bestTree.Clone(), SymbolicDataAnalysisTreeInterpreterParameter.ActualValue);
+      return new SymbolicSolution(model, (IProblemData)ProblemDataParameter.ActualValue.Clone());
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/ValidationBestSolutionAnalyzer.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/ValidationBestSolutionAnalyzer.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/SingleObjective/ValidationBestSolutionAnalyzer.cs	(revision 9804)
@@ -0,0 +1,52 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  /// <summary>
+  /// An operator that analyzes the validation best symbolic trading solution for single objective symbolic trading problems.
+  /// </summary>
+  [Item("Validation-best Solution Analyzer (symbolic trading)", "An operator that analyzes the validation best symbolic trading solution for single objective symbolic trading problems.")]
+  [StorableClass]
+  public sealed class ValidationBestSolutionAnalyzer : SymbolicDataAnalysisSingleObjectiveValidationBestSolutionAnalyzer<ISolution, ISingleObjectiveEvaluator, IProblemData> {
+
+    [StorableConstructor]
+    private ValidationBestSolutionAnalyzer(bool deserializing) : base(deserializing) { }
+    private ValidationBestSolutionAnalyzer(ValidationBestSolutionAnalyzer original, Cloner cloner) : base(original, cloner) { }
+    public ValidationBestSolutionAnalyzer()
+      : base() {
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new ValidationBestSolutionAnalyzer(this, cloner);
+    }
+
+    protected override ISolution CreateSolution(ISymbolicExpressionTree bestTree, double bestQuality) {
+      var model = new Model((ISymbolicExpressionTree)bestTree.Clone(), SymbolicDataAnalysisTreeInterpreterParameter.ActualValue);
+      return new SymbolicSolution(model, (IProblemData)ProblemDataParameter.ActualValue.Clone());
+    }
+  }
+}
Index: trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Solution.cs
===================================================================
--- trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Solution.cs	(revision 9804)
+++ trunk/sources/HeuristicLab.Problems.DataAnalysis.Trading/3.4/Symbolic/Solution.cs	(revision 9804)
@@ -0,0 +1,96 @@
+#region License Information
+/* HeuristicLab
+ * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
+ *
+ * This file is part of HeuristicLab.
+ *
+ * HeuristicLab is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * HeuristicLab is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
+ */
+#endregion
+
+using HeuristicLab.Common;
+using HeuristicLab.Core;
+using HeuristicLab.Data;
+using HeuristicLab.Optimization;
+using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
+using HeuristicLab.Problems.DataAnalysis.Trading;
+
+namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Trading {
+  /// <summary>
+  /// Represents a symbolic trading solution (model + data) and attributes of the solution like accuracy and complexity
+  /// </summary>
+  [StorableClass]
+  [Item(Name = "Solution (symbolic trading)",
+    Description =
+      "Represents a symbolic trading solution (model + data) and attributes of the solution like accuracy and complexity."
+    )]
+  public sealed class SymbolicSolution : Solution, ISolution {
+    private const string ModelLengthResultName = "Model Length";
+    private const string ModelDepthResultName = "Model Depth";
+
+    public new IModel Model {
+      get { return (IModel)base.Model; }
+      set { base.Model = value; }
+    }
+
+    ISymbolicDataAnalysisModel ISymbolicDataAnalysisSolution.Model {
+      get { return (ISymbolicDataAnalysisModel)base.Model; }
+    }
+
+    public int ModelLength {
+      get { return ((IntValue)this[ModelLengthResultName].Value).Value; }
+      private set { ((IntValue)this[ModelLengthResultName].Value).Value = value; }
+    }
+
+    public int ModelDepth {
+      get { return ((IntValue)this[ModelDepthResultName].Value).Value; }
+      private set { ((IntValue)this[ModelDepthResultName].Value).Value = value; }
+    }
+
+    [StorableConstructor]
+    private SymbolicSolution(bool deserializing)
+      : base(deserializing) {
+    }
+
+    private SymbolicSolution(SymbolicSolution original, Cloner cloner)
+      : base(original, cloner) {
+    }
+
+    public SymbolicSolution(IModel model, IProblemData problemData)
+      : base(model, problemData) {
+      Add(new Result(ModelLengthResultName, "Length of the symbolic trading model.", new IntValue()));
+      Add(new Result(ModelDepthResultName, "Depth of the symbolic trading model.", new IntValue()));
+      RecalculateResults();
+    }
+
+    public override IDeepCloneable Clone(Cloner cloner) {
+      return new SymbolicSolution(this, cloner);
+    }
+
+    protected override void OnModelChanged() {
+      base.OnModelChanged();
+      RecalculateResults();
+    }
+
+    protected override void RecalculateResults() {
+      base.RecalculateResults();
+      CalculateResults();
+    }
+
+    private void CalculateResults() {
+      ModelLength = Model.SymbolicExpressionTree.Length;
+      ModelDepth = Model.SymbolicExpressionTree.Depth;
+    }
+  }
+}
