FMZ hướng dẫn người mới bắt đầu

Tác giả:Cỏ nhỏ, Tạo: 2019-04-09 11:29:07, Cập nhật: 2024-02-06 17:35:38

[TOC]

img

1.Bắt đầu với nền tảng FMZ

Đây là một hướng dẫn cơ bản cho người mới bắt đầu, cho một phiên bản đầy đủ của tài liệu API của chúng tôi, kiểm tra trênFMZ APICó rất nhiều thông số kỹ thuật rõ ràng mà không được đề cập trong hướng dẫn này để bạn khám phá.

Sau khi học toàn bộ hướng dẫn, bạn sẽ biết cách FMZ hoạt động và có thể viết một số chiến lược cơ bản.

1.1 Về nền tảng FMZ

Nền tảng FMZ là gì?

FMZ là một nền tảng giao dịch tự động cho các nhà giao dịch tiền điện tử với hỗ trợ cho nhiều thị trường trao đổi bitcoin / et / altcoin.

FMZ có thể làm gì cho anh?

Bạn có thể tìm hiểu cách viết bot của bạn từ chiến lược của chúng tôi quảng trường có chứa rất nhiều mã nguồn mở, chia sẻ mã chiến lược của bạn với những người khác, yêu cầu sự giúp đỡ chuyên nghiệp bất cứ lúc nào, chạy chiến lược của bạn trên nhiều sàn giao dịch, điều khiển bot của bạn trên trang web với máy tính hoặc điện thoại di động, bán chiến lược của bạn nếu bạn muốn, giao tiếp với nhiều người yêu thích tự động giao dịch khác trong chúng tôinhómNói tóm lại, FMZ là một nền tảng hoàn hảo cho những người muốn giao dịch tự động.

FMZ hỗ trợ sàn giao dịch Cryptocurrency nào?

FMZ hỗ trợ hầu hết các sàn giao dịch phổ biến, chẳng hạn nhưBinance, Bitfinex, Bitstamp, OKEX, Huobi, Poloniex, vv bạn cũng có thể giao dịch tương lai trênOKEXBitMEXXem danh sách hỗ trợ đầy đủ trênAPIBạn chỉ cần viết một chiến lược và chạy nó trên tất cả các sàn giao dịch mà không có bất kỳ thay đổi.

FMZ hỗ trợ ngôn ngữ lập trình nào?

FMZ hỗ trợ JavaScript, Python, C ++ (JavaScript và Python được khuyến cáo) để mã hóa các chiến lược của bạn.

API KEY của anh có an toàn không?

