- 策略广场
- 增强型锤子线形态系统
增强型锤子线形态系统
Author:
扫地僧, Date: 2021-11-04 14:54:58
Tags:
商品期货形态JavaScript
/*backtest
start: 2015-06-26 09:00:00
end: 2018-06-01 15:00:00
period: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES","minfee":10,"fee":[0,0]}]
*/
function main() { // 主程序
var contractTypeDic = {}; // 新建一个合约品种对象
var contractTypeArr1 = contractType.split(","); // 处理合约类型
var contractTypeArr2 = []; // 新建一个空数组
for (var i = 0; i < contractTypeArr1.length; i++) {
contractTypeArr2.push(contractTypeArr1[i].split('/'));
} // 批量处理
for (var key = 0; key < contractTypeArr2.length; key++) {
for (var kay = 0; kay < contractTypeArr2[key].length; kay++) {
contractTypeDic[contractTypeArr2[key][1]] = {
unit: Number(contractTypeArr2[key][2]),
falsePosition: 0
}
}
} // 批量处理,给合约品种对象添加属性
var re = /\/\d{1,3}/gm // 正则表达式
var name = contractType.replace(re, ""); // 处理下单合约名称字符串
// 调用商品期货交易类库中的CTA框架。参数1:用每个品种的指数数据产生信号,用每个品种的当前主力合约下单。参数2:策略逻辑的回调函数。
$.CTA(name, function(st) {
var bars = st.records; // 获取K线数组
if (!bars || bars.length < maLen + 1) {
return;
} // 检测K线数据的长度。如果K线数据过短,则继续等待数据
var ma = TA.MA(bars, maLen); // 获取移动平均线数组
var ma1 = ma[ma.length - 2]; // 获取上根K线的移动平均线数据
var close1 = bars[bars.length - 2].Close; // 获取上根K线的数据
var longArr = talib.CDLHAMMER(bars) // 调用talib库中的锤子线形态,返回数组
var shortArr = talib.CDLINVERTEDHAMMER(bars) // 调用talib库中的倒锤子线形态,返回数组
var long = longArr[longArr.length - 2] // 获取上根K线锤子线形态数据
var short = shortArr[shortArr.length - 2] // 获取上根K线倒锤子线形态数据
if (contractTypeDic[st.symbol].falsePosition > 0 && (close1 < ma1 || short > 0)) {
contractTypeDic[st.symbol].falsePosition = 0;
return -contractTypeDic[st.symbol].unit;
} // 平多单
if (contractTypeDic[st.symbol].falsePosition < 0 && (close1 > ma1 || long > 0)) {
contractTypeDic[st.symbol].falsePosition = 0;
return contractTypeDic[st.symbol].unit;
} // 平空单
if (contractTypeDic[st.symbol].falsePosition == 0 && close1 > ma1 && long > 0) {
contractTypeDic[st.symbol].falsePosition = 1;
return contractTypeDic[st.symbol].unit;
} // 开多单
if (contractTypeDic[st.symbol].falsePosition == 0 && close1 < ma1 && short > 0) {
contractTypeDic[st.symbol].falsePosition = -1;
return -contractTypeDic[st.symbol].unit;
} // 开空单
});
}
template: strategy.tpl:40:21: executing "strategy.tpl" at <.api.GetStrategyListByName>: wrong number of args for GetStrategyListByName: want 7 got 6