30天掌握Golang 教程系列 第一课 基础知识

量化大师 发表了文章 • 0 个评论 • 281 次浏览 • 2021-08-04 01:15 • 来自相关话题

基础练习:
这里有一个Golang的练习库,输入基础入门的资料。 大家可以先练习练习:
https://github.com/Rockyzsu/GolangLearning/tree/master/Go-Notes
 

基础语法是没办法绕过的,如果前期不打扎实,后期也会不断来回折腾。除非你做的项目只是一次性的,否则,磨刀不误砍柴工,还是打扎实。 把上面的github的例子弄懂,这个Go-notes的好处是,如果遇到你不懂的,可以马上查找相关的资料。如果全部都懂的话,可以进阶到第二阶段。
个人觉得还是得要多看看别人的代码,看多了,其实你写代码也会有灵感。(虽然有些人写的代码很烂,但是也可以自己做过标号,避免自己以后写出同样的代码。) 

PS: 本来我想从0开始写教程,不过网上其实也有很多教程,很多视频。 也有不少的书籍可以学。所以就没有必要重复造轮子了。
 
而实际的情况是,入门的人数需求是100个人,而进阶的需求是只有60个人,而深入理解并需要对应的教程的,可能只有20人不到。
 
所以想着写golang教程,最受欢迎的其实是hello world教程。
 
实际写起来也很容易,无法就是if - else,for, 切片,数组,通道,goroutine,结构体等。
不过对于笔者的能力提升是没有一点点用处的,当日提升知名度除外。
 
所以入门系列的基础课,我这里就一比带过。可以留一些比较容易踩到的坑。
 
当然这个基础知识不可能 第一天就全部搞定。 可以多花几天甚至一周的时间。
  查看全部
基础练习:
这里有一个Golang的练习库,输入基础入门的资料。 大家可以先练习练习:
https://github.com/Rockyzsu/GolangLearning/tree/master/Go-Notes
 

基础语法是没办法绕过的,如果前期不打扎实,后期也会不断来回折腾。除非你做的项目只是一次性的,否则,磨刀不误砍柴工,还是打扎实。 把上面的github的例子弄懂,这个Go-notes的好处是,如果遇到你不懂的,可以马上查找相关的资料。如果全部都懂的话,可以进阶到第二阶段。
个人觉得还是得要多看看别人的代码,看多了,其实你写代码也会有灵感。(虽然有些人写的代码很烂,但是也可以自己做过标号,避免自己以后写出同样的代码。) 

PS: 本来我想从0开始写教程,不过网上其实也有很多教程,很多视频。 也有不少的书籍可以学。所以就没有必要重复造轮子了。
 
而实际的情况是,入门的人数需求是100个人,而进阶的需求是只有60个人,而深入理解并需要对应的教程的,可能只有20人不到。
 
所以想着写golang教程,最受欢迎的其实是hello world教程。
 
实际写起来也很容易,无法就是if - else,for, 切片,数组,通道,goroutine,结构体等。
不过对于笔者的能力提升是没有一点点用处的,当日提升知名度除外。
 
所以入门系列的基础课,我这里就一比带过。可以留一些比较容易踩到的坑。
 
当然这个基础知识不可能 第一天就全部搞定。 可以多花几天甚至一周的时间。
 

优矿的可转债的YTM数据为空 nan

李魔佛 发表了文章 • 0 个评论 • 403 次浏览 • 2021-05-31 09:18 • 来自相关话题

获取函数:DataAPI.MktBonddGet(secID=u"",ticker=u"122560",tradeDate=u"",beginDate=u"20180301",endDate=u"20180315",field=u"",pandas="1")
注意YTM哪一列全是Nan





 
脏数据太多了,吐槽一波。 查看全部
获取函数:
DataAPI.MktBonddGet(secID=u"",ticker=u"122560",tradeDate=u"",beginDate=u"20180301",endDate=u"20180315",field=u"",pandas="1")

注意YTM哪一列全是Nan

loDPX1TA71.png

 
脏数据太多了,吐槽一波。

Ptrade策略示例

绫波丽 发表了文章 • 0 个评论 • 644 次浏览 • 2021-05-26 19:02 • 来自相关话题

策略示例
 
集合竞价追涨停策略def initialize(context):
# 初始化此策略
# 设置我们要操作的股票池, 这里我们只操作一支股票
g.security = '600570.SS'
set_universe(g.security)
#每天9:23分运行集合竞价处理函数
run_daily(context, aggregate_auction_func, time='9:23')

def aggregate_auction_func(context):
stock = g.security
#最新价
snapshot = get_snapshot(stock)
price = snapshot[stock]['last_px']
#涨停价
up_limit = snapshot[stock]['up_px']
#如果最新价不小于涨停价,买入
if float(price) >= float(up_limit):
order(g.security, 100, limit_price=up_limit)

def handle_data(context, data):
pass
tick级别均线策略def initialize(context):
# 初始化此策略
# 设置我们要操作的股票池, 这里我们只操作一支股票
g.security = '600570.SS'
set_universe(g.security)
#每3秒运行一次主函数
run_interval(context, func, seconds=3)

#盘前准备历史数据
def before_trading_start(context, data):
history = get_history(10, '1d', 'close', g.security, fq='pre', include=False)
g.close_array = history['close'].values

#当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
def func(context):

stock = g.security

#获取最新价
snapshot = get_snapshot(stock)
price = snapshot[stock]['last_px']

# 得到五日均线价格
days = 5
ma5 = get_MA_day(stock, days, g.close_array[-4:], price)
# 得到十日均线价格
days = 10
ma10 = get_MA_day(stock, days, g.close_array[-9:], price)

# 得到当前资金余额
cash = context.portfolio.cash

# 如果当前有余额,并且五日均线大于十日均线
if ma5 > ma10:
# 用所有 cash 买入股票
order_value(stock, cash)
# 记录这次买入
log.info("Buying %s" % (stock))

# 如果五日均线小于十日均线,并且目前有头寸
elif ma5 < ma10 and get_position(stock).amount > 0:
# 全部卖出
order_target(stock, 0)
# 记录这次卖出
log.info("Selling %s" % (stock))

#计算实时均线函数
def get_MA_day(stock,days,close_array,current_price):
close_sum = close_array[-(days-1):].sum()
MA = (current_price + close_sum)/days
return MA

def handle_data(context, data):
pass
双均线策略def initialize(context):
# 初始化此策略
# 设置我们要操作的股票池, 这里我们只操作一支股票
g.security = '600570.SS'
set_universe(g.security)
pass

#当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
def handle_data(context, data):
security = g.security

#得到十日历史价格
df = get_history(10, '1d', 'close', security, fq=None, include=False)

# 得到五日均线价格
ma5 = round(df['close'][-5:].mean(), 3)

# 得到十日均线价格
ma10 = round(df['close'][-10:].mean(), 3)

# 取得昨天收盘价
price = data[security]['close']

# 得到当前资金余额
cash = context.portfolio.cash

# 如果当前有余额,并且五日均线大于十日均线
if ma5 > ma10:
# 用所有 cash 买入股票
order_value(security, cash)
# 记录这次买入
log.info("Buying %s" % (security))

# 如果五日均线小于十日均线,并且目前有头寸
elif ma5 < ma10 and get_position(security).amount > 0:
# 全部卖出
order_target(security, 0)
# 记录这次卖出
log.info("Selling %s" % (security))
 macd策略