Đúng vậy, các API-KEY của bạn được lưu sau khi mã hóa.

  • Bạn cần phải nhập mật khẩu FMZ Khi thêm khóa. trình duyệt web sẽ mã hóa khóa API của bạn và truyền khóa mã hóa đến máy chủ FMZ sử dụnghttps.
  • Bạn cần phải nhập mật khẩu FMZ khi bạn chạy docker trên máy chủ hoặc máy tính của bạn.
  • FMZ sẽ gửi khóa mã hóa đến docker của bạn bằng cách sử dụng https khi bạn khởi động một bot. Docker sẽ giải mã để có được khóa.
  • FMZ không lưu mật khẩu của bạn ((chỉ mật khẩu Hash). Vì vậy, ngay cả chúng tôi không biết khóa API của bạn.
  • Bạn cần phải bảo vệ mật khẩu và máy chủ docker của riêng bạn.

Danh sách tính năng hiện tại:

  • 1.Cross-platform, hỗ trợ cho tất cả các sàn giao dịch tiền điện tử lớn
  • 2.Hỗ trợ cho trao đổi mô phỏng. https://wex.app/
  • 3.Có một hệ thống thử nghiệm hậu quả mô phỏng hiệu quả.
  • 4.Hỗ trợ để gửi email, đẩy tin nhắn đến tài khoản Telegram của bạn.
  • 5. Điều khiển dựa trên web có thể truy cập qua điện thoại của bạn.
  • 6.Hỗ trợ lập trình Python\C++\JavaScript.
  • 7.Chi phí cực kỳ thấp. 0,125 nhân dân tệ mỗi giờ, khoảng 0,018 đô la.
  • 8.NoAPI-Key hoặc mật khẩu được lưu trên máy chủ của chúng tôi. FMZ đã chạy trong hơn bốn năm mà không có bất kỳ vấn đề bảo mật.

1.2 Bắt đầu nhanh chóng sử dụng nền tảng FMZ

Để chạy một bot, bạn cần có một chiến lược, thêm một trao đổi, triển khai một docker đầu tiên. docker là thực thi của chiến lược của bạn chạy trên máy tính hoặc máy chủ của riêng bạn.

Một cái nhìn nhanh về trang chính

img

  • 1. Trang điều khiển chính của bạn
  • 2. Quản lý tất cả các bot của bạn (bắt đầu, dừng, xóa, mở, vv)
  • 3.Quản lý tất cả các chiến lược của bạn
  • 4.Sử dụng và quản lý Docker của bạn
  • 5.Thêm các sàn giao dịch mới
  • 6.Làm giao dịch bằng tay trên các sàn giao dịch mà bạn đã thêm
  • 7. Trả hóa đơn
  • 8.Hãy đặt bất kỳ câu hỏi nào ở đây
  • 9. FMZs trao đổi mô phỏng
  • 10.Debug công cụ mà bạn có thể chạy một khối mã mà không cần bắt đầu một bot.
  • 11.Mọi loại thông điệp
  • 12.Quảng trường chiến lược nơi liệt kê các chiến lược mã nguồn mở và sạc
  • 13.Live Robots nơi tất cả các bot đang hoạt động được liệt kê.
  • 14.Các diễn đàn nơi bạn có thể đăng bài để thảo luận về bất kỳ câu hỏi nào liên quan.
  • 15.Hãy yêu cầu ai đó viết mã cho bạn hoặc cung cấp dịch vụ này cho người khác.
  • 16.Sản phẩm cho các sàn giao dịch và cơ quan.
  • 17.Documentation API.
  • 18.Một số công cụ hữu ích, hãy tự kiểm tra.
  • 19.Thông tin tài khoản của bạn.

Thêm trao đổi

Thêm vàohttps://www.fmz.com/m/add-platform, hoặc nhấpPlatformnhãn. Chìa khóa truy cập và khóa bí mật của bạn có thể được áp dụng tại sàn giao dịch tiền điện tử. API-KEY được sử dụng để giao dịch và lấy thông tin riêng tư từ sàn giao dịch. Chúng tôi không lưu bất kỳ API-KEY hoặc mật khẩu nào trên máy chủ của chúng tôi. Bạn có thể đăng ký trên FMZtrao đổi mô phỏngvà thêm nó để thử nghiệm.

img

triển khai một docker

FMZ không chạy bot cho bạn, bạn cần phải triển khai một docker của chính mình như là người thực thi, đó là linh hoạt và an toàn hơn vì dịch vụ của chúng tôi không tham gia vào việc chạy bot của bạn.

Đối với cửa sổ, nó khá dễ dàng, chỉ cần làm theo hướng dẫn trênhttps://www.fmz.com/m/add-node

img

Đối với Linux, bạn có thể thuê một VPS trên trang web của chúng tôi, sẽ triển khai docker tự động.

  • 1. Mua một máy chủ đám mây (VPS) từ Amazon hoặc Google, cấu hình thấp nhất và rẻ nhất là đủ. bạn thường có thể có một thử nghiệm miễn phí trong một thời gian dài.
  • 2.Login vào máy chủ của bạn, làm theo hướng dẫn từ nhà cung cấp máy chủ của bạn hoặc Google nó.
  • 3.Chọn docker phù hợp với phiên bản hệ thống của bạn, hầu hết thời gian, nó là 64Bit.
  • 4. Đối với centos, chạywget www.fmz.com/dist/robot_linux_amd64.tar.gz, lệnh không tìm thấy? cài đặt đầu tiênyum install wget -y.
  • 5.Run tar -xzvf robot_linux_amd64.tar.gzđể mở zip.
  • 6.Run ./robot -s node.fmz.com/xxxxx -p -p yourFMZpassword, bạn nên thấy một cái gì đó như2018/07/05 05:04:10 Login OK, SID: 62086, PID: 7226, Name: host.localdomainĐiều đó có nghĩa là mọi thứ đã được thực hiện.node.fmz.com/xxxxxlà duy nhất cho mỗi người dùng, tìm riêng của bạn trênhttps://www.fmz.com/m/add-node.
  • 7. Bây giờ docker không chạy trong nền, nếu bạn đóng SHH client, docker sẽ dừng lại. Bấmctrl + Cđể ngăn chặn docker.
  • 8.Run nohup ./robot -s node.fmz.com/xxxxx -p yourFMZpassword &để chạy trong nền. bước này cũng có thể được thực hiện bằng cáchScreen command.
  • 9. Kiểm trahttps://www.fmz.com/m/nodes, nếu mọi thứ ổn, bạn có thể tìm thấy docker được triển khai ở đó.

Viết một chiến lược

Bạn nên viết chiến lược của riêng bạn hoặc mua từ hình vuông. Ở đây chúng tôi sẽ sử dụng một chiến lược JavaScript đơn giản như một bản demo để cho thấy cách sử dụng trang chỉnh sửa.https://www.fmz.com/strategy/125482. Bài hướng dẫn này sẽ không bao gồm cách sử dụng JavaScript vì bạn có thể tìm thấy rất nhiều hướng dẫn trực tuyến.

img

  • 1.Hãy chỉnh sửa mã của bạn
  • 2.Backtesting, chúng ta sẽ bao gồm phần này trên một hướng dẫn trung gian
  • 3. Ngôn ngữ lập trình của mã của bạn, JavaScript đã được sử dụng trong bản demo này
  • 4.Tiêu đề, 所以 chia thành tiếng Trung và tiếng Anh, tên sẽ được hiển thị được quyết định bởi ngôn ngữ của trang web FMZ
  • 5.Loại chiến lược của bạn, mặc định là phổ biến
  • Bạn có thể chia các chiến lược của mình thành các loại khác nhau nếu bạn có quá nhiều
  • 7.Hãy chỉnh sửa mã từ xa từ IDE của riêng bạn thay vì trang web của chúng tôi
  • 8.Một liên kết đến tài liệu API
  • 9.Ghi chú về chiến lược (chỉ có thể thấy bởi chính bạn). bạn có thể ghi lại những suy nghĩ ở đây.
  • 10.Các mô tả về chiến lược. Những người khác sẽ thấy các mô tả nếu bạn chia sẻ hoặc bán chiến lược của mình trên Square.
  • 11.Hướng dẫn của chiến lược, chỉ có thể được xem khi ai đó mua chiến lược của bạn.
  • 12.Lưu mã của bạn, hoặcCtrl+Strên chế độ chỉnh sửa.
  • 13.Lưu cấu hình backtesting trên mã.
  • 14.Downloadhồ sơ chiến lược
  • 15.Xuất khẩu và nhập khẩu chiến lược trong khi giữ tất cả các tham số
  • 16. Thay đổi kích thước phông chữ và chỉnh sửa chủ đề
  • 17.Tập dạng mã tự động
  • 18.Sử dụng chế độ VIM để chỉnh sửa.

Dưới đây là lời giải thích đầy đủ về chiến lược. Để đẩy tin nhắn đến điện thoại của bạn, bạn cần phải liên kết điện tín với tài khoản của bạn tạihttps://www.fmz.com/m/account

/*
This strategy will send a message to your telegram when the price is higher or lower than
the set price.
All strategies must have a main function as the entrance.
*/
function main() {
     //change symbol,will cover the default symbol which was set when start a bot.Currency is a strategy arguments
    exchange.IO("currency", Currency)   
    var lastPushTime = 0    //the variable of last push timestamp.
    while(true){    //run a infinite loop, which is the basic structure
        //_C() function can retry the request automatically after failure. not necessary. var ticker = exchange.GetTicker() is ok.
        var ticker = _C(exchange.GetTicker) // for information about GetTicker, check on https://fmz-docs.readthedocs.io/en/latest/code_Instruction/Market%20API.html#getticker
        if(ticker.Last > UpPrice || ticker.Last < LowPrice){    //ticker.Last represents the last deal price
            if(Date.now() - lastPushTime > 300*1000){    //only push once in 5 mins, Date.now() return ms.
                lastPushTime = Date.now()    //update lastPushTime
                Log(Currency, 'Price is: ', ticker.Last, '@')    //Log the price on the bot's page and sent the message. '@' in the end means push message
            }
        }
        Log(Currency, 'Price is: ', ticker.Last) //just log the price
        Sleep(Interval*1000)    //check the last price again after Interval seconds
    }
}

Chạy robot.

Cuối cùng, đã đến lúc chạy một robot. TrênRobottrang, nhấpAdd robot, hoặc đến thămhttps://www.fmz.com/m/add-robottrực tiếp để thêm một bot.img

  • 1.Tên của robot
  • 2.Docker để chạy bot này
  • 3.Chiến lược điều hành
  • 4.Các thông số, giá trị mặc định có thể được thay đổi.
  • 5.Default Kline thời gian khi sử dụng trao đổi.GetRecords()
  • 6.Exchange
  • 7.Tradingbiểu tượng hoặc cặp
  • 8.Nếu biểu tượng giao dịch bạn cần không có trong danh sách, bạn chỉ có thể tự gõ nó.
  • 9.Clickđể thêm trao đổi
  • 10.Sự trao đổi đã được thêm vào.exchanges[0], exchanges[1]
  • 11.Clickđể điều hành robot!

Quản lý bot

TrênRobotTrang, bạn có thể thấy robot đang chạy.img

  • 1. Tên bot, nhấp vào đây để truy cập trang bot.
  • 2. Chiến lược được chạy bởi bot, nhấp vào đây để trang chiến lược.
  • 3.Bots trạng thái. có thể đang chạy, dừng lại, lỗi.
  • 4.Lợi nhuận của bot, được thông quaLogProfit(), có thể là bất kỳ con số nào bạn muốn.
  • 5.Thời gian tạo, có thể được thay đổi thành thời gian liên lạc cuối cùng.
  • 6. Kiểm tra bot. FMZ sẽ gửi cho bạn một thông báo khi bot đã bị dừng vô tình
  • 7. Ngăn chặn robot.

Nhấp vào tên bot để truy cập trang bot để biết thêm thông tin:img

2.Tài liệu giới thiệu API thường được sử dụng nhất

Phần này sẽ giới thiệu một số API được sử dụng phổ biến nhất, cho một phiên bản đầy đủ của tài liệu API của chúng tôi, kiểm tra trênFMZ API. Nó được khuyến cáo mạnh mẽ cho người mới bắt đầu để chạy mã demo trênTrang gỡ lỗi.

2.1 Khai thác

Sử dụng: Log(msg) Các thông số:chuỗi hoặc sốMô tả:Đăng một tin nhắn vào trang nhật ký robot.Quay lại:Không cóDemo:

function main() {
    var msg = 'msg string'
    Log(msg)
    Log('hello', 'world', 123)
    Log("red color message", "#FF0000")
    Log("push this message to telegram!@") // won't push on debug page
}

2.2 GetTicker

Sử dụng: exchange.GetTicker() Các thông số:Không cóMô tả:Nhận được thị trường hiện tại.Quay lại:

{"Info:{}, "High":5226.69, "Low":5086.37,"Sell":5210.63, "Buy":5208.5, "Last":5208.51, "Volume":1703.1245, "OpenInterest":0, "Time":1554884195976}

Demo:

function main() {
    var ticker = exchange.GetTicker()
    Log(ticker)
    Log('Last Price: ',ticker.Last, 'Bid Price: ', ticker.Buy)
}

2.3 Tìm hiểu sâu

Sử dụng: exchange.GetDepth() Các thông số:Không cóMô tả:Nhận sổ lệnh thị trường hiện tại.Quay lại:

{
    "Info":null,
    "Asks":[
        {"Price":5866.38,"Amount":0.068644},
        {"Price":5866.39,"Amount":0.263985},
        {"Price":5866.73,"Amount":0.05},
        {"Price":5866.77,"Amount":0.05},
        {"Price":5867.01,"Amount":0.15},
        {"Price":5875.89,"Amount":0.05},
        ......
        ]
    "Bids":[
        {"Price":5865.13,"Amount":0.001898},
        {"Price":5865,"Amount":0.085575},
        {"Price":5864.15,"Amount":0.013053},
        {"Price":5863.65,"Amount":0.016727},
        {"Price":5863.51,"Amount":0.128906},
        {"Price":5863.15,"Amount":0.2}
        ......
        ],
    "Time":1530241857399
}

Demo:

function main() {
    var depth = exchange.GetDepth()
    Log(depth)
    Log('Bid one: ', depth.Bids[0].Price, 'Ask one: ', depth.Asks[0].Price)
}

2.4 GetRecords

Sử dụng: exchange.GetRecords(), exchange.GetRecords(Period) Các thông số:

Tên Loại Cần bắt buộc Mô tả
Thời gian Global varble Không. Chu kỳ Klines, Các thông số tùy chọn, chu kỳ đường K mặc định được đặt khi khởi động robot.

Tất cả các thông số có thể:PERIOD_M101 phút,PERIOD_M55 phút.PERIOD_M1515 phút.PERIOD_M30:30 phút,PERIOD_H11h,PERIOD_D11d.Mô tả:Đưa các thanh Kline/candlestick cho thị trường hiện tại.Quay lại:

[
    {"Time":1526616000000,"Open":7995,"High":8067.65,"Low":7986.6,"Close":8027.22,"Volume":9444676.27669432},
    {"Time":1526619600000,"Open":8019.03,"High":8049.99,"Low":7982.78,"Close":8027,"Volume":5354251.80804935},
    {"Time":1526623200000,"Open":8027.01,"High":8036.41,"Low":7955.24,"Close":7955.39,"Volume":6659842.42025361},
    ......
]

Demo:

//A useful JavaScript example using Records to get a close array:
function main(){
    var close = []
    var records = exchange.GetRecords(PERIOD_H1)
    Log('total bars: ', records.length)
    for(var i=0;i<records.length;i++){
        close.push(records[i].Close)
    }
    return close
}

2.5 GetAccount

Sử dụng: exchange.GetAccount() Các thông số:Không cóMô tả:Nhận thông tin tài khoảnQuay lại:

{
    "Stocks":0.38594816,// free base asset
    "FrozenStocks":0,    //locked base asset
    "Balance":542.858308,//free quote asset
    "FrozenBalance":0     //locked quote asset
    "Info":{} //the raw data
}

Demo:

//A useful JavaScript example of Log your account value for a certain trading pair:
function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var account = exchange.GetAccount()
        var price = ticker.Buy
        var stocks = account.Stocks + account.FrozenStocks
        var balance = account.Balance + account.FrozenBalance
        var value = stocks*price + balance
        Log('Account value is: ', value)
        LogProfit(value)
        Sleep(3000)//sleep 3000ms(3s), A loop must has a sleep, or the rate-limit of the exchange will be exceed
        //when run in debug tool, add a break here
    }
}

