2020年5月

功能|企业微信微文档|腾讯文档|WPS.cn|钉钉|飞书
--|--
表格:跨表引用|×|√|√|√|√
表格:跨文件引用|×|×|√|×|×
表格:插入图表|×|×|√|√|√
表格:限定单元格只能自己编辑|×|×|√|√|×
表格:限定格只能部分人编辑|×|×|√|×|×
表单:扫码|×|×|√|×|×

WPS.cn功能测试

跨文件引用

  1. 每次需要更新,不会自动改变;
  2. 可以直接输入文件名如=[t.xlsx]Sheet1!A1, 但如果自己名下有2个文件名相同, 即使在不同的目录, 也会提示"无法确定引用哪个文件". 换句话, 如果文件名唯一, 无论在哪个目录下,不需要输入目录路径都能引用到.

易经与国人本性

易经读了很长时间,总是一读就打瞌睡那种。再读也读不过乾卦,“天行健,君子当自强不息”是清华校训,亢龙有悔、飞龙在天是降龙十八掌招式,故而还能读个似是而非。再往后看就不知所云了。
最近在翻看南怀瑾几十年前的讲稿《易经杂说》。他说的非常白话易懂,倒是看了不少,中间有许多观点不敢苟同,例如主要一类观点是现代科学的种种发现,都不出易经之所料之类的,跟现在仍然笃信地平说一样。若不出其所料,总该能指导科学实践了。
但今天看到三分之一处时,忽然有个顿悟:易经是中国人几千年以来思想与西方之不同的一个非常重要原因。
其一,易经被重视与孔夫子脱不开关系。孔夫子两千多年以来对中国文化影响最重要的人物。夫子五十岁读易经,据说传下《系传》一书,这就将易经置于很高的地位,庄子又将其推为“诗书礼易乐春秋”六经之一,自古文人必读。
其二,人类自古以来对未知总是恐惧的,而未来总是未知的,为了让未来可知,从古至今不外乎三种方式:求神、占卜、科学推演。科学用于简单的推演倒还可以,用于复杂系统的推演,如天气、灾难、瘟疫、社会发展,直到现在仍然捉襟见肘,古人就更难以选择科学来预测未来。剩下只有求神和占卜,这个东西方古人都共用,求神西有耶稣东有天,占卜西有吉普赛东有易经。显而易见的,西方更重视求神而东方更重视易经,而易经之重要作用就是预测占卜,而且大家知道“子不言怪力乱神”,就更使占卜地位优于求神了。
其三,从子不言怪力乱神展开几千年,中国人倾向于自己获知未来,而西方人倾向于让神决定未来。换句话说,中国人倾向于让命运掌握在自己手里,而西方人倾向于让神决定。这可能是易经最大的价值了。

易字溯源

南怀瑾说他相信易字是日月相合,以证阴阳。但从易字演变来看,并非如此。我们看看周文王老爷子生活的商朝,易字是两个带耳的杯子,一只杯子用手往另一只里面倒水,本意倾注,引申为变换位置,现在交易的易、以物易物的易意思基本保留,还引申为“赐”,即给予。易字的字型,以前是两个杯子带两个手,现在手省略了,下面的杯子也省略了,只留下一个倒水的杯子,也就是说,易上面的日不是太阳,而是杯子,下面是杯子流出来的水。而难易的易,应为借字而已。易经的三易:变易、简易,不易,其中变易和不易中的易,理解为变换没错,而简易中的易,一般理解为难易的易,然而若更加统一的仍然理解为变换,即简化变换的过程,也许更加接近原意。
i

参考: 易经基础篇

不阻塞,用start
start命令
call和start的区别