指数平滑均线函数,以price计算,可以选择收盘、开盘价等价格,N为时间周期,m用于计算平滑系数a=m/(N+1),EXPMA1为前一日值def f_expma(N,m,EXPMA1,price):
a = m/(N+1)
EXPMA2 = a * price + (1 - a)*EXPMA1
return EXPMA2 #2为后一天值

#定义macd函数,输入平滑系数参数、前一日值,输出当日值
def macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,price):
EXPMA12_2 = f_expma(N1,m,EXPMA12_1,price)
EXPMA26_2 = f_expma(N2,m,EXPMA26_1,price)
DIF2 = EXPMA12_2 - EXPMA26_2
a = m/(N3+1)
DEA2 = a * DIF2 + (1 - a)*DEA1
BAR2=2*(DIF2-DEA2)
return EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2

def initialize(context):
global init_price
init_price = None
# 获取沪深300股票
g.security = get_index_stocks('000300.SS')
#g.security = ['600570.SS']
# 设置我们要操作的股票池, 这里我们只操作一支股票
set_universe(g.security)

def handle_data(context, data):
# 获取历史数据,这里只获取了2天的数据,如果希望最终MACD指标结果更准确最好是获取
# 从股票上市至今的所有历史数据,即增加获取的天数
close_price = get_history(2, '1d', field='close', security_list=g.security)
#如果是停牌不进行计算
for security in g.security:
if data[security].is_open >0:
global init_price,EXPMA12_1,EXPMA26_1,EXPMA12_2,EXPMA26_2,DIF1,DIF2,DEA1,DEA2
if init_price is None:
init_price = close_price[security].mean()#nan和N-1个数,mean为N-1个数的均值
EXPMA12_1 = init_price
EXPMA26_1 = init_price
DIF1 = init_price
DEA1 = init_price
# m用于计算平滑系数a=m/(N+1)
m = 2.0
#设定指数平滑基期数
N1 = 12
N2 = 26
N3 = 9
EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2 = macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,close_price[security][-1])
# 取得当前价格
current_price = data[security].price
# 取得当前的现金
cash = context.portfolio.cash
# DIF、DEA均为正,DIF向上突破DEA,买入信号参考
if DIF2 > 0 and DEA2 > 0 and DIF1 < DEA1 and DIF2 > DEA2:
# 计算可以买多少只股票
number_of_shares = int(cash/current_price)
# 购买量大于0时,下单
if number_of_shares > 0:
# 以市单价买入股票,日回测时即是开盘价
order(security, +number_of_shares)
# 记录这次买入
log.info("Buying %s" % (security))
# DIF、DEA均为负,DIF向下突破DEA,卖出信号参考
elif DIF2 < 0 and DEA2 < 0 and DIF1 > DEA1 and DIF2 < DEA2 and get_position(security).amount > 0:
# 卖出所有股票,使这只股票的最终持有量为0
order_target(security, 0)
# 记录这次卖出
log.info("Selling %s" % (security))
# 将今日的值赋给全局变量作为下一次前一日的值
DEA1 = DEA2
DIF1 = DIF2
EXPMA12_1 = EXPMA12_2
EXPMA26_1 = EXPMA26_2
如果需要开通Ptrade量化接口,只需资金50W存放一到两周即可。
交易费率也很便宜,股票万一,基金万0.6, 可转债百万分之二。
量化接口不需要收取任何费用。
有意者可以扫码开户: 查看全部
策略示例
 
集合竞价追涨停策略
def initialize(context):
# 初始化此策略
# 设置我们要操作的股票池, 这里我们只操作一支股票
g.security = '600570.SS'
set_universe(g.security)
#每天9:23分运行集合竞价处理函数
run_daily(context, aggregate_auction_func, time='9:23')

def aggregate_auction_func(context):
stock = g.security
#最新价
snapshot = get_snapshot(stock)
price = snapshot[stock]['last_px']
#涨停价
up_limit = snapshot[stock]['up_px']
#如果最新价不小于涨停价,买入
if float(price) >= float(up_limit):
order(g.security, 100, limit_price=up_limit)

def handle_data(context, data):
pass

tick级别均线策略
def initialize(context):
# 初始化此策略
# 设置我们要操作的股票池, 这里我们只操作一支股票
g.security = '600570.SS'
set_universe(g.security)
#每3秒运行一次主函数
run_interval(context, func, seconds=3)

#盘前准备历史数据
def before_trading_start(context, data):
history = get_history(10, '1d', 'close', g.security, fq='pre', include=False)
g.close_array = history['close'].values

#当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
def func(context):

stock = g.security

#获取最新价
snapshot = get_snapshot(stock)
price = snapshot[stock]['last_px']

# 得到五日均线价格
days = 5
ma5 = get_MA_day(stock, days, g.close_array[-4:], price)
# 得到十日均线价格
days = 10
ma10 = get_MA_day(stock, days, g.close_array[-9:], price)

# 得到当前资金余额
cash = context.portfolio.cash

# 如果当前有余额,并且五日均线大于十日均线
if ma5 > ma10:
# 用所有 cash 买入股票
order_value(stock, cash)
# 记录这次买入
log.info("Buying %s" % (stock))

# 如果五日均线小于十日均线,并且目前有头寸
elif ma5 < ma10 and get_position(stock).amount > 0:
# 全部卖出
order_target(stock, 0)
# 记录这次卖出
log.info("Selling %s" % (stock))

#计算实时均线函数
def get_MA_day(stock,days,close_array,current_price):
close_sum = close_array[-(days-1):].sum()
MA = (current_price + close_sum)/days
return MA

def handle_data(context, data):
pass

双均线策略
def initialize(context):
# 初始化此策略
# 设置我们要操作的股票池, 这里我们只操作一支股票
g.security = '600570.SS'
set_universe(g.security)
pass

#当五日均线高于十日均线时买入,当五日均线低于十日均线时卖出
def handle_data(context, data):
security = g.security

#得到十日历史价格
df = get_history(10, '1d', 'close', security, fq=None, include=False)

# 得到五日均线价格
ma5 = round(df['close'][-5:].mean(), 3)

# 得到十日均线价格
ma10 = round(df['close'][-10:].mean(), 3)

# 取得昨天收盘价
price = data[security]['close']

# 得到当前资金余额
cash = context.portfolio.cash

# 如果当前有余额,并且五日均线大于十日均线
if ma5 > ma10:
# 用所有 cash 买入股票
order_value(security, cash)
# 记录这次买入
log.info("Buying %s" % (security))

# 如果五日均线小于十日均线,并且目前有头寸
elif ma5 < ma10 and get_position(security).amount > 0:
# 全部卖出
order_target(security, 0)
# 记录这次卖出
log.info("Selling %s" % (security))

 macd策略

指数平滑均线函数,以price计算,可以选择收盘、开盘价等价格,N为时间周期,m用于计算平滑系数a=m/(N+1),EXPMA1为前一日值
def f_expma(N,m,EXPMA1,price):
a = m/(N+1)
EXPMA2 = a * price + (1 - a)*EXPMA1
return EXPMA2 #2为后一天值

#定义macd函数,输入平滑系数参数、前一日值,输出当日值
def macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,price):
EXPMA12_2 = f_expma(N1,m,EXPMA12_1,price)
EXPMA26_2 = f_expma(N2,m,EXPMA26_1,price)
DIF2 = EXPMA12_2 - EXPMA26_2
a = m/(N3+1)
DEA2 = a * DIF2 + (1 - a)*DEA1
BAR2=2*(DIF2-DEA2)
return EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2

def initialize(context):
global init_price
init_price = None
# 获取沪深300股票
g.security = get_index_stocks('000300.SS')
#g.security = ['600570.SS']
# 设置我们要操作的股票池, 这里我们只操作一支股票
set_universe(g.security)

def handle_data(context, data):
# 获取历史数据,这里只获取了2天的数据,如果希望最终MACD指标结果更准确最好是获取
# 从股票上市至今的所有历史数据,即增加获取的天数
close_price = get_history(2, '1d', field='close', security_list=g.security)
#如果是停牌不进行计算
for security in g.security:
if data[security].is_open >0:
global init_price,EXPMA12_1,EXPMA26_1,EXPMA12_2,EXPMA26_2,DIF1,DIF2,DEA1,DEA2
if init_price is None:
init_price = close_price[security].mean()#nan和N-1个数,mean为N-1个数的均值
EXPMA12_1 = init_price
EXPMA26_1 = init_price
DIF1 = init_price
DEA1 = init_price
# m用于计算平滑系数a=m/(N+1)
m = 2.0
#设定指数平滑基期数
N1 = 12
N2 = 26
N3 = 9
EXPMA12_2,EXPMA26_2,DIF2,DEA2,BAR2 = macd(N1,N2,N3,m,EXPMA12_1,EXPMA26_1,DEA1,close_price[security][-1])
# 取得当前价格
current_price = data[security].price
# 取得当前的现金
cash = context.portfolio.cash
# DIF、DEA均为正,DIF向上突破DEA,买入信号参考
if DIF2 > 0 and DEA2 > 0 and DIF1 < DEA1 and DIF2 > DEA2:
# 计算可以买多少只股票
number_of_shares = int(cash/current_price)
# 购买量大于0时,下单
if number_of_shares > 0:
# 以市单价买入股票,日回测时即是开盘价
order(security, +number_of_shares)
# 记录这次买入
log.info("Buying %s" % (security))
# DIF、DEA均为负,DIF向下突破DEA,卖出信号参考
elif DIF2 < 0 and DEA2 < 0 and DIF1 > DEA1 and DIF2 < DEA2 and get_position(security).amount > 0:
# 卖出所有股票,使这只股票的最终持有量为0
order_target(security, 0)
# 记录这次卖出
log.info("Selling %s" % (security))
# 将今日的值赋给全局变量作为下一次前一日的值
DEA1 = DEA2
DIF1 = DIF2
EXPMA12_1 = EXPMA12_2
EXPMA26_1 = EXPMA26_2

如果需要开通Ptrade量化接口,只需资金50W存放一到两周即可。
交易费率也很便宜,股票万一,基金万0.6, 可转债百万分之二。
量化接口不需要收取任何费用。
有意者可以扫码开户:

火币登录时提示 谷歌验证码错误 无法登录

绫波丽 发表了文章 • 0 个评论 • 812 次浏览 • 2021-05-23 14:04 • 来自相关话题

安全器使用的时谷歌身份验证器,反复登录几次后一直提示谷歌验证码错误,,请重新输入。
难度凉凉了吗??
和客服聊了下,只好解绑。或者用app登录
安全器使用的时谷歌身份验证器,反复登录几次后一直提示谷歌验证码错误,,请重新输入。
难度凉凉了吗??
和客服聊了下,只好解绑。或者用app登录

coinegg.fun coinegg币蛋真垃圾 入金最低要10000

李魔佛 发表了文章 • 0 个评论 • 737 次浏览 • 2021-05-10 20:38 • 来自相关话题

 点击查看大图

请在10000-1000000之间设置金额。。。
 这样子玩,迟早没有人气的了。韭菜都去了隔壁火币平台了。
 

urtsGfHmox.png


 点击查看大图

请在10000-1000000之间设置金额。。。
 这样子玩,迟早没有人气的了。韭菜都去了隔壁火币平台了。
 

火币邀请码:9dsub

李魔佛 发表了文章 • 0 个评论 • 578 次浏览 • 2021-05-10 19:32 • 来自相关话题

或者点击链接开户:https://www.huobi.pe/zh-cn/topic/invited/?invite_code=9dsub
最近行情火爆,可以进场捞一笔就走。
 
注意,所有币都是空气,进去的人都是赌徒。如果你觉得你赌术高明,那么你就可以试试。
 
火币邀请码:9dsub
 
火币邀请码有什么用?
对于新用户,没什么用的。而对于邀请别人的人,可以获取200个火苗,说实话,这个玩意我也不知道有啥用。
 
官方的奖励:
1、好友接受邀请后,每产生一笔真实交易手续费,会产生相应比例的奖励。

2、奖励的形式以USDT或点卡或HT的形式发放到您的交易账户,USDT奖励比例为30%,点卡奖励比例为30%,HT奖励比例为30%。

3、被邀请人使用点卡交易时,邀请人实际获得的奖励将以等额的点数进行计算后发给邀请人;被邀请人使用非点卡交易且手续费为HT时,邀请人实际获得的奖励将以HT进行计算后发给邀请人;被邀请人使用非点卡交易且手续费不为HT时,邀请人实际获得的奖励将以USDT进行折合计算后发给邀请人。

4、好友交易奖励当日统计,次日晚到账;奖励额(USDT或点卡或HT)= 实际产生交易量 * 手续费比例*奖励比例。

5、邀请人享受好友交易返佣有效时长以被邀请人实际注册的时间开始进行计算,到达有效时长(730天)后您将不享受该邀请人交易产生手续费的返佣。

6、平台将以每5分钟取一次市价进行相应币种的USDT实时换算,奖励金额以实际奖励金额为准。

7、每月1号月度榜单只可以看到上月数据。

8、每日结算时间为:0:00;打款时间为次日晚十点前。

9、充提币手续费,杠杆利息不参与手续费奖励。

10、如被邀请人违反邀请奖励的相应风控规则,其手续费将不能发放给邀请人,同时,被邀请人的邀请状态变成【已无效】并且产生的奖励记录状态变成【奖励无效】。

11、单一被邀请人奖励上限为5000USDT(点卡价值与USDT锚定1:1,HT按交易时市价折合USDT),无被邀请人数量上限。

12、如有深度渠道合作意向,请联系app@huobi.com,邮件需包含火币UID、展业国家和地区、自有资源背景、简要展业计划、自我介绍、个人微信或手机号等信息。

活动如有调整,以火币全球站平台更新为准,最终解释权归火币全球站所有。
  查看全部
或者点击链接开户:https://www.huobi.pe/zh-cn/topic/invited/?invite_code=9dsub
最近行情火爆,可以进场捞一笔就走。
 
注意,所有币都是空气,进去的人都是赌徒。如果你觉得你赌术高明,那么你就可以试试。
 
火币邀请码:9dsub
 
火币邀请码有什么用?
对于新用户,没什么用的。而对于邀请别人的人,可以获取200个火苗,说实话,这个玩意我也不知道有啥用。
 
官方的奖励:
1、好友接受邀请后,每产生一笔真实交易手续费,会产生相应比例的奖励。

2、奖励的形式以USDT或点卡或HT的形式发放到您的交易账户,USDT奖励比例为30%,点卡奖励比例为30%,HT奖励比例为30%。

3、被邀请人使用点卡交易时,邀请人实际获得的奖励将以等额的点数进行计算后发给邀请人;被邀请人使用非点卡交易且手续费为HT时,邀请人实际获得的奖励将以HT进行计算后发给邀请人;被邀请人使用非点卡交易且手续费不为HT时,邀请人实际获得的奖励将以USDT进行折合计算后发给邀请人。

4、好友交易奖励当日统计,次日晚到账;奖励额(USDT或点卡或HT)= 实际产生交易量 * 手续费比例*奖励比例。

5、邀请人享受好友交易返佣有效时长以被邀请人实际注册的时间开始进行计算,到达有效时长(730天)后您将不享受该邀请人交易产生手续费的返佣。

6、平台将以每5分钟取一次市价进行相应币种的USDT实时换算,奖励金额以实际奖励金额为准。

7、每月1号月度榜单只可以看到上月数据。

8、每日结算时间为:0:00;打款时间为次日晚十点前。

9、充提币手续费,杠杆利息不参与手续费奖励。

10、如被邀请人违反邀请奖励的相应风控规则,其手续费将不能发放给邀请人,同时,被邀请人的邀请状态变成【已无效】并且产生的奖励记录状态变成【奖励无效】。

11、单一被邀请人奖励上限为5000USDT(点卡价值与USDT锚定1:1,HT按交易时市价折合USDT),无被邀请人数量上限。

12、如有深度渠道合作意向,请联系app@huobi.com,邮件需包含火币UID、展业国家和地区、自有资源背景、简要展业计划、自我介绍、个人微信或手机号等信息。

活动如有调整,以火币全球站平台更新为准,最终解释权归火币全球站所有。
 

直接买入 红利增强与易基综债 【2021-04-22】

李魔佛 发表了文章 • 0 个评论 • 488 次浏览 • 2021-04-22 13:58 • 来自相关话题

试验一下策略的灵敏度。
收盘再来更新一波。
 
### 盘后更新 ##### 
当天两个都埋伏失败。。。看看明天的情况。如果没拉升,平盘卖出,如果暴跌,则7天后选择赎回。
 
试验一下策略的灵敏度。
收盘再来更新一波。
 
### 盘后更新 ##### 
当天两个都埋伏失败。。。看看明天的情况。如果没拉升,平盘卖出,如果暴跌,则7天后选择赎回。
 

python判断可转债是否强赎

李魔佛 发表了文章 • 0 个评论 • 565 次浏览 • 2021-04-02 13:41 • 来自相关话题

占坑,后期把代码整理下放上来
占坑,后期把代码整理下放上来

PTrade新手入门教程 二

李魔佛 发表了文章 • 0 个评论 • 848 次浏览 • 2021-03-29 11:41 • 来自相关话题

1. 执行顺序:
最开始是initialize,然后是before_trading_start,然后handle_data,后来到after_trading_end
 
2. log.debug 的输出是不在控制台的。难道这个是个bug??? 官方回复:是的,除了log.info 可以输出,其他都无法输出
 
3. 在中午休息时间,handle_data 是停止不运行的,其他放在run_interval函数里面调用的也是处于停滞状态。
 
需要开通的朋友可以加微信联系:
交易费率股票万一,基金万0.6,转债百万分之二 查看全部
1. 执行顺序:
最开始是initialize,然后是before_trading_start,然后handle_data,后来到after_trading_end
 
2. log.debug 的输出是不在控制台的。难道这个是个bug??? 官方回复:是的,除了log.info 可以输出,其他都无法输出
 
3. 在中午休息时间,handle_data 是停止不运行的,其他放在run_interval函数里面调用的也是处于停滞状态。
 
需要开通的朋友可以加微信联系:
交易费率股票万一,基金万0.6,转债百万分之二

在2015年山顶5178点 开始定投所有大A股票 结果会是怎样?

李魔佛 发表了文章 • 0 个评论 • 692 次浏览 • 2021-03-29 00:41 • 来自相关话题

对于定投,一般人印象是,如果你最终结果是亏损的,那么原因就是:耐心不够,跌的时候不够定力,不敢继续加仓。

而事实真的是这样吗?

笔者使用2015年6月12日上一轮全面牛市的高点5178点,作为定投的起始点。而定投标的股票为大A所有股票。








股票池为2015年6月12日没有停牌的股票,共 2415 只。使用的量化平台是优矿。

(没错,以前股票数就才两千多只,这几年股票数接近翻倍了)def get_all_code(date):
'''
获取某天的股市运行的股票,排除停牌
'''
df=DataAPI.MktEqudAdjGet(secID=u"",ticker=u"",
tradeDate=date,
beginDate=u"",
endDate=u"",
isOpen="",
field=u"",
pandas="1")
df=df[df['turnoverValue']>0] # 停牌
return df['ticker'].tolist()

















部分股票样本数据


接着从2015年6月12日开始定投,这里笔者按照一个月定投一次,也就是22个交易日定投一次。

每次定投金额10000元。定投到2021年3月28日。

如果定投当天遇到股票停牌,则顺势延续到复牌后继续定投。

这里定投采用净值法定投,为的是让数据更加准确。因为如果按照实际定投股票,10000元的金额可能连1手的茅台也买不进去,这里计算买入的份额为=10000元/股票股价, 比如茅台的股价是2000元,那么这里买入的份额就是5股,并没按照实际股票的1手来算。这样计算得到结果更加精准。

python计算代码如下: 1import time
2import datetime
3
4stock_profit_list=
5start=time.time()
6
7today=datetime.datetime.now().strftime('%Y-%m-%d')
8
9def get_trade_date():
10 df=DataAPI.TradeCalGet(exchangeCD=u"XSHG,XSHE",
11 beginDate=high_date,
12 endDate=today,isOpen=u"1",
13 field=u"",pandas="1")
14 return df['calendarDate'].tolist()
15
16def fixed_investment(code):
17 stock_profit_dict={}
18 stock_profit_dict['code']=code
19 df=DataAPI.MktEqudAdjGet(secID=u"",ticker=code,tradeDate=u'',beginDate=high_date,endDate=today,isOpen="1",field=u"",pandas="1")
20 total_amount=0
21 invest_count=0
22 every_invest_cash=10000
23 total_money_list=list()
24 last_date=None
25 for trade_date in trade_date_list_interval:
26 trade_df = df[df['tradeDate']==trade_date]
27 if len(trade_df)>0:
28 invest_count+=1
29 price=trade_df['closePrice'].iloc[0]
30 amount=every_invest_cash/price
31 cost=invest_count*every_invest_cash
32 profit=total_amount*price/cost
33 total_money_list.append(profit)
34 total_amount=total_amount+amount
35 total_money=price*total_amount
36 last_date=trade_date
37
38
39 stock_profit_dict['profit_rate']=profit
40 stock_profit_dict['last_date']=last_date
41 stock_profit_dict['invest_count']=invest_count
42 stock_profit_dict['total_amount']=total_amount
43 stock_profit_dict['total_money']=total_money
44 stock_profit_dict['profit_list']=total_money_list
45 stock_profit_dict['cost']=cost
46 return stock_profit_dict
47
48for code in target_codes:
49 profit_dict = fixed_investment(code)
50 stock_profit_list.append(profit_dict)
51
52print(time.time()-start)
 
最终得到的数据保存在stock_profit_list变量里面。在计算过程也记录里每一个股票当前一期定投阶段的阶段收益率,组合成一个列表。

为的是倒后镜看看,曾经的历史定投收益率,也可以看看曾经的历史定投收益率的最大值。便于和现在最后一期收益率的对比。

得到数据按照profit_rate收益率排个序:profi_df_sorted = profit_df.sort_values(by='profit_rate',ascending=False)
得到下面的数据:







上面的股票熟悉不?基本都是年初那一批基金ikun们的抱团股。