2.6 Mua

Sử dụng: exchange.Buy(Price, Amount), exchange.Buy(Price, Amount, Msg) Các thông số:

Tên Loại Cần bắt buộc Mô tả
Giá cả Số Vâng. Giá mua lệnh giới hạn
Số tiền Số Vâng. Giá trị lệnh mua giới hạn
Msg Dòng Không. Thêm một tin nhắn bổ sung vào trang Log

Mô tả:Gửi lệnh mua và nhật ký mua tại trang của botQuay lại:trả về OrderID nếu thành công,nullNếu không.Demo:

//A useful JavaScript example of Buy for buy certain amount of bitcoin at a certain price:
function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var price = ticker.Sell
        if(price >= 7000){
            exchange.Buy(price+5, 1, 'BTC-USDT')
        }
        Sleep(3000)//Sleep 3000ms
    }
}

2.7 Bán

Sử dụng: exchange.Sell(Price, Amount), exchange.Sell(Price, Amount, Msg) Các thông số:

Tên Loại Cần bắt buộc Mô tả
Giá cả Số Vâng. Giá bán lệnh giới hạn
Số tiền Số Vâng. bán số tiền lệnh giới hạn
Msg Dòng Không. Thêm một tin nhắn bổ sung vào trang Log

Mô tả:Gửi lệnh bán và nhật ký bán tại trang botQuay lại:trả về OrderID nếu thành công,nullNếu không.Demo:

//A useful JavaScript example of Buy for buy certain amount of bitcoin at a certain price:
function main(){
    while(true){
        var ticker = exchange.GetTicker()
        var price = ticker.Buy
        if(price >= 7000){
            var id = exchange.Sell(price-5, 1, 'BTC-USDT')
            Log('OrderId: ', id)
        }
        Sleep(3000)
    }
}

2.8 GetOrder

Sử dụng: exchange.GetOrder(OrderId) Các thông số:

Tên Loại Cần bắt buộc Mô tả
Đặt hàng Số Vâng. Đơn đặt hàng

Mô tả:Nhận chi tiết đơn đặt hàng theo ID đơn đặt hàng.Quay lại:

{
    "Id":125723661,
    "Amount":0.01,
    "Price":7000,
    "DealAmount":0,
    "AvgPrice":0,
    "Status":0, // 0:Not filled, 1:Filled, 2:Canceled
    "Type":1,// 0:Buy, 1:Sell
    "ContractType":"",//just for futures contract orders
    "Info":{} //raw info from exchange
    }
}

Demo:

//A JavaScript example of using this API, which will buy until your account has 5 coins:
function main(){
    while(true){
        var amount = exchange.GetAccount().Stocks
        var ticker = exchange.GetTicker()
        var id = null
        if(5-amount>0.01){
            id = exchange.Buy(ticker.Sell, Math.min(10-amount,0.2))
        }else{
            Log('Job completed')
            return //return the main function, bot will stop
        }
        Sleep(3000) //Sleep 3000ms
        if(id){
            var status = exchange.GetOrder(id).Status
            if(Status == 0){
                exchange.CancelOrder(id)
            }
        }
    }
}