对于start,概况二句话:“不同进程不能传值”,“相同进程单向传值,老子传儿子,非儿子传老子”。

  对于call,“同一进程,变量互通”。

  另外,可以从以下几方面理解start与call命令的区别:

  一是调用范围不同:call主要用来进行批处理的内部调用,如call :pend 和一些dos命令的调用如call set test=2,但也可以调用其他可执行文件,而start则不能进行内部调用,但其可以执行基本上所有的外部程序,还可以执行shell,如打开文件夹start "" "%WINDIR%",安装网络打印机start "" "\IP\Printer"等等。

  二是调用方式不同:call是严格意义上而言的调用,在call另一个批处理时是在同一窗体进程里执行,而start则是执行,所以在执行另外一个批处理时是在不同的窗体进程里进行,也就是说在新开启的进程里执行,虽然start可以加入b参数,但其结果却完全不同。如我们使用call set test=2 和 start /b set test=2 看似执行的结果相同,但是我们发现后者有两个进程,而且在窗体里要执行两次exit才能退出,所以当我们使用start来执行一个批处理后最好在被调用的批处理中也加一个exit,否则无法退出被调用的批处理的dos窗体,但是使用call调用时如果在被调用的批处理中存在exit则会直接结束原始和被调用的批处理程序,这是一个非常严重的问题。建议在被调用的批处理中使用goto :eof来取代exit。

  三是调用结果不同:call调用不仅可以把参数或变量传给被调用的批处理,而且被调用的批处理也可以设置参数或变量以便回传,而start只能把参数或变量传给被调用的批处理,却不能回传参数或变量,这一点实际上是第二点的延伸。另外,我们还必须注意一点:使用call调用其他批处理时,在被调用的批处理中若我们使用goto命令的时候,建议要使用与原批处理中不同的标签名来跳转,否则可能会跳转到原批处理中而不能保证完整的执行被调用批处理中的所有语句。

架构网络争议

这儿有一篇去年Quicklib作者与vnpy作者之间的争论骂仗,看了才知道vnpy.comvnpy.cn不是一个站!前者是vnpy官方站,有做https,后者则不是,只做了http. 前者在百度中是 "vnpy量化社区",后者叫做"vnpy官网",迷惑性很大, 但是后者上去之后就很像是一个广告网站, 很多连接指向了pythonpai.com. 这个vnpy.cn搞得我以为vnpy没有文档, 原来是有的...
vnpy.com才是vnpy官网, 风格克制冷静, 有用安全的https协议. 作者"用python的程序员", 真名陈晓优. 公司为 上海韦纳软件科技有限公司.
vnpy.cn及其关联的一系列网站, 是quicklib的作者"量化林"的, 包括一系列互链的网站: quicklib.cn , quicklib.net , pythonpai.com , virtualapi.com , hbapi.cn (华宝证券), coolquant.cn . 搜索起来排名还挺靠前, SEO做得不错, 网站风格特别得广告化. 故而, 显得quicklib就很不可靠了. 通过whosi反查 ,其域名注册方 上海量贝信息科技有限公司, 王登高. QQ邮箱: 147423661@qq.com, 一共注册了如下域名:

vrltd.cn
ctponline.cn
hbapi.cn
momtree.cn
gucps.cn
virtualapi.cn
vnpy.cn
tradeapi.cn
mdapi.cn
lhjie.cn
tmtbp.cn
virtualexchange.cn
coolquant.cn
mdshare.cn
toukj.cn
kucps.cn
jobping.cn
pythonpai.cn
quicklib.cn

