基本原理很简单,描述出来如下,这样不懂编程的人都可以明白:
1. 在今天的收盘,计算两个值: 最高价-收盘价, 和 收盘价-最低价。然后取这两个值较大的那个,乘以k值0.7。把结果称为 触发值。
2. 在明天的开盘,记录开盘价,然后在价格超过(开盘+触发值)时马上买入,或者价格低于(开盘-触发值)时马上卖空。
3. 没有明确止损。这个系统是反转系统,也就是说,如果在价格超过(开盘+触发值)时手头有一口空单,则买入两口。同理,如果在价格低于(开盘-触发值)时手上有一口多单,则卖出两口。
程序在复制了原程序基础上,增加了止损设置和优化环境,你可以决定是否止损,止损后是否重新开仓,是否以当前价立刻执行策略还是以收盘价执行,你还可以选择你认为对你最重要的几个指标进行打分排序,并通过表现打分,选出最优的参数组合。
通过分析参数,可以发现各个品种的不同特性。并构建较为稳健的策略组合池。
程序还给你非常直观的视觉感受,让你直观的看到你的策略执行情况,是否满足上涨行情做多,下跌行情做空为主体执行格局。如下图。程序还直观的表示了你的策略回报与一般的正态分布之间的风险占有对比,如下图,很明显我们的策略回报一阶占优于正态分布,也就是说,尖峰,薄尾。
程序还给你提供了非常详尽的统计报告,如平均盈利,最长不盈利时间,这些指标均可以作为你选择程序好坏的指标,用于你的打分系统,选择最符合你心理的系统优化参数。
是否需要优化?0,1——0
----------策略参数--------------------------------
敏感参数: 0.700
价格最小变动单位: 1.00
交易费用/每手: 0
合约规模/手: 1
是否止损: 1
止损规模: 0.080
是否重新开仓: 0
现价操作?: 1
**************************************************
----------统计报表--------------------------------
盈利次数: 135
获胜盈利所得 : 3.3071
亏损次数: 138
亏损总额 : -1.7221
总交易次数 : 273
总获利: 4.2681
交易费用: 4
净利润: 0.0000
对象买入持有应该能得收益: -0.98
最大资金回撤: -0.6478
最大资金回撤比例:-0.1747
最长不盈利时长: 81
单次最大获利 : 0.3031
单次最大亏损: -0.0449
平均每笔利润: 0.0058
获胜每笔利润: 0.0245
亏损每笔利润: -0.0125
每笔交易波动: 0.0322
总样本时间长度: 692
买入持有时间均值: 2.6
买入持有时间方差: 1.8
买入持有总长度: 352
卖出持有时间均值: 2.5
卖出持有时间方差: 1.9
卖出时间总长度: 338
交易占总时长比例: 1.0
Sharper比值: 0.18
获胜比例: 0.49
现有持仓浮动收益: 0.0129
部分样本代码:
function [Report Record] = dualstation (data,P)
%
% function dualstation (data)
%
% purpose:
% dual station for single object
%
% input:
% data: open ,high ,low ,close
%
% output:
% statistical report of trading station
% author: jemnbo@gmail.com
%
% controls:
K = P(1,1);
DeltaP = P(2,1);
fee = P(3,1) ;
StopLossOrNot = P(4,1);
StopLoss = P(5,1);
ReOpen = P(6,1);
Siz = P(7,1);
% K = input('敏感参数:——') ; % singular
% DeltaP = input('价格最小变动单位:——'); % singular
% fee = input('交易费用:——'); % singular
% Siz = input('合约规模:——'); % singular
% StopLossOrNot = input('是否需要止损?1 或者 0:——'); % singular
% StopLoss = input('止损为合约价格的百分比:——'); % singular
% ReOpen = input('止损后是否重新开仓?1或者0:——'); % singular
out=fopen('Dual Station','at');
。。。。。。。。。。