返回介绍

开始入门

操作指引

SDK

数据文档

常见问题

量化工具

其他

其他

策略组成文件

发布于 2024-06-22 12:53:28 字数 5047 浏览 0 评论 0 收藏 0

策略编写m文件-main.m

  • main 函数为用户编写策略的主函数,策略逻辑需要按照事类型件分块编写,在 main 中可以获取数据和进行交易
  • 当有效事件发生时,main 行数将会被自动调用,通过 if 判断事件类型标识,执行指定类型事件的处理逻辑
  • 首次调用为 init 初始化事件,作用是设定策略运行方式,包括订阅的数据范围,需要的监听的事件类型
[Context] = main(Context,Event)
if  Event.Init.flag==1
    subscribe()
end

end
参数类型说明
Eventstruct存放事件内容,一个事件分为 flag 标志位和事件数据 data,flag 为 1 时表示该事件发生
Contextstruct全局变量,存放策略级的系统数据,也可以存放用户自定义的数据

示例

function [Context] = main(Context,Event)
%%  均线突破策略
% 设定交易股票池,分别针对个股做以下决策
% 60分钟均线突破15分钟均线作为指标
% 如果向上突破,且无持仓,则按一定资金比例买入
% 如果向下突破,且有持仓,则卖出所有持仓
if Event.Init.flag==1                                                        % 初始化操作
    insurance = get_industry('J68');
    set_symbols(insurance);                                                  %提取保险行业成分股,设定股票池
    subscribe(insurance, '60s',60);
    subscribe(insurance, '900s',60);
    Context.userdata.len_60s = 30;                                           %userdata,设定用户自定义的全局变量
    Context.userdata.len_15m = 20;
    return
end
%% 定时任务处理逻辑
len_1d=Context.userdata.len_60s;
len_15m=Context.userdata.len_15m;
cp_60s = Context.data.frequency_60s.close(:,end-len_1d:end);
cp_15m = Context.data.frequency_900s.close(:,end-len_15m:end);
if  Event.Bar.frequency_900s.flag==1
    % 计算突破因子
    fact = mean(cp_60s,2)-mean(cp_15m,2);
    % 判断持仓,如果突破因子为正且持仓为空,则下单买入,否则清仓
    [cash]= get_cash();                                                     %cash字段和info说明一一对应
    [position] = get_position();
    for i =1:length(Context.symbols)
        ind = strcmp(position(:,3),Context.symbols{i});
        ind = find(ind==1);
        if fact(i)>0
            if sum(ind)==0           %没有仓位则开仓
                [order]=order_value(Context.symbols{i}, 0.15*cash{2,4},  OrderSide.OrderSide_Buy, OrderType.OrderType_Market,PositionEffect.PositionEffect_Open,0);                   %标的,资金,买入,市价,开仓,价格,市价场景下价格字段不生效
            end
        else
            if sum(ind)~=0                                                  %没有仓位则开仓
                [order]=order_volume(Context.symbols{i}, position{ind,14}, OrderSide.OrderSide_Sell, OrderType.OrderType_Market,PositionEffect.PositionEffect_Close,0);              %标的,资金,买入,市价,开仓,价格
            end
        end
    end
end

策略运行文件-run.m

run函数用于运行策略,通过参数控制策略的运行模式、回测参数、身份信息等

参数说明:

参数名是否必填描述
strategy_set.strategy_id必填策略 ID 用于终端识别策略身份
strategy_set.mode非必填策略运行的时间模式,MODE_LIVE(实时),MODE_BACKTEST(回测)
strategy_set.token必填账户身份信息
strategy_set.backtest_start_time非必填回测模式开始时间
strategy_set.backtest_end_time非必填回测模式结束时间
strategy_set.backtest_initial_cash非必填回测模式的初始资金
strategy_set.backtest_transaction_ratio非必填回测模式的成交比例,默认为 1
strategy_set.backtest_commission_ratio非必填回测模式的手续费,默认为 0.001
strategy_set.backtest_slippage_ratio非必填回测模式的滑点比率,默认为 0
strategy_set.backtest_adjust非必填回测数据的复权方式,ADJUST_NONE(不复权)=0,ADJUST_PREV(前复权)=1,ADJUST_POST(后复权)=2
strategy_set.backtest_check_cache非必填回测模式使用缓存数据 默认使用缓存,1 - 使用, 0 - 不使用
strategy_set.serv_addr非必填默认为本地终端服务地址,可不填

函数原型:

%% 设置策略运行参数
strategy_set.strategy_id = 'xxxxxxx';
strategy_set.token = 'xxxxxx';
strategy_set.mode = 'MODE_BACKTEST';                                        % MODE_LIVE(实时),MODE_BACKTEST(回测)
strategy_set.backtest_start_time = '2018-08-01 10:40:00';
strategy_set.backtest_end_time = '2018-08-10 10:50:00';                     % 默认最近一个月
strategy_set.backtest_initial_cash = 1000000;                               % 默认资金一百万
% strategy_set.backtest_transaction_ratio = 0;                              % 默认成交比例1
% strategy_set.backtest_commission_ratio = 0.001;                           % 默认手续费千一1
% strategy_set.backtest_slippage_ratio = 0;                                 % 默认滑点比率
% strategy_set.backtest_adjust = ADJUST_NONE;                               % 默认复权方式不复权,ADJUST_NONE(不复权)=0,ADJUST_PREV(前复权)=1,ADJUST_POST(后复权)=2
% strategy_set.backtest_check_cache = 1;                                    % 默认使用缓存,1 - 使用, 0 - 不使用
% strategy_set.serv_addr = '';                                              % 服务器地址可不填
%%  运行策略
run_strategy(strategy_set)
global context                                                              % 显示全局变量内的信息

说明: run_strateg 用于启动运行策略,设置好策略运行的模式,并将策略初始化函数中订阅的数据和定时的任务设定到策略驱动中

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文