file_path=CISS_rc\apps\rc_data\
file_path=.\CISS_rc\db\db_assets\
### print all modules for current clss
2.1,文件目录、文件名、csv文件列名称批量处理
rename_folder |按命名规则对文件夹内满足条件的文件改名,并对columns赋值
add_columns2table | 对文件夹内文件名字进行统一处理,并讲列名称赋值
2.2,A股股票行业分类处理
import_df_ind | 导入行业分类必备的数据文件
match_ind_name | 根据行业代码匹配行业分类表格内的行业名称、行业级数和是否弃用
get_ind_period |根据期初和期末日期获取股票所属行业
get_ind_date |给定交易日获取股票所属行业
2.3,导入历史交易日数据
import_df_dates | 导入历史交易日数据数据文件
2.6,用交易日数据填入单证券品种" )
update_date_pass_code |给定table,对于现有个券文件,用WDS_TRADE_DT_20200210_ALL.csv 填入 WDS_S_INFO_WINDCODE_000001.SZ_ALL.csv
update_newcode_from_date |对于给定交易日内,若有新股票无个券csv文件则新建该文件
2.4,导入基金数据和持仓数据
import_fund_list | 根据季末日期获取基金基础信息列表
import_df_fund | 导入基金数据相关的数据表格
2.5,计算基金持仓股票多维度变动
cal_diff_stockport | 计算季度之间的差异值,但不进行分析
get_period_indicator_diff | 获取区间股票价格、市值股本、财务指标变动和涨跌幅
2.6,计算指数定期调整
cal_index_constituents_adjustment| 计算指数调整
{todo;1,安装\软硬件环境dependent}
{todo;1,软硬件环境dependent}
数据管理的功能主要通过“数据管理”目录实现,主要包括以下几类数据:时间数据、资产数据、投资相关基础信息数据、股票池数据、分析指标数据、方程和策略数据、交易信号数据、算法和最优化数据、交易数据、账户数据、组合数据、基金数据、团队数据、机构数据、市场数据、日志数据、用户数据、数据输入输出(In/Out,简称I/O)数据。时间数据子目录下可以对中国、香港和美国等不同国家不同市场的交易日、交易时间区别对待。多资产类别子目录内包含了数据脚本用于从信息服务商的数据接口(如Wind-API,Choice-API)抓取数据、初步分析后保存至本地。其他常用的数据服务商还有恒生,钱龙,恒泰,朝阳永续,各市场交易所等。以数据质量相对较高的某数据API为例,截止2018年12月,在获取香港、美国市场行情或财务基本面数据时仍然有很多诸如日成交金额、企业价值倍数等指标无法通过数据接口获得。因此在当前的策略开发过程中,人工复核和整理数据接口获取的数据还是不可或缺的。
数据格式csv json html , 类型bollean,int str datetime float 等 结构 时间序列, day weel quarter ,5month 数据输入/输出, pd, read 数据存储
介绍策略平台网站的主要功能。
python脚本功能实现的经典/主要流程包括了: 1,apps\目录内的测试文件,通常前缀为“test_”;
2,db\目录下的data_io.py文件根据配置文件config\目录内的配置文件config_data.py导入数据 ;
3,bin\目录下的策略引擎_strategy.py依次引入stockpools.py,indicator.py,func_stra.py,signal.py,algo_opt.py生成最优配置策略组合;
4,bin\目录下的组合引擎根据策略配置构建模拟组合持仓、交易和净值,分为历史回测和逐日跟踪两大类;
5,bin\目录下的策略组合评估引擎对组合历史净值、持仓等进行评估;
6,bin\目录下的基金引擎在模拟组合基础上分析资金申购和赎回行为;
200420重新设计了.py脚本的注释模板和变量In/Out类型的标准。
.py脚本的注释模板
python 判断一个变量是否已经定义
1,第一种方法使用内置函数locals(): 'testvar' in locals().keys()
同时判断变量是否属于局部变量列表或全局变量列表。
"df_out" in locals() or "df_out" in globals()
2,第二种方法使用内置函数dir(): dir():获取已定义对象列表
'testvar' in dir()
3, 第三种方法使用内置函数vars(): vars():获取已定义对象字典
vars().has_key('testvar')
list:
在删除list中的元素后,list的实际长度变小了,但是循环次数没有减少,依然按照原来list的长度进行遍历,所以会造成索引溢出。
删除list里的每个对象:
list解析 :squares = [x**2 for x in range(1,10)]
[i1*3 for i1 in list1 if i1 < 10]
print os.getcwd() #获取当前工作目录路径
改变当前目录:进入E 下面的files 文件 可以使用 os.chdir(E:\files).
html5的主要功能。
浏览器基本都支持data协议,所以我们可以使用该协议去将网页中的table转化为excel下载下来.url=https://www.jianshu.com/p/a3642877d590
对html 进行base64编码处理: 编码后的html内容增加前缀 data:application/vnd.ms-excel; ,即可使浏览器将其中的数据当做excel来处理,浏览器将提示下载或打开excel文件
data协议可以将网页中的table转化为excel下载; 编码后的html内容增加前缀 data:application/vnd.ms-excel; ,即可使浏览器将其中的数据当做excel来处理,浏览器将提示下载或打开excel文件
在html网页的注释里标明3个部分对应的匹配:table表格--js方程--按钮 。 match:1,table id="ciss_table;2,function tableToExcel,base64;3,button,tableToExcel
参考案例:file=quick.html
HTML 原始码 |
显示结果 |
描述 |
< |
< |
little than,小于号或显示标记 |
> |
> |
greater than,大于号或显示标记 |
& |
& |
可用於显示其它特殊字符 |
" |
" |
引号 |
|
|
空格:1个字母 |
  |
