さて,第2章の終わりです. 前回の章を巡って,発明家が量化している機能について少し理解したはずです. じゃあ,コードを書くことにしましょう!
仮に第1章のツアーで 管理者や取引所が追加されたと仮定すると,もちろん,発明者の量化シミュレーションディスクを使ってコードテストを行うことができます.
テスト1は,まずは,テスト1という戦略を作成します.

ポリシーの編集インターフェース

コードは次のとおりです。
function main() {
Log(exchange.GetAccount()); // 看过API 文档后知道, exchange就是交易所对象,实际上策略有个全局变量
// exchanges 数组,这个数组存放的就是你创建机器人或者回测时添加的交易所(可以是多个)
// 添加1个交易所 exchanges 数组就只包含1个交易所对象,即添加的交易所对象。
// 那么 exchange 和 exchanges 是什么关系呢? 其实 exchange 就是 exchanges[0] ,
// exchange 就是 exchanges 数组的第一个元素(这里这个元素是交易所对象)。
// Log()函数应该也不陌生吧,这个API 就是输出一条日志,日志内容就是Log括号里面的参数。
}
ロボットを作ること,また,テスト1と結びつけること テスト1という戦略で,発明者によって量化された模擬ディスクをテストしてみましょう.

ストラテジーが即座に実行され,アカウント情報が表示されます.

画像が表示されますので,シミュレートディスクのアカウント情報と比較してみましょう.

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访问过于频繁可是会拒绝访问的。
}
}
注記:GetTicker関数で得られたデータ最高値と最低値の差が大きいことを発見した研究者がいるかもしれない.これは,GetTickerが返した市場状況データのHigh,Lowは,取引所が合意した周期内の最高値,最低値である,ということを意味している.これは取引所が設定したものである.上記のテストは,発明者定量化模擬ディスク,発明者定量化模擬ディスクが,模擬ディスクが稼働するこの瞬間までの最高値,最低値であるとする.
この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 指一天
テストコードを書いて,K線データをデフォルト周期で取得します.
function main() {
Log(exchange.GetAccount()); // 已经知道怎么获取 主交易所 账户信息了
//下面我们来试试 不停的获取行情数据。
var records = exchanges[0].GetRecords(); // 按照默认周期获取K线数据
Log("records:", records); // 在日志中输出 获取到的K线数据。
}
出力表示: records: [{“Time”:1478260200000,“Open”:4765.14,“High”:4773,“Low”:4764.54,“Close”:4769.47,“Volume”:5211.539999999999}, {“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.3399999999965}]
変数 records は,K線時間順に,遠方 ((インデックス0) から近方 ((インデックスrecords.length - 1) までの順序で並べられている構造の配列である.
K線について少し見てみましょう: (一部の図は赤が陽線,緑が陰線,逆の色が表示されています)
プラットフォームの5分周期のK線例図を見てください.
知らせ:一つのK線周期が完了した後で,その数値が確定する.実用的にはvar records = exchanges を呼び出す.[0].GetRecords(); 返されるデータレコードの最後の要素,すなわち: records[records.length - 1]は,その周期が完了するまで絶え間なく変化する。最後の秒で陽線から陰線に変わる可能性さえある。
GetRecords関数は,加算パラメータなしで,策略設定のデフォルト周期に従ってデータを返します。また,パラメータに K 線の周期を指定することもできます。現在の反測システムは,GetRecords 転送パラメータを,周期を指定するためにサポートしています (※加算パラメータなしで,デフォルト周期に従ってデータを返します).これは,策略反測時に異なる周期を同時に使用できるようにします。
GetDepthはDepth構造を返します.
function main() {
var depth = exchanges[0].GetDepth(); //获取市场深度信息, 返回订单薄信息,一个对象包含2个属性,每个属性是一个对象数组。
Log("depth:", depth); // 日志中输出,一下的输出是 整理过的格式,是方便读者理解,实际上是所有内容都在一行显示的。
}
このコードの反省は以下の通りです.
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}]
}
対応する注文薄はこんな感じです ((OKCoinの実際のデータです) ↓ 市場深度情報は実際に進行中です ((注文薄) ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

市場深度情報 (盘口データ) をどう使うか? 盘口データは多くの用途があります. 例えば,食卓 (当然,また,挂板もあります) についてです.
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()); // 显示买入后的 账户信息,对比初始账户信息。可以对比出 买入操作的成交的数量。
}
イノベーターの量化模擬ディスクの実行結果:
