matlab boll源码,【每日一策】Matlab量化交易策略之 布林带突破+头寸管理

function Strategyn(freq)%

targetList = traderGetTargetList();

%获取目标资产信息

HandleList = traderGetHandleList();

%获取账户句柄

global record;

global state;

for k=1:length(targetList);

%--------------------仓位、K线、当前bar的提取-----------------------------%

%获取当前仓位

[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code);

%策略中每次取数据的长度

lags=60;

dlags=21;

barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code);

%数据长度限制

if(barnum

continue;

end

%获取K线数据

[time,open,high,low,close,volume,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq, 0-lags, 0,false,'FWard');

[Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,~,~] = traderGetKData(targetList(k).Market,targetList(k).Code,'day',1, 0-dlags, 0,false,'FWard');

if length(close)

continue;

end;

% 每天的第一个bar将state全局变量复原,state的作用是保证每天只buy or sellshort 一次(后续的加仓没有限制)

if floor(time(end))~=floor(time(end-1))

state(k)=0;

end;

% 未平仓的订单提取

remain_num=find(record{k}.isopen==1);

remain.isopen=record{k}.isopen(remain_num);

remain.isearn=record{k}.isearn(remain_num);

remain.pivotprice=record{k}.pivotprice(remain_num);

remain.entrybar=record{k}.entrybar(remain_num);

remain.unit=record{k}.unit(remain_num);

remain.direction=record{k}.direction(remain_num);

% ------------------- 计算购买手数 ----------------------------- %

% 提取剩余可用资金

[ValidCash,MarketCap,~,~,~] = traderGetAccountInfo(HandleList(1));

[~,~,Multiple,~,~,~,~,LongMargin,ShortMargin] = traderGetFutureInfo(targetList(k).Market,targetList(k).Code);

% 计算当前还有几分资金没使用

num=0;                             % isopen==1 表示未平仓的资金

for i=1:length(record)

aa=find(record{i}.isopen==1);

num=num+length(aa);

end;

n=5;

remain_share=n*length(targetList)-num;    % 资金总共分为 n*length(targetList)份,已经用了num 份

% con1:当n份资金都使用完了,con1=0,不继续开仓,因为没有足够的资金了

con1=0;

if remain_share~=0;

con1=1;

%openunit=fix(MarketCap/close(end)/Multiple/length(targetList)/n);  % 一份资金可以购买的手数(没有带杠杆买)

openunit=fix(ValidCash/close(end)/Multiple/length(targetList)/remain_share/LongMargin);  % 一份资金可以购买的手数(带杠杆买)

end;

%------------------- 判断当前是多头持仓还是空头持仓 --------------------%

posdir=0;

if ~isempty(remain.direction)

if remain.direction(end)>0     % 有多头持仓只进多头,空头持仓只进空头,因此只需察看remain.direction数组的任意元素的值

posdir=1;

elseif remain.direction(end)<0

posdir=-1;

end;

end;

stds=std(Dclose(end-dlags+1:end-1));

means=mean(Dclose(end-dlags+1:end-1));

%---------------------------------对未平仓的订单进行平仓或者调整止损线--------------------------------------------%

for i=1:length(remain_num)

index=remain_num(i);

%         conbar=barnum-remain.entrybar(i)>10;         %十根bar后,仍无操作,强制平仓

if remain.direction(i)==1

if (close(end)

orderID3=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,remain.unit(i),0,'market','sell');

if orderID3==0

continue;

end;

record{k}.isopen(index)=0;

elseif close(end)>remain.pivotprice(i)+2*stds % 触发止盈线

record{k}.pivotprice(index)=close(end);

record{k}.isearn(index)=2;

end;

elseif remain.direction(i)==-1

if (close(end)>remain.pivotprice(i)+stds) % 触发止损线

orderID4=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,remain.unit(i),0,'market','buy');

if orderID4==0

continue;

end;

record{k}.isopen(index)=0;

elseif close(end)

record{k}.pivotprice(index)=close(end);

record{k}.isearn(index)=2;

end;

end;

end;

%    %--------------------- 止损/入场条件计算 ------------------------------------%

con2=isempty(find(remain.isearn==1,1));              % 所有头寸都是盈利的才考虑进新的头寸

upline=means+0.5*stds;

dnline=means-0.5*stds;

bcon=close(end)>upline && state(k)==0;

scon=close(end)

buycon=con1 && con2 && bcon && posdir==0;           % 突破布林带上轨道做多(每天只做一手)

sellshortcon=con1 && con2 && scon && posdir==0;     % 突破布林带下轨道做空(每天只做一手)

addbuycon=con1 && con2 && posdir>0;                 % 盈利了直接加仓

addsellshortcon=con1 && con2 && posdir<0;           % 盈利了直接加仓

%---------------------------入场操作--------------------------------%

if buycon       % 无仓时买进

orderID1=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,openunit,0,'market','buy');

if orderID1==0

continue;

end;

record{k}.pivotprice=[record{k}.pivotprice,close(end)];

record{k}.isearn=[record{k}.isearn,1];

record{k}.isopen=[record{k}.isopen,1];