定投收益率最高的是山西汾酒,收益率达到8.56,即856%,从股灾高点定投下来,到现在2021年3月28日,收益率是8倍!

其月K线如下:







牛气冲天的5年十倍股,股灾时山西汾酒的股价徘徊在21-26之间左右。如果股灾的时候采用一把梭,收益率是336/26=12.9 倍。

而采用定投方式的收益率也不差,8.56倍。

再继续看看定投收益排在倒数的







真是好家伙,亏得底裤都不见了。清一色的退市股,定投收益率基本在0.1以下,意味着投资了100元,最后就剩10元以下。

在前面计算的时候,特意加了一个数据列,定投期数和定投停止日期,也就是股票退市或者停牌导致无法交易的日子。

invest_count为定投期数,定投一次此值加1. last_date 为最后一个交易日期。倒数第一个国恒退,只交易1期,7月10日退市,等不来第2期的定投,不过也好,这样子只也不至于越陷越深。








国恒退日K
total_money 列是投资得到总金额,cost是投入的成本。投资期数越多,随着股价上涨,该金额会越高,而股价不断下跌,则该金额会越来越少。所以遇到国恒退这种股票,当期只投了10000元就无法继续投下去,还是运气比较好的。类似于止损操作了。

toal_money减去cost得到的是绝对收益。之前因为没有加这一列,可以通过以下公式计算得到:profit_df['absolute_profit']=profit_df['total_money']-profit_df['cost']
按绝对收益计算,最多的还是前面那20位个股,赚最多的山西汾酒,129W的定投金额,盈利金额达到900W。







同样倒序排一下,绝对亏损最多的,肯定也是定投期数较多的。

[图片]
亏损最多的天夏退,目前还没有完全退市,定投了114期,总亏损金额达到100W,定投总金额是110W。额,只剩10W。







它的月K线是这样的。其跌到4元多的时候还放量了,可能一堆人冲进去抄底了,然后按亏损幅度,4元跌到0.22元,亏损幅度也是94.5%,这个亏损幅度其实和在山顶29元站岗的亏损率其实没什么区别了。高手死于抄底,呵呵。

接着看看上面所有股票的定投的平均收益率:profi_df_sorted['profit_rate'].mean()
得到的收益率的平均值为:1.043,减去本金1,收益为1.043-1=0.043,也就是4.3%个点。

换句话说,如果在股票高点5178点定投全市场股票,5年多来的最后收益率为4.3%.







中位数是0.87-1=-0.13,= -13%,中位数是亏损13%,定投金额约126W,亏损金额为14W。

看到这里,笔者想要表述的是,即使是定投也需要挑选一个好标的股票或者基金,也就是择股择时能力。

如果在一个垃圾股或者基金上定投,只会让你越陷越深,亏损越来越多。假如你在定投康得新或者乐视,定投了100期,投入了不少的金额和时间,突然暴雷,然后ST,那么你会继续定投下去吗?

另外,定投也需要一定的择时能力,比如在前春节前,基金抱团股热度不减,对于大部分没有择股能力的人来说,当时是应该止盈离场的。当然,如果倒后镜看,如果有能力抓取上面的大牛股,也不一定能够把上面的8倍收益落袋而安。

上面数据有一列max_profit,total_money/cost, 也就是定投期间,获得的最大收益率。按此列排序:







在定投期间,最大收益率的是ST中安,最大收益率是14.6-1=13.6倍。最后到这个月最终定投收益率是0.67,亏损状态,0.67-1=-0.37,亏损为-37%,绝对收益absolute_profit为-29W.

排在第4是是乐视退,定投期间最大收益max_profit达到10倍,最后如果坚持定投,是亏损93%的。

如果把定投时间放在2018年1月12日,那么得到的定投收益率排名前20名是这样的:







得到不一样的前20排名,定投收益率最高的是英科医疗,疫情手套涨了10倍的大牛股。而山西汾酒跌到第10,并且收益率也只有4倍左右。而茅台也没出现在前20的榜单上。


不同的定投时间,得到的是不一样的结果。当然择股能力强的大神,就不屑定投而采用一把梭了,大神向往的是英科医疗的一年十倍,而不是十年十倍(大V组合抱团,抱团基金的组合)。


其改变定投时间的定投收益率的平均值以及中位数数据如下:







平均收益率达到了1.14-1=0.14=14%,也就是如果你在18年开始定投全市场股票,当前平均收益率是14%,不过中位数的收益率是1-1=0%,因为这两年股票大小票分化得太严重(24%的个股跌破2440的低点,指数涨41%),四分一分位的定投收益率为27%,到了中位数就为0%了。其定投收益率较2015年山顶定投也有了很大的区别。

今天就到这里吧,感觉文章太长了,本来还想把全市场的基金加进来比较的(不同时间点定投全市场所有基金),碍于篇幅原因,留在下一篇再写吧,敬请留意!
 
微信公众号:
可转债量化分析





  查看全部
对于定投,一般人印象是,如果你最终结果是亏损的,那么原因就是:耐心不够,跌的时候不够定力,不敢继续加仓。

而事实真的是这样吗?

笔者使用2015年6月12日上一轮全面牛市的高点5178点,作为定投的起始点。而定投标的股票为大A所有股票。


chrome_8oqFlYXsth.png



股票池为2015年6月12日没有停牌的股票,共 2415 只。使用的量化平台是优矿。

(没错,以前股票数就才两千多只,这几年股票数接近翻倍了)
def get_all_code(date):
'''
获取某天的股市运行的股票,排除停牌
'''
df=DataAPI.MktEqudAdjGet(secID=u"",ticker=u"",
tradeDate=date,
beginDate=u"",
endDate=u"",
isOpen="",
field=u"",
pandas="1")
df=df[df['turnoverValue']>0] # 停牌
return df['ticker'].tolist()


chrome_gvrulmavY7.png







ITIQ1MinNt.png



部分股票样本数据


接着从2015年6月12日开始定投,这里笔者按照一个月定投一次,也就是22个交易日定投一次。

每次定投金额10000元。定投到2021年3月28日。

如果定投当天遇到股票停牌,则顺势延续到复牌后继续定投。

这里定投采用净值法定投,为的是让数据更加准确。因为如果按照实际定投股票,10000元的金额可能连1手的茅台也买不进去,这里计算买入的份额为=10000元/股票股价, 比如茅台的股价是2000元,那么这里买入的份额就是5股,并没按照实际股票的1手来算。这样计算得到结果更加精准。

python计算代码如下:
 1import time
