找回密码
 加入
搜索
查看: 9979|回复: 20

[AU3基础] (已解决)为什么编辑框的数字会狂闪?

  [复制链接]
发表于 2011-10-10 16:22:52 | 显示全部楼层 |阅读模式
本帖最后由 fisher 于 2011-10-11 11:36 编辑

用AU3做了个期货的外挂,对当日权益监控。
这是收盘后截图,框内数字跳的还比较均匀,可盘中数字会狂闪,如第一个是-3.11%,盘中会从0,-2.1%等等一堆数字狂闪,最后定格在-3.11%。

这个数字的原始来源数据(图2),盘中会变,是有节拍的变化,不会狂闪。
这是为什么?是代码有问题?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2011-10-10 16:25:52 | 显示全部楼层
本帖最后由 fisher 于 2011-10-10 16:28 编辑

代码
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <SendMessage.au3>
#include <GuiButton.au3>
#include <GuiMenu.au3>


#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("WH3", 350, 40, 0, 0)
;$Form1 = GUICreate("WH3", 350, 40, 0, 0,$WS_POPUP)
WinSetOnTop("WH3", "", 1)

GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
GUISetOnEvent($GUI_EVENT_MINIMIZE, "Form1Minimize")
GUISetOnEvent($GUI_EVENT_MAXIMIZE, "Form1Maximize")
GUISetOnEvent($GUI_EVENT_RESTORE, "Form1Restore")

$Button1 = GUICtrlCreateButton("平", 190, 8, 50, 30)
GUICtrlSetFont(-1, 33, 400, 0, "MS Sans Serif")
$Button2 = GUICtrlCreateButton("清", 240, 8, 50, 30)
GUICtrlSetFont(-1, 33, 400, 0, "MS Sans Serif")
$Button3 = GUICtrlCreateButton("退", 290, 8, 50, 30)
GUICtrlSetFont(-1, 33, 400, 0, "MS Sans Serif")

GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

AdlibRegister('show', 5000)  ;每5秒监控一次资金
;Opt("GUIOnEventMode", 1)
While 1
        ;Sleep(1000)
        ;show()
        $msg = GUIGetMsg()
        Select
                Case $msg = $Button1
                        Button1Click()
                Case $msg = $Button2
                        Button2Click()
                Case $msg = $Button3
                        Button3Click()
                        ExitLoop
        EndSelect
       
WEnd


