满盘红 发表于 2012-8-2 19:08:38

如何建立线性回归策略来程序化交易股指期货

php实现简单线性回归之数据研究工具_php技巧发布时间:2007-12-24 15:37:26 来源: 作者: 点击:315  概念
  简单线性回归建模背后的基本目标是从成对的 X值和 Y值(即 X和 Y测量值)组成的二维平面中找到最吻合的直线。一旦用 最小方差法找到这条直线,就可以执行各种统计测试,以确定这条直线与观测到的 Y值的偏离量吻合程度。
  线性方程( y = mx + b)有两个参数必须根据所提供的 X和 Y数据估算出来,它们是斜率( m)和 y 轴截距( b)。一旦估算出这两个参数,就可以将观测值输入线性方程,并观察方程所生成的 Y预测值。
  要使用最小方差法估算出 m和 b参数,就要找到 m 和 b 的估计值,使它们对于所有的 X值得到的 Y值的观测值和预测值最小。观测值和预测值之差称为误差( y i- (mx i+ b) ),并且,如果对每个误差值都求平方,然后求这些残差的和,其结果是一个被称为 预测平方差的数。使用最小方差法来确定最吻合的直线涉及寻找使预测方差最小的 m和 b的估计值。
  可以用两种基本方法来找到满足最小方差法的估计值 m和 b。第一种方法,可以使用数值搜索过程设定不同的 m和 b值并对它们求值,最终决定产生最小方差的估计值。第二种方法是使用微积分找到用于估算 m和 b 的方程。我不打算深入讨论推导出这些方程所涉及的微积分,但我确实在 SimpleLinearRegression 类中使用了这些分析方程,以找到 m和 b 的最小平方估计值(请参阅 SimpleLinearRegression 类中的 getSlope() 和 getYIntercept 方法)。
  即使拥有了可以用来找到 m和 b的最小平方估计值的方程,也并不意味着只要将这些参数代入线性方程,其结果就是一条与数据良好吻合的直线。这个简单线性回归过程中的下一步是确定其余的预测方差是否可以接受。
  可以使用统计决策过程来否决“直线与数据吻合”这个备择假设。这个过程基于对 T 统计值的计算,使用概率函数求得随机大的观测值的概率。正如第 1 部分所提到的, SimpleLinearRegression 类生成了为数众多的汇总值,其中一个重要的汇总值是 T 统计值,它可以用来衡量线性方程与数据的吻合程度。如果吻合良好,则 T 统计值往往是一个较大的值;如果 T 值很小,就应该用一个缺省模型代替您的线性方程,该模型假定 Y值的平均值是最佳预测值(因为一组值的平均值通常可以是下一个观测值的有用的预测值)。
  要测试 T 统计值是否大到可以不用 Y值的平均值作为最佳预测值,需要计算随机获得 T 统计值的概率。如果概率很低,那就可以不采用平均值是最佳预测值这一无效假设,并且相应地可以确信简单线性模型是与数据良好吻合的。(有关计算 T 统计值概率的更多信息,请参阅第 1 部分。)
  回过头讨论统计决策过程。它告诉您何时不采用无效假设,却没有告诉您是否接受备择假设。在研究环境中,需要通过理论参数和统计参数来建立线性模型备择假设。
  您将构建的数据研究工具实现了用于线性模型(T 测试)的统计决策过程,并提供了可以用来构造理论和统计参数的汇总数据,这些参数是建立线性模型所需要的。数据研究工具可以归类为决策支持工具,供知识工作者在中小规模的数据集中研究模式。
  从学习的角度来看,简单线性回归建模值得研究,因为它是理解更高级形式的统计建模的必由之路。例如,简单线性回归中的许多核心概念为理解多次回归(Multiple Regression)、要素分析(Factor Analysis)和时间序列(Time Series)等建立了良好的基础。
  简单线性回归还是一种多用途的建模技术。通过转换原始数据(通常用对数或幂转换),可以用它来为曲线数据建模。这些转换可以使数据线性化,这样就可以使用简单线性回归来为数据建模。所生成的线性模型将被表示为与被转换值相关的线性公式。
  概率函数
  在前一篇文章中,我通过交由 R 来求得概率值,从而避开了用 PHP 实现概率函数的问题。我对这个解决方案并非完全满意,因此我开始研究这个问题:开发基于 PHP 的概率函数需要些什么。
  我开始上网查找信息和代码。一个两者兼有的来源是书籍 Numerical Recipes in C 中的概率函数。我用 PHP 重新实现了一些概率函数代码( gammln.c 和 betai.c 函数),但我对结果还是不满意。与其它一些实现相比,其代码似乎多了些。此外,我还需要反概率函数。
  幸运的是,我偶然发现了 John Pezzullo 的 Interactive Statistical Calculation。John 关于 概率分布函数的网站上有我需要的所有函数,为便于学习,这些函数已用 JavaScript 实现。
  我将 Student T 和 Fisher F 函数移植到了 PHP。我对 API 作了一点改动,以便符合 Java 命名风格,并将所有函数嵌入到名为 Distribution 的类中。该实现的一个很棒的功能是 doCommonMath 方法,这个库中的所有函数都重用了它。我没有花费力气去实现的其它测试(正态测试和卡方测试)也都使用 doCommonMath 方法。
  这次移植的另一个方面也值得注意。通过使用 JavaScript,用户可以将动态确定的值赋给实例变量,譬如:

var PiD2 = pi() / 2

  在 PHP 中不能这样做。只能把简单的常量值赋给实例变量。希望在 PHP5 中会解决这个缺陷。
  请注意 清单 1中的代码并未定义实例变量 ? 这是因为在 JavaScript 版本中,它们是动态赋予的值。
  清单 1. 实现概率函数

<?php
// Distribution.php
// Copyright John Pezullo
// Released under same terms as PHP.
// PHP Port and OOfying by Paul Meagher
class Distribution {
function doCommonMath($q, $i, $j, $b) {

$zz = 1;
$z = $zz;
$k = $i;


while($k <= $j) {
$zz = $zz * $q * $k / ($k - $b);
$z = $z + $zz;
$k = $k + 2;
}
return $z;
}

function getStudentT($t, $df) {
$t = abs($t);
$w = $t / sqrt($df);
$th = atan($w);

if ($df == 1) {
return 1 - $th / (pi() / 2);
}

$sth = sin($th);
$cth = cos($th);

if( ($df % 2) ==1 ) {
return
1 - ($th + $sth * $cth * $this->doCommonMath($cth * $cth, 2, $df - 3, -1))
/ (pi()/2);
} else {
return 1 - $sth * $this->doCommonMath($cth * $cth, 1, $df - 3, -1);
}

}

function getInverseStudentT($p, $df) {

$v = 0.5;
$dv = 0.5;
$t = 0;

while($dv > 1e-6) {
$t = (1 / $v) - 1;
$dv = $dv / 2;
if ( $this->getStudentT($t, $df) > $p) {
$v = $v - $dv;
} else {
$v = $v + $dv;
}
}
return $t;
}

function getFisherF($f, $n1, $n2) {
// implemented but not shown
}
function getInverseFisherF($p, $n1, $n2) {
// implemented but not shown
}
}
?>
  输出方法
  既然您已经用 PHP 实现了概率函数,那么开发基于 PHP 的数据研究工具剩下的唯一难题就是设计用于显示分析结果的方法。
  简单的解决方案是根据需要将所有实例变量的值都显示到屏幕上。在第一篇文章中,当显示燃耗研究(Burnout Study)的线性方程、 T值和 T 概率时,我就是这么做的。能根据特定目的而访问特定值是很有帮助的, SimpleLinearRegression 支持此类用法。
  然而,另一种用于输出结果的方法是将输出的各部分系统化地进行分组。如果研究用于回归分析的主要统计软件包的输出,就会发现它们往往是用同样的方式对输出进行分组的。它们往往有 摘要表(Summary Table)、 偏离值分析(Analysis Of Variance)表、 参数估计值(Parameter Estimate)表和 R 值(R Value)。类似地,我创建了一些输出方法,名称如下:
showSummaryTable()
showAnalysisOfVariance()
showParameterEstimates()
showRValues()
  我还有一个用于显示线性预测公式的方法( getFormula() )。许多统计软件包不输出公式,而是希望用户根据上述方法的输出构造公式。部分是由于您最后用来对数据建模的公式的最终形式可能由于下列原因而与缺省公式不同:
Y轴截距没有有意义的解释,或者
输入值可能是经过转换的,而您可能需要取消对它们的转换以获取最终的解释。
  所有这些方法都假定输出媒介是网页。考虑到您有可能希望用非网页的其它媒介输出这些汇总值,所以我决定将这些输出方法包装在一个继承了 SimpleLinearRegression 类的类中。 清单 2中的代码旨在演示输出类的通用逻辑。为了使通用逻辑更突出,所以除去了实现各种 show方法的代码。
  清单 2. 演示输出类的通用逻辑

<?php
// HTML.php
// Copyright 2003, Paul Meagher
// Distributed under GPL
include_once "slr/SimpleLinearRegression.php";
class SimpleLinearRegressionHTML extends SimpleLinearRegression {
function SimpleLinearRegressionHTML($X, $Y, $conf_int) {
SimpleLinearRegression::SimpleLinearRegression($X, $Y, $conf_int);
}
function showTableSummary($x_name, $y_name) { }

function showAnalysisOfVariance() { }
function showParameterEstimates() { }
function showFormula($x_name, $y_name) { }
function showRValues() {}
}
?>

  这个类的构造函数只是 SimpleLinearRegression 类构造函数的包装器。这意味着如果您想显示 SimpleLinearRegression 分析的 HTML 输出,则应该实例化 SimpleLinearRegressionHTML 类,而不是直接实例化 SimpleLinearRegression 类。其优点是不会有许多未使用的方法充斥 SimpleLinearRegression 类,并且可以更自由地定义用于其它输出媒介的类(也许会对不同媒介类型实现同一 API)。
  图形输出
  迄今为止,您已经实现的输出方法都以 HTML 格式显示汇总值。它也适合于用 GIF、JPEG 或 PNG 格式显示这些数据的分布图(scatter plot)或线图(line plot)。
  与其亲自编写生成线图和分布图的代码,我认为最好使用名为 JpGraph的基于 PHP 的图形库。JpGraph 正由 Johan Persson 积极开发,其 项目网站这样描述它:
  无论是对于只有最少代码的“以快捷但不恰当方式获得的”图形,还是对于需要非常细粒度控制的复杂专业图形,JpGraph 都可以使它们的绘制变得简单。JpGraph 同样适用于科学和商业类型的图形。
  JpGraph 分发版中包含大量可以根据特定需求进行定制的示例脚本。将 JpGraph 用于数据研究工具非常简单,只需找到功能与我的需求类似的示例脚本,然后对该脚本进行改写以满足我的特定需求即可。
  清单 3中的脚本是从样本数据研究工具( explore.php)中抽取的,它演示了如何调用该库以及如何将来自于 SimpleLinearRegression 分析的数据填入 Line 和 Scatter 类。这段代码中的注释是 Johan Persson 编写的(JPGraph 代码库的文档化工作做得很好)。
  清单 3. 来自于样本数据研究工具 explore.php 的函数的详细内容

