chengjie 3 months ago
parent
commit
783a39b7bc
3 changed files with 124 additions and 103 deletions
  1. 32 0
      stock/readfile.js
  2. 1 0
      stock/stock.txt
  3. 91 103
      stock/通达信公式卖出2.txt

+ 32 - 0
stock/readfile.js

@@ -0,0 +1,32 @@
1
+import fs from 'fs';
2
+import https from 'https'; 
3
+
4
+async function start() {
5
+    const data = fs.readFileSync("stock.txt", "utf-8");
6
+    console.log("🚀 ~ start ~ data:", data);
7
+    if (data){
8
+        const url = 'https://www.kylx365.com/api/SendWXServiceTemplateMessage?UserID=1&TemplateID=ErrorRemind&ParamStr=' + data;
9
+
10
+        // 使用 https.get 发起 GET 请求
11
+        const result = await new Promise((resolve, reject) => {
12
+            https.get(url, (res) => {
13
+                let responseData = '';
14
+                res.on('data', (chunk) => {
15
+                    responseData += chunk;
16
+                });
17
+                res.on('end', () => {
18
+                    resolve(responseData);
19
+                });
20
+            }).on('error', (err) => {
21
+                reject(err);
22
+            });
23
+        });
24
+
25
+        console.log("🚀 ~ start ~ result:", result);
26
+    }
27
+}
28
+
29
+setInterval(function(){
30
+    start();
31
+},10000);
32
+

+ 1 - 0
stock/stock.txt

@@ -0,0 +1 @@
1
+300808

+ 91 - 103
stock/通达信公式卖出2.txt

@@ -1,136 +1,124 @@
1 1
 { 持有股票名称和成本价 }
2
+BUYDATE1:=1000000+250818;
2 3
 NAME1:='300806';
3 4
 PRICE1:=23.40;
5
+
6
+BUYDATE2:=BUYDATE1;
4 7
 NAME2:='301165';
5 8
 PRICE2:=74.57;
9
+
10
+BUYDATE3:=BUYDATE1;
6 11
 NAME3:='';
7 12
 PRICE3:=0;
8 13
 
9
-MYBUYPRICE:=IF(CODELIKE(NAME1),PRICE1,IF(CODELIKE(NAME2),PRICE2,IF(CODELIKE(NAME3),PRICE3,0)));    { 买入均价,若=0则忽略基于买入价的止盈止损 }
14
+MYBUYPRICE:=IF(CODELIKE(NAME1),PRICE1,IF(CODELIKE(NAME2),PRICE2,IF(CODELIKE(NAME3),PRICE3,0))); 
15
+MYBUYDATE:=IF(CODELIKE(NAME1),BUYDATE1,IF(CODELIKE(NAME2),BUYDATE2,IF(CODELIKE(NAME3),BUYDATE3,0))); 
10 16
 
11 17
 { ===================== 参数设置 =====================}
12
-N1:=2;          { 回撤阈值系数(相对ATR的倍数) }
18
+N1_BASE:=2;     { 基础回撤阈值系数 }
13 19
 N2:=3;          { 开盘过滤时间(分钟) }
14 20
 N3:=2;          { 保守系数 }
15
-STOPLOSS:=5;    { 基础止损阈值(%),动态止损不会低于此值 }
16
-TAKEPROFIT:=10; { 基础止盈阈值(%),动态止盈不会低于此值 }
21
+N4_BASE:=1.5;   { 基础动态止盈回撤系数 }
22
+N5:=0.5;        { 大盘弱势系数 }
23
+N6:=-5;         { 集合大幅低开阈值 }
24
+N7:=0.7;        { 基础流动性阈值(%) }
25
+N7_创业板:=0.6;  { 创业板流动性阈值(%) }
26
+STOPLOSS:=5;    { 基础止损阈值(%) }
27
+TAKEPROFIT:=10; { 基础止盈阈值(%) }
28
+
29
+{ ========== 创业板特殊参数 (300/301开头股票) ========== }
30
+创业板标识 := CODELIKE('300') OR CODELIKE('301');
31
+N1 := IF(创业板标识, 2.75, N1_BASE);   { 创业板用2.75,其他用基础值 }
32
+N4 := IF(创业板标识, 2.25, N4_BASE);   { 创业板用2.25,其他用基础值 }
33
+流动性阈值 := IF(创业板标识, N7_创业板, N7);
34
+
35
+{ ===================== 时间控制 =====================}
36
+集合竞价时段 := MACHINETIME>=092500 AND MACHINETIME<=093000;
37
+上午开盘后 := MACHINETIME >= (093000 + N2*100) AND MACHINETIME <= 113000;
38
+下午开盘后 := MACHINETIME >= 130000 AND MACHINETIME <= 145500;
39
+有效时段 := 上午开盘后 OR 下午开盘后;
17 40
 