2import datetime
3
4stock_profit_list=
5start=time.time()
6
7today=datetime.datetime.now().strftime('%Y-%m-%d')
8
9def get_trade_date():
10 df=DataAPI.TradeCalGet(exchangeCD=u"XSHG,XSHE",
11 beginDate=high_date,
12 endDate=today,isOpen=u"1",
13 field=u"",pandas="1")
14 return df['calendarDate'].tolist()
15
16def fixed_investment(code):
17 stock_profit_dict={}
18 stock_profit_dict['code']=code
19 df=DataAPI.MktEqudAdjGet(secID=u"",ticker=code,tradeDate=u'',beginDate=high_date,endDate=today,isOpen="1",field=u"",pandas="1")
20 total_amount=0
21 invest_count=0
22 every_invest_cash=10000
23 total_money_list=list()
24 last_date=None
25 for trade_date in trade_date_list_interval:
26 trade_df = df[df['tradeDate']==trade_date]
27 if len(trade_df)>0:
28 invest_count+=1
29 price=trade_df['closePrice'].iloc[0]
30 amount=every_invest_cash/price
31 cost=invest_count*every_invest_cash
32 profit=total_amount*price/cost
33 total_money_list.append(profit)
34 total_amount=total_amount+amount
35 total_money=price*total_amount
36 last_date=trade_date
37
38
39 stock_profit_dict['profit_rate']=profit
40 stock_profit_dict['last_date']=last_date
41 stock_profit_dict['invest_count']=invest_count
42 stock_profit_dict['total_amount']=total_amount
43 stock_profit_dict['total_money']=total_money
44 stock_profit_dict['profit_list']=total_money_list
45 stock_profit_dict['cost']=cost
46 return stock_profit_dict
47
48for code in target_codes:
49 profit_dict = fixed_investment(code)
50 stock_profit_list.append(profit_dict)
51
52print(time.time()-start)

 
最终得到的数据保存在stock_profit_list变量里面。在计算过程也记录里每一个股票当前一期定投阶段的阶段收益率,组合成一个列表。

为的是倒后镜看看,曾经的历史定投收益率,也可以看看曾经的历史定投收益率的最大值。便于和现在最后一期收益率的对比。

得到数据按照profit_rate收益率排个序:
profi_df_sorted = profit_df.sort_values(by='profit_rate',ascending=False)

得到下面的数据:


chrome_2ssHwV7kIF.png


上面的股票熟悉不?基本都是年初那一批基金ikun们的抱团股。

定投收益率最高的是山西汾酒,收益率达到8.56,即856%,从股灾高点定投下来,到现在2021年3月28日,收益率是8倍!

其月K线如下:


chrome_5YfTfpQeGO.png


牛气冲天的5年十倍股,股灾时山西汾酒的股价徘徊在21-26之间左右。如果股灾的时候采用一把梭,收益率是336/26=12.9 倍。

而采用定投方式的收益率也不差,8.56倍。

再继续看看定投收益排在倒数的


chrome_70AmS82Klu.png


真是好家伙,亏得底裤都不见了。清一色的退市股,定投收益率基本在0.1以下,意味着投资了100元,最后就剩10元以下。

在前面计算的时候,特意加了一个数据列,定投期数和定投停止日期,也就是股票退市或者停牌导致无法交易的日子。

invest_count为定投期数,定投一次此值加1. last_date 为最后一个交易日期。倒数第一个国恒退,只交易1期,7月10日退市,等不来第2期的定投,不过也好,这样子只也不至于越陷越深。



chrome_ctuYAng8BL.png


国恒退日K
total_money 列是投资得到总金额,cost是投入的成本。投资期数越多,随着股价上涨,该金额会越高,而股价不断下跌,则该金额会越来越少。所以遇到国恒退这种股票,当期只投了10000元就无法继续投下去,还是运气比较好的。类似于止损操作了。

toal_money减去cost得到的是绝对收益。之前因为没有加这一列,可以通过以下公式计算得到:
profit_df['absolute_profit']=profit_df['total_money']-profit_df['cost']

按绝对收益计算,最多的还是前面那20位个股,赚最多的山西汾酒,129W的定投金额,盈利金额达到900W。


chrome_UQ2xMZ75cl.png


同样倒序排一下,绝对亏损最多的,肯定也是定投期数较多的。

[图片]
亏损最多的天夏退,目前还没有完全退市,定投了114期,总亏损金额达到100W,定投总金额是110W。额,只剩10W。


chrome_FVZp47vc3S.png


它的月K线是这样的。其跌到4元多的时候还放量了,可能一堆人冲进去抄底了,然后按亏损幅度,4元跌到0.22元,亏损幅度也是94.5%,这个亏损幅度其实和在山顶29元站岗的亏损率其实没什么区别了。高手死于抄底,呵呵。

接着看看上面所有股票的定投的平均收益率:
profi_df_sorted['profit_rate'].mean()

得到的收益率的平均值为:1.043,减去本金1,收益为1.043-1=0.043,也就是4.3%个点。

换句话说,如果在股票高点5178点定投全市场股票,5年多来的最后收益率为4.3%.


chrome_U2mijtKyIe.png


中位数是0.87-1=-0.13,= -13%,中位数是亏损13%,定投金额约126W,亏损金额为14W。

看到这里,笔者想要表述的是,即使是定投也需要挑选一个好标的股票或者基金,也就是择股择时能力。

如果在一个垃圾股或者基金上定投,只会让你越陷越深,亏损越来越多。假如你在定投康得新或者乐视,定投了100期,投入了不少的金额和时间,突然暴雷,然后ST,那么你会继续定投下去吗?

另外,定投也需要一定的择时能力,比如在前春节前,基金抱团股热度不减,对于大部分没有择股能力的人来说,当时是应该止盈离场的。当然,如果倒后镜看,如果有能力抓取上面的大牛股,也不一定能够把上面的8倍收益落袋而安。

上面数据有一列max_profit,total_money/cost, 也就是定投期间,获得的最大收益率。按此列排序:


chrome_vMYDUIaC00.png


在定投期间,最大收益率的是ST中安,最大收益率是14.6-1=13.6倍。最后到这个月最终定投收益率是0.67,亏损状态,0.67-1=-0.37,亏损为-37%,绝对收益absolute_profit为-29W.

排在第4是是乐视退,定投期间最大收益max_profit达到10倍,最后如果坚持定投,是亏损93%的。

如果把定投时间放在2018年1月12日,那么得到的定投收益率排名前20名是这样的:


chrome_6UAh6Vp6vE.png


得到不一样的前20排名,定投收益率最高的是英科医疗,疫情手套涨了10倍的大牛股。而山西汾酒跌到第10,并且收益率也只有4倍左右。而茅台也没出现在前20的榜单上。


不同的定投时间,得到的是不一样的结果。当然择股能力强的大神,就不屑定投而采用一把梭了,大神向往的是英科医疗的一年十倍,而不是十年十倍(大V组合抱团,抱团基金的组合)。


其改变定投时间的定投收益率的平均值以及中位数数据如下:


chrome_W3tYI5Sj74.png


平均收益率达到了1.14-1=0.14=14%,也就是如果你在18年开始定投全市场股票,当前平均收益率是14%,不过中位数的收益率是1-1=0%,因为这两年股票大小票分化得太严重(24%的个股跌破2440的低点,指数涨41%),四分一分位的定投收益率为27%,到了中位数就为0%了。其定投收益率较2015年山顶定投也有了很大的区别。

今天就到这里吧,感觉文章太长了,本来还想把全市场的基金加进来比较的(不同时间点定投全市场所有基金),碍于篇幅原因,留在下一篇再写吧,敬请留意!
 
微信公众号:
可转债量化分析

公众号二维码.jpg

 

pandas dataframe 切片与python列表切片的区别

李魔佛 发表了文章 • 0 个评论 • 1226 次浏览 • 2020-10-29 23:34 • 来自相关话题

 
有一个Dataframedf = pd.DataFrame(np.arange(16).reshape((8,2)),index=list('abcdefgh'),columns=['COL1','COL2'])COL1 COL2
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
f 10 11
g 12 13
h 14 15那么如果我用df['a':'e'] 返回的结果是:
  COL1 COL2
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9是包含e尾部的,
 
而python的切片 
a = [0,1,2,3,4,5]
a[1:5] 是不包含最后一个元素的。
 
原文链接:
http://30daydo.com/article/630
  查看全部
 