<?php
// Snippet extracted from explore.php script
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_scatter.php");
include ("jpgraph/jpgraph_line.php");
// Create the graph
$graph = new Graph(300,200,auto);
$graph->SetScale("linlin");
// Setup title
$graph->title->Set("$title");
$graph->img->SetMargin(50,20,20,40);
$graph->xaxis->SetTitle("$x_name","center");
$graph->yaxis->SetTitleMargin(30);
$graph->yaxis->title->Set("$y_name");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
// make sure that the X-axis is always at the
// bottom at the plot and not just at Y=0 which is
// the default position
$graph->xaxis->SetPos(min);
// Create the scatter plot with some nice colors
$sp1 = new ScatterPlot($slr->Y, $slr->X);
$sp1->mark->SetType(MARK_FILLEDCIRCLE);
$sp1->mark->SetFillColor("red");
$sp1->SetColor("blue");
$sp1->SetWeight(3);
$sp1->mark->SetWidth(4);
// Create the regression line
$lplot = new LinePlot($slr->PredictedY, $slr->X);
$lplot->SetWeight(2);
$lplot->SetColor(navy);
// Add the pltos to the line
$graph->Add($sp1);
$graph->Add($lplot);
// ... and stroke
$graph_name = "temp/test.png";
$graph->Stroke($graph_name);
?>
<img src=<?php echo $graph_name ?> vspace=15>
?>
  数据研究脚本
  该数据研究工具由单个脚本( explore.php)构成,该脚本调用 SimpleLinearRegressionHTML 类和 JpGraph 库的方法。
  该脚本使用了简单的处理逻辑。该脚本的第一部分对所提交的表单数据执行基本验证。如果这些表单数据通过验证,则执行该脚本的第二部分。
  该脚本的第二部分所包含的代码用于分析数据,并以 HTML 和图形格式显示汇总结果。 清单 4中显示了 explore.php脚本的基本结构:
  清单 4. explore.php 的结构

<?php
// explore.php
if (!empty($x_values)) {
$X = explode(",", $x_values);
$numX = count($X);
}
if (!empty($y_values)) {
$Y = explode(",", $y_values);
$numY = count($Y);
}
// display entry data entry form if variables not set
if ( (empty($title)) OR (empty($x_name)) OR (empty($x_values)) OR
(empty($y_name)) OR (empty($conf_int)) OR (empty($y_values)) OR
($numX != $numY) ) {
// Omitted code for displaying entry form

} else {

include_once "slr/SimpleLinearRegressionHTML.php";
$slr = new SimpleLinearRegressionHTML($X, $Y, $conf_int);
echo "<h2>$title</h2>";

$slr->showTableSummary($x_name, $y_name);
echo "<br><br>";

$slr->showAnalysisOfVariance();
echo "<br><br>";
$slr->showParameterEstimates($x_name, $y_name);
echo "<br>";
$slr->showFormula($x_name, $y_name);
echo "<br><br>";
$slr->showRValues($x_name, $y_name);
echo "<br>";
include ("jpgraph/jpgraph.php");
include ("jpgraph/jpgraph_scatter.php");
include ("jpgraph/jpgraph_line.php");

// The code for displaying the graphics is inline in the
// explore.php script. The code for these two line plots
// finishes off the script:

// Omitted code for displaying scatter plus line plot
// Omitted code for displaying residuals plot

}
?>
  火灾损失研究

  为了演示如何使用数据研究工具,我将使用来自假想的火灾损失研究的数据。这个研究将主要住宅区火灾损失的金额与它们到最近消防站的距离关联起来。例如,出于确定保险费的目的,保险公司会对这种关系的研究感兴趣。

  该研究的数据如 图 1中的输入屏幕所示。

图 1. 显示研究数据的输入屏幕
http://www.knowsky.com/img2005/jdu2xzkd23b6.gif

  数据被提交之后,会对它进行分析,并显示这些分析的结果。第一个显示的结果集是 Table Summary,如 图 2所示。

图 2. Table Summary 是所显示的第一个结果集
http://www.knowsky.com/img2005/t24dd1lu0kj0.gif

  Table Summary 以表格形式显示了输入数据和其它列,这些列指出了对应于观测值 X的预测值 Y、 Y值的预测值和观测值之间的差以及预测 Y值置信区间的下限和上限。

  图 3显示了 Table Summary 之后的三个高级别数据汇总表。

图 3. 显示了 Table Summary 之后的三个高级别数据汇总表


  Analysis of Variance表显示了如何将 Y值的偏离值归为两个主要的偏离值来源,由模型解释的方差(请看 Model 行)和模型不能解释的方差(请看 Error 行)。较大的 F值意味着该线性模型捕获了 Y测量值中的大多数偏离值。这个表在多次回归环境中更有用,在那里每个独立变量都在表中占有一行。

  Parameter Estimates表显示了估算的 Y 轴截距(Intercept)和斜率(Slope)。每行都包括一个 T值以及观测到极限 T值的概率(请看 Prob > T 列)。斜率的 Prob > T可用于否决线性模型。

  如果 T值的概率大于 0.05(或者是类似的小概率),那么您可以否决该无效假设,因为随机观测到极限值的可能性很小。否则您就必须使用该无效假设。

  在火灾损失研究中,随机获得大小为 12.57 的 T值的概率小于 0.00000。这意味着对于与该研究中观测到的 X值区间相对应的 Y值而言,线性模型是有用的预测器(比 Y值的平均值更好)。

  最终报告显示了相关性系数或 R 值。可以用它们来评估线性模型与数据的吻合程度。高的 R 值表明吻合良好。

  每个汇总报告对有关线性模型和数据之间关系的各种分析问题提供了答案。请查阅 Hamilton、Neter 或 Pedhauzeur 编写的教科书,以了解更高级的回归分析处理。

  要显示的最终报告元素是数据的分布图和线图,如 图 4所示。

图 4. 最终报告元素 ? 分布图和线图
http://www.knowsky.com/img2005/7f3130ss2612.gif

  大多数人都熟悉线图(如本系列中的第一幅图)的说明,因此我将不对此进行注释,只想说 JPGraph 库可以产生用于 Web 的高质量科学图表。当您输入分布或直线数据时,它也做得很好。

  第二幅图将残差(观测的 Y、预测的 Y)与您预测的 Y值关联起来。这是 研究性数据分析(Exploratory Data Analysis,EDA)的倡导者所使用的图形示例,用以帮助将分析人员对数据中的模式的检测和理解能力提到最高程度。行家可以使用这幅图回答关于下列方面的问题:


[*]可能的非正常值或影响力过度的例子
[*]可能的曲线关系(使用转换?)
[*]非正态残差分布
[*]非常量误差方差或异方差性
  可以轻松地扩展这个数据研究工具,以生成更多类型的图形 ? 直方图、框图和四分位数图 ? 这些都是标准的 EDA 工具。

  数学库体系结构

  对数学的业余爱好使我在最近几个月中保持着对数学库的浓厚兴趣。此类研究推动我思考如何组织我的代码库以及使其预期在未来能不断增长。

  我暂时采用清单 5 中的目录结构:

  清单 5. 易于增长的目录结构

phpmath/          burnout_study.php         explore.php   fire_study.php       navbar.php               dist/       Distribution.php         fisher.php       student.php       source.php            jpgraph/         etc...          slr/      SimpleLinearRegression.php      SimpleLinearRegressionHTML.php            temp/

  例如,未来有关多次回归的工作,将涉及扩展这个库以包括 matrix目录,该目录用来容纳执行矩阵操作(这是对于更高级形式的回归分析的需求)的 PHP 代码。我还将创建一个 mr目录,以容纳实现多次回归分析输入方法、逻辑和输出方法的 PHP 代码。

  请注意这个目录结构包含一个 temp目录。必须设置该目录的许可权,使 explore.php脚本能够将输出图写到该目录。在尝试安装 phpmath_002.tar.gz源代码时请牢记这一点。此外,请在 JpGraph 项目网站上阅读安装 JpGraph 的指示信息(请参阅 参考资料)。

  最后提一点,如果采取以下作法,可以将所有软件类移到 Web 根目录之外的文档根目录:

[*]使某个全局 PHP_MATH 变量有权访问非 Web 根目录位置,并且
[*]确保在所有需要或包括的文件路径前面加上这个已定义的常量作为前缀。
  将来,对 PHP_MATH 变量的设置将通过一个用于整个 PHP 数学库的配置文件来完成。

  您学到了什么?

  在本文中,您了解了如何使用 SimpleLinearRegression 类开发用于中小规模的数据集的数据研究工具。在此过程中,我还开发了一个供 SimpleLinearRegression 类使用的本机概率函数,并用 HTML 输出方法和基于 JpGraph 库的图形生成代码扩展该类。

  从学习的角度来看,简单线性回归建模是值得进一步研究的,因为事实证明,它是理解更高级形式的统计建模的必由之路。在深入学习更高级的技术(如多次回归或多变量方差分析)之前,对于简单线性回归的透彻理解将使您受益匪浅。

  即使简单线性回归只用一个变量来说明或预测另一个变量的偏离值,在所有的研究变量之间寻找简单线性关系仍然常常是研究性数据分析的第一步。仅因为数据是多元的并不意味着就必须使用多元工具研究它。实际上,在开始时使用简单线性回归这样的基本工具是着手探究数据模式的好方法。

满盘红 发表于 2012-8-2 19:14:27

非线性回归方法的应用与比较

【摘要】:比较了非线性回归3种方法的数学原理:曲线直线化方法、非线性最小二乘方法、近似非线性法.说明了用方差分析确定回归模型的统计学意义、用决定系数R2描述曲线的拟合效果的理论依据.通过对同一问题用3种方法分析得出结论:非线性回归与近似非线性拟合方法决定系数相近(0.9966与0.9965),而曲线直线化决定系数为0.9738.因为近似非线性拟合方法无需选初值.建议应用近似非线性拟合方法

满盘红 发表于 2012-8-2 20:03:00

佛说:期货的财富就蕴藏在线性回归线的方向和长度中

满盘红 发表于 2012-8-2 20:56:30

囦囩团囝(86828641)20:15:50
如果程序之前开了一手多单,程序在某时刻图表出现了sell信号,但由于断线、没开机或是其他原因,错过了这个sell信号,此时marketposition应该已经是0,但实际的多单并没平,我写用户函数,定时每分钟通过记录在数据库上的marketposition信息与程序marketposition检查对比,此时发现不一致,可以通过再发一次sell信号平多仓么?
也就是问,在图表上marketposition=0时发sell信号,会被执行么?是不是上面这种情况必须要用A_sendorder?

木飘风(69586327)20:39:09
直接用A_sendorder就行了

期货可居 发表于 2012-8-2 21:34:35

{:soso_e179:}{:soso_e163:}{:soso_e179:}

满盘红 发表于 2012-8-2 22:20:21

非线性回归分析在回归分析中,当自变量和因变量间的关系不能简单地表示为线性方程,或者不能表示为可化为线性方程的时侯,可采用非线性估计来建立回归模型。SPSS提供了非线性回归“Nonlinear”过程,下面就以实例来介绍非线性拟合“Nonlinear”过程的基本步骤和使用方法。应用实例研究了南美斑潜蝇幼虫在不同温度条件下的发育速率,得到试验数据如下:表5-1 南美斑潜蝇幼虫在不同温度条件下的发育速率
温度℃17.52022.52527.53035
发育速率0.06380.08260.11000.13270.16670.18590.1572
根据以上数据拟合逻辑斯蒂模型:http://www.medsci.cn/webeditor/uploadfile/201012/20101218190030653.jpg本例子数据保存在DATA6-4.SAV。

1)准备分析数据在SPSS数据编辑窗口建立变量“t”和“v”两个变量,把表6-14中的数据分别输入“温度”和“发育速率”对应的变量中。或者打开已经存在的数据文件(DATA6-4.SAV)。