18 41
 { ===================== 基础数据 =====================}
19
-{ ATR(相对化)与日内权重 }
20
-TR1 := MAX(MAX(HIGH-LOW, ABS(REF(CLOSE,1)-HIGH)), ABS(REF(CLOSE,1)-LOW));
21
-ATR1 := MA(TR1,14);
22
-相对ATR := IF(REF(C,1)=0,0,ATR1/REF(C,1))*100;      { 相对波动率(%) }
23
-日内系数 := FROMOPEN/240;              { 0~1 的时间占比 }
24
-
25
-分时均价 := DYNAINFO(11);             { 分时均价 }
26
-基准价 := MAX(OPEN, REF(C,1));        { 取开盘与前收较高者 }
27
-有效最高价 := HHV(C, BETWEEN(FLOOR(相对ATR*10),5,30));
28
-当前回撤 := IF(基准价=0, 0, (有效最高价 - C)/基准价*100);
29
-
30
-
31
-{ ===================== 动态止盈止损(自适应波动) =====================}
32
-当前盈利 := IF(MYBUYPRICE>0,(C - MYBUYPRICE)/MYBUYPRICE*100,0);
33
-
34
-动态止损 := MAX(STOPLOSS, 1.2 * 相对ATR);      { 不低于基础止损 }
35
-动态止盈 := MAX(TAKEPROFIT, MAX(0, 2.5 * 相对ATR - 当前盈利*0.1));
42
+TR1 := MAX(MAX(H-L, ABS(REF(C,1)-H)), ABS(REF(C,1)-L));
43
+相对ATR := MA(TR1,14)/REF(C,1)*100;
44
+日内系数 := FROMOPEN/240;  
45
+分时均价 := DYNAINFO(11);          
46
+基准价 := MAX(O, REF(C,1));        
47
+
48
+{ 动态计算最高价 }
49
+{ 方法1:使用BARSLASTCOUNT检测持续状态 }
50
+持续高波动 := BARSLASTCOUNT(相对ATR > 0.5);
51
+{ 方法2:使用SUM直接计算高波动天数 }
52
+高波动天数 := SUM(相对ATR > 0.5, 100);
53
+{ 组合方法 - 确保在各种情况下都能获得有效周期 }
54
+有效周期 := IF(相对ATR > 0.5, 
55
+             MIN(MAX(持续高波动, 高波动天数), 30), 
56
+             10);
57
+有效最高价 := HHV(H, 有效周期);
58
+当前回撤 := IF(基准价>0, (有效最高价 - C)/基准价*100, 0);
59
+
60
+{ ===================== 集合竞价策略 =====================}
61
+集合竞价低开 := (O-REF(C,1))/REF(C,1)*100;
62
+集合卖出 := 集合竞价时段 AND (
63
+    (MYBUYPRICE>0 AND (O - MYBUYPRICE)/MYBUYPRICE*100 <= -STOPLOSS) 
64
+    OR 集合竞价低开 < N6
65
+);
66
+
67
+{ ===================== 动态止盈止损 =====================}
68
+当前盈利 := IF(MYBUYPRICE>0, (C - MYBUYPRICE)/MYBUYPRICE*100, 0);
69
+动态止损 := MAX(STOPLOSS, 1.2 * 相对ATR);
70
+动态止盈 := MAX(TAKEPROFIT, 当前盈利 - N4 * 相对ATR); { 使用调整后的N4 }
36 71
 
37
-{ 基于买入价的浮动盈亏(可选)}
38 72
 止损触发 := MYBUYPRICE>0 AND 当前盈利 <= -动态止损;
39 73
 止盈准备 := MYBUYPRICE>0 AND 当前盈利 >= 动态止盈;
40 74
 
41
-{ ===================== 时间控制(覆盖午休) =====================}
42
-开盘分钟后_上午 := MACHINETIME >= (093000 + N2*100) AND MACHINETIME <= 113000;
43
-开盘分钟后_下午 := MACHINETIME >= 130000 AND MACHINETIME <= 145500;
44
-有效时段 := 开盘分钟后_上午 OR 开盘分钟后_下午;
75
+{ ===================== 动态回撤阈值 =====================}
76
+动态回撤阈值 := (1 + 相对ATR/100) * N1 * (1 - 0.3*日内系数) * N3; { 使用调整后的N1 }
45 77
 
