返回介绍

开始入门

操作指引

SDK

数据文档

常见问题

量化工具

其他

其他

典型策略场景

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

定时事件驱动

  • 初始化策略时设定策略的执行时间
  • 到达设定时间时,自动执行策略
  • 可以指定多个定时任务,通过任务名进行区分
function [Context] = main(Context,Event)
% 初始化
if Event.Init.flag==1
    schedule('algo01', '1d', '09:30:00');
    schedule('algo02', '1d', '14:55:00');
    return
end
%% 定时任务处理逻辑
if  Event.algo01.flag==1
    disp (Context.now);
end
if  Event.algo02.flag==1
    disp (Context.now);
end
end

订阅数据驱动

function [Context] = main(Context,Event)
% 初始化
if Event.Init.flag==1
    set_symbols({'SZSE.000001','SHSE.600000'});
    subscribe({}, '900s',60);
    return
end
if  Event.Bar.frequency_900s.flag==1
    disp(Context.data.frequency_900s.eob);                                  %打印滑窗数据
    disp(Context.data.frequency_900s.symbols);
    disp(Context.data.frequency_900s.close);
end

成交回报事件驱动

  • 委托执行后,当委托状态发生变化,如,部分成交或者委托被拒绝时,会触发委托事件
function [Context] = main(Context,Event)
%% 编写策略
% 初始化操作
if Event.Init.flag==1%第一次启动仅执行初始化部分
    % 设置股票池和订阅的数据,如果订阅数据不指定,默认订阅股票池的所有数据
    set_symbols({'SZSE.000001','SZSE.000009'});
    subscribe({}, '900s',10);
    %设置启用的事件,启用委托状态变更事件
    set_event({'OrderStatus'})
    return
end
% 定时任务处理逻辑
if Event.Bar.frequency_900s.flag==1
[order]=order_volume('SZSE.000001', 100, OrderSide.OrderSide_Buy, OrderType.OrderType_Market,PositionEffect.PositionEffect_Open,0); %标的,委托量,买入,市价,开仓,价格
end
% 委托状态变化事件
if  Event.OrderStatus.flag ==1
    disp(Event.OrderStatus.data)
end
end

指定账户交易

  • 在多账户场景下交易,用指定账户的 ID 来进行不同账户的下单
  • 如果策略是单账户则不需要指定账户 ID
function [Context] = main(Context,Event)
% 初始化
if Event.Init.flag==1
    schedule('algo01', '1d', '09:30:00');
    return
end
%% 定时任务处理逻辑
if  Event.algo01.flag==1
    %标的,资金,买入,市价,开仓,价格,仅在实盘可以指定账户
    [order]=order_volume({'SHSE.600000'}, 100,  OrderSide.OrderSide_Buy, OrderType.OrderType_Market,PositionEffect.PositionEffect_Open,0,'account1');
end
end
end

获取资金持仓信息交易策略

  • 获取资金和持仓信息
  • 在定时任务中使用资金和持仓信息决策,并进行交易
function [Context] = main(Context,Event)
%% 编写策略
% 开盘如果没有持仓,则买入0.8倍可用资金的平安银行股票
% 收盘检查可用持仓,如果有可用仓,则全部卖出
% 初始化操作
if Event.Init.flag==1
    schedule('algo01', '1d', '09:30:00');
    schedule('algo02', '1d', '14:55:00');
    Context.userdata.symbol = 'SZSE.000001';                             %userdata,设定用户自定义的全局变量
    return
end
%% 定时任务处理逻辑
symbol = Context.userdata.symbol;
[position] = get_position();                                                %position字段和info说明一一对应
ind = strcmp(position(:,3),symbol);
if  Event.algo01.flag==1
    % 查询资金,买入当前资金的0.1的平安银行股票
    [cash]= get_cash();                                                     %cash字段和info说明一一对应
    if sum(ind)==0                                                          %没有仓位则开仓
        [order]=order_value(symbol, 0.1*cash{2,9}, 1, 2,1,0);               %标的,资金,买入,市价,开仓,价格
    end
end
if  Event.algo02.flag==1
    % 查询持仓,持有平安银行,且为亏损的则清仓
    if sum(ind)>0&&position{ind,15}==0
        [order]=order_volume(symbol, position{ind,14}, 2, 2,2,0);           %标的,数量,卖出,市价,平仓,价格
    end
end
end

设定策略运行参数

  • 策略运行必要参数:登录身份信息(token),策略身份信息(strategy_id)为必填信息,可由终端自动生成
  • 回测参数用于控制回测方式运行的起止时间、复权方式、资金、交易信息、缓存等,有默认值
  • 服务器地址默认本机地址,需要分机器部署时才需要指定填写
%% 设置策略运行参数
strategy_set.strategy_id = '';
strategy_set.token = '';
strategy_set.mode = 'MODE_BACKTEST';                                        % MODE_LIVE(实时)=1,MODE_BACKTEST(回测) =2
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

仅提取数据

  • 设置 token 信息,用于登录身份认证
  • 使用提数接口提取数据
set_token('xxxxx')
% 获取财务数据(表名,标的名,开始时间,结束时间,表字段)
get_fundamentals('trading_derivative_indicator',{ 'SHSE.600000','SZSE.000001'}, '2018-04-01', '2018-08-01',  {'TCLOSE','NEGOTIABLEMV','TOTMKTCAP','TURNRATE'})

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

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

发布评论

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