2)启动线性回归过程单击SPSS主菜单的“Analyze”下的“Regression”中“Nonlinear”项,将打开如图5-1所示的线回归对话窗口。http://www.medsci.cn/webeditor/uploadfile/201012/20101218190031359.jpg
图5-1 Nonlinear非线性回归对话窗口

3) 设置分析变量设置因变量:从左侧的变量列表框中选择一个因变量进入“Dependent(s)”框。本例子选“发育速率”变量为因变量。

4) 设置参数变量和初始值单击“Parameters”按钮,将打开如图6-14所示的对话框。该对话框用于设置参数的初始值。http://www.medsci.cn/webeditor/uploadfile/201012/20101218190032440.jpg
图5-2 设置参数初始值“Name”框用于输入参数名称。“Starting”框用于输入参数的初始值。输入完参数名和初始值后,单击“Add”按钮,则定义的变量及其初始值将显示在下方的参数框中。需要修改已经定义的参数变量,先用将其选中,然后在“Name”和“Starting”栏里进行修改,完成后点击“Change”按钮确认修改。要删除已经定义的参数变量,先用将其选中,然后点击“Bemove”按钮删除。在本例逻辑斯蒂模型中估计的参数有“K”、“a”和“b”三个参数变量。设置初始值为:K=0.1;a=3;b=0.1。参数的初始值可根据给定模型中参数定义范围情况而定。输入后的“Nonlinear”对话窗口如下图。http://www.medsci.cn/webeditor/uploadfile/201012/20101218190032294.jpg
图5-3 设置参数初始值后的对话框完成后点击“Continue”按钮。

5)输入方程式在“Model Expression”框中输入需要拟合的方程式,在该方程中包含自变量、参数变量和常数等。自变量和参数变量可以从左边的列表框和“Parameters”框里选入。方程中的函数可以从“Function”框里选入;运算符号和常数可以用鼠标从窗口“数字符号”显示区中点击输入。本例输入的逻辑斯蒂模型是: K/(1+EXP(a-b*t))。输入后的窗口显示如下图。http://www.medsci.cn/webeditor/uploadfile/201012/20101218190033407.jpg
图5-4 设置后的非线性回归对话窗口

6) 迭代条件在主对话框中单击“Loss”按钮,将打开如图5-5所示的对话框。http://www.medsci.cn/webeditor/uploadfile/201012/20101218190034380.jpg
图5-5 Loss 对话框      http://www.medsci.cn/webeditor/uploadfile/201012/20101218190035198.jpgSum of squared residuals”项,残差平方和最小值,系统默认。本例选该项。
      http://www.medsci.cn/webeditor/uploadfile/201012/20101218190035802.jpg“User-defined loss function”自定义选项。设置其他统计量为迭代条件,在下边输入框中输入相应的统计
               量的表达式,称为损失函数。在左上角的变量列表框中,“RESID”代表所选变量的残差;“PRED_”代表预测
               值。可以从左下角框中选择已定义的参数进入损失函。
7)参数取值范围在主对话框中单击“Constraints”按钮,将打开如图5-6所示的对话框。在该对话框中设置回归方程中参数的取值范围。选中“Define parameter constraint”项,即可对选定的参数变量设置取值范围。参数的取值范围,用不等式“=,<=,>=”来定义。例如,在本例逻辑斯蒂模型中K参数应该小于1。应该定义如下:k<=0.9999定义后会提示:是否复制现有的变量名,回答“确定”。http://www.medsci.cn/webeditor/uploadfile/201012/20101218190035729.jpg
图5-6 参数取值范围对话框

8) 保存分析数据在主对话框中单击“Save”按钮将打开如图5-7所示的对话框,选择要保存到数据文件中的统计量。http://www.medsci.cn/webeditor/uploadfile/201012/20101218190037800.jpg
图 5-7 Save对话框其中各项分别为:       http://www.medsci.cn/webeditor/uploadfile/201012/20101218190037473.jpg“Predicted values”因变量的预测值。
       http://www.medsci.cn/webeditor/uploadfile/201012/20101218190037473.jpg“Residuals”因变量的残差。
       http://www.medsci.cn/webeditor/uploadfile/201012/20101218190037473.jpg“Derivatives”派生数。
       http://www.medsci.cn/webeditor/uploadfile/201012/20101218190037473.jpg“Loss function values”损失函数值。

9) 迭代方法主对话框中单击“Options”按钮,将打开如图5-8所示的对话框。http://www.medsci.cn/webeditor/uploadfile/201012/20101218190037223.jpg
图5-8 迭代方法对话框“Bootstrap estimates of standard error”项,将采用样本重复法计算标准误。样本重复法需要顺序二次规划算法的支持。当选中该项时,SPSS将自动选中“Sequential quadratic Programming”项。“Estimation Method”框中列出了参数的两种估计方法:
“Sequential Quadratic Programming”项为顺序二次规划算法。该方法要求输入的参数为:


“Maximum”最大迭代步数。
“Step Iimit”最大步长。
“Optimality”目标函数的迭代误差限。
“Function”函数精度,应比目标函数的迭代误差限小。
“Infinite step”当一次迭代中参数值的变化大于设置值,则迭代停止。
“Levenberg-Marquardt”项,采用麦夸尔迭代法),系统缺省设置。该法要求输入的参数为:
“Maximum iterations”最大迭代步数。
“Sum-of-squares convergence”在一步迭代中目标函数残差平方和的变化比例小于设置的值时,
                        迭代停止。
“Parameter convergence”在一步迭代中参数的变化比例小于设置值时,迭代停止。
本例选“Levenberg-Marquardt”项,最大迭代步数100,残差平方和的变化比例小于1E-8,参数的变化比例小于1E-8。

10)提交执行所有的设置完成后,在主对话框中点击“OK”按钮提交所有设置,SPSS执行过程后输出结果显示在输出窗口中。

