
Трендовые стратегии обычно используют различные индикаторы для определения направления рынка и используют числовые результаты сравнения различных индикаторов в качестве торговых сигналов. Это неизбежно приведет к использованию параметров и расчету показателей. Поскольку используются параметры, будет подгонка. Стратегия очень хорошо работает в определенных рыночных условиях, но если вам не повезет и рыночная тенденция будет крайне неблагоприятна для текущих параметров, стратегия может работать очень плохо. Поэтому, на мой взгляд, конструкция стратегии должна быть максимально простой, и такая стратегия будет более надежной. Сегодня мы поделимся трендовой стратегией, не использующей индикаторы. Код стратегии очень простой, всего 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
Стратегия предназначена только для справки, бэктестинга и тестирования. Если вам интересно, вы можете оптимизировать и обновить ее.