|
空格:2个字母 |
相关文件保存在子目录.\coding\\下。
入门在线学习资源:菜鸟教程:https://www.runoob.com/js/js-examples.html
注释方法: /* blabla... */
单个语句;结尾
多个语句用{}包裹,如 if(test){ test=false;alert(test); }
在function(){} 中,"var x=1"是局部变量,function外不能用,"x=1"是全局变量,function外可用。
字符串:
数据类型5+2:undefined,null,boolean,number,string;object,function
判断数据类型: typeof(x);typeof x
var x --> typeof(x) == undefined
var x = null --> typeof(x) == null
var x = 070 --> x=70
数值转换:y=true --> Number(y) =1;y=false --> Number(y) =0
y=null --> Number(y) =0;
y=undefined --> Number(y) =NaN;
string to number:y="123" --> Number(y) =123 ;
识别整数:识别到第一个非数字停下来,包括小数点 parseInt("1234blue") = 1234;parseInt("22.5") =22
number to string:var age=11, var age_str=age.toString()
方法二:String(x), 和toString()的区别,会返回null和undefined
Obejct类型:定义 var obj = new Object() ;
操作符:加减乘除等
age = age+1 ==== ++age;age = age-1 ==== --age
逻辑判断:非not,用感叹号, !false, !"blue",!"600036.SH"
逻辑判断:与and,用 && , a2 && b1
字符串比较:"Bea" < "asdff",因为大写字母排在小写字母后边,
x +=10; 等价于 x = x+10;
字符串比较:小于, "23" < 3 == false ,"23"会先被转化成23再比较
条件操作符: var result = ( a > b) ? a:b
如果a大于b,result=a,否则result=b
1,if (a < b) { bla1 } ; else { bla2 } ;
2, do { bla } while ( a < b )
3, while( a < b ) { bla }
4, var x= 5; for( var i =0; i < x; i++ ){ alert(i) }
var i=0,count=10; for(;i < count;) { alert(i);i++; }
4.2,无限循环; for(;;) { blabla... }
4.3,枚举对象:for (var item in list_a ){ bla... }
break 和 continue的区别:前者会立刻跳出for(){}循环导致{}内最后一次不再计算, continue则会继续for(){}直到下一次停止。
layer_outermost:
for(var i=0;i < 10;i++){
for(var j=0;j < 10;j++){
if (i==5 && j==5){
break layer_outermost;
} num++;
} }
在多个for(){} 之前定义layer_outermost,会帮助break直接跳到最外层的for循环。
多种情况语句:
switch (i) {
case 25 : alert(i);
case 20 : alert(i);
case 35 : alert(i);
default : alert("other");
}
等价于:
if(i==25){
alert( i ) ; }
else if (i==30){
alert( i ) ; }
else if (i==35){
alert( i ) ; }
else {
alert( "other" ) ; }
JavaScript的Function(){}可以没有任何参数,直接引用arguments对象,在后续实例例子中定义好就行。
function sayHi(){
alert("Hello" + arguments[0]+ arguments[1] ) ; }
例子:sayHi("a")
例子:sayHi(["a","b"])
arguments对象和参数变量一起用:
function doAdd(num1,num2){
if (arguments.length == 1 ){
return(num1+10);
} else if ( arguments.length == 2 ){
return arguments[0] + num2 ;}
}
notes:doAdd(4,9) 情况下,arguments[0]==num1==4,arguments[1]==num2==9
function sum(x,y){
return x+y; }
function diff(x,y){
if (x < y){
return y-x;
}else {
return x-y; }
var person = new Object() ;
person.name = "Aaron" ;
alert( person.name );
var person = {
"name" : "Nike", "age": 29, 5: true } ;
var person = {} ; 定义Object,等于var person = new Object() ;
person.name= "Nike" ; 也等于person["name"]= "Nike" ;
person.age=29 ;
Array的每一项都可以保存任何类型的数据。
空数组 var code_list = new Array();var code_list = [];
var code_list =["600036.SH","000001.SZ"];
var code_list =new Array(20); 长度为20的list/Array
var len_list = code_list.length ;返回Array的长度
在Arrya末尾添加新项,code_list[ code_list.length ] ="688008.SH";
code_list[ code_list.length ] ="688026.SH" ;
判断变量list1是否是Array
alert(code_list instanceof Array );
或 if( Array.isArray(code_list) ){}
判断变量list1是否是Object
alert(code_list instanceof Object );
alert(code_list instanceof RegExp );
RegExp 是某种正则表达式,比如 var pattern1 = /[bc]at/i ;匹配第一个bat或者cat,不区分大小写。
var portfolio_1 = new Array();
portfolio_1[0] = new Object();
portfolio_1[1] = new Object();
栈方法:push和pop
var code_list = new Array();
var count = code_list.push(["600030.SH","000345.SZ"]) ;count=2;存入2项
var code = code_list.pop(); 取得list最后一项
排序:
var list1=[1,3,2,4]
list1.sort();升序排列
list1.reverse();倒叙排列
连接2个Arrya
var list2= list1.concat( 12,[13,24]);
list2=[1,3,2,4,12,13,24];
var list3= list2.slice(1,4); 得到第一个和第四个值并组成新的Array
splice(),删除、插入、替换
var removed_list = code_list.splice(0,2) ;删除前2项
var added_list = code_list.splice(3,0,"0700.HK","3968.HK") ;从第三项开始插入两项
var replaced_list = code_list.splice(2,1,"0700.HK","3968.HK") ;删除第2项,从第2项开始插入两项
判断位置:
code_listindexOf(4) ;返回第四个值。
5种方法:every(),some(),filter(),forEach(),map()
1,code_list_judge=false,判断code_list中每个值都大于2
var code_list=[1,3,4,5,9]
var code_list_judge = code_list.every(
function(item,index,array) {
return(item>2);
} )
2,code_list_judge=true,判断code_list中有部分值都大于2
var code_list_judge = code_list.some(
function(item,index,array) {
return(item>2);
} )
3, 获取code_list中有部分值都大于2的项目
var code_list_sub = code_list.filter(
function(item,index,array) {
return(item>2);
} )
4, 对code_list中每一项进行操作
var code_list_sub = code_list.map(
function(item,index,array) {
return item+2 ;
} )
forEach() 和for(){}功能一样
基础日期是19700101
var now = new Date();
var now = new Date( Date.parse("May 25,2004") );
Date.UTC() 返回日期的毫秒数
var y200001 = new Date( Date.UTC(2000,0)); 数字0表示2000年的第一个月,如果1表示2月;
var y200004 = new Date( Date.UTC(2000,4,5,9,30,15)); 20200405,09:30:15;
var y200004 = new Date( Date.UTC(2000,4,5,9 ));
y200001 < y200004 ; // true
小时数0-23
获取最新时间
var date0 = Date.now();等于 var date0 = +new Date() ;
日期格式化:y200001.toDateString();y200001.toTimeString();
范式:varexpression = / pattern / flags;其中flags标志有三种:
g,匹配所有满足条件的字符串 ;
i,匹配第一个复合条件的并停止,不区分大小写 ;
m,多行模式,匹配所有行的匹配项 ;
例子:/ .ai / gi; 即以"ai"结尾,且同时满足g和i的条件
例子: / \[aap\]54 / i ; 反斜杠用于输入特定非字母的符号等
例子:/ \.ai / gi; 即以".ai"结尾,且同时满足g和i的条件,等价于 "\\.ai"
字符串方法
search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。 replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
var str = "Visit Runoob!"; var n = str.search(/Runoob/i);
6
var str = "Visit Runoob!"; var n = str.search("Runoob");
6
Visit Microsoft!
test() 方法是一个正则表达式方法。
test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
例子:"life" 是否在 "The best things in life are free" 里:
匹配日期,如2019-08-03;
var temp_date ="2019-08-13";
var date_patt = / \d{4}-\d{2}-\d{2} / ;
if ( date_patt.test( temp_date ) ) {
document.write( temp_date ); }
控制小数点数量:
var num=356.231569; alert( num.toFixed(2));
返回字符串长度; var str1="asdasdasd";str1.length ;
返回字符串其中一部分字符char; str1.substring(2,5);
对html不能直接显示的4个符号进行转换:
function htmlEscape(text) {
return text.replace( / [<> " & ] / g,function( match,pos,originalText){
switch(match) {
case "<": return"\&\lt;";
case ">": return"\&\gt;";
case "&": return"\&\amp;";
case """: return"\&\quot;";
}
} ) }
数学计算:
最大值,最小值;Math.max();Math.min();
自然对数Math.LN10();Math.LN2();Math.LOG10E();Math.LOG2E();
平方根Math.SQRT2();
四舍五入:向上Math.ceil(),向下Math.floor();,标准Math.round();
返回0~1的随机数,Math.random()
当下主流框架中,React、Angular、Vue 三足鼎立,我们和本书的原作者一样,在经过对它们的了解和实践以后,最终都惊叹于 Vue 简单而不失优雅的开发风格。如果没有深厚的编程功底以及设计能力,想要优雅地使用 React 会存在一些障碍 ;而对于 Angular 来说,对于个人开发者和中小型的应用又略显得“重”了,学习曲线也比较陡峭。但 Vue 对于个人开发者和中小型应用更友好,学习曲线也是渐进性的,非常适合用来入门和学习 MVVM框架中所涉及的通用知识和开发理念。
2019年初的三本书:深入浅出Vue.js;Vue.js快跑:构建触手可及的高性能Web应用;Vue.js从入门到项目实战;
1,官网安装node.js;测试是否安装成功:CMD里输入 nodejs -v
直接运行npm install等命令会报错的。增加环境变量NODE_PATH 内容是:D:\nodejs\node_global\node_modules [对应的安装文件夹]
测试NPM安装vue.js ; 命令:npm install vue -g ;这里的-g是指安装到global全局目录去
NPM安装vue-router ;命令:npm install vue-router -g
npm: Nodejs下的包管理器。 webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资源的合并和打包。
vue-cli: 用户生成Vue工程模板。(帮你快速开始一个vue的项目,也就是给你一套vue的结构,包含基础的依赖库,只需要 npm install就可以安装)
测试vue是否安装好,CMD输入: vue -v
2,新建VUE项目:选好文件夹,vue init webpack vue01
3,打开vue项目:To get started: cd vue_test ; npm run dev
输出: Your application is running here: http://localhost:8080
vue项目的文件目录:C:\ciss_web\static\templates\ciss_exhi\test\vue_test
vue项目组件的文件目录:..\vue_test\src\components
打开的网页网址 :http://localhost:8080
3,新建内容的步骤:
1,在文件 App.vue 中import组件,import compo_ciss from './component/compo_ciss.vue' vue教程:https://www.runoob.com/w3cnote/vue2-start-coding.html
https://www.runoob.com/vue2/vue-template-syntax.html ;https://cn.vuejs.org/v2/guide/ ;