2.1 Sử dụng API để truy cập thông tin tài khoản, truy cập dữ liệu thị trường, truy cập dữ liệu dòng K, truy cập thông tin sâu về thị trường

Tác giả:Giấc mơ nhỏ, Tạo: 2016-11-05 16:41:04, Cập nhật: 2019-08-01 09:31:23

2.1 Sử dụng API để truy cập thông tin tài khoản, truy cập dữ liệu thị trường, truy cập dữ liệu dòng K, truy cập thông tin sâu về thị trường

Cuối cùng, đến chương 2, bạn nên có một số kiến thức về các chức năng định lượng của nhà phát minh bằng cách tham quan chương trước.


  • Sử dụng API để truy cập thông tin tài khoản

    Giả sử rằng chuyến đi qua chương 1 đã thêm người quản lý, sàn giao dịch, tất nhiên, chúng ta có thể thử nghiệm mã bằng Inventor Quantified Analog Disks.

    Chúng ta sẽ tạo ra một chiến lược, gọi là thử nghiệm 1.img

    Giao diện chỉnh sửa chiến lượcimg img

    Mã là:

function main() {
    Log(exchange.GetAccount()); // 看过API 文档后知道, exchange就是交易所对象,实际上策略有个全局变量
                                // exchanges 数组,这个数组存放的就是你创建机器人或者回测时添加的交易所(可以是多个)
                                // 添加1个交易所 exchanges 数组就只包含1个交易所对象,即添加的交易所对象。
                                // 那么 exchange 和 exchanges 是什么关系呢? 其实 exchange 就是 exchanges[0] ,
                                // exchange 就是 exchanges 数组的第一个元素(这里这个元素是交易所对象)。
                                
                                // Log()函数应该也不陌生吧,这个API 就是输出一条日志,日志内容就是Log括号里面的参数。
}

Tạo một robot cũng được gọi là Test1 là một chiến lược liên kết được gọi là Test1 của Phong, được định lượng bằng cách sử dụng các nhà phát minh.img img

Chiến lược được thực hiện ngay lập tức và hiển thị thông tin tài khoản.img

Trong khi đó, một số người dùng đã sử dụng các tính năng khác nhau để tạo ra các thông tin về tài khoản của họ.img

  • Thu thập dữ liệu thị trường

function main() {
    Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
    //下面我们来试试 不停的获取行情数据。 
    while(true){ // 这里用一个无限循环的结构来不停的获取 交易所行情数据。
        Log("行情数据:", exchange.GetTicker()); // 哇! Log() 函数的括号里面可以写2个参数,第一个参数是: "行情数据:"
                                               // 第二个参数是 exchange.GetTicker() 这个函数的返回值。就是主交易所的行情数据。
                                               // 注意 Log() 函数的参数要用 逗号分隔。
        Sleep(1000);   // 咦~ 这个又是什么? 答:机器人程序 执行循环也需要休息!它可是执行很快的哦!(一秒N次)
                       // Sleep 函数的作用就是让程序暂停一会儿,括号里面的参数 1000 是 毫秒数, 1秒 = 1000毫秒。Sleep(1000);就是暂停1000毫秒。
                       // 不要小看这个参数,这个参数控制了程序的轮询频率,间接影响访问 交易所API 的频率,有些交易所API访问过于频繁可是会拒绝访问的。
    }
}

img Lưu ý:Có thể bạn sẽ nhận thấy rằng các hàm GetTicker thu được dữ liệu giá cao nhất và giá thấp nhất có sự khác biệt rất lớn, nói rằng, GetTicker trả về dữ liệu thị trường High, Low là giá cao nhất, thấp nhất trong chu kỳ được trao đổi, cụ thể là tùy thuộc vào việc trao đổi được thiết lập.

  • Thu thập dữ liệu đường K

    Trước tiên, chúng ta hãy xem mô tả của tài liệu API:
GetRecords(Period)	返回一个K线历史, K线周期在创建机器人时指定, Record数组结构
不加参数, 默认返回添加机器人时时指量的K线周期, 但也可以自定义K线周期
支持: PERIOD_M1 指1分钟, PERIOD_M5 指5分钟, PERIOD_M15 指15分钟, PERIOD_M30 指30分钟, PERIOD_H1 指1小时, PERIOD_D1 指一天

Chúng ta viết một đoạn mã để kiểm tra và lấy dữ liệu từ K-line với chu kỳ mặc định (khoảng 5 phút).

function main() {
    Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
    //下面我们来试试 不停的获取行情数据。 
    var records = exchanges[0].GetRecords();  // 按照默认周期获取K线数据
    Log("records:", records);  // 在日志中输出 获取到的K线数据。
}

Hiển thị đầu ra: records: [{Time:1478260200000,Open:4765.14,High:4773,Low:4764.54,Close:4769.47,Volume:5211.5399999999}, {Time:1478260500000,Open:4769.47,High:4773.01,Low:4764,Close:4764.78,Volume:3742.250000000002} {Time:1478260800000,Open:4764.78,High:4782,Low:4764,Close:4781.28,Volume:7929.090000000004} {Time:1478261100000,Open:4781.28,High:4795,Low:4774,Close:4792.02,Volume:11793.540000000006} {Time:1478261400000,Open:4792.02,High:4792.96,Low:4781,Close:4786.78,Volume:9204.90000000001} {Time:1478261700000,Open:4786.51,High:4788.66,Low:4775,Close:4775.31,Volume:7722.33999999965}

Bạn có thể thấy rằng records là một cấu trúc, được sắp xếp theo thời gian của K-line từ xa đến gần. Chúng ta hãy hiểu về đường K: (Một số biểu đồ là màu đỏ cho đường mặt trời, màu xanh lá cây cho đường âm đạo, một số khác là màu ngược lại).imgHãy xem biểu đồ ví dụ của K-line với chu kỳ 5 phút trên nền tảng.img Lưu ý:Một vòng lặp K được hoàn thành, giá trị của nó được xác định. Trong thực tế, chúng ta gọi var records = exchanges.GetRecords (); phần tử cuối cùng trong mảng dữ liệu được trả về là: records[records.length-1], thay đổi liên tục cho đến khi nó hoàn thành vòng lặp.

GetRecords trả về dữ liệu theo chu kỳ mặc định theo các cài đặt chính sách mà không thêm các tham số. Bạn cũng có thể nhập tham số để chỉ định chu kỳ của dòng K. Hiện tại, hệ thống trả về đã hỗ trợ GetRecords nhập tham số để chỉ định chu kỳ (không thêm tham số để trả về dữ liệu theo chu kỳ mặc định), cho phép sử dụng các chu kỳ khác nhau cùng một lúc khi sử dụng chính sách trả về.

  • Nhận thông tin sâu về thị trường

    GetDepth trả về cấu trúc Depth
function main() {
    var depth = exchanges[0].GetDepth();   //获取市场深度信息,  返回订单薄信息,一个对象包含2个属性,每个属性是一个对象数组。
    Log("depth:", depth);    // 日志中输出,一下的输出是 整理过的格式,是方便读者理解,实际上是所有内容都在一行显示的。
}

Có một số người đã bị ảnh hưởng bởi việc sử dụng các mã này.

depth: 
{"Asks":[{"Price":4726.07,"Amount":15},   // 卖单数组,回测时,数据都是模拟出来的,所以Amount 都是 15,索引为0的是卖一,依次类推。
         {"Price":4726.08,"Amount":15},
         {"Price":4726.09,"Amount":15},
         {"Price":4726.1,"Amount":15},
         {"Price":4726.11,"Amount":15},
         {"Price":4726.12,"Amount":15},
         {"Price":4726.13,"Amount":15},
         {"Price":4726.14,"Amount":15},
         {"Price":4726.15,"Amount":15},
         {"Price":4726.16,"Amount":15},
         {"Price":4726.17,"Amount":15}],
"Bids":[{"Price":4726.05,"Amount":15},   //  买单数组,索引为0的是买一, 向后依次类推。
        {"Price":4726.04,"Amount":15},
        {"Price":4726.03,"Amount":15},
        {"Price":4726.02,"Amount":15},
        {"Price":4726.01,"Amount":15},
        {"Price":4726,"Amount":15},
        {"Price":4725.99,"Amount":15},
        {"Price":4725.98,"Amount":15},
        {"Price":4725.97,"Amount":15},
        {"Price":4725.96,"Amount":15},
        {"Price":4725.95,"Amount":15}]
}

Đơn vị đặt hàng tương ứng là như thế này (đây là dữ liệu thực tế của OKCoin) ; thông tin sâu về thị trường trong quá trình thực tế (đơn vị đặt hàng) thay đổi nhanh chóng, các sinh viên quan tâm có thể đăng ký OKCoin và đăng nhập để xem.

img

Có thông tin sâu về thị trường (dữ liệu giao dịch) thì làm thế nào để sử dụng? Dữ liệu giao dịch có nhiều mục đích, ví dụ như đơn hàng (dĩ nhiên cũng có đơn đăng ký).

function main() {    
    var depth = exchanges[0].GetDepth();    // 获取市场深度
    Log("depth:", depth);                   // 日志输出显示
    Log(exchanges[0].GetAccount());         // 输出 吃单前的 账户信息
    var buyPrice = depth.Asks[0].Price;     // 设置吃卖单的价格,即卖一,
                                            // 有时为确保吃单成功,这样处理:var buyPrice = depth.Asks[0].Price + slidePrice;
    var buyAmount = depth.Asks[0].Amount;   // 吃卖单的量
    exchanges[0].Buy(buyPrice, buyAmount);  // 执行买入操作, 吃掉卖一 这个单子
    Log(exchanges[0].GetAccount());         // 显示买入后的  账户信息,对比初始账户信息。可以对比出 买入操作的成交的数量。
}

Kết quả của việc sử dụng đĩa giả lập được định lượng bởi các nhà phát minh:img


Thêm nữa

flydogĐiều thứ hai tôi thấy là sau khi tôi chọn nhà quản lý công cộng Mỹ, robot không có dấu hiệu cảnh báo trong danh sách, nhưng sau khi chạy, nó đã không xuất bất kỳ thông tin nào trong nhật ký, cho thấy không có thông tin nhật ký.

flydogThêm vào đó là phát hiện vấn đề: trong danh sách robot, trạng thái là hình tam giác màu đỏ có dấu chấm ngạc nhiên, giống như một gợi ý bất thường.

flydogXin chào, tôi đang thử nghiệm bằng nền tảng mô phỏng, bước đầu tiên là kiểm tra thông tin tài khoản, không có đầu ra nhật ký, gợi ý lỗi, không biết vấn đề xuất hiện ở đâu? Có một số người cho rằng, "Điều này là một sự cố lớn". function main (() { Log ((exchange.GetAccount (())); Log (("test"); ♪ Kết quả: Thử nghiệm 1 Chiến lược: Thử nghiệm 1 (đã được cập nhật vào 2018-09-13 14:25:33) Ngày: Được tạo vào 2018-09-13 14:07:57 Gần đây bắt đầu vào 2018-09-13 14:40:24 Ngừng vào 2018-09-13 14:40:25 Tình trạng: Kline cycle 1 phút có lỗi Được lưu trữ tại Trung Quốc: 42.236.82.38 - linux/amd64 (phát dụng), ID: 118025 Nền tảng: BotVS/BTC_USD

flydogXin chào, tôi đang thử nghiệm bằng nền tảng mô phỏng, bước đầu tiên là kiểm tra thông tin tài khoản, không có đầu ra nhật ký, gợi ý lỗi, không biết vấn đề xuất hiện ở đâu? Có một số người cho rằng, "Điều này là một sự cố lớn". function main (() { Log ((exchange.GetAccount (())); Log (("test"); ♪ Kết quả: Thử nghiệm 1 Chiến lược: Thử nghiệm 1 (đã được cập nhật vào 2018-09-13 14:25:33) Ngày: Được tạo vào 2018-09-13 14:07:57 Gần đây bắt đầu vào 2018-09-13 14:40:24 Ngừng vào 2018-09-13 14:40:25 Tình trạng: Kline cycle 1 phút có lỗi Được lưu trữ tại Trung Quốc: 42.236.82.38 - linux/amd64 (phát dụng), ID: 118025 Nền tảng: BotVS/BTC_USD

hokshelatoTrong khi đó, bạn có thể gọi `exchange.GetTicker ((() `, thường xuất hiện **GetTicker: timeout**, hãy hỏi tại sao?

dhyhuXin chào, dữ liệu giả lập thực tế là dữ liệu thực tế của sàn giao dịch đó?

đậuXuexizhong

Shandianliyuexchange.GetDepth (()) có trả về toàn bộ thông tin đăng ký trên sàn giao dịch hiện tại không? Có phải chỉ trả về một phần dữ liệu vì quá nhiều đăng ký?

maohbaoGetRecords ((Period) trả về lịch sử của một K-line, nhưng số lượng K-line trong lịch sử này bao gồm bao nhiêu K-linebar, và điều này được chỉ định ở đâu?

PenglihengĐược rồi, tôi đã sai khóa, tôi đã sửa.

PenglihengGetAccount: Chữ ký không phù hợp Làm thế nào, anh trai?

Andy 2 đơn giảnTại sao số lượng của độ sâu đĩa tương tự là 15? Màn hình tương tự là dữ liệu trong quá khứ hoặc dữ liệu được tạo ngẫu nhiên? Nếu dữ liệu trong quá khứ, số lượng có thể có giá trị.

cjz140record là một hàm, length là gì? depth là một đối tượng? Object và function khác nhau như thế nào? ví dụ depth (Asks (Price, Amount)), depth là đối tượng, asks là một mảng? price và amount là thuộc tính?

FangBeiSlidePrice là gì?

Giấc mơ nhỏĐược rồi, nếu bạn có vấn đề, bạn có thể thêm vào nhóm chính thức của QQ @ quản trị viên

flydogCảm ơn bạn đã trả lời rất nhiều, tôi đã làm theo lời khuyên và sẽ thử lại.

Giấc mơ nhỏKhông biết là vấn đề của nhà quản lý công cộng, bạn có thể thử với nhà quản lý tư nhân, nhà quản lý tư nhân nên có thể, bạn triển khai một trên máy tính của riêng bạn.

Giấc mơ nhỏBạn có thể thử với người quản lý cá nhân của mình.

Giấc mơ nhỏĐiều này có thể là để xem chính sách thực hiện theo logic như thế nào hoặc chính sách hoạt động bình thường mà không kích hoạt bất kỳ hoạt động nào.

Giấc mơ nhỏCó một dấu hiệu màu đỏ là robot đang chạy, báo cáo lỗi, cần kiểm tra thông tin nhật ký của robot, hoặc thông tin nhật ký của người quản lý.

Giấc mơ nhỏCác vấn đề mạng gần đây, trong khi các giao thức không được cập nhật trên đĩa tương tự là quá thời gian, bạn có thể sử dụng exchange.IO ("mode") để điều chỉnh các giao thức lấy chế độ.

Giấc mơ nhỏMột sàn giả mạo thực tế là một sàn giả mạo hoạt động 24 giờ, theo dõi thị trường của một số sàn giao dịch chính. Tất cả người dùng sàn giả mạo đều là những người tham gia vào sàn giả mạo này, thị trường sẽ không hoàn toàn phù hợp với sàn giao dịch tham khảo, nhưng có lẽ xu hướng là nhất quán.

ShandianliyuĐược rồi, tôi hiểu rồi, cảm ơn.

Giấc mơ nhỏSố liệu này là số liệu thực tế, và số liệu này là số liệu thực tế.

ShandianliyuCảm ơn bạn rất nhiều. Ngoài ra, xin hỏi, khi mô phỏng độ sâu của đĩa thực, exchange.GetDepth () trả về dữ liệu phù hợp với BotVS hay dữ liệu lịch sử thực sự?

Giấc mơ nhỏSố lượng file được trả về Xem giao dịch API giao diện cung cấp, một số giao dịch trả về nhiều hơn có ít hơn, và một số giao dịch hỗ trợ giao diện Thêm sâu, một số không hỗ trợ, cụ thể là xem giao dịch được thực hiện, BotVS được đóng gói để trả về dữ liệu mặc định, nếu muốn gọi trực tiếp, bạn có thể sử dụng hàm exchange.IO, đặt tham số gọi ((chức năng này không cần ký tên, xem tài liệu API chi tiết).

Giấc mơ nhỏĐiều này không thể chỉ định, bao nhiêu dòng K được đẩy cụ thể bởi sàn giao dịch, mỗi sàn giao dịch có thể có số lượng đẩy khác nhau, một số sàn giao dịch khác không cung cấp giao diện dòng K, người quản lý tự thu thập hồ sơ giao dịch của sàn giao dịch, tạo ra dòng K, dòng K này tích lũy từ gốc đầu tiên.

Giấc mơ nhỏ^^ Lúc đầu, tôi cũng luôn nhầm~

Giấc mơ nhỏĐược rồi, chúng ta hãy xem xét vấn đề này, có hai điểm chính: Một, lượng dữ liệu sâu quá lớn, thay đổi mỗi giây, và thay đổi rất nhanh, và những gì chúng ta thấy thực sự chỉ là một mảnh dữ liệu. - 2, ngay cả khi thực hiện dữ liệu độ sâu thực tế, nhưng bởi vì những người tham gia vào việc kiểm tra lại tại thời điểm này chỉ là chính chúng ta và không có những người tham gia khác, không thể mô phỏng chính xác các môi trường độ sâu thấp của đơn đặt hàng. Tuy nhiên, chúng tôi sẽ xem xét tối ưu hóa càng gần với thực tế càng tốt, cảm ơn bạn đã đề xuất ^^

Andy 2 đơn giảnDữ liệu sâu chưa xảy ra, đường cong giá đã xảy ra trong quá khứ. Một cá nhân cho rằng dữ liệu quá khứ và tương lai kết hợp để phán đoán mua bán hiện tại là đáng tin cậy hơn.

Giấc mơ nhỏDữ liệu sâu quá lớn Nếu tất cả được ghi lại, sẽ có rất nhiều. Vì vậy, dữ liệu sâu ngoại trừ lớp một là các giá trị giả định.

Giấc mơ nhỏrecords là một biến được sử dụng để nhận dữ liệu đường K được trả về bởi hàm API GetRecords, length là thuộc tính chiều dài của biến kiểu số trong ngôn ngữ JS, đại diện cho chiều dài của mảng (tức là số lượng các phần tử trong đó), depth giống như records cũng là một biến được sử dụng để nhận dữ liệu chiều sâu được trả về bởi hàm GetDepth, các cấu trúc dữ liệu của records, depth, ticker có thể được tìm thấy trong tài liệu API.

Giấc mơ nhỏGiá trượt, được dịch một chút thẳng thắn, là để ăn một chút thêm một chút giá, giao dịch dễ dàng hơn.