分享

用图文和数据统计分析我的实盘交易策略1(内附策略源代码)

 新用户46322602 2023-02-18 发布于广西

原创2023-02-10 16:48·艺林七彩

实盘交易策略盘面效果图

前言

1、本文将通过实盘交易策略源代码解析为框架逐步展开讲述。

2、读者如果自行将文章中策略应用到实盘交易,笔者不对任何实盘交易结果负责。

目录

1、交易策略源代码解析说明

2、交易策略统计数据分析验证

3、交易策略源代码

正文

一、交易策略源代码解析说明

本策略是一个趋势跟踪类策略。策略内含有:个股基本情况筛选模块、策略计算基准模块、策略主体建仓区域监控-买入-持仓-卖出模块、策略效果显示输出模块、策略验证数据统计分析模块。

个股基本情况筛选模块

个股基本情况筛选模块-代码原文图

代码解析说明:

该模块通过相关参数设置实现个股基本筛选。

参数1:板块选择。该参数取值范围固定为1-6。取值为1表示选择深圳主板的股票;取值为2表示选择深圳中小板的股票;取值为3表示选择深圳创业板的股票;取值4表示选择上海主板的股票;取值5表示选择上海科创板的股票;取值6表示选择深圳和上海全部上市的A股。

参数2/3:股价上限/股价下限。该参数表示选择交易的股票在上一个交易日收盘时的股价范围。

参数4/5:市值上限/市值下限。该参数表示选择交易的股票在上一个交易日收盘时的总市值是多少亿元。

策略计算基准模块

策略计算基准模块-代码原文图

代码解析说明:

这个策略模块由1个参数控制。通过参数设置实现自适应成为短线操作策略、中线操作策略、长线操作策略。

参数5:基准值。该参数值设置越小,则操作周期越短,对应为短线操作策略;参数值设置越大,则操作周期越长,对应为长线操作策略。笔者在实盘操作中通常设置为5或者10。

策略主体建仓区域监控-买入-持仓-卖出模块

策略主体建仓区域监控-买入-持仓-卖出模块(代码原文图)

这个模块是策略的核心部分,完全按照实盘交易时的真实情况设计。实现了实盘交易从建仓区域监控->出现实盘可以买进的信号后实盘买入->买入后的持仓->实盘卖出的全过程。

参数7:投入金额。该参数表示本次买入时计划投入的金额,单位是万元。

策略效果显示输出模块

策略效果显示输出模块-代码原文图

该模块实现最终的策略效果显示在股票看盘软件的副图盘面上。详细显示出实盘交易时买入信号的买入价格,买入数量,买入成交时的金额;在持仓阶段时的持仓成本,持仓数量,持仓投入本金,持仓时浮动盈亏,持仓时浮动盈亏率。

注意卖出信号出现时为当日开盘卖出,按照实盘交易逻辑,在卖出后持仓数量为0,同时释放投入本金,卖出盈亏也就等同于当时按开盘价计算的持仓盈亏。

策略验证数据统计分析模块

策略验证数据统计分析模块-代码原文图

该模块实现对策略历史交易过程中的统计分析。通过对特定时段买入次数、卖出次数、卖出盈亏金额、统计点显示为持仓时的持仓盈亏情况来分析策略的整体表现。

统计分析模块可以单独对个股分析,可以对个人建立的股票池进行分析,可以特定分析某个行业某个板块策略的表现情况。

二、交易策略统计数据分析验证

本次统计时间段是2022年1月1日至2023年2月10日;统计范围是全市场A股。在这个时间段内出现的买入信号纳入买入次数统计;在这个时间段出现的卖出信号,同时这个卖出信号对应的买入信号也在统计时间段则纳入卖出次数统计;在统计时点2023年2月3日交易策略显示有持仓,同时对应的买入信号也在统计时间段则纳入目前有持仓的股票统计。

交易策略设置参数表

交易策略设置参数表

参数配置说明:纳入统计的股票在剔除ST股后所有的A股;建仓时股价在2元-150元区间;建仓时股票总市值在5亿-2000亿之间;基准值为默认值5,表示从短线交易策略开始执行,后续自动适应趋势跟踪;实盘计划每次买入投入5万元。

策略运行情况统计数据表

策略运行情况统计数据表

通过对2022年至今的策略运行统计分析,显示在该交易参数配置下,交易频率很高,交易胜率偏低,但是盈亏比表现还有2以上,极限收益率能到1.389%(注意:该收益率不是资金真实收益率,因为在实盘中不可能出现在同一天买入4311只股票,实际投入的资金将远低于极限投入资金,笔者在实盘运行中的收益率其实远高于极限收益率)。