PS: 本文是2020年5月20日创建, 写这个PS以前的更新时间是2021年2月19日。写PS的今天是2022年1月3日。刚刚在一条新文章下看到评论,一个自称张律师所留邮箱为329xxxx385@qq.com的留言写着:请删除关于VNPY的评论,您的评论可能不够客观,牵涉到企业名誉权的问题,请删除!, 嗯, 好的, 已经被我当垃圾留言删除了. 本站就是个小的不能小的小站, 经不起用qq邮箱的大律师这么折腾, 双方言论请大家自己判断吧!
PS2: 紧接着PS, 百度了一下, vnpy.cn仍然排在第一位, 不过要仔细看,是广告位. 第二是知乎关于vnpy的提问, 第三是vnpy的github地址, vnpy.com在哪儿? 第一页最后一位... 打开vnpy.cn看了下, 作者似乎开源了一个叫做vntrader的工具, 挂在gitee 的vnpycn/vnpy下. 对于真正开源的项目我是很尊重的, vntrader可能也做的很好, 至少目前看商业化做得很好. 但是要走得远不能老是蹭别人的名头, 最后会给自己埋雷, 看看经典的乔丹告乔丹鞋的案例, 乔丹鞋当年质量做得其实很好, 然而跟乔丹打了几年官司以后, 乔丹鞋同辈的品牌甚至比乔丹鞋晚的品牌, 像特步啊361啊都做得风生水起了, 而乔丹鞋作为最早品质不错商业化也做得好的品牌, 现在只能默默吞食自己早年埋下的蹭名头苦果了. 建议vnpy.cn换个自己的名字,做好自己的品牌, 如果vnpy.cn的技术做的不错, 商业化做得又远超过vnpy.com, 何必还要蹭别人名字呢.
PS3: 程序员很多直到在百度上常常找不到自己想要的. 欧文试着bing搜索vnpy, 排第一的是vnpy.com, 第二才是vnpy.cn, 这符合大众对百度的印象,哈哈.

simnow

首先simnow各种坑.
坑1: 注册后, 会给一个investorID,这个才是后续登录交易平台的ID!
坑2: 首次登录必须修改密码,而网站上没有任何提示!你需要下载Simnow APP登录才能发现这一点. simnow APP需要选择9999张江
坑3: 登录后没有修改密码的地方! 需要退出登录,然后通过"忘记密码"的方式修改密码, 我也是醉了-__-|| 稳妥起见, 使用了6位数字密码,以免又有什么幺蛾子.
最后通过Simnow APP登录成功,说明一切终于正常了.
坑4:4个服务器! 前三个只能交易时段使用,后一个才能7x24使用. 可是! 7x24这个服务器通过vnpy登录永远会提示CTP不合法登录!测试使用第2个服务器第二组:Trade Front:180.168.146.187:10101,Market Front:180.168.146.187:10111;【电信】是可以的.非交易时段也可以登录.

进行策略调试

知乎上问答A

打印调试信息

从命令行启动vnpy的话, 就会将信息打印回命令行. 通过图标启动则不行

名词解释

回测: 用历史数据测试设置的自动化策略. 历史数据默认是从RQData上下载.
策略: 自动化的买入卖出策略.

RQdata

RQdata是米筐网站RiceQuant提供的数据下载服务. 似乎还不对一般个人开放, 但从vnpy进去似乎是可以的. 有个vnpy专用的使用申请, vnpy中默认下载用于回测的历史数据的数据库. 下载期货数据3000元一年,期货+期权是10000元一年. 试用期15天.

学习资料和API文档

vnpy似乎没有官方的API文档, 主要似乎是给GUI用户使用的.
这儿有大神做了非官方的文档github: vnpydoc_unofficial, 在线阅读. 不过这个大神跟我一样, 写一次就断更了.
这儿有一篇知乎上的笔记
蜗牛博客VNPY学习记录
pythonπ

有这么几个目录,但似乎只有第三个起作用.

C:\Users\username\pip.ini
C:\Users\username\pip\pip.ini
%APPDATA%\pip\pip.ini

pip.ini内容

[global]
index-url = https://pypi.douban.com/simple
[install]
trusted-host = pypi.douban.com

中国的名牌学校出来的学生,逻辑能力很强;美国名牌学校出来的学生,创造能力很强。但学校都不能培育的,就是预测能力。预测能力与逻辑和创造无关,所以从学校退学或者小学没毕业都可以做成功的创业者。预测能力与信心或者叫偏执有关。对预测结果越有信心,越能执行,别人看起来就越偏执。再好的预测能力也不能100%准确,即使这次预测准确,好运气和坏运气会接连来袭。所以经商者都喜欢搞搞风水、拜拜财神。

Future,期货合约, 规定未来购买价格, 必买必卖.
Option, 期权合约, 规定未来购买价格, 买方付保证金换来选择权, 可买必卖.
Forward, 远期合约, 与期货区别是期货是场内标准化的, Forward是场外非标准化的.