有一个Dataframe
df = pd.DataFrame(np.arange(16).reshape((8,2)),index=list('abcdefgh'),columns=['COL1','COL2'])
COL1	COL2
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
f 10 11
g 12 13
h 14 15
那么如果我用df['a':'e'] 返回的结果是:
 
	COL1	COL2
a 0 1
b 2 3
c 4 5
d 6 7
e 8 9
是包含e尾部的,
 
而python的切片 
a = [0,1,2,3,4,5]
a[1:5] 是不包含最后一个元素的。
 
原文链接:
http://30daydo.com/article/630
 

华宝油气自动化申购脚本 AutoJS

李魔佛 发表了文章 • 0 个评论 • 1963 次浏览 • 2020-09-24 23:40 • 来自相关话题

运行效果图:https://v.qq.com/x/page/u3155gvuxvt.html
 
 因为最近两周的华宝油气都呈现很大的折价,但是限购,所以拖拉机申购非常的麻烦,需要一路点击,非常的耗时间,而且容易出错,容易点重复了,导致另外一个股东号没有申购。


所以自己用appium写了个手机自动化申购的脚本,只是它的部署相当不方便,对于一般小白几乎很难独立实现。在上一篇文章中埋了个伏笔 转债水位在降低 当时还准备基于appium写个教程来着。

最近发现有一个叫auto.js的app,基于JS代码的自动化工具,可以很方便的操控手机,只需要在手机上安装一个app,然后写一段JS脚本,然后运行就可以了,部署简化了不少。

后台回复:autojs  会提供相应的app下载与源码打包。


先看运行效果图:





 
运行的视频文件下面:
https://v.qq.com/x/page/u3155gvuxvt.html
 
脚本代码入口函数:main("162411", "6", "100");其中第二个参数是申购的次数,场内的最多6个股东号,所以设置为6。

完整代码://可转债量化分析
function main(code, count, money) {
log(code, count, money);
if (!code) {
toast("请输入基金代码");
return;
}
if (!count) {
toast("股东账户数量");
return;
}
if (!money) {
toast("申购金额");
return;
}
app.launchApp("中国银河证券");
waitForPackage("com.galaxy.stock");
log("成功打开银河证券");
sleep(1000);
// 切换到【交易】tab
const tradeBtn = text("交易")
.findOne()
.parent()
.parent();
log(tradeBtn);
tradeBtn.click();

//点击【场内基金】
sleep(1000);
const internalFund = text("场内基金")
.findOnce()
.parent();
internalFund.click();

//点击【基金申购】
waitForActivity("cn.com.chinastock.trade.activity.LofActivity");
const fundPurchase = text("基金申购")
.findOnce()
.parent();
fundPurchase.click();

// 自动填信息
sleep(1000);

purchaseFund(code, count, money);
}

function purchaseFund(code, count, money) {
for (let i = 0; i < count; i++) {
log(code, count, money);
const codeInput = id("stockCode").findOne();
codeInput.click();
codeInput.setText(code);
sleep(1000);
const accountSelect = id("secuidList").findOne();
accountSelect.click();
sleep(1000);
const options = className("CheckedTextView").find();
click(options[i].bounds().left + 2, options[i].bounds().top + 2);
sleep(300);
const orderAmount = id("orderAmount")
.findOnce()
.children()[0];
log(orderAmount);
orderAmount.setText(money);
sleep(300);
id("order")
.findOnce()
.click();
sleep(6000);
id("acceptedCb")
.findOnce()
.click();
id("okBtn")
.findOnce()
.click();
sleep(6000);
click("本人已认真阅读并理解上述内容");
sleep(200);
click("我接受");
sleep(200);
click("本人已认真阅读并理解上述内容");
sleep(200)
click("我接受");
sleep(7000);
click("本人已认真阅读并理解上述内容");
sleep(200);
click("我接受");
sleep(500);
text('确认申购').findOnce().click();
sleep(1000);
text("确定")
.findOnce()
.click();

sleep(1000);
}
}

main("162411", "6", "100");[/i][/i]
[i]安装使用步骤:


安装autojs app
 [/i]
[i]手机设置无障碍模式,把autojs添加进去,一般按住app的时候会提示引导你这么操作[/i][list][*][i]打开autojs app,把上面的JS代码复制进去[/i][list][*][i]登录你的X河牌拖拉机[/i][list][*][i]在autojs app里面点击执行[/i]

