cronsun 数据备份与恢复
这对于动辄几十几百个任务的朋友来说,备份与恢复很重要。
cronsun提供的csctl工具可以备份和恢复cronsun的任务数据。
备份数据:
恢复数据
把数据导入之后,还需要在新的机器上,web登录,把运行的节点逐个改为新节点。 这个有点不智能,不过,相比每一个都要手动更新全部内容,也很好很多,节省很多时间了。 收起阅读 »
cronsun提供的csctl工具可以备份和恢复cronsun的任务数据。
备份数据:
# 请将 --conf 修改为你自己保存的 base.json 文件的路径
# --file 为备份文件路径,会自动加上 .zip 后缀,这里不需要写后缀
csctl backup --conf={/path/to/base.json} --dir=./ --file=cronsun_data
恢复数据
# 请将 --conf 修改为你自己保存的 base.json 文件的路径
# --file 为备份文件路径
csctl restore --conf={/path/to/base.json} --file=./cronsun_data.zip
把数据导入之后,还需要在新的机器上,web登录,把运行的节点逐个改为新节点。 这个有点不智能,不过,相比每一个都要手动更新全部内容,也很好很多,节省很多时间了。 收起阅读 »
etcd连接带用户名与密码
如果你的etcd设置了密码,使用以下方式进行操作:
这样就把foo的值设为 "Hello World"
同理,如果要读取foo的值,只需要
就可以把你上一个设置的值读取出来。
收起阅读 »
ENDPOINT = http://127.0.0.1:2379
./etcdctl --endpoints=$ENDPOINT put foo "Hello World" --user="root" --password="password"
这样就把foo的值设为 "Hello World"
同理,如果要读取foo的值,只需要
ENDPOINT = http://127.0.0.1:2379
./etcdctl --endpoints=$ENDPOINT get foo --user="root" --password="password"
就可以把你上一个设置的值读取出来。
收起阅读 »
mongodb python同步两个数据库数据
有时候需要做一些迁移工作,需要对mongodb进行迁移。默认的工具貌似也十分好用的。缺少像Navicat 之于mysql的这样神级的软件。
所以自己动手写代码完成:
原理就是不断迭代,不同的数据库,里面的不同的collection。
对于同名collection,通过条数是否一致,来决定是否要把原数据复制过来。
保存上面文件为main.py
执行 python main.py
就可以进行数据同步工作啦。 收起阅读 »
所以自己动手写代码完成:
# -*- coding: utf-8 -*-
# @Time : 2022/4/6 4:41
# @File : database_migrate.py
# @Author : Rocky C@www.30daydo.com
import time
from loguru import logger
import pymongo
ignore_db = ['admin', 'config', 'local',
] # 忽略更新的库
ignore_col = [('db_stock','dfcf_list_full')]
logger.add('mongo.log')
# 数据库同步
def get_client(user, password, host, port):
connect_uri = f'mongodb://{user}:{password}@{host}:{port}'
client = pymongo.MongoClient(connect_uri)
return client
def origin():
return get_client('admin', 'password', '127.0.0.1', '27017')
def target():
return get_client('root', 'password', '127.0.0.1', '27017')
def transfer():
origin_client = origin()
target_client = target()
dbs = get_db_name(origin_client)
for db in dbs:
for col in get_collection_name(origin_client, db):
if (db,col) in ignore_col:
continue
items = []
logger.info(f'正在更新{db} {col}')
for i in get_item(origin_client, db, col):
items.append(i)
insert_item(target_client, db, col, items)
logger.info(f'更新数据库 {db} {col}')
# time.sleep(0.5)
def get_item(client, db_name, col):
return client[db_name][col].find()
def insert_item(client, db_name, col, data):
batch = 1000
count = len(data)//batch + 1
for i in range(count):
item = data[i*batch:(i+1)*batch]
if len(item)==0:
continue
try:
client[db_name][col].insert_many(item)
except Exception as e:
logger.error(e)
logger.error(f'{db_name} {col} 插入出错')
def get_db_name(client):
db_name = client.list_database_names()
dbs = []
for db in db_name:
if db not in ignore_db:
dbs.append(db)
return dbs
def delete_col(client,db,col):
try:
client[db][col].delete_many({})
except Exception as e:
logger.error(e)
logger.error(db)
logger.error(col)
return False
else:
return True
def server_compare():
'''
比较2个数据库是否相同,只是单纯比较条数
'''
origin_client = origin()
target_client = target()
dbs = get_db_name(origin_client)
for db in dbs:
for col in get_collection_name(origin_client, db):
origin_count = origin_client[db][col].count_documents({})
target_count = target_client[db][col].count_documents({})
if origin_count!=target_count:
logger.info(f'collection {db} {col}有区别')
#
if delete_col(target_client,db,col):
items = []
logger.info(f'正在更新{db} {col}')
for i in get_item(origin_client, db, col):
items.append(i)
insert_item(target_client, db, col, items)
logger.info(f'更新数据库 {db} {col}')
time.sleep(1)
def get_collection_name(client, db_name):
collection_names = client[db_name].list_collection_names(session=None)
return collection_names
def main():
server_compare()
if __name__ == '__main__':
main()
原理就是不断迭代,不同的数据库,里面的不同的collection。
对于同名collection,通过条数是否一致,来决定是否要把原数据复制过来。
保存上面文件为main.py
执行 python main.py
就可以进行数据同步工作啦。 收起阅读 »
docker compose 部署 Wordpress
看一个B站的视频,然后顺着用官方的一个docker-compose.yml 的文件,创建的wordpress一直无法连接数据库。一直是失败的,太无语。
这个失败的wordpress的compose yaml文件如下:
使用logs查看,报错信息如下:
问题的根源在于用这个compose文件创建的数据库无法连接。 这个数据用的是要大于mysql > 5.7.
创建后默认的密码是root为空,而登录需要用到一个密码转换的插件。
后面找了另外一个wordpress 可以正常运行的:
收起阅读 »
这个失败的wordpress的compose yaml文件如下:
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
使用logs查看,报错信息如下:
MySQL Connection Error: (1045) Access denied for user 'root'@'172.23.0.3' (using password: YES)
问题的根源在于用这个compose文件创建的数据库无法连接。 这个数据用的是要大于mysql > 5.7.
创建后默认的密码是root为空,而登录需要用到一个密码转换的插件。
后面找了另外一个wordpress 可以正常运行的:
version: "3.3"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
收起阅读 »
使用docker部署wecenter
用docker部署LNMP后,把文件拷贝过来,数据库迁移过来。
然后修改伪静态的配置,在网站后台改下上传文件的路径,不然图片和头像都不显示。
然后修改伪静态的配置,在网站后台改下上传文件的路径,不然图片和头像都不显示。
迁移成功
从阿里云的共享主机wecenter迁移到腾讯云的独立主机.
国金证券万一开户,支持条件单,网格交易,ETF 定投,ptrade 量化,雪球同花顺登录,两融最低
国金证券股份有限公司是一家资产质量优良、专业团队精干、创新能力突出、具有规范类资格的综合类上市证券公司,也是中国证券监督管理委员会核准的七家合规试点证券公司之一。公司前身为成都证券,于1990年12月经中国人民银行批准成立,是国内第一批从事证券经营的专业证券公司之一
为了让用户有更好的投资体验,国金证券APP 继续推出和更新 条件单,网格智能交易,etf定投 等,费率如下
股票:万1
ETF/LOF:万0.5
可转债(新规):沪市:十万分之四点四 深市:十万分之四
两融: 最低5%
支持ptrade量化交易
支持雪球同花顺登录
支持条件单,网格交易,ETF 定投
需要的开户的朋友,请扫码联系,备注:国金开户
收起阅读 »
两融利率最低是哪个券商?
两融最低的券商
两融利率是融资融券的利息,一般在5.x%~8.x%。
而市场上最低的融资利率是哪个券商呢?
根据笔者接触到的券商来说(基本涵盖市面所有的券商), 最低的是某营业部的国金的5.3%,并且是默认开通就给到这个费率,开完可以继续往下调到5.1%,资金量大还可以继续往下调。也就是50W开完两融后的利率就是5.3%。
不少网上的券商说两融利率5.x%,而实际开户后会说5.x%是入金500W以上的费率,正常默认开通的费率是6.x%~9.x%。 套路满满的。
国金目前一个最大的优势是可以在app开通两融,不需要去营业部,不需要临柜! 适合上班族。
需要的可以扫描开通:PS 不是每个国金营业部都有这个费率哦