三、交易策略源代码

该策略笔者用于通达信交易软件平台,读者可以自行修改运行平台。

KS:=BARSCOUNT(C) 1;{上市交易以来有效K线数,例如:日线图中表示上市交易天数}

{个股基本情况筛选模块}

STBZ:=IF(NAMEINCLUDE('ST'),0,1);{该股票目前是否为ST股}

GPDM:=STR2CON(CODE);{股票代码}

GPJG:=REF(C,1);{上一个交易K线收盘价}

ZGB:=FINANCE(1);{总股本-股}

ZSZ:=INTPART(GPJG*ZGB/10000/10000);{股票总市值-亿元}

SCXZA:=IF(GPDM>=1 AND GPDM<2000,1,IF(GPDM>=2000 AND GPDM<300000,2,IF(GPDM>=300000 AND GPDM<600000,3,IF(GPDM>=600000 AND GPDM<688000,4,IF(GPDM>=688000 AND GPDM<690000,5,0)))));

{个股所属市场表示,1-深圳主板,2-深圳中小板,3-深圳创业板,4-上海主板,5-上海科创板}

JA1A:=IF(板块选择=6,1,IF(板块选择=SCXZA,1,0));{股票所属市场选择}

JA1B:=IF(GPJG<=股价上限 AND GPJG>=股价下限,1,0);{建仓股票股价选择}

JA1C:=IF(ZSZ<=市值上限 AND ZSZ>=市值下限,1,0);{建仓股票总市值选择}

JA1D:=IF((JA1A JA1B JA1C STBZ)=4,1,0);{个股基本条件满足};

{策略计算基准模块}

JX1:=INTPART(MA(C,基准值)*100)/100;

JX2:=INTPART(MA(C,基准值*2)*100)/100;

JX3:=INTPART(MA(C,基准值*4)*100)/100;

JA2A:=IF(JX1<JX2 AND JX2<JX3,1,0);

JA2B:=IF(REF(JA2A,1)=1 AND JA2A=0,1,0);

JA3A:=IF(JX1>JX2 AND JX2>JX3,1,0);

JA3B:=IF(REF(JA3A,1)=0 AND JA3A=1,1,0);

{策略主体: 建仓区域监控-买入-持仓-卖出模块}

CSH:=IF(COUNT(JA2B=1,KS)>=2 AND COUNT(JA3B=1,KS)>=2,1,0);{个股操作框架初始化}

JC1A:=IF(CSH=1,IF(COUNT(JX1<JX2,SUMBARS(JA3B,1))=0 AND COUNT(JX2<JX3,SUMBARS(JA3B,1))=0,1,0),0);{延续基础建仓监控区}

JC1B:=IF(CSH=1,IF(JA3A=1 OR JC1A=1,1,0),0);{通用基础建仓监控区}

JC1C:=IF(REF(JC1B,1)=0 AND JC1B=1,1,0);{通用基础建仓监控区-起点}

JC2A:=IF(JX1>JX2,1,0);

JC2B:=IF(COUNT(JX1<JX2,SUMBARS(JC2A,1))=0,1,0);{通用持仓区域}

JC2C:=IF(REF(JC2B,1)=1 AND JC2B=0,1,0);

JD2D:=IF(JC2C=1,LLV(L,3),0);

JC2E:=IF(COUNT(JC2C=1,KS)>=1,IF(COUNT(C<REF(JD2D,SUMBARS(JC2C,1)-1),SUMBARS(JC2C,1))=0 AND COUNT(JC2B=1,SUMBARS(JC2C,1))=0,1,0),0);{通用延续持仓区};

JC2F:=IF(JC2B=1 OR JC2E=1,1,0);{通用持仓区域};

JK1A:=IF(JC1B=1,IF(SUMBARS(JC1C,1)<=基准值 AND SUMBARS(JA2B,1)<=2*基准值 AND COUNT(JA1D=1,SUMBARS(JC1C,1))>=1,1,0),0);{建仓监控区-收盘确认};

JK1B:=IF(REF(JK1A,1)=1,1,0);{实盘建仓监控区-开盘确认}

JK1C:=IF(REF(JK1B,1)=0 AND JK1B=1,1,0);{实盘建仓监控区-起点-开盘确认}

JK2A:=IF(JK1A=1,JX2,0);{监控区-设定预计买入价格}

JK3A:=IF(JK1B=1,IF(L<=REF(JK2A,1),1,0),0);{实盘建仓区有买入成交信号};

JK3B:=IF(JK1B=1,IF(JK3A=1,IF(O<REF(JK2A,1),O,REF(JK2A,1)),0),0);{实盘建仓区有买入成交信号-实盘成交价}

