
Địa chỉ chiến lược: https://www.fmz.com/strategy/345
Trong bài viết này, chúng ta hãy thực hành chuyển một chiến lược JavaScript đơn giản. Bằng cách cấy ghép các chiến lược, bạn sẽ trở nên quen thuộc hơn với các cuộc gọi của giao diện Inventor Quantitative Trading Platform và hiểu được những khác biệt nhỏ giữa các ngôn ngữ khác nhau khi phát triển các chiến lược trên nền tảng. Trên thực tế, sự khác biệt giữa chiến lược phiên bản JavaScript và phiên bản Python chiến lược rất nhỏ vì các lệnh gọi giao diện về cơ bản là giống nhau.
Trích dẫn từ phiên bản JavaScript của hướng dẫn:
Điều này đòi hỏi phải mở một vị thế. Ví dụ, nếu tài khoản có 5.000 nhân dân tệ và 1 đồng xu, nếu giá trị của đồng xu lớn hơn số dư tài khoản là 5.000 và chênh lệch giá vượt quá ngưỡng, ví dụ, đồng xu hiện có giá trị là 6.000 nhân dân tệ, sau đó bán (6.000-5.000)/6.000. /2 đồng, nghĩa là đồng tiền đã tăng giá, đổi tiền lại, nếu đồng tiền mất giá, ví dụ, xuống còn 4.000 nhân dân tệ, hãy mua (5.000-4.000)/4.000/2 tiền xu, mua lại một số khi đồng xu giảm, nếu nó tăng trở lại, tôi sẽ bán nó một lần nữa, giống như một sự cân bằng, với các biện pháp phòng ngừa khác nhau ở cả hai bên, vì vậy tôi gọi nó là chiến lược cân bằng.
Nguyên lý chiến lược rất đơn giản và phiên bản mã JavaScript không dài, chỉ hơn 70 dòng. Được chuyển sang chiến lược ngôn ngữ Python với cú pháp ngắn gọn hơn, mã ngắn hơn và rất phù hợp với người mới bắt đầu học. Có rất nhiều mã được các nhà phát triển chia sẻ trên Nền tảng giao dịch định lượng Inventor và ngôn ngữ hỗ trợJavaScript/C++/PythonV.v., việc thành thạo thêm một ngôn ngữ phát triển không chỉ hữu ích cho việc học tập, nghiên cứu và các chiến lược phát triển mà còn cho phép bạn trở nên quen thuộc hơn với nhiều giao diện API khác nhau của nền tảng.
'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''
InitAccount = None
def CancelPendingOrders():
ret = False
while True:
orders = _C(exchange.GetOrders)
if len(orders) == 0 :
return ret
for j in range(len(orders)):
exchange.CancelOrder(orders[j].Id)
ret = True
if j < len(orders) - 1:
Sleep(Interval)
return ret
def onTick():
acc = _C(exchange.GetAccount)
ticker = _C(exchange.GetTicker)
spread = ticker.Sell - ticker.Buy
diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2
ratio = diffAsset / acc.Balance
LogStatus("ratio:", ratio, _D())
if abs(ratio) < threshold:
return False
if ratio > 0 :
buyPrice = _N(ticker.Sell + spread, ZPrecision)
buyAmount = _N(diffAsset / buyPrice, XPrecision)
if buyAmount < MinStock:
return False
exchange.Buy(buyPrice, buyAmount, diffAsset, ratio)
else :
sellPrice = _N(ticker.Buy - spread, ZPrecision)
sellAmount = _N(-diffAsset / sellPrice, XPrecision)
if sellAmount < MinStock:
return False
exchange.Sell(sellPrice, sellAmount, diffAsset, ratio)
return True
def main():
global InitAccount, LoopInterval
InitAccount = _C(exchange.GetAccount)
LoopInterval = max(LoopInterval, 1)
while True:
if onTick():
Sleep(1000)
CancelPendingOrders()
Log(_C(exchange.GetAccount))
Sleep(LoopInterval * 1000)
Mã bắt đầu bằng
'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''
Đây là cấu hình kiểm thử ngược, nghĩa là cấu hình kiểm thử ngược (cài đặt) được lưu dưới dạng mã và kiểm thử ngược được tự động cấu hình theo cài đặt này. Phần này có thể bị xóa. Nếu bị xóa, bạn sẽ cần phải thiết lập thủ công thông tin cấu hình backtest trên trang backtest trong quá trình backtest. Tham khảo: https://www.fmz.com/bbs-topic/859
Các tham số của chiến lược này hoàn toàn giống với các tham số của phiên bản JavaScript. Mã chiến lược cũng được ghép từng câu một và cấu trúc chương trình không thay đổi. Bạn có thể so sánh chúng từng câu một để thấy sự khác biệt giữa các chiến lược được viết bằng các ngôn ngữ khác nhau ngôn ngữ.
Cấu hình tham số

Thống kê


Địa chỉ chiến lược: https://www.fmz.com/strategy/183374
Chiến lược này chỉ mang tính tham khảo, kiểm tra ngược và thử nghiệm. Nếu bạn quan tâm, bạn có thể tối ưu hóa và nâng cấp.