record{k}.unit=[record{k}.unit,openunit];

record{k}.entrybar=[record{k}.entrybar,barnum];

record{k}.direction=[record{k}.direction,1];

state(k)=1;                 % state==1 则当天不再采取空仓买进的操作

end;

if sellshortcon    % 无仓时卖空

orderID2=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,openunit,0,'market','sell');

if orderID2==0

continue;

end;

record{k}.pivotprice=[record{k}.pivotprice,close(end)];

record{k}.isearn=[record{k}.isearn,1];

record{k}.isopen=[record{k}.isopen,1];

record{k}.unit=[record{k}.unit,openunit];

record{k}.entrybar=[record{k}.entrybar,barnum];

record{k}.direction=[record{k}.direction,-1];

state(k)=1;                % state==1 则当天不再采取空仓卖空的操作

end;

if addbuycon   % 多仓时买进

orderID1=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,openunit,0,'market','buy');

if orderID1==0

continue;

end;

record{k}.pivotprice=[record{k}.pivotprice,close(end)];

record{k}.isearn=[record{k}.isearn,1];

record{k}.isopen=[record{k}.isopen,1];

record{k}.unit=[record{k}.unit,openunit];

record{k}.entrybar=[record{k}.entrybar,barnum];

record{k}.direction=[record{k}.direction,1];

end;

if addsellshortcon   % 空仓时卖空

orderID2=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,openunit,0,'market','sell');

if orderID2==0

continue;

end;

record{k}.pivotprice=[record{k}.pivotprice,close(end)];

record{k}.isearn=[record{k}.isearn,1];

record{k}.isopen=[record{k}.isopen,1];

record{k}.unit=[record{k}.unit,openunit];

record{k}.entrybar=[record{k}.entrybar,barnum];

record{k}.direction=[record{k}.direction,-1];

end;

end

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jacobi matlab程序,jacobi迭代法实验MATLAB程序数值分析

jacobi迭代法实验MATLAB程序数值分析 例1&#xff0e; 求线性方程组 得近似解。精确解为x*[3&#xff0c;2&#xff0c;1]’。 解&#xff1a;对方程进行移项就得 记为Axb,或写为xB0 xf,其中 取初始值,代入原方程组可得再将把它代入可得.反复利用这个计算过程,得到一向量序列和…

docker部署python web应用_安装docker并部署web项目

一.docker简介1、docker定义&#xff1a;docker是一个用来装应用的容器&#xff0c;就像杯子可以装水&#xff0c;笔筒可以装笔&#xff0c;书包可以放书一样。你可以把“hello world&#xff01;”放到docker中&#xff0c;也可以把网站放到docker中&#xff0c;你可以把任何你…

java 水印乱码,linux java程序加水印及中文乱码方案

在linux&#xff0c;centos环境下的&#xff0c;生成的带文字的水印图片在显示为方框乱码。img.setFont(new Font("宋体", Font.BOLD, 20));写中文进入图片之前必须设置字体&#xff0c;而且这个字体必须支持中文&#xff0c;否则就会出现乱码或者方框、问号等等。Bu…

resultmap拿不到数据_阿里巴巴国际站每日电商运营工作数据表格

一、日常运营工作表1.数据日报统计每天的流量数据&#xff1a;2.数据周报统计每周的流量数据&#xff1a;3.数据月报统计每月流量数据&#xff1a;前半部分后半部分4.P4P月数据总览统计P4P的流量数据&#xff1a;大图包含上面所有的方案5.P4P日数据总览6.爆款数据统计每月统计爆…

php oracle新增数据类型,oracle数据类型

数据类型字符串类型字符串类型用来存储字符串数据char用于描述定长的字符型数据0~2000nchar用来存储Unicode字符集的定长字符型数据0~1000varchar2用于描述可变长的字符型数据0~4000nvarchar2用来存储unicode字符集的可变长字符型数据0~1000long用来存储边长的字符串0~2GBvarch…

jenkins ssh 远程部署_Jenkins部署jar到远程服务器

首选得确定Jenkins的安装完整&#xff0c;还有插件的安装&#xff0c;除默认插件&#xff0c;此处必备插件&#xff1a;Publish Over SSH&#xff0c;SSH plugin&#xff0c;因为我源码在gitlab所以关于gitlab的插件我也安装了&#xff0c;看各自的情况选择安装。然后到系统管理…

jieba分词_Jieba.el – 在Emacs中使用jieba中文分词

jieba.el在Emacs中使用jieba中文分词众所周知, Emacs并没有内置中文分词系统, 以至于 forward-word 和 backward-word 以及 kill-word 等以单词为单位的操作只能粗暴的标点符号进行确定所谓”词汇”, (其实是中文里的句子).jieba.el 利用nodejieba对buffer中的中文句子进行分割…

python的request请求401_Python模拟HTTPS请求返回HTTP 401 unauthorized错误

Python模拟HTTPS请求返回HTTP 401 unauthorized错误开始是使用的 httplib模块&#xff0c;代码如下&#xff1a;header {"Content-type": "application/json", "Accept": "*/*" }params { ‘source‘:‘en‘, ‘target‘:‘es‘, ‘…