JK3C:=IF(JK1B=1,IF(JK3A=1,IF(COUNT(JK3A=1,SUMBARS(JK1C,1))=1,1,0),0),0);{设计成实盘只买入一次,实盘本次建仓区唯一买入信号};

JK4A:=IF(COUNT(JK3C=1,KS)>=1,IF(COUNT(JC2F=0,SUMBARS(JK3C,1))=0,1,0),0);{唯一建仓后-持仓区持仓区}

JK4B:=IF(JK4A=1 OR (JK4A=0 AND REF(JK4A,1)=1),1,0);

{唯一建仓后-持仓区持仓区-包含收盘时提示卖出信号K线-注意卖出设计为下一根K线开盘时以开盘价卖出}

TRE:=投入金额*10000;

JG1A:=IF(CSH=1,IF(REF(JK4B,1)=0 AND JK4B=1 AND JK3C=1,1,0),0);{实盘卖出成交信号}

JG1B:=IF(COUNT(JG1A=1,KS)>=1,IF(JK4B=1,IF(COUNT(JK4B=0,SUMBARS(JG1A,1))=0,1,0),0),0);{实盘成交后持仓区};

JG2A:=IF(JG1A=1,JK3B,0);{实盘买入成交价}

JG2B:=IF(JG1A=1,INTPART(TRE/JG2A/100)*100,0);{实盘成交数量}

JG2C:=IF(JG1A=1,JG2A*JG2B,0);{实盘买入成交金额}

JG2D:=IF(JG1B=1,REF(JG2A,SUMBARS(JG1A,1)-1),0);{持仓成本}

JG2E:=IF(JG1B=1,REF(JG2B,SUMBARS(JG1A,1)-1),0);{持仓数量}

JG2F:=IF(JG1B=1,REF(JG2C,SUMBARS(JG1A,1)-1),0);{持仓投入金额}

JG2G:=IF(JG1B=1,(C-JG2D)*JG2E,IF(REF(JG1B,1)=1 AND JG1B=0,(O-REF(JG2D,1))*REF(JG2E,1),0));{持仓浮动盈亏-包含卖出日盈亏-卖出日开盘卖出}

JG2H:=IF(JG1B=1,JG2G/JG2F*100,IF(REF(JG1B,1)=1 AND JG1B=0,JG2G/REF(JG2F,1)*100,0));{持仓浮动盈亏率-包含卖出日盈亏-卖出日开盘卖出};

{策略效果显示输出模块}

买入价格:JG2A;

买入数量:JG2B;

买入金额:JG2C;

持仓成本:JG2D;

持仓数量:JG2E;

持仓投入额:JG2F;

持仓盈亏:JG2G;

持仓盈亏率%:JG2H;

{策略验证-数据统计分析模块}

JT1A:=YEAR;

JT1B:=IF(REF(JT1A,1)<2022 AND JT1A=2022,1,0);{统计2022年至今标记点};

JT1C:=IF(COUNT(JT1B=1,KS)>=1,1,0);{统计区域};

JT2A:=IF(JT1C=1,IF(JG1A=1,1,0),0);{纳入统计的买入信号}

JT2B:=IF(JT1C=1,IF(REF(JG1B,1)=1 AND JG1B=0 AND REF(JT1C,SUMBARS(JG1A,1)-1)=1,1,0),0);{纳入统计额卖出信号};

JT2C:=DATE-1000000;

JT2D:=IF(JG1B=1,IF(REF(JT1C,SUMBARS(JG1A,1)-1)=1,1,0),0);{统计时点有持仓时纳入的清仓信号}

JT2E:=IF(JT1C=1,IF(JT2B=1,IF(JG2G>0,1,0),0),0);{纳入卖出信号统计点-卖出时收益为正的信号}

JT3A:=IF(JT2B=1,JG2G,0);

JT3B:=IF(JT1C=1,SUM(JT3A,SUMBARS(JT1B,1)),0);{统计时段有卖出信号时清仓时总收益}

JT3C:=IF(JT1C=1,COUNT(JT2A=1,SUMBARS(JT1B,1)),0);{统计时段总买入次数}

JT3D:=IF(JT1C=1,COUNT(JT2B=1,SUMBARS(JT1B,1)),0);{统计时段总买卖出次数}

JT3E:=IF(JT1C=1,IF(JT2D=1,JG2G,0),0);{在统计分时日有持仓时,按清仓处理,当次清仓收益}

JT3F:=IF(JT1C=1,COUNT(JT2E=1,SUMBARS(JT1B,1)),0);{统计时段卖出时盈利的次数};

全文完!祝各位投资者账户翻倍!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多