引言
懒是进步的原动力,懒就是寻找捷径,懒就是寻找工具,懒就是追求事半功倍,懒就是追求一劳永逸。磨刀不误砍柴功就是懒的大智慧,自动化其实就是极致的懒。
炒股是一种赚钱(kuiqian)的捷径,是那些顶尖懒人(tounao)想要寻找的“理想事业”。然而,梦想是丰满的,现实是骨感的。除了人懒这个人性外,人还有贪婪恐惧的本性在左右你的理性决策。
历经了大起大落、茫然无措,你终于找到了“去人性”才能盈利的终极“圣杯”。开悟后的你马上就可以实现睡后收入、躺赢、无人值守、自动止盈、落袋为安了。。
万事俱备、只差程序员了,编一个程序让它帮你实现:
“截断亏损,让利润奔跑”
“计划你的交易,交易你的计划”
“简单炒股,快乐生活”
然而,聪明的你懂交易不懂编码,而程序员懂编码不懂交易,沟通困难,直接用网上的小工具又有病毒木马和信息泄露甚至资金被盗的风险。还是自己动手吧!来学习AHK一行顶十行的脚本工具,自己手搓炒股工具!
本系列博文就是帮您一步一步接近梦想。
工具篇
想要自动化就要用到脚本,AutoHotkey是一个运行在Windows系统
上的,开源
的自动化脚本语言,它短小精干、开源、小巧、灵活、强大是很关键的特性。
下载请认准官网:AutoHotkey
小试牛刀
需求:给我个实现一个语音报时小助理
在日常盯盘过程中,缺少一个小助理,来提醒我们,“快要开盘啦” 、“集合竞价啦” 、“该尾盘买入啦”,就像智能音箱知道主人炒股一样,贴心语音提醒!让你提前做好操作准备,打有准备之仗,避免忙中出错。老祖宗说的好:凡事预则立,不预则废。只有掌握了“时”才能有“机”。
给我1小时,我帮你用AHK给你实现:
#Persistent
#SingleInstance force
/**
*【AHK】打造炒股利器系列——语音报时器
* 作者:liuyukuan
* 版权声明:未经授权,不得转载
* 最新版发布在:https://blog.csdn.net/liuyukuan/article/details/142388396
*/
/*
这是多行注释的示范,
和C语言类似用斜线和星号把多行文本括起来,
注释部分将不会被运行。
*/
;AHK的单行注释符号是英文分号
;AHK的赋值符号 :=
早盘下载数据:="09:00:00"
集合竞价时间:="09:15:00"
开盘前五分钟:="09:25:00"
上午开盘时间:="09:30:00"
中午收盘时间:="11:30:00"
下午开盘时间:="13:00:00"
十五分钟收盘:="14:45:00"
全天收盘时间:="15:00:00"
;创建一个文字转语音 (TTS) 的COM对象
Aladdin:=ComObjCreate("sapi.spvoice")
;设定一个每0.5秒 运行一次的定时器
SetTimer, 定时器, 500
return
;以下是 if 语句的示例
定时器:
FormatTime, 当前时间,, HH:mm:ss
if(当前时间=早盘下载数据)
{
Aladdin.Speak("早盘下载数据")
}
if(当前时间=集合竞价时间)
{
Aladdin.Speak("开始集合竞价")
}
if(当前时间=开盘前五分钟)
{
Aladdin.Speak("距开盘还有五分钟")
}
if(当前时间=上午开盘时间)
{
Aladdin.Speak("上午开盘")
}
if(当前时间=中午收盘时间)
{
Aladdin.Speak("中午收盘")
}
if(当前时间=下午开盘时间)
{
Aladdin.Speak("下午开盘")
}
if(当前时间=十五分钟收盘)
{
Aladdin.Speak("距收盘还有十五分钟")
}
if(当前时间=全天收盘时间)
{
Aladdin.Speak("全天收盘")
}
return
关键知识点
1. 注释符号
注释 是脚本中被程序忽略的那部分文本. 它们通常用于添加解释或禁用部分代码.
可以通过在行的开头使用分号来注释脚本. 例如:
; 这整行是注释.
也可以在行的末尾添加注释, 此时分号左侧必须至少有一个空格或 tab. 例如:
Run Notepad ; 这是和命令在同一行的注释.
此外, 可以使用 /*
和 */
符号注释整块代码, 但仅当它们出现在行首时才有效(空白除外), 如下例所示:
/*
MsgBox, 这行被注释掉了(禁用).
MsgBox, 常见的错误: */ 这不会结束注释.
MsgBox, 这行被注释掉了.
*/
由于脚本运行时会忽略注释, 所以它们不会影响脚本性能或占用内存.
小知识: 使用 #CommentFlag 可以把默认的注释符号(分号) 改为其他字符或字符串.
小扩展: 跑题了,请忽略
标记 | 语言 |
---|---|
-- | ada,elm,hs,lua,sql,vhdl |
; | ahk,asm,clj,el,ini,ll,red |
% | erl,hrl,pl,ps,tex |
/+,+/ | d |
/**,*/ | java,kt,rs,swift |
/*!,*/ | rs,scss |
/*,*/ | ahk,cfm,cpp,cs,css,d,dart,dot,fs,go,java,js,kt,php,pl,rs,scss,sql,swift,ts,v |
// | cfm,cpp,css,d,dart,dot,fs,go,gradle,java,js,kt,php,rs,scss,swift,ts,v,zig |
/// | d,dart,rs,swift,zig |
//! | rs |
' | bas,vb,vba |
/','/ | bas |
# | bash,cmake,coffee,cr,dot,gql,gradle,jl,nim,php,ps1,py,sh,sql,toml,yml,smali |
## | nim |
:: | bat |
* | cbl |
<!---,---> | cfm |
#_"," | clj |
#[[,]] | cmake |
#[,]# | nim |
###,### | coffee |
(*,*) | pas,fs,ml,wms |
{-,-} | elm,hs |
<!--,--> | html,xml,svg |
#=,=# | jl |
--[[,--]] | lua |
<#,#> | psl |
""",""" | py |
''',''' | py |
" | vim |
2. 赋值符号
要为变量赋值, 请使用 :=
赋值运算符,
赋值语句的格式,变量名:=
表达式
MyVar := "Some text".
赋值执行过程: 计算机先计算赋值号右边表达式的值,然后将表达式的值赋给变量名代表的变量。
小扩展 AHK的赋值符号和Pascal语言是一样的。
3. if 语句
指定在表达式计算结果为 true(真) 时执行的一个或多个语句.
If (表达式)
{
语句
}
4. 逻辑判断符号
运算符 | 说明 |
---|---|
= | 不区分大小写的等于 |
== | 区分大小写的等于 |
<> 或!= | 不等于 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
! | 逻辑非(!): 如果运算数为空或 0, 那么逻辑非的结果为 1, 这表示 “真”. 否则, 结果为 0(假). |
NOT | 逻辑非, 注意: 单词 NOT 和 ! 含义相同, 但 ! 优先级更高.允许使用连续的一元运算符, 例如 !!Var, 因为它们是按从右到左的顺序计算. |
AND 或 && | 这两个运算符都是 逻辑与 |
OR 或|| | 这两个运算符都是 逻辑或 |
5. 定时器
以指定的时间间隔自动并重复运行子程序.
6. 语音合成(TTS)
WIN操作系统内置的SpVoice类是支持语音合成(TTS)的核心类。通过SpVoice对象调用TTS引擎,从而实现朗读功能。
总结
本文简单入门下AHK:注释、赋值、if语句、逻辑运算符、定时器等基本知识,下一篇将讲讲 数组 Array
循环 for
、loop
等知识