11) 结果分析结果:http://www.medsci.cn/webeditor/uploadfile/201012/20101218190039391.gif
根据以上输出结果得到K的参数估计值是0.177360878;a的参数估计值是5.705993848;b的参数估计值是0.281971271。其拟合的逻辑斯蒂发育速率模型为:         http://www.medsci.cn/webeditor/uploadfile/201012/20101218190039280.gif残差平方和(Q)为0.0009331870;拟合优度系数(R2)为0.92370。

满盘红 发表于 2012-8-4 23:12:14

期货短线高手之心得精华



市场永远是在无序的波动之中,炒手对于买入卖出的方向性选择不是靠对长期趋势的判断,而是靠自己对于价位下一次波动的预期。短线炒手赚取的是当天交易的波动利润,绝对不能隔夜持仓。短线交易一但亏损立即止损出局,每笔交易的亏损尽量不要超过一个波动价位,必须把短线炒作和普通趋势投资严格区别开来。

“抢帽子”交易来不得半点犹豫,短线交易赚取的是微利,平仓绝对不能犹豫。

传统的趋势交易者有足够的时间研究市场,可以做出入市计划和运用各种控制风险的手段,但短线交易者就不一样了,他们没有太多时间思考,一开仓单入市后,马上就要执行平仓指令,所以执行交易指令一定要坚决。在普通的趋势交易中,犹豫几分钟可能不会影响交易的结果,但短线交易几秒钟的犹豫就会错过平仓的机会,短线交易的平仓指令是跟随市场的下一个波动做出的,在开仓的同时就已经决定了必须在市场下一个跳动价位平仓,短线交易赚取也正是价格随机波动带来的利润,一旦没有及时跟随市场的节奏平仓,哪怕只有一次犹豫,这一天就可能全盘皆输。

我所讨论并进行的是日内交易中最短的短线交易(一分钟完成一笔交易),原则上不持仓.原则上在10秒中之内新开仓必须考虑退出,即要求开仓后行情如朝预期方向发展,则赚取2到5个价位就跑;如不能迅速朝预期方向发展,就速退,哪怕平手或略亏出来 ,道理如同猫到火中取栗:取到栗子要缩爪,取不到栗子也要缩爪,否则火会把爪子烧了!在上述基础上,再要求把资金利用最大化和规范化,以20万资金,专做橡胶为例,可以在开仓时每次以20手即100吨为交易单位,赚了5-50元就进行平仓,即单笔获利达500-5000元就平仓,此时,手续费已经是微乎其微了(20*2*10=400元)。如果开仓后,价格停滞不动,首先要做好准备平价出来,或至多略亏20元/吨就出来。因为盘面已告诉你,你切入点和时机可能错了!行情并没能如期朝你设想的方向发展。而且,每次的交易单位一般要一样,做错是这么多仓位错,做对,也要是这么多仓位对,才能在保持高正确率的情况下赚钱,否则,极易出现做错时是大头寸,而做对时却是仓位不足,导致虽然对的次数多却依然亏的尴尬状况,原理也和赌大赌小时赌注改变会出现不同结果一样。这样,如每天交易次数多(常达20次)或每月交易次数多且正确率高时,必然收益率也高。短线切入时机往往就是把握在价格刚动一、二个价位时杀入,后面惯性波动的第三、四或五个价位就已经是我的平仓单了,市场跟风的单子攻击的就是我的平仓单,顺利时甚至可能出现高多的价差。目前流行使用的金仕达交易软件具有预埋单功能,特别适合短线交易,可以在准备开仓时就把平仓的指令按几种价格设好,再把多种价格的开仓指令也设好(一般常设好30个以上的指令)。这样,在开仓指令成交时立刻把平仓单发出,所以在10秒钟之内必然已完成进出,而万一方向不对,撤单改单也可以在2秒内完成。
也可以这么认为,此种方式的交易,赚钱的依据或者说前提就是单笔正确率要高,以量取胜,如能达到70%的正确率,就相当于10次交易净对4次,常此以往,每日和每月的收益就相当可观。

此种方式交易,精神必须高度集中,稍有犹豫或耽搁都有可能导致亏损,更会因此打乱节奏,或使心态变坏。严格止损是最大的纪律,而且在竞技状态感觉欠佳时切忌交易,最好当日以单纯做一个方向为主,交易方向则结合品种中期预计的走势或当日走势强弱而定。在期货投资这样的高风险投资中,短线是最灵活和最安全的方法,至于盘中因为追逐短线而失去的后续利润,那是另外的话题,弱水三千,我只取一瓢,一段一段截流已足够。通过几乎高负荷进出赚取短线钱,就是从市场里抢钱,至于多交手续费一说,那纯粹是外行和不理解的人的说法,目前许多炒手就是已经只赚跳一个价位的钱了.

不要轻视行为,因为行为会形成习惯;不要轻视习惯,因为习惯会形成性格;不要轻视性格,因为性格会决定命运。

总结了三条经验:
一,止损是非常重要的。
其二,当好消息不“好”时(盘面不涨),千万不要去做买,当坏消息不“坏”时,千万不要追着卖。
其三,永远靠自己来拯救自己,不要期盼“上帝”会救你。我就用这2.5万元做本,几年后赚到千万元。其间,我发现赚第一个10万元非常艰难,用了我整整一年半的时间。之后用了半年的时间赚到100万,再之后,资金绝对值的增长就快了。(经验的加速作用)

我的交易理念主要有以下几条:

1.选择方向是交易成败的关键。或者换句话说,要清楚这个市场是多头市场还是空头市场。只有把握了市场的方向,顺势做,赚钱的可能性才更大。

2.把握好止损。即使你没有交易经验,做好止损也可以控制住风险。假如你按习惯20点止损,而赚钱时尽可能赚取更多的点数,按对错比率各50%算,最终结果你还会赚钱。

