古い白人とJavaScriptで遊んで - 買い物するパートナーを作ろう (5) ロボットもバグ

作者: リン・ハーン小さな夢, 作成日: 2017-03-13 12:53:50, 更新日: 2017-10-11 10:37:32

古い白人とJavaScriptで遊んで,買い物をするパートナーを作りました.

JSで量子ロボットのためのチュートリアル:https://www.fmz.com/bbs-topic/705(まずマークに)
  • 1,Kラインのデータ基礎知識,量化取引におけるデータの利用に関する問題.

    • K線データとは?

      K線図は,日本の德川幕府時代から,日本の米市場における市場動向と価格変動を記録するために,米市場の商人が使用し,その後,その細かい独特の表示方法により株式市場やフューチャー市場に導入された.現在,この図解析法は,我が国および東南アジア全域で特に普及している.この方法によって描かれた図形は,のような形状で,これらのには黒白の陰線が加えられているため,陽線図とも呼ばれている.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 ((rb1705); // スイッチ設定は螺紋鋼1705契約である。 var records = exchange.GetRecords ((); // rb1705螺紋鋼契約のデフォルトK線周期データを取得する. 取得できる根数のK線データは,取引所のAPIが推し進めていることに具体的である.したがって,初期に比較的に多くのK線Barが必要であれば,プログラムに収集する時間を与えなければならない.そして,プログラム内で十分な収集を判断する場合は,次のように書ける.

      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線データを処理する際に便利です.

  • 2,指標呼び出し詳細,よくある問題 満足周期,返回値,パラメータ

    プログラム化や量化策略の書き込みには,多くの指標関数も使用されます.比較的に便利な指標庫には,タリブ図書館があります.

    フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトでは,フォローしているサイトはフォローしているサイトです.

    • 第"に,パラメータ周期 (パラメータパラメータ,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線が十分に集まるまで,次のように実行します.img

      注意深い読者は,この指標が計算したデータは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線データの数が異なる場合,計算値が異なる可能性があります.

  • 3 誤った処理を容認するAPI

    • Cannot read property length?? of null このBUGは,最も頻繁に発生しているもので,そのうちの1つではありません.

      原因は,APIでは様々な理由でデータ取得のエラーが発生したり,データを取得していない場合もある.このとき,データを取得するAPIはnull値を取得します.これらのデータは一般的に配列構造であり,しばしば配列の長さをアクセスする必要があります.

      すべてのAPI呼び出しにはエラー処理が必要であり,時にはデータの正しさを検査することも必要である (ときどき異常データが発生する).我々のプログラムは,自分のコード内の正確性を保証するしかありません.しかし,ネットワーク上で走るデータ情報は100%正確であることを保証することはできません (パケットの喪失は避けられません),したがって,取得されたデータの誤処理を許して,すべての異常データをフィルタリングする必要があります.

      変数値モニタリングなども行われません. 簡単なLog法で DEBUGします. プログラムプロセスで合理的にLogの出力テキスト情報,解析プログラムの出力ログを使用するには. プログラムの実行過程をよく理解し, try, catch, throw JSの異常キャプチャを組み合わせてBUGを処理することもできますが,私のアドバイスは,異常キャプチャを使用する必要がない限り,使用しないようにすることです. DEBUGにとって,最も原始的なLog大法を使うことは本当に経験的なものであり,DEBUG能力を育てる観点から非常に効果的です.

この記事を書く前に,読者が私に留言をしてください! 提案や意見,もし楽しいと感じているなら,より多くのプログラムを愛する取引を愛する友人に共有することができます

https://www.fmz.com/bbs-topic/728

プログラマー littleDream 原作


もっと