在交易的过程中,标的的价格有时候波动很有规律,但更多时候它呈现出随机游走的不稳定状态。正是这种不稳定才是市场风险和机会的地方。不稳定也就代表了不可预测,那么如何在不可预测的市场环境中让收益变得更稳定,也是每一位交易者的难题。本篇介绍鳄鱼交易法则策略及程序化实现过程,希望对大家有所启发。
鳄鱼线介绍
鳄鱼线指标是比尔.威廉姆所发明的指标系列里面最为著名的一个,与其他指标,诸如AOAC指标、分型指标Fractals等搭配效果理想。与其他指标诸如MACD、KD指标等搭配亦不会觉得冗余重复,它其实就是三根特殊的均线,分别对应的是:
- 蓝线B:鳄鱼的颚。取13根K线的平滑移动平均数,将结果往未来的方向移动8根K线平滑移动平均数。
- 红线R:鳄鱼的牙齿。取8根K线的平滑移动平均数,将结果往未来的方向移动5根K线平滑移动平均数。
- 绿线G:鳄鱼的上唇。取5根K线平滑移动平均数,将结果往未来的方向移动3根K线平滑移动平均数。

鳄鱼线原理:
鳄鱼线是根据几何学以及非线性动力学总结出来的一套技术分析方法,当鳄鱼的下巴、牙齿和上唇闭合,或者相互纠缠时,代表鳄鱼睡着啦。这时我们通常待在市场外面,直到碎形出现,这样我们就可以原理不确定的市场,并且只参与明显的趋势行情。
当鳄鱼睡觉时间越长,醒来时就会越饿,所以一旦醒来,就会张大嘴巴。如果上唇在牙齿以上,牙齿在下巴以上,表明市场进入多头行情,鳄鱼要吃牛肉了。如果上唇在牙齿以下,牙齿在下巴以下,表明市场进入空头行情,鳄鱼要吃熊肉了。直到吃饱为止,之后它会再次闭上嘴巴(持有并获取利润)。
鳄鱼线计算公式:
VAR1 = ((HIGH + LOW)/2)
上唇 = REF(SMA(VAR1,5,1),3)
牙齿 = REF(SMA(VAR1,8,1),5)
下巴 = REF(SMA(VAR1,13,1)
通达信指标公式(部分):
Y:=((HIGH + LOW) / 2);
BLUE:=SMA(Y,13,1);
RED:=SMA(Y,8,1);
GREEN:=SMA(Y,5,1);
B2:=REF(BLUE,8);
R2:=REF(RED,5);
G2:=REF(GREEN,3);
KU1:=IF((HIGH = HHV(HIGH,3)),1,0);
KD1:=IF((LOW = LLV(LOW,3)),1,0);
UL:=IF((((REF(KU1,2) = 1) AND (REF(KU1,1) = 0)) AND (KU1 = 0)),REF(HIGH,2),REF(HIGH,(2 + BARSLAST((((REF(KU1,2) = 1) AND (REF(KU1,1) = 0)) AND (KU1 = 0))))));
DL:=IF((((REF(KD1,2) = 1) AND (REF(KD1,1) = 0)) AND (KD1 = 0)),REF(LOW,2),REF(LOW,(2 + BARSLAST((((REF(KD1,2) = 1) AND (REF(KD1,1) = 0)) AND (KD1 = 0))))));
KU:=IF((((CLOSE > B2) AND (CLOSE > R2)) AND (CLOSE > G2)),1,0);
KD:=IF((((CLOSE < B2) AND (CLOSE < R2)) AND (CLOSE < G2)),(0 - 1),0);
KK:=IF((BARSLAST(((KU = 1) AND (REF(KU,1) = 0))) < BARSLAST(((KD = (0 - 1)) AND (REF(KD,1) = 0)))),1,(0 - 1));
AO:=(MA(Y,5) - MA(Y,34));
AC:=MA((AO - MA(AO,5)),5);
AC1:=REF(AC,1);
AO1:=REF(AO,1);
KAC:=IF(((AC > AC1) AND (AO > AO1)),1,0);
KAO:=IF(((AC < AC1) AND (AO < AO1)),(0 - 1),0);
蓝:SMA(REF(Y,8),13,1),COLORFF0000;
红:SMA(REF(Y,5),8,1),COLOR0000FF;
绿:SMA(REF(Y,3),5,1),COLOR00FF00;
交易策略
1.等待交易信号,直到第一个鳄鱼嘴巴外面的碎形被突破。
2.价格在鳄鱼嘴之上,采用买的讯号并且不卖,将止赢单向上移动。
3.价格在鳄鱼嘴之下,采用卖的讯号,仅在停损离场时才买,不做多。(A股市场不操作)
如果价格在鳄鱼嘴外,表明当前正处在某种程度的冲击波中。
如果价格环绕鳄鱼嘴,表明当前处在某种修正波中。
鳄鱼策略构成部分pythont程序实现:
策略框架
# 策略主函数
def myTick():
pass
# 程序入口
def main():
while True: # 进入无限循环模式
onTick() # 执行策略的主函数
time.Sleep(5) # 休眠5秒
采用轮询模式,一个是myTick函数,另一个是main函数,其中在main函数中无限循环执行myTick函数。
导入Python库
from pytdx.reader import TdxDailyBarReader
import numpy as np
import time
转换K线数组数据
# 把K线数组转换成最高价、最低价、收盘价数组,用于转换为numpy.array类型数据
def get_data(bars):
arr = []
for i in bars:
arr.append(i['Close'])
return arr
创建了一个get_data函数,这个函数的目的是将普通的K线数组,处理成numpy格式的数据。输入参数为K线数组,输出结果为处理好的numpy格式的数据。
获取数据
reader = TdxDailyBarReader()
bars_arr = reader.get_df("../sz/lday/sz002701.day")# # 获取K线数组
if len(bars_arr) < 22: # 如果K线数量小于22根
return
计算数据
np_arr = np.array(get_data(bars_arr)) # 转换收盘价数组
sma13 = talib.SMA(np_arr, 130)[-9] # 下巴
sma8 = talib.SMA(np_arr, 80)[-6] # 牙齿
sma5 = talib.SMA(np_arr, 50)[-4] # 上唇
current_price = bars_arr[-1]['Close'] # 最新价格
下单交易
position = get_position()
if position == 0: # 如果无持仓
if current_price > sma5: # 如果当前价格大于上唇
exchange.SetDirection("buy") # 设置交易方向和类型
exchange.Buy(current_price + 1, 1) # 开多单
if current_price < sma13: # 如果当前价格小于下巴
exchange.SetDirection("sell") # 设置交易方向和类型
exchange.Sell(current_price - 1, 1) # 开空单
if position > 0: # 如果持有多单
if current_price < sma8: # 如果当前价格小于牙齿
exchange.SetDirection("closebuy") # 设置交易方向和类型
exchange.Sell(current_price - 1, 1) # 平多单
if position < 0: # 如果持有空单
if current_price > sma8: # 如果当前价格大于牙齿
exchange.SetDirection("closesell") # 设置交易方向和类型
exchange.Buy(current_price + 1, 1) # 平空单
本篇策略请勿用于实盘交易
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/289753
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!