3.学会资金管理。这在期货投资中有重要意义,比如说你看不准行情时,轻仓出击,看准时重仓杀入。但投资者大多是越赔越加仓,赚钱时反而仓量较小。

4.利多行情不涨时,决不能做多,反之,决不能追空。

5.超买的可以更超买,超卖的可以更超卖。有些投资者太注重技术指标,不敢顺着行情走,反而反向开仓,结果没能赚钱却输了钱。

(1)顺势交易

(2)止损控制

(3)资金控制,顺手加仓原则。

(4)后发制人,基本面必须通过价格进行反映才存在价值。

(5)绝对的客观而非主观。

技术分析、基本面分析都很重要,但在我的交易中,盘面感觉更重要。



满盘红 发表于 2012-8-4 23:12:36

期货短线高手之心得精华



市场永远是在无序的波动之中,炒手对于买入卖出的方向性选择不是靠对长期趋势的判断,而是靠自己对于价位下一次波动的预期。短线炒手赚取的是当天交易的波动利润,绝对不能隔夜持仓。短线交易一但亏损立即止损出局,每笔交易的亏损尽量不要超过一个波动价位,必须把短线炒作和普通趋势投资严格区别开来。

“抢帽子”交易来不得半点犹豫,短线交易赚取的是微利,平仓绝对不能犹豫。

传统的趋势交易者有足够的时间研究市场,可以做出入市计划和运用各种控制风险的手段,但短线交易者就不一样了,他们没有太多时间思考,一开仓单入市后,马上就要执行平仓指令,所以执行交易指令一定要坚决。在普通的趋势交易中,犹豫几分钟可能不会影响交易的结果,但短线交易几秒钟的犹豫就会错过平仓的机会,短线交易的平仓指令是跟随市场的下一个波动做出的,在开仓的同时就已经决定了必须在市场下一个跳动价位平仓,短线交易赚取也正是价格随机波动带来的利润,一旦没有及时跟随市场的节奏平仓,哪怕只有一次犹豫,这一天就可能全盘皆输。

我所讨论并进行的是日内交易中最短的短线交易(一分钟完成一笔交易),原则上不持仓.原则上在10秒中之内新开仓必须考虑退出,即要求开仓后行情如朝预期方向发展,则赚取2到5个价位就跑;如不能迅速朝预期方向发展,就速退,哪怕平手或略亏出来 ,道理如同猫到火中取栗:取到栗子要缩爪,取不到栗子也要缩爪,否则火会把爪子烧了!在上述基础上,再要求把资金利用最大化和规范化,以20万资金,专做橡胶为例,可以在开仓时每次以20手即100吨为交易单位,赚了5-50元就进行平仓,即单笔获利达500-5000元就平仓,此时,手续费已经是微乎其微了(20*2*10=400元)。如果开仓后,价格停滞不动,首先要做好准备平价出来,或至多略亏20元/吨就出来。因为盘面已告诉你,你切入点和时机可能错了!行情并没能如期朝你设想的方向发展。而且,每次的交易单位一般要一样,做错是这么多仓位错,做对,也要是这么多仓位对,才能在保持高正确率的情况下赚钱,否则,极易出现做错时是大头寸,而做对时却是仓位不足,导致虽然对的次数多却依然亏的尴尬状况,原理也和赌大赌小时赌注改变会出现不同结果一样。这样,如每天交易次数多(常达20次)或每月交易次数多且正确率高时,必然收益率也高。短线切入时机往往就是把握在价格刚动一、二个价位时杀入,后面惯性波动的第三、四或五个价位就已经是我的平仓单了,市场跟风的单子攻击的就是我的平仓单,顺利时甚至可能出现高多的价差。目前流行使用的金仕达交易软件具有预埋单功能,特别适合短线交易,可以在准备开仓时就把平仓的指令按几种价格设好,再把多种价格的开仓指令也设好(一般常设好30个以上的指令)。这样,在开仓指令成交时立刻把平仓单发出,所以在10秒钟之内必然已完成进出,而万一方向不对,撤单改单也可以在2秒内完成。
也可以这么认为,此种方式的交易,赚钱的依据或者说前提就是单笔正确率要高,以量取胜,如能达到70%的正确率,就相当于10次交易净对4次,常此以往,每日和每月的收益就相当可观。

此种方式交易,精神必须高度集中,稍有犹豫或耽搁都有可能导致亏损,更会因此打乱节奏,或使心态变坏。严格止损是最大的纪律,而且在竞技状态感觉欠佳时切忌交易,最好当日以单纯做一个方向为主,交易方向则结合品种中期预计的走势或当日走势强弱而定。在期货投资这样的高风险投资中,短线是最灵活和最安全的方法,至于盘中因为追逐短线而失去的后续利润,那是另外的话题,弱水三千,我只取一瓢,一段一段截流已足够。通过几乎高负荷进出赚取短线钱,就是从市场里抢钱,至于多交手续费一说,那纯粹是外行和不理解的人的说法,目前许多炒手就是已经只赚跳一个价位的钱了.

不要轻视行为,因为行为会形成习惯;不要轻视习惯,因为习惯会形成性格;不要轻视性格,因为性格会决定命运。

总结了三条经验:
一,止损是非常重要的。
其二,当好消息不“好”时(盘面不涨),千万不要去做买,当坏消息不“坏”时,千万不要追着卖。
其三,永远靠自己来拯救自己,不要期盼“上帝”会救你。我就用这2.5万元做本,几年后赚到千万元。其间,我发现赚第一个10万元非常艰难,用了我整整一年半的时间。之后用了半年的时间赚到100万,再之后,资金绝对值的增长就快了。(经验的加速作用)

我的交易理念主要有以下几条:

1.选择方向是交易成败的关键。或者换句话说,要清楚这个市场是多头市场还是空头市场。只有把握了市场的方向,顺势做,赚钱的可能性才更大。