收起阅读 »
两融利率是融资融券的利息,一般在5.x%~8.x%。
而市场上最低的融资利率是哪个券商呢?
根据笔者接触到的券商来说(基本涵盖市面所有的券商), 最低的是某营业部的国金的5.3%,并且是默认开通就给到这个费率,开完可以继续往下调到5.1%,资金量大还可以继续往下调。也就是50W开完两融后的利率就是5.3%。
不少网上的券商说两融利率5.x%,而实际开户后会说5.x%是入金500W以上的费率,正常默认开通的费率是6.x%~9.x%。 套路满满的。
国金目前一个最大的优势是可以在app开通两融,不需要去营业部,不需要临柜! 适合上班族。
需要的可以扫描开通:PS 不是每个国金营业部都有这个费率哦

收起阅读 »
知识星球获取文章链接与数据

既然官方不提供这个功能,只能自己使用爬虫手段获取了,额。
迅投QMT实时调用集思录数据 自动交易教程
在QMT自带的文档里面,实在找不到任何的溢价率的数据,连转股价也没有,只有光秃秃的一个价格。所以在可转债多因子量化交易里面实在无法进行下去。
不过好在QMT支持第三方库,并且也可以连通外部数据,不像Ptrade那样封闭(Ptrade里面os这个内置库都被阉割了,更别说访问外部数据),所以笔者就写了一个实时访问集思录数据的接口,供QMT访问。
使用flask做接口是最简单,可是flask性能非常低下,故使用异步框架uvicorn +asgi。