2.9 GetOrders

Sử dụng: exchange.GetOrders() Các thông số:Không cóMô tả:Nhận tất cả các lệnh mở cho các biểu tượng giao dịch của bạn.Quay lại:Một danh sách các đơn đặt hàng mở, kết quả có cùng một ý nghĩa nhưGetOrder()

[
    {
        "Info":{},
        "Id":16387538,
        "Amount":1123,
        "Price":0.00012826,
        "DealAmount":0,
        "AvgPrice":0,
        "Status":0,
        "Type":1,
        "ContractType":""
    }
]

Demo:

//A JavaScript example of using this API, which will cancel all open orders for trading symbol:
fuction CancelAll(){
    var orders = exchange.GetOrders()
    for(var i=0;i<orders.length,i++){
        exchange.CancelOrder(orders[[i].Id) // cancel order by orderID
    }
}
function main(){
    CancelAll()
    while(true){
        //do something
        Sleep(10000)
    }
}

2.10 Hủy lệnh

Sử dụng: exchange.CancelOrder(OrderId) Các thông số:

Tên Loại Cần bắt buộc Mô tả
Đặt hàng Số Vâng. Đơn đặt hàng

Mô tả:Hủy đơn đặt hàng bằng ID đơn đặt hàng.Quay lại:kiểu bool,truecó nghĩa là việc hủy yêu cầu đặt hàng đã thành công.falsecó nghĩa là việc hủy yêu cầu đặt hàng đã thất bại.

2.11 SetContractType

Sử dụng: exchange.SetContractType(ContractType) Các thông số:

Tên Loại Cần bắt buộc Mô tả
ContractType Dòng Vâng. ContractType

Mô tả:Đặt loại hợp đồng cho giao dịch tương lai. phải được thiết lập trước khi sử dụng API riêng khác.Quay lại:Không cóDemo:

exchange.SetContractType("this_week") //OKEX future has “this_week”, “next_week”, “quarter” , "swap"
exchange.SetContractType("XBTUSD") //BitMEX future has "XBTUSD","XBTM19",etc

2.12 GetPosition

Sử dụng: exchange.GetPosition() Các thông số:Không cóMô tả:Nhận thông tin vị trí hiện tại, chỉ cho giao dịch tương lai.Quay lại:Một danh sách các vị trí, sẽ trả về danh sách trống nếu tài khoản không có vị trí.Demo:

// Note: GetPosition function obtains all positions.
function main(){
    exchange.SetContractType("this_week") //for OKEX future
    var position = exchange.GetPosition()
    if(position.length>0){
        Log("Amount:", position[0].Amount, "FrozenAmount:", position[0].FrozenAmount, "Price:",
            position[0].Price, "Profit:", position[0].Profit, "Type:", position[0].Type, "ContractType:",                     position[0].ContractType)
    }
}

2.13 SetDirection

Sử dụng: exchange.SetDirection(Direction) Các thông số:

Tên Loại Cần bắt buộc Mô tả
Định hướng Dòng Vâng. có thểbuy, closebuy, sell, closesell.

Mô tả:Đặt các loại lệnh mua hoặc bán, chỉ cho giao dịch tương lai.Quay lại:Không cóDemo:

function main(){
    exchange.SetContractType("this_week");
    exchange.SetMarginLevel(5) // Set the leverage to 5 times
    exchange.SetDirection("buy") // Set the order type to buy long
    exchange.Buy(5000, 2) //buy long at the price 1000, quantity of 2
    exchange.SetDirection("closebuy")
    exchange.Sell(4999, 2) //close long position
}

2.14 Chức năng thường được sử dụng khác:

Kiểm tra thêm chi tiết về các chức năng trên FMZTài liệu API

Tên Mô tả Ví dụ
LogStatus Đăng một tin nhắn hoặc bảng trên thanh trạng thái của bot, sẽ làm mới mỗi lần LogStatus('msg')
_C Chức năng thử lại _C(exchange.GetRecords,PERIOD_H1),_C(exchange.GetTicker)
_N Chức năng vị trí _N(4001.512,2),_N(num,0)
_G Từ điển toàn cầu có thể được lưu sau khi khởi động lại robot. _G('initValue', 1000);_G('initValue')
_D Trả lại dấu thời gian _D(), _D(1478570053241)
TA Thư viện chỉ số TA-Lib. hỗ trợMACD, EMA, KDJvv... TA.MACD(records)
Math Chứng minh chức năng toán học, kiểm trahttps://mathjs.org/ Math.min(1,2), Math.sqrt(2)

3.Hai chiến lược thực sự hoàn chỉnh

Có rất nhiều chiến lược giảng dạy tronghttps://www.fmz.com/square/s:tag:Study/1, đơn giản và dễ dàng cho người mới bắt đầu.

3.1 Chiến lược giao ngay của nhà thị trường tần số cao

Đây là một chiến lược đơn giản nhưng mạnh mẽ được sử dụng để kiếm được hàng trăm lần trên thị trường giao dịch BTC thực. Nó không thể chạy trên các sàn giao dịch có phí giao dịch cao.

var floatAmountBuy = 20
var floatAmountSell = 20
var diffPrice = 3
var Interval = 3000

function CancelPendingOrders() {
    var orders = _C(exchange.GetOrders);
    for (var j = 0; j < orders.length; j++) {
        exchange.CancelOrder(orders[j].Id, orders[j])
    }
}

function GetPrice(depth) {
    var price = {buy:0, sell:0}
    var askAmount = 0
    var bidAmount = 0
    for(var i=0; i<depth.Bids.length; i++){
        askAmount += depth.Asks[i].Amount
        bidAmount += depth.Bids[i].Amount
        if(askAmount >= floatAmountBuy && !price.buy){
            price.buy = depth.Asks[i].Price
        }
        if(bidAmount >= floatAmountSell && !price.sell){
            price.sell = depth.Bids[i].Price
        }
    }
    if(!price.buy || !price.sell){
        price = {buy:depth.Asks[depth.Asks.length-1].Price, sell:depth.Bids[depth.Bids.length-1].Price}
    }
    return price
}

function onTick() {
    var price = GetPrice(_C(exchange.GetDepth))
    var buyPrice = price.buy + 0.01
    var sellPrice = price.sell - 0.01
    if ((sellPrice - buyPrice) <= diffPrice){
        buyPrice -= 10
        sellPrice += 10
    }
    CancelPendingOrders()
    var account = _C(exchange.GetAccount)
    var amountBuy = _N((account.Balance / buyPrice-0.01), 2)
    var amountSell = _N((account.Stocks), 2)
    if (amountSell > 0.02) {
        exchange.Sell(sellPrice, amountSell)
    }
    if (amountBuy > 0.02) {
        exchange.Buy(buyPrice, amountBuy)
    }
}

function main() {
    while (true) {
        onTick()
        Sleep(Interval)
    }
}

3.2 Tính năng OKEX đẩy kép

Một chiến lược thoát hiểm cổ điển, kiểm trahttps://www.fmz.com/strategy/103247cho cấu hình. Bạn có thể học cách trao đổi các tính năng và vẽ biểu đồ từ mã nguồn.

var ChartCfg = {
    __isStock: true,
    title: {
        text: 'Dual Thrust Up-Down Track'
    },
    yAxis: {
        plotLines: [{value: 0,
            color: 'red',
            width: 2,
            label: {
                text: 'Up Track',
                align: 'center'}
                },
            {value: 0,
            color: 'green',
            width: 2,
            label: {
                text: 'Down Track',
                align: 'center'},
            }
        ]
    },
    series: [{type: 'candlestick',
        name: 'current cycle',
        id: 'primary',
        data: []
        },
        {type: 'flags',
        onSeries: 'primary',
        data: [],
        }
    ]
};

var STATE_IDLE = 0;
var STATE_LONG = 1;
var STATE_SHORT = 2;
var State = STATE_IDLE;

var LastBarTime = 0;
var UpTrack = 0;
var BottomTrack = 0;
var chart = null;
var InitAccount = null;
var LastAccount = null;
var Counter = {
    w: 0,
    l: 0
};

function GetPosition(posType) {
    var positions = exchange.GetPosition();
    for (var i = 0; i < positions.length; i++) {
        if (positions[i].Type === posType) {
            return [positions[i].Price, positions[i].Amount];
        }
    }
    return [0, 0];
}

function CancelPendingOrders() {
    while (true) {
        var orders = exchange.GetOrders();
        for (var i = 0; i < orders.length; i++) {
            exchange.CancelOrder(orders[i].Id);
            Sleep(Interval);
        }
        if (orders.length === 0) {
            break;
        }
    }
}

function Trade(currentState, nextState) {
    var pfn = nextState === STATE_LONG ? exchange.Buy : exchange.Sell;
    if (currentState !== STATE_IDLE) {
        exchange.SetDirection(currentState === STATE_LONG ? "closebuy" : "closesell");
        while (true) {
            var amount = GetPosition(currentState === STATE_LONG ? PD_LONG : PD_SHORT)[1];
            if (amount === 0) {
                break;
            }
            // pfn(amount);
            pfn(nextState === STATE_LONG ? _C(exchange.GetTicker).Sell * 1.001 : _C(exchange.GetTicker).Buy * 0.999, amount);
            Sleep(Interval);
            CancelPendingOrders();
        }
        var account = exchange.GetAccount();

        if (account.Stocks > LastAccount.Stocks) {
            Counter.w++;
        } else {
            Counter.l++;
        }

        LogProfit(_N(account.Stocks - InitAccount.Stocks), "Profit rate:", _N((account.Stocks - InitAccount.Stocks) * 100 / InitAccount.Stocks) + '%');
        LastAccount = account;
    }
    exchange.SetDirection(nextState === STATE_LONG ? "buy" : "sell");
    while (true) {
        var pos = GetPosition(nextState === STATE_LONG ? PD_LONG : PD_SHORT);
        if (pos[1] >= AmountOP) {
            Log("Average Price", pos[0], "amount:", pos[1]);
            break;
        }
        // pfn(AmountOP-pos[1]);
        pfn(nextState === STATE_LONG ? _C(exchange.GetTicker).Sell * 1.001 : _C(exchange.GetTicker).Buy * 0.999, AmountOP-pos[1]);
        Sleep(Interval);
        CancelPendingOrders();
    }
}

function onTick(exchange) {
    var records = exchange.GetRecords();
    if (!records || records.length <= NPeriod) {
        return;
    }
    var Bar = records[records.length - 1];
    if (LastBarTime !== Bar.Time) {
        var HH = TA.Highest(records, NPeriod, 'High');
        var HC = TA.Highest(records, NPeriod, 'Close');
        var LL = TA.Lowest(records, NPeriod, 'Low');
        var LC = TA.Lowest(records, NPeriod, 'Close');

        var Range = Math.max(HH - LC, HC - LL);

        UpTrack = _N(Bar.Open + (Ks * Range));
        DownTrack = _N(Bar.Open - (Kx * Range));
        if (LastBarTime > 0) {
            var PreBar = records[records.length - 2];
            chart.add(0, [PreBar.Time, PreBar.Open, PreBar.High, PreBar.Low, PreBar.Close], -1);
        } else {
            for (var i = Math.min(records.length, NPeriod * 3); i > 1; i--) {
                var b = records[records.length - i];
                chart.add(0, [b.Time, b.Open, b.High, b.Low, b.Close]);
            }
        }
        chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close]);
        ChartCfg.yAxis.plotLines[0].value = UpTrack;
        ChartCfg.yAxis.plotLines[1].value = DownTrack;
        ChartCfg.subtitle = {
            text: 'Up Track: ' + UpTrack + '  Down Track: ' + DownTrack
        };
        chart.update(ChartCfg);
        chart.reset(PeriodShow);

        LastBarTime = Bar.Time;
    } else {
        chart.add(0, [Bar.Time, Bar.Open, Bar.High, Bar.Low, Bar.Close], -1);
    }

    LogStatus("Price:", Bar.Close, "Up:", UpTrack, "Down:", DownTrack, "Wins: ", Counter.w, "Losses:", Counter.l, "Date:", new Date());
    var msg;
    if (State === STATE_IDLE || State === STATE_SHORT) {
        if (Bar.Close >= UpTrack) {
            msg  = 'Long Price: ' + Bar.Close + ' Up Track:' + UpTrack;
            Log(msg);
            Trade(State, STATE_LONG);
            State = STATE_LONG;
            chart.add(1, {x:Bar.Time, color: 'red', shape: 'flag', title: 'Long', text: msg});
        }
    }

    if (State === STATE_IDLE || State === STATE_LONG) {
        if (Bar.Close <= DownTrack) {
            msg = 'Short Price: ' + Bar.Close + ' Down Track:' + DownTrack;
            Log(msg);
            Trade(State, STATE_SHORT);
            chart.add(1, {x:Bar.Time, color: 'green', shape: 'circlepin', title: 'Short', text: msg});
            State = STATE_SHORT;
        }
    }
}

function onexit() {
    var pos = exchange.GetPosition();
    if (pos.length > 0) {
        Log("Warning, has positions when exiting", pos);
    }
}

function main() {
    if (exchange.GetName() !== 'Futures_OKCoin') {
        throw "Only support OKEX features";
    }
    exchange.SetRate(1);
    exchange.SetContractType(["this_week", "next_week", "quarter"][ContractTypeIdx]);
    exchange.SetMarginLevel([10, 20][MarginLevelIdx]);

    if (exchange.GetPosition().length > 0) {
        throw "Can't have Positions when start.";}

    CancelPendingOrders();

    InitAccount = LastAccount = exchange.GetAccount();
    LoopInterval = Math.min(1, LoopInterval);
    Log('Exchange Name:', exchange.GetName(), InitAccount);
    LogStatus("Ready...");

    LogProfitReset();
    chart = Chart(ChartCfg);
    chart.reset();

    LoopInterval = Math.max(LoopInterval, 1);
    while (true) {
        onTick(exchange);
        Sleep(LoopInterval * 1000);
    }
}


Thêm nữa

Cỏ nhỏHãy tiếp tục cập nhật bài viết này, hãy tự do hỏi bất kỳ câu hỏi nào