java php 女生数量,萌妹子告诉你php和java如何选

原标题&#xff1a;萌妹子告诉你php和java如何选phpPHP 独特的语法混合了C、Java、Perl 以及 PHP 自创新的语法。它可以比 CGI 或者 Perl 更快速的执行动态网页PHP具有非常强大的功能&#xff0c;所有的CGI的功能PHP都能实现&#xff0c;而且支持几乎所有流行的数据库以及操作系…

new 结构体指针_Go:我应该用指针替代结构体的副本吗?

logo对于许多 golang 开发者来说&#xff0c;考虑到性能&#xff0c;最佳实践是系统地使用指针而非结构体副本。我们将回顾两个用例&#xff0c;来理解使用指针而非结构体副本的影响。1. 数据分配密集型让我们举一个简单的例子&#xff0c;说明何时要为使用值而共享结构体&…

Oracle 同音字查询,汉字的演变过程100字,汉字的演变图片

中国的汉字博大精深&#xff0c;历史悠久。早期甲骨文主要是线条图&#xff0c;统一而优美。后来&#xff0c;它逐渐演变成一幅由笔画组成的图画&#xff0c;这是当代汉字的基础商周时期&#xff0c;甲骨文逐渐成为金文。西周时期&#xff0c;青铜器铸造&#xff0c;铭文用于记…

python音频聚类_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)

python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)发布时间&#xff1a;2020-08-31 21:23:24

matlab 实验数据 传递函数,《传递函数MATLAB实验》.ppt

传递函数MATLAB实验 练习&#xff1a; 各种典型环节的阶跃响应曲线 1、比例环节(K) 从图形库浏览器中拖曳Step(阶跃输入)、Gain(增益模块)、Scope模块到仿真操作画面&#xff0c;连接成仿真框图。 结论&#xff1a;比例环节 K 改变&#xff0c;则放大倍数改变。 2、积分环节( 1…

localstorage存储大小_Cookie 已凉,Web 存储该这么做!

本文经授权转自公众号CSDN(ID&#xff1a;CSDNnews)作者 | 浪里行舟责编 | 郭芮随着移动网络的发展与演化&#xff0c;我们手机上现在除了有原生 App&#xff0c;还能跑“WebApp”——它即开即用&#xff0c;用完即走。一个优秀的 WebApp 甚至可以拥有和原生 App 媲美的功能和体…

三折线弹塑性滞回模型matlab,动力弹塑性滞回模型-迈达斯汇总.doc

9-1 概要非线性抗震分析方法可分为非线性静力分析方法和非线性动力分析方法。其中非线性静力分析方法(静力弹塑性分析)因其理论概念易于理解、计算效率高、整理结果较为容易等原因为设计人员所广泛使用。但是由于静力弹塑性分析存在反映结构动力特性方面的缺陷、使用的能力谱是…

python实现knn算法鸢尾花_Python学习之knn实现鸢尾花分类

# K近邻算法# 导入相关库文件import numpy as npimport matplotlib.pyplot as plt#import pandas as pdfrom sklearn import neighbors, datasets# 导入数据集&#xff0c;数据集sklearn自带&#xff0c;X与y一一对应dataset datasets.load_iris()# 获取鸢尾花前两列花萼长度和…

php获取变量数据类型,php如何确定变量的数据类型

在php中&#xff0c;数据类型有&#xff1a;Boolean 布尔类型、Integer 整型、Float 浮点型、String 字符串、Array 数组、Object 对象、Resource 资源类型、NULL;知道一个数据的类型&#xff0c;能够更加有效地进行代码逻辑处理。1、使用 var_dump() 函数&#xff0c;可以获取…

深入理解java虚拟机 - jvm高级特性与最佳实践(第三版)_JVM虚拟机面试指南:年薪30W以上高薪岗位需求的JVM,你必须要懂!...

JVM的重要性很多人对于为什么要学JVM这个问题&#xff0c;他们的答案都是&#xff1a;因为面试。无论什么级别的Java从业者&#xff0c;JVM都是进阶时必须迈过的坎。不管是工作还是面试中&#xff0c;JVM都是必考题。如果不懂JVM的话&#xff0c;薪酬会非常吃亏。其实学习JVM并…

php ajax xmlhttpreq 上传文件 get,使用Ajax XmlHttpRequest上传文件

使用Ajax XmlHttpRequest上传文件嗨&#xff0c;我正在尝试使用此代码发送带有xmlhttprequest的文件。var url "http://localhost:80/....";$(document).ready(function(){document.getElementById(upload).addEventListener(change, function(e) {var file this.fi…

linux 针对目录空间配额,linux磁盘配额quota

Linux是一个多用户多任务的操作系统&#xff0c;在使用中可能会有几个人对服务器有操作&#xff0c;几个用户共同使用一个共享磁盘的情况&#xff0c;因为我们的硬盘是有限的&#xff0c;我们需要对用户的空间进行限制。这里使用磁盘配额&#xff0c;可以很方便的对用户的空间进…