46
-{ ===================== 动态回撤阈值(相对ATR + 日内权重) =====================}
47
-动态回撤阈值 := (1.0 + 相对ATR/100) * N1 * (1 - 0.3*日内系数) * N3;
48
-{ 注:给出保守放大系数2.0,可按标的适度微调 }
49
-
50
-{ ===================== 量价与动能(精简版) =====================}
78
+{ ===================== 量价动能 =====================}
51 79
 缩量回落 := V < MA(V,20) * 0.8;
52
-DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);
53
-DEA:=EMA(DIF,9);
54
-MACD:=2*(DIF-DEA);
55
-动能转弱 := DIF < REF(DIF,1) AND MACD < 0;
56
-
57
-{ 分时均价“下破”判定}
80
+DIF := EMA(C,12)-EMA(C,26);
81
+动能转弱 := DIF < REF(DIF,1) AND MACD<0;
58 82
 下破均价 := C < 分时均价 AND REF(C,1) >= REF(分时均价,1);
59 83
 
60
-{ 假突破(精简)}
61
-BOLL_M:=MA(C,20);
62
-BOLL_U:=BOLL_M + 2*STD(C,20);
63
-假突破:=REF(C,1) > REF(BOLL_U,1) AND C < BOLL_M AND C < REF(C,1);
64
-假突破过滤:=假突破 AND (BARSTATUS=2 AND BARSCOUNT(C)>20);
65
-
66
-{ ===================== 板块动态(弱化为过滤,不做强信号) =====================}
67
-行业收盘 := HORCALC(HYBLOCK,103,2,3);
84
+{ ===================== 板块计算 =====================}
68 85
 行业涨幅 := HORCALC(HYBLOCK,105,2,3);
69
-行业成交 := HORCALC(HYBLOCK,104,2,2);
70
-
71
-行业价格变动 := 行业收盘 - REF(行业收盘,1);
72
-行业上涨均值 := SMA(MAX(行业价格变动,0),14,1);
73
-行业下跌均值 := SMA(ABS(MIN(行业价格变动,0)),14,1);
74
-RSI计算:= IF((行业上涨均值+行业下跌均值)=0,0,行业上涨均值/(行业上涨均值+行业下跌均值))*100;
75
-行业RSI:=IF(行业收盘=0,50,RSI计算);
76
-
77
-板块弱势 := 行业RSI < 50 AND 行业涨幅 < REF(行业涨幅,1)
78
-        AND 行业成交 < REF(MA(行业成交,5),1)
79
-        AND C < MA(C,60);
80
-
81
-{ ===================== 【可选】L2 主力行为 =====================}
82
-主力对倒 := (L2_AMO(1,3) > L2_AMO(1,2)*1.2 AND L2_AMO(1,2) > 0)
83
-         AND (L2_AMO(1,3)+L2_AMO(1,2)) > MA(VOL,10)*C*0.5
84
-         AND IF((ACTOUTVOL + ACTINVOL)=0,0,ABS(ACTOUTVOL - ACTINVOL)/(ACTOUTVOL + ACTINVOL)) < 0.3
85
-         AND IF(MA(VOL,10)=0,0,L2_VOL(2,3)/MA(VOL,10)) < 0.5 
86
-		 AND VOL>0;
87
-
88
-主动出货 := (L2_AMO(0,3) > L2_AMO(0,2)*2 AND L2_AMO(1,3) > L2_AMO(1,2)*1.5)
89
-         AND IF(VOL=0,0,L2_VOL(0,3)/VOL) > 0.5
90
-         AND (VOL/MA(VOL,5) > 1.5 OR VOL > MA(VOL,20)*2)
91
-         AND (C < O OR (C < REF(C,1) AND IF(C=0,0,(H - C)/C) > 0.03))
92
-         AND IF(REF(C,1)=0,0,(H - L)/REF(C,1)) > 0.06;
86
+板块弱势 := 行业涨幅 < REF(行业涨幅,1) AND 行业涨幅 < 0;
87
+
88
+{ ===================== L2信号 =====================}
89
+主力对倒 := L2_AMO(1,3) > L2_AMO(1,2)*1.2 
90
+        AND (L2_AMO(1,3)+L2_AMO(1,2)) > MA(V,10)*C*0.3;
91
+主动出货 := L2_AMO(0,3) > L2_AMO(0,2)*2 
92
+        AND L2_VOL(0,3)/V > 0.3 
93
+        AND V/MA(V,5) > 1.2;
93 94
 
94 95
 { ===================== 信号分层 =====================}
95
-{ —— 强信号(立即型)——}
96 96
 强制卖出 := 止损触发 OR 主动出货;
97 97
 
98
-{—— 组合信号(需合成 ≥2 条)——}
99
-回撤超下破均价 := (当前回撤 >= 动态回撤阈值) AND 下破均价;
100
-量价转弱 := (缩量回落 OR VOL < MA(VOL,5)) AND 动能转弱;
101
-板块弱势确认 := 板块弱势;
102
-可选_主力对倒 := 主力对倒;
103
-
104
-{ 沪深300走势 }
105
-HS300C:="399300$CLOSE";
106
-HS300H:="399300$HIGH";
107
-HS300L:="399300$LOW";
108
-HS300TR:= MAX(MAX(HS300H-HS300L, ABS(REF(HS300C,1)-HS300H)), ABS(REF(HS300C,1)-HS300L));
109
-HS300ATR:= MA(HS300TR,14)/REF(HS300C,1)*100;
110
-大盘弱势:=HS300C < REF(HS300C,1) * (1 - HS300ATR/200);  {跌超半ATR}
111
-
112
-弱信号1 := 回撤超下破均价;
113
-弱信号2 := 量价转弱;
114
-弱信号3 := 板块弱势确认;
115
-弱信号4 := 可选_主力对倒;
116
-弱信号5 := 大盘弱势;
98
+{ 大盘计算 }
99
+HS300C:="399300$C";
100
+HS300ATR:= MA(ABS(REF(HS300C,1)-HS300C),14)/REF(HS300C,1)*100;
101
+大盘弱势:=HS300C < REF(HS300C,1) * (1 - HS300ATR*N5/100);
117 102
 
118
-组合卖出 := (弱信号1*2 + 弱信号2 + 弱信号3 + 弱信号4 + 弱信号5) >= 3;
103
+弱信号1 := (当前回撤 >= 动态回撤阈值) AND 下破均价;
104
+弱信号2 := 缩量回落 AND 动能转弱;
105
+弱信号3 := 板块弱势;
106
+弱信号4 := 主力对倒;
107
+弱信号5 := 大盘弱势;
119 108
 
120
-{ —— 止盈与强/弱联动 ——}
121
-触发型止盈 := 止盈准备 AND (强制卖出 OR 组合卖出);
109
+组合卖出 := (弱信号1 + 弱信号2*2 + 弱信号3 + 弱信号4 + 弱信号5) >= 3;
122 110
 
123
-{ ===================== 最终信号与过滤 =====================}
124
-成交过滤 := (VOL > MA(VOL,5)*0.8 OR (VOL > MA(VOL,20) AND 缩量回落=0)) AND VOL < MA(VOL,20)*5;  { 允许温和缩量 }
125
-持仓天数 := IF(MYBUYPRICE>0, BARSCOUNT(C)-BARSCOUNT(IF(MYBUYPRICE>0,1,0)), 0);
111
+{ ===================== 最终信号 =====================}
112
+成交过滤 := V > MA(V,5)*流动性阈值;
113
+持仓天数 :=DATETODAY(DATE)-DATETODAY(MYBUYDATE);
126 114
 
127
-综合信号 : MYBUYPRICE>0 
128
-   		 AND (强制卖出 OR 组合卖出 OR 触发型止盈)
129
-         AND 有效时段
130
-         AND 成交过滤
131
-		 AND 持仓天数>=1 
132
-         AND NOT(假突破过滤);
115
+综合信号: MYBUYPRICE>0 AND (
116
+        集合卖出 
117
+        OR (有效时段 AND (强制卖出 OR 组合卖出))
118
+        OR (止盈准备 AND (强制卖出 OR 组合卖出))
119
+    )
120
+    AND 成交过滤
121
+    AND 持仓天数>=1;
133 122
 
134 123
 { ===================== 可视化 =====================}
135
-DRAWICON(综合信号, C, 2);
136
-STICKLINE(综合信号, O, C, 3, 0), COLORRED;
124
+DRAWICON(综合信号, L*0.98, 2);