Tài nguyên đang được tải lên... tải...

Chiến lược để mua người chiến thắng của phiên bản Python

Tác giả:FMZ~Lydia, Tạo: 2022-12-22 22:04:41, Cập nhật: 2023-09-20 09:22:41

img

Chiến lược để mua người chiến thắng của phiên bản Python

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)

Phân tích đơn giản về chiến lược

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%', lệnh đang chờ được kích hoạt và lệnh trống được liệt kê. Sau khi đặt hàng, giá cơ sở được cập nhật với giá hiện tại.

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.

Kiểm tra hậu quả

Khoảng thời gian của backtesting là khoảng một năm.

img

Kết quả chạy:

img img img

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ó.


Có liên quan

Thêm nữa