JSで量子ロボットのためのチュートリアル:https://www.fmz.com/bbs-topic/705(まずマークに)
K線データとは?
K線図は,日本の德川幕府時代から,日本の米市場における市場動向と価格変動を記録するために,米市場の商人が使用し,その後,その細かい独特の表示方法により株式市場やフューチャー市場に導入された.現在,この図解析法は,我が国および東南アジア全域で特に普及している.この方法によって描かれた図形は,
グラフでは説明できませんが,JS言語で定義されたK線のデータ構造を見てみましょう.
{
Time : 1487034000000, // 一个时间戳, 精确到毫秒,与Javascript的 new Date().getTime() 得到的结果格式一样
Open : 3425, // 开盘价
High : 3446, // 最高价
Low : 3423, // 最低价
Close : 3438, // 收盘价
Volume : 177657.99, // 交易量
}
GetRecords を呼び出すと得られるデータを見てみましょう. (最初に exchange.SetContractType を呼び出すことを忘れないでください.
[
{"Time":1487034000000,"Open":3425,"High":3446,"Low":3423,"Close":3438,"Volume":177657.9999999999},
{"Time":1487035800000,"Open":3438,"High":3448,"Low":3382,"Close":3385,"Volume":494882},
{"Time":1487037600000,"Open":3385,"High":3398,"Low":3383,"Close":3394,"Volume":83656.00000000015}
]
K線データには,各オブジェクトが K線バーで,このBar周期内の最高価格,最低価格,開通価格 (このK線時間軸の開始価格),閉じる価格 (このK線周期の終了価格),取引量 (周期内の取引量) が含まれています.この周期はK線周期です. 例えば,上記の配列のデータが,周期のK線の大きさを判断する方法は? 2バーの時間軸で計算するだけで,誤りがあります: 1487035800000 - 1487034000000 1800000はミリ秒の単位で,1000000/60 = 30 (分) で,このK線周期は30分です.
簡単に浮かぶ最初の問題は,
配列の長さを無視した K 線データを使用する. これは配列アクセス溢出を引き起こす (この種のBUGは以前 C プログラムを書くときによくあった).
例えば,K線を取得すると,
exchange.SetContractType ((
if(records.length < n){ // n 就是我们限定的 n线数量。
return; // 当前函数返回。
}
この2つ目の問題は, K線最後のBarのデータは,Time属性,Open属性以外は,他の属性も変化する可能性があり,Close属性もリアルタイムで変化している. 初心者は,K線を処理する際に,この点を理解していないため,多くの困惑を抱くだろう.例えば,前章では,均線交差について語りました.
疑問は3つ目 K線周期の時間軸は,この周期の開始時刻であり,時間軸はミリ秒数であり,値が0の時間軸である.この時刻は,1970年1月1日 (特定のプログラムを書くとき,その時間帯を考慮する必要がある) である. この文章は,学校テストは,BotVSのサンドボックスシステムで:
var arr = new Date(0);
画像はこちら
Thu Jan 01 1970 08:00:00 GMT+0800 (CST) // 東8時間帯表示 この値は,1970年から現在までの自己累積です (毎秒1000倍になりますが,1秒は1000ミリ秒なので),この値はかなり大きいです. ここでちょっとしたヒントがあります. タイムバーは,K線周期を決定するK線内の各Barに唯一限りのものなので,タイムバーが変更されたら,最新のK線データを受け取ったことを確認できます. これは実際にK線データを処理する際に便利です.
プログラム化や量化策略の書き込みには,多くの指標関数も使用されます.比較的に便利な指標庫には,タリブ図書館があります.
フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトはフォローしているサイトです.
第"に,パラメータ周期 (パラメータパラメータ,K線周期と区別して,K線周期は何,計算された指標K線周期は何,例えば30分K線計算されたのは30分周期のMACD指標である,パラメータはパラメータ周期) は,大きすぎ,K線データの長さが不足している: 例えば,MACD指標は次のように説明しています.
MACD(Records[Close],Fast Period = 12,Slow Period = 26,Signal Period = 9) = [Array(outMACD),Array(outMACDSignal),Array(outMACDHist)]
参数周期が 12,26,9 に設定されている場合,指標を計算するためのK行データレコードを入力します.
var macd = talib.MACD(records, 12, 26, 9);
記録の長さが小さすぎると,次の計算ができます.
[
[null,null,null,null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null,null,null,null],
[null,null,null,null,null,null,null,null,null,null,null,null,null]
]
これは,K線データが不足しているため,計算された指標がBUGを発生させるため,プログラム前に限定条件を追加しました.
while(!records || records.length < 50){
records = exchange.GetRecords();
Sleep(1000);
}
ループを跳ね出すには,50個のK線が十分に集まるまで,次のように実行します.
注意深い読者は,この指標が計算したデータは2次元数列である (すなわち,一つの数列の各要素が別の数列である) という理由をよく見ることができる. MACD指標は1つの線ではなく,3つの線を計算している.それぞれ dif,dea,macd 量列である.したがって,各指標の返却値は異なる可能性があります.
[
[null,null,null,null,null,null,null,null,数据...],
[null,null,null,null,null,null,null,null,数据...],
[null,null,null,null,null,null,null,null,数据...]
]
また,いくつかのケースでは,指標の返信構造に注意を払っていないため,BUGが発生します.
2つ目は,指針関数の計算に使用される均線が異なるか,指針アルゴリズムが異なる結果をもたらす.
ストック・RSIは,以下のように記述されています.
STOCHRSI(Records[Close],Time Period = 14,Fast-K Period = 5,Fast-D Period = 3,Fast-D MA = 0) = [Array(outFastK),Array(outFastD)]
この計算された値は,他のアルゴリズムと明らかに異なる.この指標は,このシリーズの第1章で私の独自のアルゴリズムコードを与えました.興味のある読者は以下を比較することができます. 原因は,使用する均線システムによる不一致である可能性があり,あるデータベースのアルゴリズムはMA,あるデータベースはEMAを使用している.一部の指標は毎日繰り返して計算され,K線データの数が異なる場合,計算値が異なる可能性があります.
Cannot read property
原因は,APIでは様々な理由でデータ取得のエラーが発生したり,データを取得していない場合もある.このとき,データを取得するAPIはnull値を取得します.これらのデータは一般的に配列構造であり,しばしば配列の長さをアクセスする必要があります.
すべてのAPI呼び出しにはエラー処理が必要であり,時にはデータの正しさを検査することも必要である (ときどき異常データが発生する).我々のプログラムは,自分のコード内の正確性を保証するしかありません.しかし,ネットワーク上で走るデータ情報は100%正確であることを保証することはできません (パケットの喪失は避けられません),したがって,取得されたデータの誤処理を許して,すべての異常データをフィルタリングする必要があります.
変数値モニタリングなども行われません. 簡単なLog法で DEBUGします. プログラムプロセスで合理的にLogの出力テキスト情報,解析プログラムの出力ログを使用するには. プログラムの実行過程をよく理解し, try, catch, throw JSの異常キャプチャを組み合わせてBUGを処理することもできますが,私のアドバイスは,異常キャプチャを使用する必要がない限り,使用しないようにすることです. DEBUGにとって,最も原始的なLog大法を使うことは本当に経験的なものであり,DEBUG能力を育てる観点から非常に効果的です.
https://www.fmz.com/bbs-topic/728