返回了383个转债数据,只要集思录上有的,都可以获取到QMT里面。
在QMT里面的调用函数就8行:

其主要核心是之前的文章里面登录并获取集思录数据。然后套一个web接口调用即可。
而这里也把之前集思录密码加密部分改为自己使用AES加密,省去了JS执行的流程,简化了运行流程,提升了效率。

每次请求大约需要0.8~0.9秒左右。

运行方式:
先把依赖安装好, pip install -r requirements.txt
然后 python app.py
就在后台运行了,不要关闭。
然后用浏览器打开 http://127.0.0.1:8080 如果有数据就说明成功了。
QMT部分的代码:
调用上面本地的接口就可以获取数据了。
PS:提升速度TIP
第一次运行的时候 cache=False
会保存你的用户名密码加密数据,然后后续可以关闭上面的python程序,把上面代码的cache=False改为cache=True, 重新运行,这样速度会得到提升。因为不用每次都做AES计算了,因为每次对用户名密码做AES运算的结果第一次已经保存下来。
更多QMT教程,可以关注公众号与知识星球
收起阅读 »
不过好在QMT支持第三方库,并且也可以连通外部数据,不像Ptrade那样封闭(Ptrade里面os这个内置库都被阉割了,更别说访问外部数据),所以笔者就写了一个实时访问集思录数据的接口,供QMT访问。
使用flask做接口是最简单,可是flask性能非常低下,故使用异步框架uvicorn +asgi。

返回了383个转债数据,只要集思录上有的,都可以获取到QMT里面。
在QMT里面的调用函数就8行:

其主要核心是之前的文章里面登录并获取集思录数据。然后套一个web接口调用即可。
而这里也把之前集思录密码加密部分改为自己使用AES加密,省去了JS执行的流程,简化了运行流程,提升了效率。

每次请求大约需要0.8~0.9秒左右。

运行方式:
先把依赖安装好, pip install -r requirements.txt
然后 python app.py
就在后台运行了,不要关闭。
然后用浏览器打开 http://127.0.0.1:8080 如果有数据就说明成功了。
QMT部分的代码:
def get_jisilu_data():
try:
r = requests.get('http://127.0.0.1:8080/jisilu')
except Exception as e:
print(e)
return []
else:
return r.json()
调用上面本地的接口就可以获取数据了。
PS:提升速度TIP
第一次运行的时候 cache=False
会保存你的用户名密码加密数据,然后后续可以关闭上面的python程序,把上面代码的cache=False改为cache=True, 重新运行,这样速度会得到提升。因为不用每次都做AES计算了,因为每次对用户名密码做AES运算的结果第一次已经保存下来。
更多QMT教程,可以关注公众号与知识星球
收起阅读 »
python AES 加密 windows和linux平台的不同
同样一段AES加密的代码,放到了ubuntu可以正常使用,而在windows却报错。
实际两个平台使用pip install安装的aes库不一样。
windows报错
只需要把AES.new() 的参数里面的iv给去掉就可以了。

收起阅读 »
实际两个平台使用pip install安装的aes库不一样。
windows报错
File "C:\anaconda\lib\site-packages\Crypto\Cipher\__init__.py", line 77, in _create_cipher
raise TypeError("IV is not meaningful for the ECB mode")
TypeError: IV is not meaningful for the ECB mode
只需要把AES.new() 的参数里面的iv给去掉就可以了。

收起阅读 »






















