stale_push_wlin: 操作符号标记

- ⚠️ 预算不足1手(列了也没法买,但让你知道)
- 🛒 手数达标(现金够买,可直接操作)

取自 position_advice calc_position 的实际计算结果:
  lots=0 → 预算不足 ⚠️
  lots>0 → 可以买 🛒
This commit is contained in:
知微
2026-06-24 10:47:34 +08:00
parent b229e6f0cb
commit e0b7f49c3a
4 changed files with 109 additions and 108 deletions
+69 -69
View File
@@ -301,17 +301,17 @@
{ {
"code": "000711", "code": "000711",
"name": "ST京蓝", "name": "ST京蓝",
"price": 5.06, "price": 4.96,
"cost": 0, "cost": 0,
"shares": 0, "shares": 0,
"avg_price": 0, "avg_price": 0,
"action": "盈利持有 | 目标5.38 | 止损4.91 | 买入区4.96~5.1 | 信号:放量下跌,等企稳再入", "action": "盈利持有 | 目标5.38 | 止损4.81 | 买入区4.86~5.04 | 信号:观望",
"stop_loss": 4.91, "stop_loss": 4.81,
"entry_low": 4.96, "entry_low": 4.86,
"entry_high": 5.1, "entry_high": 5.04,
"tech_snapshot": "形态:锤子线/T字线/neutral 量价:主动卖盘占优 强撑:4.86 弱撑:5.02 弱压:5.12 强压:5.38", "tech_snapshot": "形态:带下影阴线/neutral 量价:主动卖盘占优 强撑:4.86 弱撑:4.86 弱压:5.12 强压:5.38",
"timing_signal": "大盘中性,行业偏强,高估值,放量下跌,等企稳再入", "timing_signal": "观望",
"rr_ratio": 2.13, "rr_ratio": 2.8,
"status": "updated", "status": "updated",
"note": "", "note": "",
"timestamp": "2026-06-24 09:00", "timestamp": "2026-06-24 09:00",
@@ -402,7 +402,7 @@
{ {
"id": "000711_stop_loss", "id": "000711_stop_loss",
"condition": { "condition": {
"price": "<4.91" "price": "<4.81"
}, },
"action": { "action": {
"type": "sell", "type": "sell",
@@ -411,28 +411,28 @@
}, },
"priority": 0, "priority": 0,
"rationale": "止损保护本金", "rationale": "止损保护本金",
"trigger_count": 9, "trigger_count": 0,
"success_rate": null, "success_rate": null,
"last_triggered": "2026-06-24" "last_triggered": null
}, },
{ {
"id": "000711_buy_dip", "id": "000711_buy_dip",
"condition": { "condition": {
"scenario": "weak_consolidation", "scenario": "weak_consolidation",
"price": "<=5.1", "price": "<=5.04",
"price_lower": ">=4.96" "price_lower": ">=4.86"
}, },
"action": { "action": {
"type": "buy", "type": "buy",
"amount": "normal", "amount": "normal",
"limit": 4.96, "limit": 4.86,
"reason": "回调支撑买入" "reason": "回调支撑买入"
}, },
"priority": 1, "priority": 1,
"rationale": "价格回调到支撑区,弱势市场低吸", "rationale": "价格回调到支撑区,弱势市场低吸",
"trigger_count": 4, "trigger_count": 0,
"success_rate": null, "success_rate": null,
"last_triggered": "2026-06-24" "last_triggered": null
}, },
{ {
"id": "000711_breakout_chase", "id": "000711_breakout_chase",
@@ -494,9 +494,9 @@
}, },
"priority": 99, "priority": 99,
"rationale": "没有分支匹配时的默认动作", "rationale": "没有分支匹配时的默认动作",
"trigger_count": 4, "trigger_count": 0,
"success_rate": null, "success_rate": null,
"last_triggered": "2026-06-24" "last_triggered": null
} }
], ],
"last_evaluated": "2026-06-24T10:23:51.378572" "last_evaluated": "2026-06-24T10:23:51.378572"
@@ -852,9 +852,9 @@
}, },
"priority": 1, "priority": 1,
"rationale": "价格回调到支撑区,弱势市场低吸", "rationale": "价格回调到支撑区,弱势市场低吸",
"trigger_count": 1, "trigger_count": 0,
"success_rate": null, "success_rate": null,
"last_triggered": "2026-06-24" "last_triggered": null
}, },
{ {
"id": "002594_breakout_chase", "id": "002594_breakout_chase",
@@ -4906,17 +4906,17 @@
{ {
"code": "300124", "code": "300124",
"name": "汇川技术", "name": "汇川技术",
"price": 66.51, "price": 66.21,
"cost": 0, "cost": 0,
"shares": 0, "shares": 0,
"avg_price": 0, "avg_price": 0,
"action": "盈利持有 | 目标73.08 | 止损64.51 | 买入区65.18~67.84 | 信号:观望", "action": "盈利持有 | 目标72.98 | 止损64.22 | 买入区64.89~67.53 | 信号:观望",
"stop_loss": 64.51, "stop_loss": 64.22,
"entry_low": 65.18, "entry_low": 64.89,
"entry_high": 67.84, "entry_high": 67.53,
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:主动卖盘占优 强撑:60.2 弱撑:65.79 弱压:67.36 强压:73.08", "tech_snapshot": "形态:倒T线/射击之星/bearish 量价:主动卖盘占优 强撑:60.1 弱撑:65.59 弱压:67.16 强压:72.98",
"timing_signal": "观望", "timing_signal": "观望",
"rr_ratio": 3.28, "rr_ratio": 3.4,
"status": "updated", "status": "updated",
"note": "", "note": "",
"timestamp": "2026-06-24 09:01", "timestamp": "2026-06-24 09:01",
@@ -4928,7 +4928,7 @@
"position_advice": "减仓或观望", "position_advice": "减仓或观望",
"time_horizon": "观望", "time_horizon": "观望",
"created_at": "2026-06-18 17:15", "created_at": "2026-06-18 17:15",
"take_profit": 73.08, "take_profit": 72.98,
"updated_reason": "技术面重评: 止损65.78→64.82 | 形态:光头光脚阴线/bearish 量价:主动卖盘占优 强撑:61.61 弱撑:65.99 弱压:68.95 强压:73", "updated_reason": "技术面重评: 止损65.78→64.82 | 形态:光头光脚阴线/bearish 量价:主动卖盘占优 强撑:61.61 弱撑:65.99 弱压:68.95 强压:73",
"changelog": [ "changelog": [
{ {
@@ -5007,7 +5007,7 @@
{ {
"id": "300124_stop_loss", "id": "300124_stop_loss",
"condition": { "condition": {
"price": "<64.51" "price": "<64.22"
}, },
"action": { "action": {
"type": "sell", "type": "sell",
@@ -5024,26 +5024,26 @@
"id": "300124_buy_dip", "id": "300124_buy_dip",
"condition": { "condition": {
"scenario": "weak_consolidation", "scenario": "weak_consolidation",
"price": "<=67.84", "price": "<=67.53",
"price_lower": ">=65.18" "price_lower": ">=64.89"
}, },
"action": { "action": {
"type": "buy", "type": "buy",
"amount": "normal", "amount": "normal",
"limit": 65.18, "limit": 64.89,
"reason": "回调支撑买入" "reason": "回调支撑买入"
}, },
"priority": 1, "priority": 1,
"rationale": "价格回调到支撑区,弱势市场低吸", "rationale": "价格回调到支撑区,弱势市场低吸",
"trigger_count": 1, "trigger_count": 0,
"success_rate": null, "success_rate": null,
"last_triggered": "2026-06-24" "last_triggered": null
}, },
{ {
"id": "300124_breakout_chase", "id": "300124_breakout_chase",
"condition": { "condition": {
"scenario": "bullish_recovery", "scenario": "bullish_recovery",
"price": ">=73.08" "price": ">=72.98"
}, },
"action": { "action": {
"type": "buy", "type": "buy",
@@ -5077,7 +5077,7 @@
{ {
"id": "300124_take_profit", "id": "300124_take_profit",
"condition": { "condition": {
"price": ">=73.08" "price": ">=72.98"
}, },
"action": { "action": {
"type": "sell", "type": "sell",
@@ -6834,17 +6834,17 @@
{ {
"code": "601318", "code": "601318",
"name": "中国平安", "name": "中国平安",
"price": 49.32, "price": 49.46,
"cost": 0, "cost": 0,
"shares": 0, "shares": 0,
"avg_price": 0, "avg_price": 0,
"action": "盈利持有 | 目标53.69 | 止损47.84 | 买入区48.33~50.18 | 信号:观望", "action": "盈利持有 | 目标53.56 | 止损47.98 | 买入区48.47~50.21 | 信号:观望",
"stop_loss": 47.84, "stop_loss": 47.98,
"entry_low": 48.33, "entry_low": 48.47,
"entry_high": 50.18, "entry_high": 50.21,
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:主动卖盘占优 强撑:45.8 弱撑:48.61 弱压:50.46 强压:53.69", "tech_snapshot": "形态:光头光脚阴线/bearish 量价:主动卖盘占优 强撑:46.02 弱撑:48.7 弱压:50.55 强压:53.56",
"timing_signal": "观望", "timing_signal": "观望",
"rr_ratio": 2.95, "rr_ratio": 2.77,
"status": "updated", "status": "updated",
"note": "", "note": "",
"timestamp": "2026-06-24 09:01", "timestamp": "2026-06-24 09:01",
@@ -6856,7 +6856,7 @@
"position_advice": "减仓或观望", "position_advice": "减仓或观望",
"time_horizon": "观望", "time_horizon": "观望",
"created_at": "2026-06-22 11:50", "created_at": "2026-06-22 11:50",
"take_profit": 53.69, "take_profit": 53.56,
"changelog": [ "changelog": [
{ {
"date": "2026-06-22 12:01", "date": "2026-06-22 12:01",
@@ -6885,7 +6885,7 @@
{ {
"id": "601318_stop_loss", "id": "601318_stop_loss",
"condition": { "condition": {
"price": "<47.84" "price": "<47.98"
}, },
"action": { "action": {
"type": "sell", "type": "sell",
@@ -6902,26 +6902,26 @@
"id": "601318_buy_dip", "id": "601318_buy_dip",
"condition": { "condition": {
"scenario": "weak_consolidation", "scenario": "weak_consolidation",
"price": "<=50.18", "price": "<=50.21",
"price_lower": ">=48.33" "price_lower": ">=48.47"
}, },
"action": { "action": {
"type": "buy", "type": "buy",
"amount": "normal", "amount": "normal",
"limit": 48.33, "limit": 48.47,
"reason": "回调支撑买入" "reason": "回调支撑买入"
}, },
"priority": 1, "priority": 1,
"rationale": "价格回调到支撑区,弱势市场低吸", "rationale": "价格回调到支撑区,弱势市场低吸",
"trigger_count": 1, "trigger_count": 0,
"success_rate": null, "success_rate": null,
"last_triggered": "2026-06-24" "last_triggered": null
}, },
{ {
"id": "601318_breakout_chase", "id": "601318_breakout_chase",
"condition": { "condition": {
"scenario": "bullish_recovery", "scenario": "bullish_recovery",
"price": ">=53.69" "price": ">=53.56"
}, },
"action": { "action": {
"type": "buy", "type": "buy",
@@ -6955,7 +6955,7 @@
{ {
"id": "601318_take_profit", "id": "601318_take_profit",
"condition": { "condition": {
"price": ">=53.69" "price": ">=53.56"
}, },
"action": { "action": {
"type": "sell", "type": "sell",
@@ -7931,17 +7931,17 @@
{ {
"code": "688795", "code": "688795",
"name": "摩尔线程-U", "name": "摩尔线程-U",
"price": 684.99, "price": 682.02,
"cost": 0, "cost": 0,
"shares": 0, "shares": 0,
"avg_price": 0, "avg_price": 0,
"action": "盈利持有 | 目标818.98 | 止损664.44 | 买入区671.29~698.69 | 信号:观望", "action": "盈利持有 | 目标817.99 | 止损661.56 | 买入区668.38~695.66 | 信号:观望",
"stop_loss": 664.44, "stop_loss": 661.56,
"entry_low": 671.29, "entry_low": 668.38,
"entry_high": 698.69, "entry_high": 695.66,
"tech_snapshot": "形态:锤子线/T字线/bullish 量价:主动卖盘占优 强撑:563.22 弱撑:669.66 弱压:704.03 强压:818.98", "tech_snapshot": "形态:锤子线/T字线/bullish 量价:主动卖盘占优 强撑:563.22 弱撑:667.67 弱压:704.03 强压:817.99",
"timing_signal": "观望", "timing_signal": "观望",
"rr_ratio": 6.52, "rr_ratio": 6.65,
"status": "updated", "status": "updated",
"note": "", "note": "",
"timestamp": "2026-06-24 09:01", "timestamp": "2026-06-24 09:01",
@@ -7953,7 +7953,7 @@
"position_advice": "正常配置", "position_advice": "正常配置",
"time_horizon": "数月~1年", "time_horizon": "数月~1年",
"created_at": "2026-06-18 17:15", "created_at": "2026-06-18 17:15",
"take_profit": 818.98, "take_profit": 817.99,
"updated_reason": "技术信号变化: 大盘中性,行业中性,高估值,放量下跌,等企稳再入: 止损683.91→660.96 | 形态:带上影阳线/neutral 量价:主动卖盘占优 强撑:568.43 弱撑:660.96 弱压:746.15 强压:", "updated_reason": "技术信号变化: 大盘中性,行业中性,高估值,放量下跌,等企稳再入: 止损683.91→660.96 | 形态:带上影阳线/neutral 量价:主动卖盘占优 强撑:568.43 弱撑:660.96 弱压:746.15 强压:",
"changelog": [ "changelog": [
{ {
@@ -8032,7 +8032,7 @@
{ {
"id": "688795_stop_loss", "id": "688795_stop_loss",
"condition": { "condition": {
"price": "<664.44" "price": "<661.56"
}, },
"action": { "action": {
"type": "sell", "type": "sell",
@@ -8049,26 +8049,26 @@
"id": "688795_buy_dip", "id": "688795_buy_dip",
"condition": { "condition": {
"scenario": "weak_consolidation", "scenario": "weak_consolidation",
"price": "<=698.69", "price": "<=695.66",
"price_lower": ">=671.29" "price_lower": ">=668.38"
}, },
"action": { "action": {
"type": "buy", "type": "buy",
"amount": "normal", "amount": "normal",
"limit": 671.29, "limit": 668.38,
"reason": "回调支撑买入" "reason": "回调支撑买入"
}, },
"priority": 1, "priority": 1,
"rationale": "价格回调到支撑区,弱势市场低吸", "rationale": "价格回调到支撑区,弱势市场低吸",
"trigger_count": 1, "trigger_count": 0,
"success_rate": null, "success_rate": null,
"last_triggered": "2026-06-24" "last_triggered": null
}, },
{ {
"id": "688795_breakout_chase", "id": "688795_breakout_chase",
"condition": { "condition": {
"scenario": "bullish_recovery", "scenario": "bullish_recovery",
"price": ">=818.98" "price": ">=817.99"
}, },
"action": { "action": {
"type": "buy", "type": "buy",
@@ -8102,7 +8102,7 @@
{ {
"id": "688795_take_profit", "id": "688795_take_profit",
"condition": { "condition": {
"price": ">=818.98" "price": ">=817.99"
}, },
"action": { "action": {
"type": "sell", "type": "sell",
@@ -8662,5 +8662,5 @@
} }
], ],
"total": 43, "total": 43,
"regenerated_at": "2026-06-24 10:44" "regenerated_at": "2026-06-24 10:47"
} }
+33 -33
View File
@@ -26,8 +26,8 @@
"action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓", "action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓",
"timing_signal": "大盘中性,行业偏弱,蓝筹,持有" "timing_signal": "大盘中性,行业偏弱,蓝筹,持有"
}, },
"price": 415.6, "price": 416.0,
"change_pct": 0.19 "change_pct": 0.29
}, },
{ {
"code": "00981", "code": "00981",
@@ -55,8 +55,8 @@
"action_note": "⚠️盈亏比偏低(1:1.3),不建议加仓", "action_note": "⚠️盈亏比偏低(1:1.3),不建议加仓",
"timing_signal": "大盘中性,行业中性,高估值,蓝筹,持有" "timing_signal": "大盘中性,行业中性,高估值,蓝筹,持有"
}, },
"price": 84.7, "price": 84.3,
"change_pct": 8.8 "change_pct": 8.29
}, },
{ {
"code": "01088", "code": "01088",
@@ -84,8 +84,8 @@
"action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓", "action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓",
"timing_signal": "大盘中性,行业中性,蓝筹,持有" "timing_signal": "大盘中性,行业中性,蓝筹,持有"
}, },
"price": 41.36, "price": 41.32,
"change_pct": -1.66 "change_pct": -1.76
}, },
{ {
"code": "01211", "code": "01211",
@@ -113,8 +113,8 @@
"action_note": "深套持有", "action_note": "深套持有",
"timing_signal": "大盘中性,行业偏弱,蓝筹,持有" "timing_signal": "大盘中性,行业偏弱,蓝筹,持有"
}, },
"price": 74.8, "price": 75.05,
"change_pct": -1.32 "change_pct": -1.05
}, },
{ {
"code": "01478", "code": "01478",
@@ -200,8 +200,8 @@
"action_note": "深套持有", "action_note": "深套持有",
"timing_signal": "大盘中性,行业中性,高估值,持有" "timing_signal": "大盘中性,行业中性,高估值,持有"
}, },
"price": 2.32, "price": 2.33,
"change_pct": -3.33 "change_pct": -2.92
}, },
{ {
"code": "02388", "code": "02388",
@@ -258,8 +258,8 @@
"action_note": "深套持有", "action_note": "深套持有",
"timing_signal": "大盘中性,行业偏弱,蓝筹,持有" "timing_signal": "大盘中性,行业偏弱,蓝筹,持有"
}, },
"price": 98.25, "price": 98.5,
"change_pct": -0.66 "change_pct": -0.45
}, },
{ {
"code": "300035", "code": "300035",
@@ -287,8 +287,8 @@
"action_note": "深套持有", "action_note": "深套持有",
"timing_signal": "大盘中性,行业偏弱,持有" "timing_signal": "大盘中性,行业偏弱,持有"
}, },
"price": 16.17, "price": 16.11,
"change_pct": -1.16 "change_pct": -1.53
}, },
{ {
"code": "300548", "code": "300548",
@@ -316,8 +316,8 @@
"action_note": "短炒强趋势持", "action_note": "短炒强趋势持",
"timing_signal": "大盘中性,行业中性,高估值,强趋势持" "timing_signal": "大盘中性,行业中性,高估值,强趋势持"
}, },
"price": 280.5, "price": 279.01,
"change_pct": -1.93 "change_pct": -2.45
}, },
{ {
"code": "300690", "code": "300690",
@@ -345,8 +345,8 @@
"action_note": "⚠️盈亏比偏低(1:1.5),不建议加仓", "action_note": "⚠️盈亏比偏低(1:1.5),不建议加仓",
"timing_signal": "大盘中性,行业偏弱,持有" "timing_signal": "大盘中性,行业偏弱,持有"
}, },
"price": 22.78, "price": 22.77,
"change_pct": -3.6 "change_pct": -3.64
}, },
{ {
"code": "300750", "code": "300750",
@@ -374,8 +374,8 @@
"action_note": "", "action_note": "",
"timing_signal": "大盘中性,行业偏弱,蓝筹,持有" "timing_signal": "大盘中性,行业偏弱,蓝筹,持有"
}, },
"price": 391.74, "price": 391.06,
"change_pct": -0.2 "change_pct": -0.37
}, },
{ {
"code": "518880", "code": "518880",
@@ -404,7 +404,7 @@
"timing_signal": "大盘中性,行业偏弱,持有" "timing_signal": "大盘中性,行业偏弱,持有"
}, },
"price": 8.44, "price": 8.44,
"change_pct": -1.18 "change_pct": -1.16
}, },
{ {
"code": "600036", "code": "600036",
@@ -432,8 +432,8 @@
"action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓", "action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓",
"timing_signal": "大盘中性,行业偏强,低估值,蓝筹,弱势持有" "timing_signal": "大盘中性,行业偏强,低估值,蓝筹,弱势持有"
}, },
"price": 37.09, "price": 37.1,
"change_pct": -0.83 "change_pct": -0.8
}, },
{ {
"code": "600563", "code": "600563",
@@ -490,8 +490,8 @@
"action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓", "action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓",
"timing_signal": "大盘中性,行业偏强,持有" "timing_signal": "大盘中性,行业偏强,持有"
}, },
"price": 10.45, "price": 10.47,
"change_pct": -1.88 "change_pct": -1.69
}, },
{ {
"code": "601899", "code": "601899",
@@ -519,8 +519,8 @@
"action_note": "深套持有", "action_note": "深套持有",
"timing_signal": "大盘中性,行业偏弱,低估值,蓝筹,持有" "timing_signal": "大盘中性,行业偏弱,低估值,蓝筹,持有"
}, },
"price": 27.44, "price": 27.46,
"change_pct": -1.12 "change_pct": -1.05
}, },
{ {
"code": "603259", "code": "603259",
@@ -548,8 +548,8 @@
"action_note": "", "action_note": "",
"timing_signal": "大盘中性,行业偏强,低估值,持有" "timing_signal": "大盘中性,行业偏强,低估值,持有"
}, },
"price": 116.27, "price": 116.06,
"change_pct": 9.37 "change_pct": 9.17
}, },
{ {
"code": "688411", "code": "688411",
@@ -577,8 +577,8 @@
"action_note": "", "action_note": "",
"timing_signal": "持有" "timing_signal": "持有"
}, },
"price": 266.3, "price": 266.65,
"change_pct": -2.18 "change_pct": -2.05
}, },
{ {
"code": "688981", "code": "688981",
@@ -606,8 +606,8 @@
"action_note": "", "action_note": "",
"timing_signal": "大盘中性,行业中性,高估值,蓝筹,持有" "timing_signal": "大盘中性,行业中性,高估值,蓝筹,持有"
}, },
"price": 150.0, "price": 149.64,
"change_pct": 5.86 "change_pct": 5.6
} }
] ]
} }
+5 -5
View File
@@ -1284,7 +1284,7 @@
"date": "2026-06-24", "date": "2026-06-24",
"high": 68.8, "high": 68.8,
"low": 65.92, "low": 65.92,
"close": 66.51 "close": 66.21
} }
], ],
"300548": [ "300548": [
@@ -2316,7 +2316,7 @@
"date": "2026-06-24", "date": "2026-06-24",
"high": 745.2, "high": 745.2,
"low": 660.01, "low": 660.01,
"close": 684.99 "close": 682.01
} }
], ],
"688802": [ "688802": [
@@ -2465,8 +2465,8 @@
{ {
"date": "2026-06-24", "date": "2026-06-24",
"high": 5.38, "high": 5.38,
"low": 5.0, "low": 4.86,
"close": 5.06 "close": 4.97
} }
], ],
"688630": [ "688630": [
@@ -2610,7 +2610,7 @@
"date": "2026-06-24", "date": "2026-06-24",
"high": 52.43, "high": 52.43,
"low": 49.03, "low": 49.03,
"close": 49.32 "close": 49.46
} }
], ],
"002171": [ "002171": [
+2 -1
View File
@@ -426,8 +426,9 @@ def main():
) )
pfx = "" if len(code) == 6 else "HK$" pfx = "" if len(code) == 6 else "HK$"
action_tag = "⚠️" if lots == 0 else "🛒"
lines.append( lines.append(
f" {name}({code}) {pfx}{price:.2f} 买区{buy_low}~{buy_high} | " f" {action_tag} {name}({code}) {pfx}{price:.2f} 买区{buy_low}~{buy_high} | "
f"1手{lot:,.0f}元 RR={rr:.1f}{sl}{tp}\n" f"1手{lot:,.0f}元 RR={rr:.1f}{sl}{tp}\n"
f" {analysis}\n" f" {analysis}\n"
f" 技术{ss['强撑']}{ss['弱撑']}{ss['弱压']}{ss['强压']} | 信号{sig}\n" f" 技术{ss['强撑']}{ss['弱撑']}{ss['弱压']}{ss['强压']} | 信号{sig}\n"