BW:对于非法字符的控制

本文探讨了解决业务系统中特殊字符导致的数据质量问题。提出了包括修改PSA、使用StartRoutine替换字符、增强数据源、修改源系统数据及增强业务系统等五种解决方案,并分析了各自优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实这也是个老生常谈的问题

无非就是业务上搞出一堆乱七八糟的字符,这些字符到了BW这边,就变成了井号(#)

   

这个解决办法有这么几种:

1、直接改PSA

PSA可以修改,可是这样治标不治本,顶多是我们这边数据上载正常了,可是数据跟业务上的录入还是有差别

2、在转换中写Start Routine

贴一段其华兄的代码:

DATA: TEMP_SR_POID TYPE /BI0/OISR_POID.

   

clear TEMP_SR_POID.

TEMP_SR_POID = SOURCE_FIELDS-SR_POID.

   

if TEMP_SR_POID CN '#' .

REPLACE '#' WITH '' INTO TEMP_SR_POID.

else.

TEMP_SR_POID = TEMP_SR_POID.

   

CONDENSE TEMP_SR_POID NO-GAPS.

RESULT = TEMP_SR_POID.

ENDIF.

方法类似,不过是把'#'替换成''或者' '

也是和方法1类似,只不过是升级了一下,不用手工操作,代价就是上载的效率和传输的流程

3、增强数据源

这个方法比较惨,因为井号(#)在源系统中指不定是啥字符呢,仔细算算得有十几个,都控制的话代价比较大,不如写Start Routine,只不过一个PSA可能会上载到多个模型,就得写多个Start Routine。

4、找业务修改R3的数据

这个好,改完了BW再抽一遍完事儿,不过协调起来比较复杂

5、增强业务系统

在用户输入或者批导的时候,控制输入,当遇到这种垃圾字符的时候,就提示错误,禁止写入,这是最好的办法。

你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我正在编辑【通达信选股】代码,遇到了 【错误句 : 详细信息 : 单词最大字符数不得超过 16 个 错误起始位置 : 0 ; 长度: 0 】,请帮我检查并改正错误点补全正确代码,生成修正后完整代码。我的原始代码如下:【{===== 参数定义 =====} MACD_SLOW := 26; // MACD慢速移动平均线期数 MACD_FAST := 12; // MACD快速移动平均线期数 MACD_SIGNAL := 9; // DEA信号线期数 KDJ_SHORT := 7; // KDJ较短周期 RSI_CYCLE := 14; // RSI计算周期 BOLL_PER := 20; // 布林带周期 MOM_FAC_DAYS := 5; // 动量因子考察时间窗口 MK_CAP_THRD := 5E8; // 最低市值门槛(单位:元) VOL_THRD := 0.02; // 波动率阈值限制(改为小数形式) {===== 技术指标核心计算 =====} // MACD & DIFF 计算 DIF := EMA(CLOSE, MACD_FAST) - EMA(CLOSE, MACD_SLOW); DEA := EMA(DIF, MACD_SIGNAL); // 移动平均线组 MA5 := MA(CLOSE, 5); MA10 := MA(CLOSE, 10); MA20 := MA(CLOSE, 20); MA60 := MA(CLOSE, 60); // 成交量均值 VOL5 := MA(VOL, 5); VOL60 := MA(VOL, 60); // KDJ 指标 RSV_K := (CLOSE - LLV(LOW, KDJ_SHORT)) / (HHV(HIGH, KDJ_SHORT) - LLV(LOW, KDJ_SHORT)) * 100; K_VAL := SMA(RSV_K, 3, 1); D_VAL := SMA(K_VAL, 3, 1); // 布林带宽度(波动率) UPPER_B := MA(CLOSE, BOLL_PER) + 2 * STD(CLOSE, BOLL_PER); LOWER_B := MA(CLOSE, BOLL_PER) - 2 * STD(CLOSE, BOLL_PER); BW := (UPPER_B - LOWER_B) / MA(CLOSE, BOLL_PER) * 100; // 动量因子 MOMENTUM MOM := CLOSE / REF(CLOSE, MOM_FAC_DAYS) - 1; // 日内涨幅过滤 DC_RATE := (CLOSE - OPEN) / OPEN * 100; {===== 综合选股公式 =====} // 条件1: 周线级别均线多头排列 CON_MA_TREND := MA5 > MA10 AND MA10 > MA20 AND MA20 > MA60; // 条件2: MACD金叉+DIFF上穿DEA CON_MACD_CRSS := CROSS(DIF, DEA); // 条件3: KDJ金叉+低位确认 CON_KDJ_LOW := CROSS(K_VAL, D_VAL) AND D_VAL < 30; // 条件4: 放量突破近期高点 CON_VOL_BRKT := VOL > VOL5 * 1.2 AND VOL > VOL60 * 1.5 AND CLOSE > HHV(HIGH, 20) AND VOL > HHV(VOL, 20) * 0.8; // 条件5: 收盘阳线+日内涨幅过滤 CON_D_CLOSE_UP := CLOSE > OPEN AND BETWEEN(DC_RATE, -2, 5); // 条件6: 风险控制 CON_RISK_CTRL := BW <= VOL_THRD AND FINANCE(33) >= MK_CAP_THRD; // 条件7: 动量因子强势 CON_MOM_STRONG := MOM > 0.05; // 条件8: 威廉指标辅助 CON_WILLR_SUPP := WILLR(BOLL_PER) < -80; {===== 最终输出 =====} SELECT_STOCKS := CON_MA_TREND AND CON_MACD_CRSS AND CON_KDJ_LOW AND CON_VOL_BRKT AND CON_D_CLOSE_UP AND CON_RISK_CTRL AND CON_MOM_STRONG AND CON_WILLR_SUPP;】】
最新发布
03-18
我正在编辑【通达信选股】代码,遇到了 【错误句 : 详细信息 : 单词最大字符数不得超过 16 个 错误起始位置 : 0 ; 长度: 0】,请帮我检查并改正错误点补全正确代码,生成修正后完整代码。我的原始代码如下:【{===== 参数定义 =====} MACD_SLOW := 26; // MACD慢速移动平均线期数 MACD_FAST := 12; // MACD快速移动平均线期数 MACD_SIGNAL := 9; // DEA信号线期数 KDJ_SHORT := 7; // KDJ较短周期 RSI_CYCLE := 14; // RSI计算周期 BOLL_PER := 20; // 布林带周期 MOM_FAC_DAYS := 5; // 动量因子考察时间窗口 MK_CAP_THRD := 5E8; // 最低市值门槛(单位:元) VOL_THRD := 2%; // 波动率阈值限制 {===== 技术指标核心计算 =====} // MACD & DIFF 计算 DIF := EMA(CLOSE, MACD_FAST) - EMA(CLOSE, MACD_SLOW); DEA := EMA(DIF, MACD_SIGNAL); // 移动平均线组 MA5 := MA(CLOSE, 5); MA10 := MA(CLOSE, 10); MA20 := MA(CLOSE, 20); MA60 := MA(CLOSE, 60); // 成交量均值 VOL5 := MA(VOL, 5); VOL60 := MA(VOL, 60); // KDJ 指标 RSV_K := (CLOSE - LLV(LOW, KDJ_SHORT)) / (HHV(HIGH, KDJ_SHORT) - LLV(LOW, KDJ_SHORT)) * 100; K_VAL := SMA(RSV_K, 3, 1); D_VAL := SMA(K_VAL, 3, 1); // 布林带宽度(波动率) UPPER_B := MA(CLOSE, BOLL_PER) + 2 * STD(CLOSE, BOLL_PER); LOWER_B := MA(CLOSE, BOLL_PER) - 2 * STD(CLOSE, BOLL_PER); BW := (UPPER_B - LOWER_B) / MA(CLOSE, BOLL_PER) * 100; // 动量因子 MOMENTUM MOM := CLOSE / REF(CLOSE, MOM_FAC_DAYS) - 1; // 日内涨幅过滤 DC_RATE := (CLOSE - OPEN) / OPEN * 100; {===== 综合选股公式 =====} // 条件1: 周线级别均线多头排列 CON_MA_TREND := MA5 > MA10 AND MA10 > MA20 AND MA20 > MA60; // 条件2: MACD金叉+DIFF上穿DEA CON_MACD_CRSS := CROSS(DIF, DEA); // 条件3: KDJ金叉+低位确认 CON_KDJ_LOW := CROSS(K_VAL, D_VAL) AND D_VAL < 30; // 条件4: 放量突破近期高点 CON_VOL_BRKT := VOL > VOL5 * 1.2 AND VOL > VOL60 * 1.5 AND CLOSE > HHV(HIGH, 20) AND VOL > HHV(VOL, 20) * 0.8; // 条件5: 收盘阳线+日内涨幅过滤 CON_D_CLOSE_UP := CLOSE > OPEN AND BETWEEN(DC_RATE, -2, 5); // 条件6: 风险控制 CON_RISK_CTRL := BW <= VOL_THRD AND FINANCE(33) >= MK_CAP_THRD; // 条件7: 动量因子强势 CON_MOM_STRONG := MOM > 0.05; // 条件8: 威廉指标辅助 CON_WILLR_SUPP := WILLR(BOLL_PER) < -80; // 综合选股结果判定 STOCK_SEL_COND := CON_MA_TREND AND CON_MACD_CRSS AND CON_KDJ_LOW AND CON_VOL_BRKT AND CON_D_CLOSE_UP AND CON_RISK_CTRL AND CON_MOM_STRONG AND CON_WILLR_SUPP; // 输出最终选股列表 SELECT_STOCKS := STOCK_SEL_COND;】
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值