快线从下往上穿过慢线就买,从上往下穿过就卖。
快线从下往上穿过慢线,就买;从上往下穿过,就卖。这叫金叉和死叉。
两条人走路。矮个子突然超过高个子,队伍气氛变热,这是金叉,买。矮个子又落到后面,气氛变冷,这是死叉,卖。你不预测谁会一直快,只在他们交叉的那一下行动。
FirstSma。研究机上的文件现在是空壳;金叉写法在 _history/FirstSma_v2_cross.py。populate_indicators 里算出 sma_fast 和 sma_slow。populate_entry_trend 用 loc 在金叉那一行写 enter_long = 1。populate_exit_trend 在死叉那一行写 exit_long = 1。if dataframe["sma_fast"] > ... 会报错。近 20 根收盘价的平均身高。矮个子,反应快。
近 50 根的平均身高。高个子,走得稳。
在这一行表格上盖「要买」的章。
loc 整列写,不能 if。这根 K 得有人成交,不是停牌的空棒。
volume == 0:永远不买。拧成很大的量能门槛:信号变少,那是另一课的过滤。答得出来,这课才过关。说给别人听,不要只在心里点头。
摘自 _history/FirstSma_v2_cross.py。只看这版新加的算线和盖章。
dataframe["sma_fast"] = ta.SMA(dataframe, timeperiod=20)
dataframe["sma_slow"] = ta.SMA(dataframe, timeperiod=50)
dataframe.loc[
(
qtpylib.crossed_above(dataframe["sma_fast"], dataframe["sma_slow"])
& (dataframe["volume"] > 0)
),
["enter_long", "enter_tag"],
] = (1, "golden_cross")
dataframe.loc[
(
qtpylib.crossed_below(dataframe["sma_fast"], dataframe["sma_slow"])
& (dataframe["volume"] > 0)
),
["exit_long", "exit_tag"],
] = (1, "death_cross")
对着文件,把每一行讲给别人听。特别要讲清:为什么用 loc,为什么不能写成 if。
这版还不必强求回测数字。数字放到 v3,用你自己跑出来的。