对着 Ichimoku4h.py 从上往下走。云转绿且价在云上买,反过来卖。不用迟行线。
社区云交叉逻辑,周期按 4h 放大成 20 / 60 / 120 / 30。文件只把转换线、基准线、两条先行带和云的颜色写进表。迟行线不写,因为它会看未来。
每一项是文件里的原文,不是口诀。先看黑底那几行,再听人话,再答三问。
class Ichimoku4h(IStrategy):
向引擎登记这份 4 小时一目。对照选的是类名。
INTERFACE_VERSION = 3
按第三版接口读 enter / exit。
timeframe = "4h"
每根 K 是 4 小时。下面四个周期是按这根时钟从 9/26/52/26 放大的。
startup_candle_count = 200
先丢掉大约 200 根。注释写了:滞后线 120 加位移 30,再留一点余量。
process_only_new_candles = True
只在 4h 收盘时看云有没有翻色。云本来就慢,不在未收盘的 K 上抢跑。
can_short = False
只做多。云转红是平多,不是开空。
use_exit_signal = True
云转红那行 exit_long,引擎会听。主出场是云,不是 ROI。
exit_profit_only = False
亏着也能按云翻红卖。结构翻了就走,不等解套。
ignore_roi_if_entry_signal = False
如果 ROI 真的碰到了,入场信号不能把它按住。这版 ROI 几乎焊死,这行很少派上用场。
minimal_roi = {"0": 10}
一上车要涨 10 倍才用 ROI。注释写了:几乎关掉 ROI,让云翻色自己出场。
stoploss = -0.12
硬止损 12%。注释写了:只防暴跌,主出场仍是云翻红。
trailing_stop = False
不用跟踪止盈。出场交给云和地板。
conversion_line_period = 20
base_line_periods = 60
laggin_span = 120
displacement = 30
经典 9 / 26 / 52 / 26 按 4h 放大。转换 20,基准 60,滞后 120,位移 30。变量名就是文件里的拼法,基准带 s,滞后写成 laggin。
ichi = ichimoku(
dataframe,
conversion_line_period=self.conversion_line_period,
base_line_periods=self.base_line_periods,
laggin_span=self.laggin_span,
displacement=self.displacement,
)
调用 technical 库的一目函数,把上面四个周期喂进去,得到一包线。
dataframe["tenkan"] = ichi["tenkan_sen"]
dataframe["kijun"] = ichi["kijun_sen"]
转换线和基准线写进表。这版买卖条件没用这两列,但算云的时候库已经用过它们。
dataframe["senkou_a"] = ichi["senkou_span_a"]
dataframe["senkou_b"] = ichi["senkou_span_b"]
两条先行带写进表。它们围出云,交叉就是云翻色。
dataframe["cloud_green"] = ichi["cloud_green"]
dataframe["cloud_red"] = ichi["cloud_red"]
库算好的云色。绿是 A 在 B 上,红是反过来。买卖各认一种颜色。
dataframe["cloud_green"] = ichi["cloud_green"]
dataframe["cloud_red"] = ichi["cloud_red"]
return dataframe
云色写完就还表。没有 chikou 这一行。文件头注释写了:technical 库明确写了迟行线看未来,不能回测。
(crossed_above(dataframe["senkou_a"], dataframe["senkou_b"]))
先行带 A 从下往上穿过 B。云由红转绿的那一下,不是「已经是绿」。
& (dataframe["close"] > dataframe["senkou_a"])
& (dataframe["close"] > dataframe["senkou_b"])
价格要站在云的上方。两条都高于,才算在云上,不是夹在雾里。
& (dataframe["cloud_green"] == True)
& (dataframe["volume"] > 0)
交叉那根还要云已经是绿,并且这根有量。几条门是 AND,缺一条就不买。
(crossed_above(dataframe["senkou_b"], dataframe["senkou_a"]))
先行带 B 从下往上穿过 A。云由绿转红的那一下。
& (dataframe["close"] < dataframe["senkou_a"])
& (dataframe["close"] < dataframe["senkou_b"])
价格要掉到云的下方。两条都低于,才算在云下。
& (dataframe["cloud_red"] == True)
& (dataframe["volume"] > 0)
交叉那根还要云已经是红,并且有量。和入场一样,几条门 AND。
对着这份文件讲。口头就行。不要编回测数字。