内网穿透软件 frp和ngrok的比较
内网穿透就是访问某个内网主机.
可以理解为一个vpn网络. 同在一个内网. 不过原理不一样.
内网穿透是绑定的某个端口的数据转发与接收.
前提都是需要一台有公网ip的主机,通过这个主机作为跳板, 先访问这个跳板主机, 然后把数据转发到链接到内网.
那么比较frp和ngork的各个方面,从而让用户了解各自的需求:
1. 开源
frp 开源免费,ngrok1.x开源,但2.x开始收费
2. 配置难度
二者都是用go编写的,所以基本可以跨平台是,linux,windows都可以。
都需要一个客户端,一个服务端
配置而言,frp要比ngrok配置容易多了.
虽然都是go写的.不过ngrok的配置比较麻烦,而且go get 经常拉不下来.
推荐frp, 直接下载下来就可以使用了.
可以自定义域名. 即使域名没有备案,也可以直接用ip访问.
ngrok有个随机的域名,不过那个速度有限速,用来偶尔测试一下还可以。 长期用来工作或者建站肯定不行。
ngrok 2.x 官网提供下载的版本需要注册,获取token,才能使用
然后
收起阅读 »
可以理解为一个vpn网络. 同在一个内网. 不过原理不一样.
内网穿透是绑定的某个端口的数据转发与接收.
前提都是需要一台有公网ip的主机,通过这个主机作为跳板, 先访问这个跳板主机, 然后把数据转发到链接到内网.
那么比较frp和ngork的各个方面,从而让用户了解各自的需求:
1. 开源
frp 开源免费,ngrok1.x开源,但2.x开始收费
2. 配置难度
二者都是用go编写的,所以基本可以跨平台是,linux,windows都可以。
都需要一个客户端,一个服务端
配置而言,frp要比ngrok配置容易多了.
虽然都是go写的.不过ngrok的配置比较麻烦,而且go get 经常拉不下来.
推荐frp, 直接下载下来就可以使用了.
可以自定义域名. 即使域名没有备案,也可以直接用ip访问.
ngrok有个随机的域名,不过那个速度有限速,用来偶尔测试一下还可以。 长期用来工作或者建站肯定不行。
ngrok 2.x 官网提供下载的版本需要注册,获取token,才能使用
ngrok config add-authtoken <token>
然后
ngrok http 80监听本地的80端口。
收起阅读 »
微信公众号token验证失败的原因
主要是文档写的过于模糊(比较含蓄,实际上是垃圾到不行)
因为提供的文档,用的是python2的代码:
如果按照上面的代码,放到python3上执行, 实际返回的 echostr 的值是错的. 所以服务器拿这个错的值,匹配, 会总是失败.
什么年代了, 一个demo 也不换个新一点的python版本.
提供一个新版的python3通过检验的代码:
因为提供的文档,用的是python2的代码:
import hashlib
import web
class Handle(object):
def GET(self):
try:
data = web.input()
if len(data) == 0:
return "hello, this is handle view"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = "xxxx" #请按照公众平台官网\基本配置中信息填写
list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
map(sha1.update, list)
hashcode = sha1.hexdigest()
print "handle/GET func: hashcode, signature: ", hashcode, signature
if hashcode == signature:
return echostr
else:
return ""
except Exception, Argument:
return Argument
如果按照上面的代码,放到python3上执行, 实际返回的 echostr 的值是错的. 所以服务器拿这个错的值,匹配, 会总是失败.
什么年代了, 一个demo 也不换个新一点的python版本.
提供一个新版的python3通过检验的代码:
# -*- coding: utf-8 -*-收起阅读 »
# -*- coding: utf-8 -*-
# filename: handle.py
import hashlib
import web
class Handle(object):
def POST(self):
pass
# get方法,验证token
def GET(self):
try:
data = web.input()
if len(data) == 0:
return "token success!"
signature = data.signature
timestamp = data.timestamp
nonce = data.nonce
echostr = data.echostr
token = "123456abcdefg" # 请按照公众平台官网\基本配置中信息填写,两个token保持一致
list = [token, timestamp, nonce]
list.sort()
sha1 = hashlib.sha1()
sha1.update(list[0].encode("utf-8"))
sha1.update(list[1].encode("utf-8"))
sha1.update(list[2].encode("utf-8"))
hashcode = sha1.hexdigest() # 获取加密串
# 验证
print("handle/GET func: hashcode, signature: ", hashcode, signature)
if hashcode == signature:
return echostr
else:
return ""
except Exception as Argument:
return Argument
golang的时间格式化 做法有点像格力手机的开机画面是董小姐
网络上的开发者基本都是一路吐槽。
做法有点像格力手机的开机画面是董小姐。
用个语言还得记住你golang的生日?? 收起阅读 »
过去用java,python,php,等语言,将一个时间格式化成一个字符串都是用“yyy-MM-dd hh:mm:ss”之类的方法,golang 的格式化方法真令我大开眼界
先看官方文档说明:
func (Time) Format
func (t Time) Format(layout string) string
Format returns a textual representation of the time value formatted according to layout, which defines the format by showing how the reference time, defined to be
Mon Jan 2 15:04:05 -0700 MST 2006
would be displayed if it were the value; it serves as an example of the desired output. The same display rules will then be applied to the time value. Predefined layouts ANSIC, UnixDate, RFC3339 and others describe standard and convenient representations of the reference time. For more information about the formats and the definition of the reference time, see the documentation for ANSIC and the other constants defined by this package.
下面给个代码:
fmt.Println(time.Now().Format("2006-01-02 150405"))
要注意那时间,只能是2006-01-02 15:04:05分,其它的时间都不行,真是够绝。
做法有点像格力手机的开机画面是董小姐。
用个语言还得记住你golang的生日?? 收起阅读 »
golang json Unmarshal 无法修改结构体的值。传入指针
假如我的json文件的格式如下:
然后我的定义的结构体:
然后程序里面解析json的代码:
发现是无法把t的值修改为json文件里面的值,最后的记过输出,还是一个零值的结果体。
后面知道问题所在了,如果定义的结构体的首字母小写的时候,包外的反射是无法修改结构体的值的,也就是只能只读。
所以只需要把结构体的首字母改为大写,问题就可以解决了。
json文件里面不用修改,因为
Unmarshal映射的时候可以适配大小写。
收起阅读 »
{ "username": "root", "password": "123456", "host": "1.1.1.1.", "port": 3306, "db": "admin" }
然后我的定义的结构体:
type T struct {
username string `json:"username"`
password string `json:"password"`
host string `json:"host"`
port int `json:"port"`
db string `json:"db"`
}
然后程序里面解析json的代码:
var t T
data, err := ioutil.ReadFile(filename)
fmt.Println("read from file")
//fmt.Println(string(data))
if err != nil {
fmt.Println("in error")
fmt.Println(err)
return err
}
err = json.Unmarshal(data, &t)
if err != nil {
fmt.Println("error ")
fmt.Println(err)
return err
}
fmt.Println("outpout ")
fmt.Printf("%v\n", t)
fmt.Println(t)
发现是无法把t的值修改为json文件里面的值,最后的记过输出,还是一个零值的结果体。
后面知道问题所在了,如果定义的结构体的首字母小写的时候,包外的反射是无法修改结构体的值的,也就是只能只读。
所以只需要把结构体的首字母改为大写,问题就可以解决了。
type T struct {
Username string `json:"username"`
Password string `json:"password"`
Host string `json:"host"`
Port int `json:"port"`
Db string `json:"db"`
}
json文件里面不用修改,因为
Unmarshal映射的时候可以适配大小写。
收起阅读 »
为什么现在还有那么多在线的gonlang 字符串生成json struct的网站? Goland IDE一个快捷方式帮你搞定
在golanad的ide上,敲入 type xx struct{
}
在出现的generate from json的页面,把json的字符串输入进去。
IDE即可帮你转换为对应的结构体了。 根本就没有在线IDE什么事情了。
}
在出现的generate from json的页面,把json的字符串输入进去。
IDE即可帮你转换为对应的结构体了。 根本就没有在线IDE什么事情了。
golang根据不同返回解析不同结构的json
// 数据源
{"type":"a_number", "data":{"somenumber":1234}}
{"type":"b_string", "data":{"somestring":"a string", "anotherstring": "a second string"}}`
如何解析上面返回的json结构体
答:json.RawMessage
type Head struct {
Type string `json:"type"`
Data json.RawMessage `json:"data"`
}
var msg Head
json.Unmarshal([]byte(jsonString), &msg)
switch msg.Type {
case "a_number":
var detail A
json.Unmarshal([]byte(msg.Data),&detail)
fmt.Println(detail.SomeNumber)
case "b_string":
var detail B
json.Unmarshal([]byte(msg.Data),&detail)
fmt.Println(detail.SomeString)
default:
fmt.Printf("I don't know about type %s!\n", msg.Type)
}
就可以解析上面的不规则的结构体了。
收起阅读 »
vs code 无法启动jupyter notebook 修复 亲测
错误信息:
之前一直运行得好好的。不知道安装了什么依赖库后就这样了。。
在国外网站找了一通后,找到了解决办法:
不得不感慨,国外大神多,国内csdn乱ctrl cv.
收起阅读 »
failed to start INotebook in kernel, UI Disabled = false s [Error]: Unable to start Kernel 'base (Python 3.8.3)' due to connection timeout. View Jupyter [log](command:jupyter.viewOutput) for further detail
之前一直运行得好好的。不知道安装了什么依赖库后就这样了。。
在国外网站找了一通后,找到了解决办法:
pip install traitlets==4.3.3
不得不感慨,国外大神多,国内csdn乱ctrl cv.
收起阅读 »
QMT代码详解<一> 行业ETF轮动
回测代码如下: 代码里面加入了个人理解的注释。
如果遇到不懂的,可以关注公众号咨询:
收起阅读 »
#coding:gbk
'''
回测模型示例(非实盘交易策略)
本策略每隔1个月定时触发计算1000能源(399381.SZ)、1000材料(399382.SZ)、1000工业(399383.SZ)、
1000可选(399384.SZ)、1000消费(399385.SZ)、1000医药(399386.SZ)这几个行业指数过去
20个交易日的收益率并选取了收益率最高的指数的成份股并获取了他们的市值数据
随后把仓位调整至市值最大的5只股票上
该策略在股票指数日线下运行
'''
import numpy as np
import math
def init(ContextInfo):
MarketPosition ={}
ContextInfo.MarketPosition = MarketPosition #初始化持仓
index_universe = ['399381.SZ','399382.SZ','399383.SZ','399384.SZ','399385.SZ','399386.SZ']
index_stocks = []
for index in index_universe:
for stock in ContextInfo.get_sector(index): # 获取指数的成分股
index_stocks.append(stock)
ContextInfo.set_universe(index_universe+index_stocks) #设定股票池,
ContextInfo.day = 20
ContextInfo.ratio = 0.8
ContextInfo.holding_amount = 5
ContextInfo.accountID='testS'
def handlebar(ContextInfo):
buy_condition = False
sell_condition = False
d = ContextInfo.barpos
print(d)
lastdate = timetag_to_datetime(ContextInfo.get_bar_timetag(d - 1), '%Y%m%d')
date = timetag_to_datetime(ContextInfo.get_bar_timetag(d), '%Y%m%d')
print(date)
index_list = ['399381.SZ','399382.SZ','399383.SZ','399384.SZ','399385.SZ','399386.SZ']
return_index = []
weight = ContextInfo.ratio/ContextInfo.holding_amount
size_dict = {}
if (float(date[-4:-2]) != float(lastdate[-4:-2])):
#print '---------------------------------------------------------------------------------'
#print '当前交易日',date,date[-4:-2] 20210101 获取到的月份不一样,这样在每个月初会执行一次这个函数
# 获取的是股票池的
his = ContextInfo.get_history_data(21,'1d','close')
#print "his",his,timetag_to_datetime(ContextInfo.get_bar_timetag(d),"%Y%m%d")
for k in list(his.keys()):
if len(his[k]) == 0:
del his[k]
for index in index_list:
ratio = 0
try:
ratio = (his[index][-2] - his[index][0])/his[index][0]
except KeyError:
print('key error:' + index)
except IndexError:
print('list index out of range:' + index)
return_index.append(ratio)
# 获取指定数内收益率表现最好的行业
best_index = index_list[np.argmax(return_index)]
#print '当前最佳行业是:', ContextInfo.get_stock_name(best_index)[3:]+'行业'
# 获取当天有交易的股票
index_stock = ContextInfo.get_sector(best_index)
stock_available = []
for stock in index_stock:
if ContextInfo.is_suspended_stock(stock) == False: # 是否停牌
stock_available.append(stock)
for stock in stock_available:
if stock in list(his.keys()):
#目前历史流通股本取不到,暂用总股本
if len(his[stock]) >= 2:
stocksize =his[stock][-2] * float(ContextInfo.get_financial_data(['CAPITALSTRUCTURE.total_capital'],[stock],lastdate,date).iloc[0,-1])
size_dict[stock] = stocksize
elif len(his[stock]) == 1:
stocksize =his[stock][-1] * float(ContextInfo.get_financial_data(['CAPITALSTRUCTURE.total_capital'],[stock],lastdate,date).iloc[0,-1])
size_dict[stock] = stocksize
else:
return
size_sorted = sorted(list(size_dict.items()), key = lambda item:item[1]) # 根据股本顺序排序
pre_holding = []
for tuple in size_sorted[-ContextInfo.holding_amount:]: # 最好不要占用关键词
pre_holding.append(tuple[0])
#print '买入备选',pre_holding
#函数下单
if len(pre_holding) > 0:
sellshort_list = []
for stock in list(ContextInfo.MarketPosition.keys()): # 遍历持仓,如果不在当前条件范围内,卖出
if stock not in pre_holding and (stock in list(his.keys())):
order_shares(stock,-ContextInfo.MarketPosition[stock],'lastest',his[stock][-1],ContextInfo,ContextInfo.accountID)
print('sell',stock)
sell_condition = True
sellshort_list.append(stock)
if len(sellshort_list) >0: # 这句多余
for stock in sellshort_list:
del ContextInfo.MarketPosition[stock]
for stock in pre_holding:
if stock not in list(ContextInfo.MarketPosition.keys()): # 买入
Lots = math.floor(ContextInfo.ratio * (1.0/len(pre_holding)) * ContextInfo.capital / (his[stock][-1] * 100))
order_shares(stock,Lots *100,'lastest',his[stock][-1],ContextInfo,ContextInfo.accountID)
print('buy',stock)
buy_condition = True
ContextInfo.MarketPosition[stock] = Lots *100
如果遇到不懂的,可以关注公众号咨询:

图床网站横向对比 测试
1. SM.SM
网站提供登录,可是,一直是登录不了,点击按钮点击后是一直没有反应。后台做的不好。
不能登录,也就是你上传的图片,就下次想找回,也很难找,除非你找回你的原文章,在原来的文章里面找出原来的链接。
然后图片的话遇到一些美女图会经常误删,也就是这样子的。

就是你的图片链接被吃了。 这也侧面说明图床网站对你的图片进行审查的。
推荐指数:0
2. imgUrl
这个网站的图片也是有审查的,一般而言,二维码就是直接会被删除,所以不建议拿来存放一些公众号二维码等传播性的工具。
优点是速度比较快
推荐指数:3星
3. 七牛
上传下载速度快,并且正常的图片不会屏蔽,二维码也不会被屏蔽。支持很多的工具。可以自定义名字,也就是你上传的图片的URL不再是一串随机的字符,而是可以设定为指定日期,或者你的原来的文件名。
这样对于查找本地文件,或者根据本地的文件名,查找线上的图片文件,都是很有李的。
但是,部署这个有点难度,需要配置一些服务器的内容。比如需要通过API生产token,才可以放入到sharex中,并且需要定时更新。
推荐指数:5星
收起阅读 »
网站提供登录,可是,一直是登录不了,点击按钮点击后是一直没有反应。后台做的不好。
不能登录,也就是你上传的图片,就下次想找回,也很难找,除非你找回你的原文章,在原来的文章里面找出原来的链接。
然后图片的话遇到一些美女图会经常误删,也就是这样子的。

就是你的图片链接被吃了。 这也侧面说明图床网站对你的图片进行审查的。
推荐指数:0
2. imgUrl
这个网站的图片也是有审查的,一般而言,二维码就是直接会被删除,所以不建议拿来存放一些公众号二维码等传播性的工具。
优点是速度比较快
推荐指数:3星
3. 七牛
上传下载速度快,并且正常的图片不会屏蔽,二维码也不会被屏蔽。支持很多的工具。可以自定义名字,也就是你上传的图片的URL不再是一串随机的字符,而是可以设定为指定日期,或者你的原来的文件名。
这样对于查找本地文件,或者根据本地的文件名,查找线上的图片文件,都是很有李的。
但是,部署这个有点难度,需要配置一些服务器的内容。比如需要通过API生产token,才可以放入到sharex中,并且需要定时更新。
推荐指数:5星
收起阅读 »
毕业7年,白手起家到资产千万,我的6个致富发财赚钱秘诀 --观后感
看了油管上 土妹的视频,《毕业7年,白手起家到资产千万,我的6个致富发财赚钱秘诀》

她总结了几点,并且有人在评论里面总结了。
基本都是很认同她的说法。
以后需要不断地思考,思考未来。该集中努力的地方得一定努力才行。
最后附上视频链接:
https://www.youtube.com/watch?v=094BcDIc0LM
收起阅读 »

她总结了几点,并且有人在评论里面总结了。
1、有时候选择大于努力(投资炒股->炒美股)
2、不努力就没有选择的机会(名校本科+研究生+充分准备面试技巧+争取工作调动)
3、关键点很重要,在最关键的时候,必须全力一击!
4、富贵险中求,适当冒一点险(风控能力)
5、越早开始存钱,越好
6、打工是发不了财的、但是前期要积累工作经验和锻炼品质,竭尽全力把工作做好!再想办法开拓其他的赚钱方式!
基本都是很认同她的说法。
以后需要不断地思考,思考未来。该集中努力的地方得一定努力才行。
最后附上视频链接:
https://www.youtube.com/watch?v=094BcDIc0LM
收起阅读 »
github pages是可以被百度检索到的,网上的文章都是瞎扯

有图有证。
看来还是继续用回github pages吧。
优矿回测可转债 代码 教程
不少投资者在投资的过程中,都想要回测自己的策略或者验证自己的想法. 不少读者也在后台留言,能否写写入门类的教程.
可是碍于非科班出生, 对于编程的一窍不通, 所以大部分止步于简单的数据统计.
比如采用excel对采集来的数据,手工测试与验证, 高级点的可以应用一些excel函数进行简单回测.
这里会有一个烦人且第一大障碍, 就是需要有采集来的数据. 首先保证这个数据的完整性与准确性. 这一步其实已经过滤掉想要回测的80%的人了. 具体优矿支持的数据。

优矿支持的数据
特色数据
其实其他的聚框,米宽,箩筐等等,都是大同小异的,本文只是挑选笔者使用比较多的优矿来介绍. 不过现在优矿并不支持实盘.
本文只是做一个量化平台框架的基本介绍, 后续的文章会有进阶, 加入买卖操作, 计算最大回撤, 以及更为复杂的多因子回测. 只要有的数据,基本都可以拿来加入到你的模型之中.
##################################################################

因为优矿本身并不支持可转债的交易,所以系统内置的order,buy,sell函数是无法应用到可转债上面。
不过只要能够获取到每日的行情数据,那么我们就可以自己构造一个交易系统。
核心就就是每次保存你的持仓信息,等到下一次调仓时,对持仓进行比较,对于调出的转债进行移除,新加的转债进行加入。 然后统计一下当前市值,记录下来,就可以得到收益率曲线。
部分代码如下:
[i]欢迎讨论探索,星球里面有更多的完整策略与代码,回测数据,结论资源。
[/i] 收起阅读 »
可是碍于非科班出生, 对于编程的一窍不通, 所以大部分止步于简单的数据统计.
比如采用excel对采集来的数据,手工测试与验证, 高级点的可以应用一些excel函数进行简单回测.
这里会有一个烦人且第一大障碍, 就是需要有采集来的数据. 首先保证这个数据的完整性与准确性. 这一步其实已经过滤掉想要回测的80%的人了. 具体优矿支持的数据。

优矿支持的数据
- 股票:沪深交易所股票的基本信息以及日/分钟级别的股票行情。
- 财务报表:沪深港上市公司披露的2007年会计准则变更以来的所有财务报表数据,包含三大报表和财报附注等细节。
- 公司行为:沪深上市公司业绩预告,业绩快报,IPO,配股,分红,拆股,股改等信息。
- 基金:场内外各类基金的基本信息,日/分钟级别的场内基金行情,日级别的场外基金净值,以及基金资产配置,收益情况,净值调整等信息。
- 期货:国内四大期货交易所期货合约的基本信息,日/分钟的期货行情,以及国债期货的转换因子等信息。
- 指数:国内外指数基本信息,日/分钟级别的指数行情,以及指数成分构成情况,指数成分股权重情况等信息。
- 港股:香港交易所股票基本信息以及日级别的股票行情。
- 大宗商品:国内各个品种(包括期货合约可交割品种)的大宗商品现货价格行情,以及产销量,库存等信息。
- 债券:债券/回购基本信息,日级别的债券/回购行情,以及发行上市,付息,利率,评级和评级变动,债券发行人评级及变动,担保人评级及变动等信息。
- 期权:上交所期权合约的基本信息,日/分钟级别的期权行情,以及每日盘前静态数据等信息。
- 宏观产业:中国及全球各国宏观指标,行业经济指标等数据。
特色数据
- 股票/指数等品种的量化因子库
- 雪球、股吧等社交媒体数据
- 主流媒体新闻文本和结构化数据
- 主流渠道公告文本和结构化数据
- 淘宝、天猫等电商数据
其实其他的聚框,米宽,箩筐等等,都是大同小异的,本文只是挑选笔者使用比较多的优矿来介绍. 不过现在优矿并不支持实盘.
本文只是做一个量化平台框架的基本介绍, 后续的文章会有进阶, 加入买卖操作, 计算最大回撤, 以及更为复杂的多因子回测. 只要有的数据,基本都可以拿来加入到你的模型之中.
##################################################################

因为优矿本身并不支持可转债的交易,所以系统内置的order,buy,sell函数是无法应用到可转债上面。
不过只要能够获取到每日的行情数据,那么我们就可以自己构造一个交易系统。
核心就就是每次保存你的持仓信息,等到下一次调仓时,对持仓进行比较,对于调出的转债进行移除,新加的转债进行加入。 然后统计一下当前市值,记录下来,就可以得到收益率曲线。
部分代码如下:
import datetime
start = '2018-01-01' # 回测起始时间
end = '2021-05-28' # 回测结束时间
benchmark = 'HS300' # 策略参考标准
freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 5 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd' 时间间隔的单位为交易日,
hold_num = 10 # 持有转债的个数
def initialize(context):
global MyPosition, HighValue, MyCash, Withdraw, HoldRank, HoldNum,Start_Cash
MyPosition = {} #持仓
MyCash = 1000000 #现金
Start_Cash= 1000000
HighValue = MyCash #最高市值
Withdraw = 0 #最大回撤
HoldRank = hold_num #排名多少之后卖出
HoldNum = hold_num #持债支数
def bonds(beginDate=u"20170101",endDate=u"20201215",EB_ENABLE=False):
code_set = set()
df = DataAPI.MktConsBondPremiumGet(SecID=u"",
tickerBond=u"",
beginDate=beginDate,
endDate=endDate,
field=u"",
pandas="1")
cb_df = df.tickerBond.str.startswith(('12', '11'))
df = df[cb_df]
cb_df = df.tickerBond.str.startswith('117')
df = df[~cb_df]
if not EB_ENABLE:
eb = df.secShortNameBond.str.match('\d\d.*?E[123B]') # TODO 判断EB是否过滤
df = df[~eb]
ticker_list =
for _, row in df[['tickerBond', 'secShortNameBond', 'tickerEqu']].iterrows():
if row['tickerBond'] not in code_set:
ticker_list.append((row['tickerBond'], row['secShortNameBond'], row['tickerEqu']))
code_set.add(row['tickerBond'])
return list(code_set)
def handle_data(context):
global MyPosition, HighValue, MyCash, Withdraw, HoldRank, HoldNum,Start_Cash
today_date = context.now.strftime('%Y%m%d')
#每天重新计算双低排名
ticker_list=bonds(today_date,today_date)
data = DataAPI.MktConsBondPerfGet(beginDate=today_date,endDate=today_date,secID='',tickerBond=ticker_list,
tickerEqu=u"",field=u"",pandas="1")
data['secID']=data['tickerBond']
data.set_index('secID',inplace=True)
data['DoubleLow'] = data['closePriceBond'] + data['bondPremRatio']
data = data.sort_values(by="DoubleLow" , ascending=True)
PosValue = MyCash
#抛出不在持有排名HoldRank的
for stock in MyPosition.keys():
try:
CurPrice = data.loc[stock]['closePriceBond']
except:
last_date = (context.now + datetime.timedelta(days=-7)).strftime('%Y%m%d')
CurPrice=get_last_price(stock,last_date,today_date)
PosValue += MyPosition[stock] * CurPrice * 10 #计算当前市值
if stock not in data.index[:HoldRank]:
# 省略若干
log.info('{} 卖出{},{},价格:{}'.format(today_date,stock,name,CurPrice))
if PosValue > HighValue:HighValue = PosValue
if (HighValue - PosValue) / HighValue > Withdraw:Withdraw = (HighValue - PosValue) / HighValue
#买入排在HoldRank内的,总持有数量HoldNum
min_hold = min(HoldRank,len(data.index))
for i in range(min_hold):
if len(MyPosition) >= HoldNum:break
if data.index[i] not in MyPosition.keys():
# 省略若干
log.info('{} 买入{}, {}, 价格{}, 溢价率{}'.format(today_date,data.index[i],name,price,cb_ration))
ratio = (PosValue-Start_Cash)/Start_Cash*100
log.info(today_date + ': 最高市值 ' + str(HighValue) + ' , 当前市值 ' + str(PosValue) + '收益率 : '
+str(ratio)+'% , 最大回撤 ' + str(round(Withdraw*100,2))+'%') [/i][/i]
[i]欢迎讨论探索,星球里面有更多的完整策略与代码,回测数据,结论资源。

30天学会Golang
适合有一定的编程基础的同学学习。
附github目录图以及github地址
https://github.com/Rockyzsu/GolangLearning

同时欢迎关注公众号: 30天尝试新事情

收起阅读 »
附github目录图以及github地址
https://github.com/Rockyzsu/GolangLearning

同时欢迎关注公众号: 30天尝试新事情

收起阅读 »
Goland 配置vim vimrc文件 附配置文件
百度出来的很多文章都是golang配置vim的。
只好自己写一个简单的教程来纠正下。
在Goland编辑器下,使用vim插件,可以在Goland 这个IDE上运行vim编辑器操作。

很多的vim操作用的是k-vim大神的配置文件,所以这里需要修改Goland的默认vim配置文件。
Goland的vimrc文件为 .ideavimrc ,位于C:\Users\你的用户名下面。
如果没有就新建一个,需要在gitbash下新建,不然windows系统是不能建一个 . 开头的文件的。
或者把k-vim的配置文件拷贝过滤,修改下名字,改为 .ideavimrc 就可以了。
当然,这个k-vim的一些配置需要做一些修改。因为这个是Linux下运行的shell的,有一些插件或者主题是不使用与Goland的,把不适用的注释掉即可。
这里我也提供一个修改后的k-vim版本的.ideavimrc,下载后拷贝到C:\Users\用户名 下就可以了。
记得重启下Goland。
关注公众号后,后台回复: vim 即可

收起阅读 »
只好自己写一个简单的教程来纠正下。
在Goland编辑器下,使用vim插件,可以在Goland 这个IDE上运行vim编辑器操作。

很多的vim操作用的是k-vim大神的配置文件,所以这里需要修改Goland的默认vim配置文件。
Goland的vimrc文件为 .ideavimrc ,位于C:\Users\你的用户名下面。
如果没有就新建一个,需要在gitbash下新建,不然windows系统是不能建一个 . 开头的文件的。
或者把k-vim的配置文件拷贝过滤,修改下名字,改为 .ideavimrc 就可以了。
当然,这个k-vim的一些配置需要做一些修改。因为这个是Linux下运行的shell的,有一些插件或者主题是不使用与Goland的,把不适用的注释掉即可。

这里我也提供一个修改后的k-vim版本的.ideavimrc,下载后拷贝到C:\Users\用户名 下就可以了。
记得重启下Goland。
关注公众号后,后台回复: vim 即可

收起阅读 »
【手把手教程】空投币怎么领取,以ShiBZilla为例
空投币,简单理解为白送给你,不花钱。
记住,不要花钱,要的是白嫖,只要要你花一分钱,果断把网页关闭,然后打开手机,打几盘王者荣耀。
既然是送钱,那么会有什么风险吗? 有,就是最后没有送钱成功,空投的币种发行失败,也就你没有撸到羊毛,你损失的时间成本,当然如果你时间不值钱,就没有什么损失的啦。
好。准备的东西。
1. 钱包地址:
就是一串数字。
钱包地址类似于你的家的地址:

别人给你送钱了,你得有个钱包来接呀。
钱包获取也很简单,找个冷钱包,自动生成。冷钱包只是个皮包,即使冷钱包丢了也没关系的。
关键不要丢的是助记词。
助记词就是给你十来二十个单词,你记住每个单词的顺序。你用这些单词的顺序就可以完整的恢复你的钱包,在其他钱包也可以。
所以一定要保存好你的助记词。 最好用纸抄下来。
冷钱包随意找一个能用的即可。比如我用的是比特派,或者 IMtoken。到应用市场下载后,在手机里面打开,找到对应的币种。
这里我需要拿出 BSC钱包的地址就可以。 一个钱包里面可以自动生成N个币种的钱包地址。

这里点进去BSC钱包。
里面的收款地址就是你要提供给SHIBZILLA币官方的。

点进去后就是见到你的地址

第一步拿到自己的钱包地址了。
第二部。
找到有空投币的官网地址:
http://shibzillacoin.net/?ShiBZilla=B09D2
比如我上面这个,后面带了一个推广码,很明显,这是我的一个推广链接。 我推广一个人领取空投币,我自己也可以得到一部分的空投币奖励。
所以为了感谢我写的这篇科普文章,你可以用的链接去领取空投币ShiBZilla。
虽然我也不知道这个币市干嘛用的,只是长得很像shibi。
哦,对了,当时shibi也是这样子空投的,如果当时没有看上的人,后面就得几万块几万块的用真金白银买回来了。
本来白送的呢。
ShiBZilla币发空投,留一个BSC地址发10亿币,最后一天时间:
http://shibzillacoin.net/?ShiBZilla=B09D2
白赚的币大家可以去领一领,说不定上市值几百块钱。
收起阅读 »
记住,不要花钱,要的是白嫖,只要要你花一分钱,果断把网页关闭,然后打开手机,打几盘王者荣耀。
既然是送钱,那么会有什么风险吗? 有,就是最后没有送钱成功,空投的币种发行失败,也就你没有撸到羊毛,你损失的时间成本,当然如果你时间不值钱,就没有什么损失的啦。
好。准备的东西。
1. 钱包地址:
就是一串数字。
钱包地址类似于你的家的地址:

别人给你送钱了,你得有个钱包来接呀。
钱包获取也很简单,找个冷钱包,自动生成。冷钱包只是个皮包,即使冷钱包丢了也没关系的。
关键不要丢的是助记词。
助记词就是私钥,你有助记词,管它倒闭不倒闭,跟你没有任何关系。
钱包公司只是给你提供服务,私钥在,财产永远是你的。
助记词就是给你十来二十个单词,你记住每个单词的顺序。你用这些单词的顺序就可以完整的恢复你的钱包,在其他钱包也可以。
所以一定要保存好你的助记词。 最好用纸抄下来。
冷钱包随意找一个能用的即可。比如我用的是比特派,或者 IMtoken。到应用市场下载后,在手机里面打开,找到对应的币种。
这里我需要拿出 BSC钱包的地址就可以。 一个钱包里面可以自动生成N个币种的钱包地址。

这里点进去BSC钱包。
里面的收款地址就是你要提供给SHIBZILLA币官方的。

点进去后就是见到你的地址

第一步拿到自己的钱包地址了。
第二部。
找到有空投币的官网地址:
http://shibzillacoin.net/?ShiBZilla=B09D2
比如我上面这个,后面带了一个推广码,很明显,这是我的一个推广链接。 我推广一个人领取空投币,我自己也可以得到一部分的空投币奖励。
复制并分享你的链接,你和被邀请人同时奖励 10亿枚 ShiBZilla,每人最多可邀请 40人,奖励最高可获得 400亿枚 ShiBZilla。
所以为了感谢我写的这篇科普文章,你可以用的链接去领取空投币ShiBZilla。
虽然我也不知道这个币市干嘛用的,只是长得很像shibi。
哦,对了,当时shibi也是这样子空投的,如果当时没有看上的人,后面就得几万块几万块的用真金白银买回来了。
本来白送的呢。
ShiBZilla币发空投,留一个BSC地址发10亿币,最后一天时间:
http://shibzillacoin.net/?ShiBZilla=B09D2
白赚的币大家可以去领一领,说不定上市值几百块钱。
收起阅读 »
imgtu为什么上传二维码的图片会被删除 甚至账户被封?
为何二维码会被删除?
因为二维码很容易被用于黑产项目,而且无法直接识别,所以禁止上传含有二维码的相关图片.
截图软件sharex 上传到七牛图床 设置上传文件名与本地名一样
配置sharex上传文件到七牛图床的文章,网上很多,这里略过。
不过网上的文章使用的上传文件名是按照当时的日期设定的。
什么意思呢?
比如我用sharex截图后,截图的文件叫 hello.png ,如果用sharex上传到七牛后,它的文件名就变成了 202111282121.png,
全路径就是 http://xxx.example.com/202111282121.png.
这里假设你使用的上传的配置key如下:%y%mo%d%h%mi%s.png这样会造成一个麻烦。
比如的截图文件名是20211128210910.png, 21点09分10秒,然后我过了1秒钟后才开始上传,我一般手动上传,因为不希望每一个截图都上传,这样会导致部分个人隐私数据不自觉传出去,可能泄露敏感信息。
所以过了1秒钟后的上传到服务器的文件名为20211128210911.png , 21点09分11秒。
这个造成本地文件名与远程文件名不一样。如果后续你想在本地找回原来文件的副本,你根据服务器的URL地址,在本地是找不到的,只能先把文件名的日期时间精确到分钟,然后秒位使用* 星号匹配符来查找。 这样多了一重手续。
或者我有本地的截图的文件名,我想直接构造成服务器上的文件名,这是我就不能直接 http://xxxx.example/本地文件名.png 这样来构造了。 因为远程服务器的文件名和本地不一样。
网上找一一圈都没找到对应的办法,然后到官网找了一番,终于找到解决办法,很简单。
把key的值设置为 $filename$
即可。

markdown 收起阅读 »
不过网上的文章使用的上传文件名是按照当时的日期设定的。
什么意思呢?
比如我用sharex截图后,截图的文件叫 hello.png ,如果用sharex上传到七牛后,它的文件名就变成了 202111282121.png,
全路径就是 http://xxx.example.com/202111282121.png.
这里假设你使用的上传的配置key如下:%y%mo%d%h%mi%s.png这样会造成一个麻烦。
比如的截图文件名是20211128210910.png, 21点09分10秒,然后我过了1秒钟后才开始上传,我一般手动上传,因为不希望每一个截图都上传,这样会导致部分个人隐私数据不自觉传出去,可能泄露敏感信息。
所以过了1秒钟后的上传到服务器的文件名为20211128210911.png , 21点09分11秒。
这个造成本地文件名与远程文件名不一样。如果后续你想在本地找回原来文件的副本,你根据服务器的URL地址,在本地是找不到的,只能先把文件名的日期时间精确到分钟,然后秒位使用* 星号匹配符来查找。 这样多了一重手续。
或者我有本地的截图的文件名,我想直接构造成服务器上的文件名,这是我就不能直接 http://xxxx.example/本地文件名.png 这样来构造了。 因为远程服务器的文件名和本地不一样。
网上找一一圈都没找到对应的办法,然后到官网找了一番,终于找到解决办法,很简单。
把key的值设置为 $filename$
即可。
markdown 收起阅读 »
hexo使用七牛图床 放到github pages上无法显示
### 2022-05-30 更新 #########
问题的根源在于 谷歌浏览器 , 在https的网站里面放http格式的图片,那么http的链接会被自动转为https,从而导致找不到链接,会显示叉叉
效果如下图显示:
在本地运行服务器:
hexo s
启动本地的:http://localhost:4000
得到的网页是正常的:

目前调试中,后续把结果更新下。
###更新#####
晕死,刚写完文章就找到原因。
收起阅读 »
问题的根源在于 谷歌浏览器 , 在https的网站里面放http格式的图片,那么http的链接会被自动转为https,从而导致找不到链接,会显示叉叉
效果如下图显示:

在本地运行服务器:
hexo s
启动本地的:http://localhost:4000
得到的网页是正常的:

目前调试中,后续把结果更新下。
###更新#####
晕死,刚写完文章就找到原因。
hexo 网站图床图片不显示
最近搭建了一个七牛云图床,外链不用 HTTPS 的话是免费的,搭配 PicGo 和 Typora 使用,在 Markdown 中插入图片非常方便,只需要复制图片,粘贴到 Typora 中,就可以自动调用 PicGo 上传并且获取链接了,但是在使用中遇到一个问题,本站在本地运行 hexo server 的情况下访问,所有图片显示正常,但是上传到服务器之后再访问,就会出现图片不显示的情况,复制图片 URL 访问也可以访问到。最终在 hexo 的 github 页面问到了可能是 Mixed Content 的问题。
具体来说,在调试工具中发现,显示存在 HTTP 和 HTTPS 资源混用的情况,导致不会读取资源。先后尝试了在 hexo\themes\...\layout\_partial\head.ejs 中添加
1 2
<meta name="referrer" content="no-referrer" /> <meta http-equiv="Content-Security-Policy" ontent="upgrade-insecure-requests">
都不起作用,而升级七牛云为 HTTPS 流量又要收费,遂干脆把网站改回到了 HTTP,因为是静态页面其实也没什么关系,而且每 3 个月重新注册一个证书有时候懒的搞,反而导致页面不能正常访问。
收起阅读 »