2.把握好止损。即使你没有交易经验,做好止损也可以控制住风险。假如你按习惯20点止损,而赚钱时尽可能赚取更多的点数,按对错比率各50%算,最终结果你还会赚钱。

3.学会资金管理。这在期货投资中有重要意义,比如说你看不准行情时,轻仓出击,看准时重仓杀入。但投资者大多是越赔越加仓,赚钱时反而仓量较小。

4.利多行情不涨时,决不能做多,反之,决不能追空。

5.超买的可以更超买,超卖的可以更超卖。有些投资者太注重技术指标,不敢顺着行情走,反而反向开仓,结果没能赚钱却输了钱。

(1)顺势交易

(2)止损控制

(3)资金控制,顺手加仓原则。

(4)后发制人,基本面必须通过价格进行反映才存在价值。

(5)绝对的客观而非主观。

技术分析、基本面分析都很重要,但在我的交易中,盘面感觉更重要。

猎鹰 发表于 2012-8-15 12:36:59

{:soso__16984349925490629196_1:}

多伦多 发表于 2012-8-25 12:30:38

先顶后看.

foir 发表于 2013-1-30 18:34:33

LinearReg
请教如何编写SLOPE(C,17)
谢谢!

满盘红 发表于 2013-2-4 00:37:04

foir 发表于 2013-1-30 18:34 http://www.jiaoyizhijia.net/static/image/common/back.gif
LinearReg
请教如何编写SLOPE(C,17)
谢谢!

SLOPE斜率函数短线买卖点http://ctc.qzs.qq.com/ac/b.gif SLOPE函数短线买卖点VAR1:=EMA(C,2);
VAR2:=EMA(SLOPE(C,21)*20+C,42);
VAR3:=CROSS(VAR1,VAR2);
VAR4:=CROSS(VAR2,VAR1);
MA20:MA(C,20),COLORGREEN,LINETHICK1;
MA10:MA(C,10),COLORCYAN,LINETHICK1;
MA4:MA(C,4),COLORYELLOW,LINETHICK1;
DRAWTEXT(VAR3,LOW*0.95,'买'),COLORYELLOW,LINETHICK3;
DRAWTEXT(VAR4,HIGH*1.028,'卖'),COLORGREEN,LINETHICK3;
STICKLINE(VAR1=VAR2,LOW,HIGH,0,0),COLORRED;
STICKLINE(VAR1>=VAR2,CLOSE,OPEN,2,0),COLORRED;
STICKLINE(VAR1>=VAR2,CLOSE,OPEN,2,0),COLORRED;
STICKLINE(VAR1>=VAR2,CLOSE,OPEN,2,0),COLORRED;
STICKLINE(VAR1>=VAR2,CLOSE,OPEN,2,0),COLORRED;
STICKLINE(VAR1<VAR2,CLOSE,OPEN,2,0),COLORGREEN;
STICKLINE(VAR1<VAR2,CLOSE,OPEN,2,0),COLORGREEN;
STICKLINE(VAR1<VAR2,CLOSE,OPEN,2,0),COLORGREEN;
STICKLINE(VAR1<VAR2,CLOSE,OPEN,2,0),COLORGREEN;
STICKLINE(VAR1<VAR2,LOW,HIGH,0,0),COLORGREEN;

上面的SLOPE函数短线买卖点,此指标运用返回性斜率函数,就是股价涨到一定的幅度,就自然返回;
下跌到一定的幅度就必然上涨。鄙人认为是这样的原理。有不同看法可以讨论。感谢指标的原创者!













软件说明:
指标毒药【未来函数】的定义



一、确认是未来函数的有:

ZIG
之字转向,

BACKSET(X,N)
若X非0,则将当前位置到N周期前的数值设为1。

PEAK
前M个ZIG转向波峰值

PEAKBARS
前M个ZIG转向波峰到当前距离。

TROUGH
前M个ZIG转向波谷值。

TROUGHBARS
前M个ZIG转向波谷到当前距离。

#YEAR
跨周期引用#Year使用跨周期数据

#MONTH
跨周期引用#Month


#WEEK
跨周期引用#Week


FFT(X,N)
含FFT傅立叶变换函数

FLATZIG、FLATZIGA、PEAKA、PEAKBARSA、TROUGHA、ZIGA



二、仿佛是未来函数的有:

CAPITAL
含Capital流通盘
流通盘在增发、分红、债转股后可能变了。


DYNAINFO
含DynaInfo动态数据
DynaInfo(k):动态信息


FINANCE
含Finance财务数据
Finance(k):财务信息

WINNER
含Winner类函数WINNER(x)、LWINNER(x)、PWINNER(X)等获利盘比例类的和COST也有未来函数的性质,有时可使信号产生漂移。


COST
含Cost类函数
COST(N)、COSTB(N)


动态行情 DYNAINFO()

财务数据 FINANCE()(除FINANCE(51) FINANCE(52)几个外)

指标函数 COST() WINNER()以及等等



三、有点疑是未来函数但确认不是未来函数的有:

forcast()


forcast是从slope计算斜率引申来的,slope不是未来,forcast也就不是未来

slope只用过去样本(参数)计算回归线的斜率,不是未来任意一点只取其前面的参数样本回归计算,所以不会受后面新增K线影响。
要看出为何不是未来,以fft是未来为例说明FFt每次都取全部K线数据找到最佳配曲线(模型),而赋予全部曲线的值,每增加一根新K线,就按全部K线数据重新找到最佳配曲线(模型), 再重新赋予全部曲线的值,所以每增加一根K线前面的FFT值会全部都改变,只是改变幅度或大或小







ST我自己 发表于 2013-4-7 10:29:33

这个帖子 真是厚道啊

ejia_2011 发表于 2018-7-24 17:10:25

抢帽子”交易来不得半点犹豫,短线交易赚取的是微利,平仓绝对不能犹豫。
页: [1]
查看完整版本: 如何建立线性回归策略来程序化交易股指期货