matlab rsi的交易策略源码,RSI择时 附策略源码

2024-03-25 20:10

本文主要是介绍matlab rsi的交易策略源码,RSI择时 附策略源码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

入场:当RSI下降到30以下进入超卖区,回到50的时候买入

出场:当RSI上升到70之上进入超买区,直接卖出

资金分配:买入的股票采取等资金分配

股票池:沪深300所有股票

fde35511306d0e7381dcfd3076d10cfd.png

策略源码:

function RSI1(n1,n2,n4) % 威廉指标.%获取目标资产信息targetList = traderGetTargetList(); % 在RunBackTest中选择好的标的.%获取账户信息HandleList = traderGetHandleList();%=================================================================% RunBackTest的参数设置% n1=12; % RSI的短期参数% n2=24; % RSI的长期参数% n4=2; % 几倍ATR%=================================================================% 定义持有的账户为全局变量global holdingList;if isempty(holdingList) % 判断cc是否为空值 holdingList(1).Market=0; holdingList(1).Code=0; holdingList(1).OpenBar=0; holdingList(1).OpenPrice=0; holdingList(1).Sharebum=0; holdingList(1).StopLoss=0;end% 定义可用金额global available;if isempty(available) % 判断cc是否为空值 available=100000000;end% 定义初始金额,每只股票的最大仓位为初始资金的1/300initial=100000000;initialeach=initial/length(targetList);k1=0;%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------for i = 1:length(targetList) % 每个股票过一遍 % lags为策略需要往前获取多少天 lags=n2+2; %策略中每次取数据的长度 barnum=traderGetCurrentBar(targetList(i).Market,targetList(i).Code); % K线的序号,后面会增加,前面的值对应的日期固定. % 数据长度限制,排除了前lags根k线 if(barnum=datenum('1-Jan-2014') if length(close)LRSI(end) && SRSI(end-1)50 && SRSI(end)<80) || (SRSI(end)<20); buy1=a1 && a2; if buy1 k1=k1+1; stockList(k1).Market=targetList(i).Market; stockList(k1).Code=targetList(i).Code; stockList(k1).Price=close(end); [ATR1, ~]=traderATR(14,targetList(i).Market,targetList(i).Code,'day',1,0-lags,0,false,'FWard'); stockList(k1).ATR=ATR1(end); end endend%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------% 判断股票池里面的股票是否要买入,买入多少手if k1~=0 for i=1:length(stockList) % 等权重买入 sharenum=floor(initialeach/stockList(i).Price); % 设置每只股票的交易手数,使得最大的亏损不大于初始账户的 n2%.% sharenum=floor(stockList(i).Price*initialeach/stockList(i).ATR/10000); % 获取当前bar序号 barnum=traderGetCurrentBar(stockList(i).Market,stockList(i).Code); %获取当前仓位 [marketposition,~,~]=traderGetAccountPosition(HandleList(1),stockList(i).Market,stockList(i).Code); if marketposition ==0 && (sharenum*stockList(i).Price)<=1*available && time(end)>=datenum('1-Jan-2014') orderID1=traderBuy(HandleList(1),stockList(i).Market,stockList(i).Code,sharenum,0,'market','buy1'); % 开多单 if orderID1~=0 [~,~,price] = traderGetAccountPosition(HandleList(1),stockList(i).Market,stockList(i).Code); % 记录开仓的价格 available=available-sharenum*price; if holdingList(1).Market==0 holdingList(1).Market=stockList(i).Market; holdingList(1).Code=stockList(i).Code; holdingList(1).OpenBar=barnum+1; holdingList(1).OpenPrice=price; holdingList(1).Sharebum=sharenum; holdingList(1).StopLoss=price-n4*stockList(i).ATR; else holdingList1(1).Market=stockList(i).Market; holdingList1(1).Code=stockList(i).Code; holdingList1(1).OpenBar=barnum+1; holdingList1(1).OpenPrice=price; holdingList1(1).Sharebum=sharenum; holdingList1(1).StopLoss=price-n4*stockList(i).ATR; holdingList=[holdingList,holdingList1]; end end end endend%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------% 出场设置if holdingList(1).Code~=0 for i=1:length(holdingList) [ATR2, ~]=traderATR(14,holdingList(i).Market,holdingList(i).Code,'day',1,0-lags,0,false,'FWard'); [time1,open1,high1,low1,close1,volume1,turnover1,openinterest1] = traderGetKData(holdingList(i).Market,holdingList(i).Code,'day',1, 0-lags, 0,false,'FWard'); barnum=traderGetCurrentBar(holdingList(i).Market,holdingList(i).Code); if barnum>holdingList(i).OpenBar && high1(end-1)>high1(end-2) holdingList(i).StopLoss=high1(end-1)-n4*ATR2(end-1); end exitlong1=close1(end)LRSI(end-1); % 卖出信号: exitlong2=a1; exitlong=exitlong1 || exitlong2; if barnum>=holdingList(i).OpenBar && exitlong2 orderID2=traderPositionTo(HandleList(1),holdingList(i).Market,holdingList(i).Code,0,0,'market','sell1'); if orderID2~=0 exitprice=traderOrderFilledPrice(HandleList(1),orderID2); available=available+exitprice*holdingList(i).Sharebum; holdingList(i).Sharebum=0; end end end % 删除已经卖出的股票 holdingList2(1).Market=0; holdingList2(1).Code=0; holdingList2(1).OpenBar=0; holdingList2(1).OpenPrice=0; holdingList2(1).Sharebum=0; holdingList2(1).StopLoss=0; for i=1:length(holdingList) if holdingList(i).Sharebum~=0 holdingList2=[holdingList2,holdingList(i)]; end end holdingList=holdingList2(2:end);end%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------end

下载完整策略源码及执行代码请登录DigQuant社区-策略资源下载:http://www.digquant.com.cn/stra.php

这篇关于matlab rsi的交易策略源码,RSI择时 附策略源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/846126

相关文章

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解