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

相关文章

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

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)

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