Func show()
        $Edit1 = GUICtrlCreateEdit("", 8, 8, 85, 30, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
        GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")

         
         .............
        $dryk = (Int($dqqy) - Int($sxf) / 2 - Int($qcqy)) * 100 / $qszj ;当日盈亏率
       
        GUICtrlSetData(-1, Round($dryk, 2) & '%') ;显示当日总盈亏率,以起始资金计
        ;MsgBox(0, "窗口内容", $var)
        If ($dryk < -4) Then
                MsgBox(0, "警告", $dryk)
        EndIf

        $Edit2 = GUICtrlCreateEdit("", 100, 8, 85, 30, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
        GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
        $fd = (Int($fdyk) - 4 * 50) * 100 / $qszj
        Sleep(1000)
        GUICtrlSetData(-1, Round($fd, 2) & '%') ;显示浮动盈亏率
       
EndFunc   ;==>show
 楼主| 发表于 2011-10-10 16:34:51 | 显示全部楼层
三个按钮控件,盘后调试的时候,一点击就有反应,盘中则不灵。
这是什么原因?
发表于 2011-10-10 16:36:39 | 显示全部楼层
代码不全  无法测试运行并改进  又不可能帮你重新写个   所以等高人解决吧
 楼主| 发表于 2011-10-10 16:58:27 | 显示全部楼层
光有代码不够,还得有相应期货软件,还得盘中。

实际就几行相关代码可能有问题:
AdlibRegister('show', 5000)  ;每5秒监控一次资金***除Adlib还有别的调用函数吗?
  GUICtrlSetData(-1, Round($dryk, 2) & '%') ;显示当日总盈亏率,以起始资金计***这句有问题吗?
 楼主| 发表于 2011-10-10 17:00:38 | 显示全部楼层
AdlibRegister('show', 5000)  ;每5秒监控一次资金
;Opt("GUIOnEventMode", 1)
While 1
        ;Sleep(1000)
        ;show()
        $msg = GUIGetMsg()
        Select
                Case $msg = $Button1
                        Button1Click()
                Case $msg = $Button2
                        Button2Click()
                Case $msg = $Button3
                        Button3Click()
                        ExitLoop
        EndSelect
        
WEnd

是不是因为AdlibRegister('show', 5000) ,才造成按钮控件不灵?

又要隔段时间调用数据,又要按钮反应灵,有什么好办法?
发表于 2011-10-10 17:04:58 | 显示全部楼层
每5秒创建2个EDIT?
 楼主| 发表于 2011-10-10 18:22:14 | 显示全部楼层
每5秒创建2个EDIT?
3mile 发表于 2011-10-10 17:04


本意是要两个显示框,一个显示当日盈亏,一个显示当前盈亏
     $Edit1 = GUICtrlCreateEdit("", 8, 8, 85, 30, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN))
        GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
   $Edit12.。。。。。。。。。。。。。

这两个应该放在show的外面,是这个原因造成的?
放在show的外面,貌似不闪了。明天盘中再看看
多谢

按钮的问题?
发表于 2011-10-10 20:25:35 | 显示全部楼层
show有问题
有个sleep
 楼主| 发表于 2011-10-11 11:36:13 | 显示全部楼层
每5秒创建2个EDIT?
3mile 发表于 2011-10-10 17:04



    多谢提醒

把EDIT移到外面,数字跳动正常。

按钮也正常了
发表于 2011-10-11 12:51:22 | 显示全部楼层
为什么要用;Opt("GUIOnEventMode", 1)
还要用GUIGetMsg()呢?

请参考消息模式和循环模式
 楼主| 发表于 2011-10-11 17:20:26 | 显示全部楼层
为什么要用;Opt("GUIOnEventMode", 1)
还要用GUIGetMsg()呢?

请参考消息模式和循环模式
yeqing880 发表于 2011-10-11 12:51


没用Opt("GUIOnEventMode", 1),这个被注释掉了。

实际上就两部分:
1、监控资金状况:每3-5秒读取一次数据。时间间隔太短,怕CPU受不了;超过5秒,又怕行情变化大时跟不上。
2、根据行情做相应操作。

这个大框架应该怎么建立?
发表于 2011-10-12 21:59:16 | 显示全部楼层
我写这个实时获取股票数据也是狂闪,同求解,谢谢
#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Stock000 = GUICreate("Stock000", 1024, 450, 100, 100)
GUISetState(@SW_SHOW)
AdlibRegister("nowtime", 500)
create_gg()

While 1
        Sleep(1)
        $msg = GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd

Func create_gg()
        GUISetFont(11)
        
        create_t()
        create_f()

        AdlibRegister("create_t", 5000)
        AdlibRegister("create_f", 1000 * 10)
EndFunc   ;==>create_gg

Func create_t()
        If WinActive($Stock000) Then
                $a = StringReplace(StringRegExpReplace(BinaryToString(InetRead("http://hq.sinajs.cn/list=sh600115", 1)), 'var hq_str_.+="', ''), '"', '')
                
        ;指数------------------------------------------------------------
                $zs1 = StringReplace(StringRegExpReplace(BinaryToString(InetRead("http://hq.sinajs.cn/list=sh000001,sz399001", 1)), 'var hq_str_.+="', ''), '"', '')
                $all = StringSplit($zs1, ';,', 0)
                $stock_n = ($all[0] - 1) / 32
                Dim $zs[$stock_n][33]

                For $i = 0 To $stock_n - 1
                        For $j = 0 To 31
                                $zs[$i][$j] = $all[$j + 1 + $i * 32]
                                $zs[$i][32] = ($zs[$i][3] - $zs[$i][2]) / $zs[$i][2]
                        Next
                Next
        ;指数------------------------------------------------------------
                $b = StringSplit($a, ';,', 0)

                $l1 = GUICtrlCreateLabel('时间:' & $b[31] & ' ' & $b[32], 10, 15, 200)
                $l2 = GUICtrlCreateLabel('上证指数:' & $zs[0][3] & '  涨跌:' & Round(($zs[0][3] - $zs[0][2]), 2) & ' / ' & Round((($zs[0][3] - $zs[0][2]) / $zs[0][2]) * 100, 1) & '%  ' & Round($zs[0][9] / 100000000, 2) & ' 亿', 10, 40, 380)
                $l3 = GUICtrlCreateLabel('深证指数:' & $zs[1][3] & ' 涨跌:' & Round(($zs[1][3] - $zs[1][2]), 2) & ' / ' & Round((($zs[1][3] - $zs[1][2]) / $zs[1][2]) * 100, 1) & '%  ' & Round($zs[1][9] / 100000000, 2) & ' 亿', 10, 60, 380)
                
                $l4 = GUICtrlCreateLabel($b[1] & ' ' & $b[4] & ' / ' & Round((($b[4] - $b[3]) / $b[3]) * 100, 1) & '% (' & $b[6] & ' ~ ' & $b[5] & ')成交:' & Round($b[9] / 100000000, 2) & ' 亿', 10, 100, 390)
                GUICtrlSetFont($l4, 11, 800, 4)
                
                $l5 = GUICtrlCreateLabel('卖 5(元/手)        ' & $b[30] & '          ' & Round($b[29] / 100, 0), 60, 120 + 20, 350)
                $l6 = GUICtrlCreateLabel('卖 4(元/手)        ' & $b[28] & '          ' & Round($b[27] / 100, 0), 60, 140 + 20, 350)
                $l7 = GUICtrlCreateLabel('卖 3(元/手)        ' & $b[26] & '          ' & Round($b[25] / 100, 0), 60, 160 + 20, 350)
                $l8 = GUICtrlCreateLabel('卖 2(元/手)        ' & $b[24] & '          ' & Round($b[23] / 100, 0), 60, 180 + 20, 350)
                $l9 = GUICtrlCreateLabel('卖 1(元/手)        ' & $b[22] & '          ' & Round($b[21] / 100, 0), 60, 200 + 20, 350)
                
                $l10 = GUICtrlCreateLabel('买 1(元/手)        ' & $b[12] & '          ' & Round($b[11] / 100, 0), 60, 240 + 20, 350)
                $l11 = GUICtrlCreateLabel('买 2(元/手)        ' & $b[14] & '          ' & Round($b[13] / 100, 0), 60, 260 + 20, 350)
                $l12 = GUICtrlCreateLabel('买 3(元/手)        ' & $b[16] & '          ' & Round($b[15] / 100, 0), 60, 280 + 20, 350)
                $l13 = GUICtrlCreateLabel('买 4(元/手)        ' & $b[18] & '          ' & Round($b[17] / 100, 0), 60, 300 + 20, 350)
                $l14 = GUICtrlCreateLabel('买 5(元/手)        ' & $b[20] & '          ' & Round($b[19] / 100, 0), 60, 320 + 20, 350)
        EndIf
EndFunc   ;==>create_t

Func create_f()
        $IE = ObjCreate("Shell.Explorer.2")
        GUICtrlCreateObj($IE, 420, 90, 570, 350)
        _IENavigate($IE, "http://image.sinajs.cn/newchart/min/n/sh600115.gif")

EndFunc   ;==>create_f

Func nowtime()
        $TL = @HOUR & ":" & @MIN & ":" & @SEC
        WinSetTitle($Stock000, "", $TL)
EndFunc   ;==>nowtime
发表于 2011-10-12 22:02:20 | 显示全部楼层
另问下楼主是如何从期货软件获取信息的啊?
 楼主| 发表于 2011-10-12 22:17:43 | 显示全部楼层
同花顺看行情,自编指标报警
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-20 22:33 , Processed in 0.103279 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表