趋势策略一般使用各种指标来判断行情方向,使用各个指标数值对比结果来作为交易信号。这样就避免不了使用参数,计算指标。既然使用了参数,就会有拟合的情况。在某些行情下策略表现非常好,但是如果运气不好,行情走势是对当前参数非常不友好的时候,可能策略表现就会非常差。所以,个人理解,对于策略设计应当是越简单越好,这样的策略健壮性会好一些。今天我们就来分享一个不使用指标的趋势策略。策略代码非常简单,只有40行。
import time
basePrice = -1
ratio = 0.05
acc = _C(exchange.GetAccount)
lastCancelAll = 0
minStocks = 0.01
def CancelAll():
while True :
orders = _C(exchange.GetOrders)
for i in range(len(orders)) :
exchange.CancelOrder(orders[i]["Id"], orders[i])
if len(orders) == 0 :
break
Sleep(1000)
def main():
global basePrice, acc, lastCancelAll
exchange.SetPrecision(2, 3)
while True:
ticker = _C(exchange.GetTicker)
if basePrice == -1 :
basePrice = ticker.Last
if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio :
acc = _C(exchange.GetAccount)
if acc.Balance * ratio / ticker.Last > minStocks :
exchange.Buy(ticker.Last, acc.Balance * ratio / ticker.Last)
basePrice = ticker.Last
if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio :
acc = _C(exchange.GetAccount)
if acc.Stocks * ratio > minStocks :
exchange.Sell(ticker.Last, acc.Stocks * ratio)
basePrice = ticker.Last
ts = time.time()
if ts - lastCancelAll > 60 * 5 :
CancelAll()
lastCancelAll = ts
LogStatus(_D(), "\n", "行情信息:", ticker, "\n", "账户信息:", acc)
Sleep(500)
策略原理非常简单,不使用任何指标,只是使用当前价格作为交易触发依据,并且主要参数只有一个ratio
控制开仓触发。
做多触发:
if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio
使用当前的价格,对比基础价格,当前价格大于基础价格时,并且价格超出ratio * 100 %
时,触发挂单,挂出多单。
下单后,更新基础价格为当前价格。
空单触发:
if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio
做空方向原理相同,使用当前价格,对比基础价格,当前价格小于基础价格时,并且价格超出ratio * 100 %
时,触发挂单,挂出空单。
下单后,更新基础价格为当前价格。
每次下单的订单量为可用资金数值的ratio * 100 %
。
除非计算出的下单量小于参数设置的最小交易量minStocks
,否则就下单。
这样让策略,跟随价格变动追涨杀跌。
回测时间范围大概一年。
运行结果:
最近有用户说Python策略比较少,后续就多分享一些Python语言编写的策略。策略代码也非常简单,非常适合发明者量化初学者学习。 策略地址:https://www.fmz.com/strategy/181185
策略仅供参考学习,回测测试,有兴趣可以优化升级。