[/*]
[/list]

[/*]
[/list]

[/*]
[/list]

[i] 
然后就静静的等待脚本执行完成,你的6个股东号就全部打完啦。如果你有多个证券账户,需要你退出当前的账户,然后登陆下一个账号,然后继续运行这个脚本即可。


后台回复:autojs 就可以获取autojs的app与上面的源码打包。

PS:如果你有有趣的想法要验证或者苦于没有数据无从下手,可以后台留言,一起交流,笔者会尝试帮你们验证分析。
 
关注公众号:




 [/i] 查看全部
运行效果图:https://v.qq.com/x/page/u3155gvuxvt.html
 
 因为最近两周的华宝油气都呈现很大的折价,但是限购,所以拖拉机申购非常的麻烦,需要一路点击,非常的耗时间,而且容易出错,容易点重复了,导致另外一个股东号没有申购。


所以自己用appium写了个手机自动化申购的脚本,只是它的部署相当不方便,对于一般小白几乎很难独立实现。在上一篇文章中埋了个伏笔 转债水位在降低 当时还准备基于appium写个教程来着。

最近发现有一个叫auto.js的app,基于JS代码的自动化工具,可以很方便的操控手机,只需要在手机上安装一个app,然后写一段JS脚本,然后运行就可以了,部署简化了不少。

后台回复:autojs  会提供相应的app下载与源码打包。


先看运行效果图:

微信图片_20200924201837.jpg

 
运行的视频文件下面:
https://v.qq.com/x/page/u3155gvuxvt.html
 
脚本代码入口函数:
main("162411", "6", "100");
其中第二个参数是申购的次数,场内的最多6个股东号,所以设置为6。

完整代码:
//可转债量化分析
function main(code, count, money) {
log(code, count, money);
if (!code) {
toast("请输入基金代码");
return;
}
if (!count) {
toast("股东账户数量");
return;
}
if (!money) {
toast("申购金额");
return;
}
app.launchApp("中国银河证券");
waitForPackage("com.galaxy.stock");
log("成功打开银河证券");
sleep(1000);
// 切换到【交易】tab
const tradeBtn = text("交易")
.findOne()
.parent()
.parent();
log(tradeBtn);
tradeBtn.click();

//点击【场内基金】
sleep(1000);
const internalFund = text("场内基金")
.findOnce()
.parent();
internalFund.click();

//点击【基金申购】
waitForActivity("cn.com.chinastock.trade.activity.LofActivity");
const fundPurchase = text("基金申购")
.findOnce()
.parent();
fundPurchase.click();

// 自动填信息
sleep(1000);

purchaseFund(code, count, money);
}

function purchaseFund(code, count, money) {
for (let i = 0; i < count; i++) {
log(code, count, money);
const codeInput = id("stockCode").findOne();
codeInput.click();
codeInput.setText(code);
sleep(1000);
const accountSelect = id("secuidList").findOne();
accountSelect.click();
sleep(1000);
const options = className("CheckedTextView").find();
click(options[i].bounds().left + 2, options[i].bounds().top + 2);
sleep(300);
const orderAmount = id("orderAmount")
.findOnce()
.children()[0];
log(orderAmount);
orderAmount.setText(money);
sleep(300);
id("order")
.findOnce()
.click();
sleep(6000);
id("acceptedCb")
.findOnce()
.click();
id("okBtn")
.findOnce()
.click();
sleep(6000);
click("本人已认真阅读并理解上述内容");
sleep(200);
click("我接受");
sleep(200);
click("本人已认真阅读并理解上述内容");
sleep(200)
click("我接受");
sleep(7000);
click("本人已认真阅读并理解上述内容");
sleep(200);
click("我接受");
sleep(500);
text('确认申购').findOnce().click();
sleep(1000);
text("确定")
.findOnce()
.click();

sleep(1000);
}
}

main("162411", "6", "100");[/i][/i]

[i]安装使用步骤:


安装autojs app
 
[/i]
  • [i]手机设置无障碍模式,把autojs添加进去,一般按住app的时候会提示引导你这么操作[/i][list][*][i]打开autojs app,把上面的JS代码复制进去[/i][list][*][i]登录你的X河牌拖拉机[/i][list][*][i]在autojs app里面点击执行[/i]


[/*]
[/list]

[/*]
[/list]

[/*]
[/list]

[i] 
然后就静静的等待脚本执行完成,你的6个股东号就全部打完啦。如果你有多个证券账户,需要你退出当前的账户,然后登陆下一个账号,然后继续运行这个脚本即可。


后台回复:autojs 就可以获取autojs的app与上面的源码打包。

PS:如果你有有趣的想法要验证或者苦于没有数据无从下手,可以后台留言,一起交流,笔者会尝试帮你们验证分析。
 
关注公众号:
微信图片_20200923020240.jpg

 
[/i]

个人的知识星球

李魔佛 发表了文章 • 0 个评论 • 1870 次浏览 • 2020-02-23 11:10 • 来自相关话题

最近开通了知识星球,尝试在里面分享一些量化投资套利的学习教程。在里面你可以对不懂的问题进行提问,球主会一一的耐心解答。





 
微信扫一扫加入我的知识星球
 
 
星球的第一篇文章
python获取全市场LOF基金折溢价数据并进行套利
 
 
市场是总共的LOF基金有301只(上图右下角的圈圈是所有基金的条数),而集思录上只有120只左右,所以有些溢价厉害(大于10%)的LOF基金并没有在集思录的网站上显示,这对于专注于套利的投资者来说,会损失很多潜在的套利机会。






点击查看大图

我回复了该贴后,有大量的人私信我,问我能否提供一份这个数据,或者教对方如何获取这些数据。 因为人数众多,也没有那么多精力来一一回答。毕竟不同人的水平背景不一样,逐个回答起来也很累,所以就回答了几个朋友的问题后就一一婉拒了。


然后在几个投资群里,居然也有人提到这个数据,在咨询如何才能获取到这个完整的数据,并且可以实时更新显示。 因为我的微信群昵称和集思录是一样的,所以不少人@我,我也都简单的回复了下,是使用python抓取的数据,数据保存到Mysql和MongoDB。 代码行数不多,100行都不到。
 
具体实现在星球会有完整代码。 查看全部
最近开通了知识星球,尝试在里面分享一些量化投资套利的学习教程。在里面你可以对不懂的问题进行提问,球主会一一的耐心解答。

ZSXQ_20200223_104730797.png

 
微信扫一扫加入我的知识星球
 
 
星球的第一篇文章
python获取全市场LOF基金折溢价数据并进行套利
 
 
市场是总共的LOF基金有301只(上图右下角的圈圈是所有基金的条数),而集思录上只有120只左右,所以有些溢价厉害(大于10%)的LOF基金并没有在集思录的网站上显示,这对于专注于套利的投资者来说,会损失很多潜在的套利机会。


lof.PNG

点击查看大图

我回复了该贴后,有大量的人私信我,问我能否提供一份这个数据,或者教对方如何获取这些数据。 因为人数众多,也没有那么多精力来一一回答。毕竟不同人的水平背景不一样,逐个回答起来也很累,所以就回答了几个朋友的问题后就一一婉拒了。


然后在几个投资群里,居然也有人提到这个数据,在咨询如何才能获取到这个完整的数据,并且可以实时更新显示。 因为我的微信群昵称和集思录是一样的,所以不少人@我,我也都简单的回复了下,是使用python抓取的数据,数据保存到Mysql和MongoDB。 代码行数不多,100行都不到。
 
具体实现在星球会有完整代码。

dataframe 根据日期重采样 计算个数

李魔佛 发表了文章 • 0 个评论 • 1688 次浏览 • 2019-12-19 09:07 • 来自相关话题

按照日期重新采样,计算每天的个数new_df = df.resample('D').count()
按照日期重新采样,计算每天的个数new_df = df.resample('D').count()

python分析目前为止科创板企业省份分布

李魔佛 发表了文章 • 0 个评论 • 2707 次浏览 • 2019-08-26 00:45 • 来自相关话题

科创板上市以来已经有一个多月了,我想看看到目前为止,上市企业都是归属哪些地方的。 因为个人觉得科创板是上证板块的,那么来自江浙一带的企业会更多。 毕竟现在深市和沪市在争夺资源,深市希望把深圳企业留回在深市的主板或者中小创版块。
 
首先获取行情数据,借助tushare这个框架:
在python3环境下,pip install tushare --upgrade ,记得要更新,因为用的旧版本会获取不到科创板的数据。
安装成功后试试import tushare as ts,看看有没有报错。没有就是安装成功了。
 
接下来抓取全市场的行情.




(点击查看大图)
查看前5条数据
 现在行情数据存储在df中,然后分析数据。
因为提取的是全市场的数据,然后获取科创板的企业:




(点击查看大图)

使用的是正则表达式,匹配688开头的代码。
 
接下来就是分析企业归属地:




(点击查看大图)

使用value_counts函数,统计该列每个值出现的次数。

搞定了! 是不是很简单?
 
而且企业地区分布和自己的构想也差不多,江浙沪一带占了一半,加上北京地区,占了80%以上的科创板企业了。
 
每周会定期更新一篇python数据分析股票的文章。
 
原创文章,欢迎转载
请注明出处:
 http://30daydo.com/article/528 

  查看全部
科创板上市以来已经有一个多月了,我想看看到目前为止,上市企业都是归属哪些地方的。 因为个人觉得科创板是上证板块的,那么来自江浙一带的企业会更多。 毕竟现在深市和沪市在争夺资源,深市希望把深圳企业留回在深市的主板或者中小创版块。
 
首先获取行情数据,借助tushare这个框架:
在python3环境下,pip install tushare --upgrade ,记得要更新,因为用的旧版本会获取不到科创板的数据。
安装成功后试试import tushare as ts,看看有没有报错。没有就是安装成功了。
 
接下来抓取全市场的行情.

a1.PNG
(点击查看大图)
查看前5条数据
 现在行情数据存储在df中,然后分析数据。
因为提取的是全市场的数据,然后获取科创板的企业:

a2.PNG
(点击查看大图)

使用的是正则表达式,匹配688开头的代码。
 
接下来就是分析企业归属地:

a3.PNG
(点击查看大图)

使用value_counts函数,统计该列每个值出现的次数。

搞定了! 是不是很简单?
 
而且企业地区分布和自己的构想也差不多,江浙沪一带占了一半,加上北京地区,占了80%以上的科创板企业了。
 
每周会定期更新一篇python数据分析股票的文章。
 
原创文章,欢迎转载
请注明出处:
 http://30daydo.com/article/528