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

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87