import pandas
import numpy

# 读excel
main():
    xls = pandas.ExcelFile(ordersFile)
    df= pandas.read_excel(xls, 'sheet1') # 读取dataframe

# 写excel
    with pandas.ExcelWriter('./订单清洗后数据.xlsx') as writer:
        df.to_excel(writer, sheet_name='sheet1',  index=None)  #默认会写入index, 建议不写入index

# 根据3列后数据去重
    df = df.drop_duplicates(sheet.columns[3:])

# 删除0列和指定名称列
    df = df.drop([df.columns[0], '文件名'], axis=1)

# 返回某一列(sheet名)的哪些行包含指定内容
    df.Sheet名.str.contains('作废')

# 计算True的数量
    numpy.sum(dfall['Sheet名'].str.contains('作废')!=0)

# 删除包含指定字符的行
   dfall[ ~dfall['Sheet名'].str.contains('作废') ]

# 插入列
   df.insert(index数值表示的位置, '列名', 数组)

# 直接数组方式插入
   df['新列名'] = [1,2,3,4]

# 直接数组方式修改
   df['旧列名'] = [1,2,3,4]

# 遍历并修改行内数值
for i in range(len(df)):
    index = df.index[i] #实际index和数组序号不同
    df.loc[index, '某列名'] = '新数值' + df.某某列名[index] # 必须使用loc修改,但可以直接使用"."读取

# 列名相同的简单合并
    df = df.append(otherdf)

# 相同内容填充数组
arr = numpy.full((3), 'a') # 填充一元数组
arr = numpy.full((3,2), 'a') # 填充二元数组

# 将第1列NaN替换掉的四种方式, 有时候会报错`A value is trying to be set on a copy of a slice from a DataFrame`, 有时候不会, 还不知道怎么解决.
df[1].fillna(0, inplace=True)
df[['a', 'b']] = df[['a','b']].fillna(value=0)
df.fillna({'a':0,'b':0})
df=df.fillna({'a':0,'b':0})

# 连接多个df后, index重复需要做index重置
df=df.reset_index(drop=True)

# 修改指定的columns名称
df.rename(columns={'$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}, inplace=True) 

数据合并

数据合并比较多样,看这儿https://www.cnblogs.com/guxh/p/9451532.html

使用第2行作为header(从0起算,序号为1)

sheet = pandas.read_excel(fileName, sheetName, header=1)

我们在用EcountERP, 不过感觉应该所有ERP对于下面的问题应该都差不多.
ERP中的品目管理是所有其他管理的基础. 所有品目管理最主要的就是要保证品目唯一性. 然而产品需求的快速改变和迭代开发导致品目也在不断迭代更新. 此时旧的代码需要停用,然后增加新的代码. 然而ERP原生没有版本管理, 增加的新代码也看不出和老代码有什么关联, 随着品目更新,停用的代码越来越多, 翻查新代码也是个问题.
ERP应该结合软件代码版本管理的思想, 不说分布式Git了, 集中式SVN的思想多少得有点儿吧, 这样代码+版本号来管理品目. 具体来说:

  1. 每次品目更改执行commit操作, 说明更改内容并自动升级版本号
  2. 可以用x.y.z的版本方式人工命名,也可以生成像Git一样的自动版本号
  3. 从品目到往来单位, BOM版本都可以通过版本管理来做,甚至订单模板等等也可以这么做.
  4. 甚至可以进行自动化单元测试, 以查看定义的品目有没有问题, 原材料组合成的BOM有没有遗漏, 有没有使用旧的版本等等
    总结来说, 通过版本管理, 甚至自动化测试, ERP进一步减轻人工管理的负担, 专注于新物料的开发, 与产品开发能够同步.

另外,不知道有没有可能基于文件系统的分布式ERP

  1. 可以基于Git, 但又有更细致的针对不同目录的权限管理
  2. 可以使用Excel或者其他本地数据库进行存储
  3. 可以使用特定的后缀名或本地软件, 便捷的UI以方便普通员工操作