Chiến lược xu hướng thường sử dụng các chỉ số khác nhau để đánh giá hướng thị trường, và sử dụng kết quả so sánh của các chỉ số khác nhau làm tín hiệu giao dịch. Bằng cách này, không thể tránh được việc sử dụng các tham số và tính toán các chỉ số. Bây giờ các tham số được sử dụng, sẽ có một tình huống phù hợp. Ở một số thị trường, chiến lược hoạt động rất tốt, nhưng nếu bạn không may mắn và xu hướng thị trường rất không thân thiện với các tham số hiện tại, chiến lược có thể hoạt động rất kém. Do đó, tôi cho rằng thiết kế chiến lược càng đơn giản, càng tốt. Chiến lược này sẽ mạnh mẽ hơn. Hôm nay chúng ta sẽ chia sẻ một chiến lược xu hướng mà không có chỉ số. Mã chiến lược rất đơn giản, chỉ 40 dòng.
Mã chiến lược:
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:", ticker, "\n", "Account information:", acc)
Sleep(500)
Nguyên tắc chiến lược rất đơn giản. nó không sử dụng bất kỳ chỉ số, nó chỉ sử dụng giá hiện tại như là cơ sở kích hoạt giao dịch. chỉ có một tham số chínhratio
để điều khiển kích hoạt vị trí mở.
Đi dài kích hoạt:
if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio
Sử dụng giá hiện tại để so sánh với giá cơ sở. Khi giá hiện tại lớn hơn giá cơ sở và giá vượt quá giáratio * 100%
, kích hoạt một lệnh và chờ lệnh dài.
Sau khi đặt hàng, giá cơ sở được cập nhật với giá hiện tại.
Tác động lệnh ngắn:
if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio
Nguyên tắc hướng đi ngắn giống nhau. Giá hiện tại được sử dụng để so sánh giá cơ sở. Khi giá hiện tại thấp hơn giá cơ sở và giá vượt quá ratio * 100%'
Số lượng đặt hàng của mỗi đơn đặt hàng làratio * 100%
của giá trị quỹ có sẵn.
Đặt lệnh trừ khi số lượng lệnh được tính là nhỏ hơn số lượng giao dịch tối thiểuminStocks
được thiết lập bởi tham số.
Bằng cách này, chiến lược theo sau sự thay đổi giá để mua những người chiến thắng.
Khoảng thời gian của backtesting là khoảng một năm.
Kết quả chạy:
Gần đây, một số người dùng đã nói rằng có rất ít chiến lược Python. Sau này, tôi sẽ chia sẻ thêm các chiến lược được viết bằng Python. Mã chiến lược cũng rất đơn giản, rất phù hợp cho người mới bắt đầu học định lượng. Địa chỉ chiến lược:https://www.fmz.com/strategy/181185
Chiến lược chỉ dành cho tham khảo, học tập và backtesting. Nếu bạn quan tâm, bạn có thể tối ưu hóa và nâng cấp nó.