C#画K线实现加载均线(5日,10日)

这篇博客介绍了如何在C#中实现加载K线图并绘制5日和10日均线。通过按钮事件触发查询,获取指定数量的数据,然后利用Graphics对象画出K线及均线,同时展示了计算最高价、最低价以及等分横纵轴的方法。

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

在这里插入图片描述
//按钮加载K线
private void button1_Click(object sender, EventArgs e)
{
int count = int.Parse(this.comboBox1.Text.Trim());
half = count;
string jintian = DateTime.Now.ToShortDateString().ToString();
curdate = jintian;
begindate = jintian;
this.Refresh();
string sql = “select top " + count + " begintime,dayopen,dayclose,dayhigh,daylow,day5,day10 from zhy880301 where begintime<=’” + jintian + “’ order by begintime desc”;
huatu(sql, count);
label1.Text = curdate;
}
//画K线方法
private void huatu(string sql,int num)
{
Graphics g = CreateGraphics();
Pen p = new Pen(Color.Red, 1);//上涨
Pen p1 = new Pen(Color.Green, 1);//下跌
Pen p2 = new Pen(Color.Black, 1);
Pen p3 = new Pen(Color.Blue, 1);
Point[] pointList5;//用来绘制曲线图的关键点,依次将这些点连接起来即得到曲线图(Ma5)
Point[] pointList10;
DataSet ds = null;
DataTable dt = null;
ds = db.getds(sql, “mminfo”);
dt = ds.Tables[0];
pointList5 = new Point[dt.Rows.Count];//初始化坐标数组
pointList10 = new Point[dt.Rows.Count];//初始化坐标数组
int width = 1050;
int height = 400;
int Kwidth = width / dt.Rows.Count - 10;
g.DrawRectangle(p, 80, 80, width, height);
//k线开始
Font myFont = new Font(“微软雅黑”, 8);
string begindate1 = null;
string overdate1=dt.Rows[dt.Rows.Count-1][“begintime”].ToString();
overdate =overdate1.Substring(0,overdate1.IndexOf(" “));
string begindate2 = dt.Rows[0][“begintime”].ToString();
begindate = begindate2.Substring(0, begindate2.IndexOf(” "));
decimal high = (decimal)dt.Compute(“Max(dayhigh)”, null);//选择的K线组合中最高价
decimal low = (decimal)dt.Compute(“Min(daylow)”, null);//选择的K线组合中最低价
decimal hhigh = Math.Floor(high);
decimal llow = Math.Floor(low);
float llow1 = float.Parse(llow.ToString());
int changdu = width / dt.Rows.Count;//横轴每个日期的长度
decimal hlow = hhigh - llow;//纵轴总共差价
decimal oneprice = hlow / 10;
float onepoint = float.Parse((height / hlow).ToString());//单个价格所占的纵轴坐标
for (int i = 0; i < dt.Rows.Count; i++)//横轴时间
{
g.DrawLine(p, width + 80 - changdu * (i + 1) + Kwidth / 2, height + 80, width +

``` { —— 调整估值逻辑 —— } DNP_NORM := IF(FINANCE(33) > 0 AND FINANCE(1) > 0, MAX(C/((FINANCE(33)*FINANCE(34))/IF(FINANCE(1)!=0,FINANCE(1),1E-6)),1E-6), 9999); DNP := IF(FINANCE(33) > FINANCE(34)*0.15, DNP_NORM*MA((C-REF(C,21))/REF(C,21)*100,21), IF(DNP_NORM < 9999,DNP_NORM,9999)); PB_RATE := IF(FINANCE(5)/IF(FINANCE(1)!=0,FINANCE(1),1E-6) > 0.15, (C/IF(FINANCE(5)!=0,FINANCE(5),1E-6))*SQRT(MAX(FINANCE(33)/IF(FINANCE(1)!=0,FINANCE(1),1E-6),0)), 9999); PEG := DNP/EMA(MAX(FINANCE(54)/FINANCE(34)*100,0.15),8); { —— 技术指标优化 —— } IND_RS := EMA(((C-REF(C,21))/REF(C,21))/((INDEXC-REF(INDEXC,21))/REF(INDEXC,21))*2.618,13)*CORR(C,INDEXC,55); { —— 波动率模块 —— } VOLAT := EMA(STD(C,34)/EMA(C,34),55)*SQRT(252); VAR_P := IF(VOLAT<0.12,144,IF(VOLAT<0.18,89,IF(VOLAT<0.25,55,34))); FST_L := LLVBARS(C,VAR_P)*0.618 + HHVBARS(C,VAR_P)*0.382; SLW_L := CEILING(VAR_P*1.618*VOLAT/0.2); SGN_L := IF(VAR_P<=34,5,IF(VAR_P<=89,8,13)); { —— 资金流优化 —— } MAIN_F := (L2_AMO(0,2)+L2_AMO(1,1)-L2_AMO(0,3))/CAPITAL*VOLAT/0.2; FUND_T := EMA(MAIN_F,5)*2.236 + EMA(MAIN_F,13)*1.618 - EMA(MAIN_F,34)*0.618; MNY_TR := SUM(MAIN_F>0.06,5)>=4 AND SLOPE(FUND_T,5)>0.05 AND (HHV(FUND_T,13)-LLV(FUND_T,13))/LLV(FUND_T,13)<0.3; HT_IDX := EMA(COUNT(C=ZTPRICE(REF(C,1),0.1),21)/21*VOL/CAPITAL,5)*3 + FINANCE(25)/FINANCE(1)*2 + L2_AMO(0,2)/CAPITAL*1.5; { —— 多周期共振 —— } MTH_MA := EMA(C,610)*0.8 + EMA(C,144)*0.2; MTH_TR := C>MTH_MA*1.08 AND SLOPE(MTH_MA,8)>0.005 AND C>EMA(C,233); WK_D := EMA(C,55)-EMA(C,233); WK_EA := EMA(WK_D,34); WK_MCD := CROSS(WK_D,WK_EA) AND WK_D>0 AND WK_D>EMA(WK_D,21); DAY_B := C>HHV(H,55)*0.997 AND V>MA(V,89)*1.8 AND ABS((C-L)/L)<0.015 AND (O-L)/(H-L)>0.618; DAY_RS := RSI(5,13,34)>75 AND RSI(13,34,55)>RSI(5,13,34)*1.05; { —— 分钟周期模块 —— } M60_BRK := C#MIN60>HHV(H,144)#MIN60*0.995 AND V#MIN60>MA(V,89)#MIN60*1.5 AND C#MIN60/DYNAINFO(11)>1.08; M60_KDJ := CROSS(K#MIN60,D#MIN60) AND J#MIN60>85 AND J#MIN60>REF(J#MIN60,8)*1.3; { —— 风险控制模块 —— } DBT_FLT := FINANCE(42)/FINANCE(1)<INDBLOCK(25)/100; CSH_FLW := FINANCE(25)/FINANCE(1)>INDBLOCK(75)/100; BTA_FLT := BETWEEN(SLOPE(C/INDEXC,144),0.9,1.1) AND CORR(C,INDEXC,89)>0.6; { —— 信号合成模块 —— } STR_SIG := MTH_TR AND IND_RS>2.2; CMP_SIG := WK_MCD AND FUND_T>0.12; TCT_SIG := DAY_B AND DAY_RS AND M60_BRK AND M60_KDJ; FN_SIG := STR_SIG AND CMP_SIG AND TCT_SIG AND DBT_FLT AND CSH_FLW AND BTA_FLT AND PEG<0.65 AND DNP<18 AND FUND_T>0.15 AND MNY_TR AND HT_IDX>2.5 AND COUNT(FN_SIG,89)=0 AND BETWEEN(TIME,93000,145700) AND DYNAINFO(17)>0.5; CLS_SIG := STR_SIG AND CMP_SIG AND C>EMA(C,89)*1.1 AND V>MA(V,144)*2.2 AND FUND_T>0.2 AND FINVALUE(0)=0; 选股条件: FN_SIG;```你的身份是高级编程技术专家,精通各类编程语言,能对编程过程中的各类问题进行分析和解答。我的问题是【我编辑通达信选股代码,你如何深度理解此代码能否选到资金持续流入,股票市场情绪启动,盘中异动启动主升浪的股票,及线盘中预警选股和盘后选股。用2018-2024年全A股周期回测验证此代码选股逻辑的准确性和胜率,评估月胜率达到多少?评估有效信号准确率达到多少?
03-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值