神 簡単な波動率戦略

作者: リン・ハーン, 2020年4月18日 22時54分45秒
タグ:ATR

完全T神公名,神特約戦略訳. メディアの報道によると, "千万の量化世界"をもっと注視して,もっと戦略のソースコードを得てください! 広告も作りました. 広報『豆の量化日記』 オンラインの破産を数値化して,毎日公開で罰せよう! 福利厚生がもっと増えるなら,あなたはもっと得られる.

単に デモ! デモ! デモおばさん! パパたち!!リアルタイムで気をつけろ!


波動率を正しく使って,BTC大金を稼ぐのは,これほど簡単です! 千万の量化世界 3日前 量化戦略の研究開発は2つの側面があります. 始めている人にとっては非常に難しいです. 難しさは,レベルのコードだけでなく,レベルの戦略的論理思考でもあります. どちらも重要です.

千万の量化者の皆さん,こんにちは!

この記事の特集は,第2回目です. 千千は,大神 (LE_CHIFFRE1) に招待されて光栄です. 微信LE_CHIFFRE1は,どのように波動率因子を使用して,簡単にBTC大盘を勝ち取ることができるか,

神 (やうしん) は伝統的な量投資機関出身で,かつてコイン圈取引所の業務にも深く関わっていた. 量化分野での豊富な経験とユニークな見解を持っています. この号の内容は,思想の啓示,コーディングの実現,個人的な悟りなどを含みます. 乾燥した物でいっぱいではないと言えません.

波動率の戦略についてお話しします.

01

前言

こんにちは,今日,千千の量化公众号で記事を推し進める機会があり,Tのボス (千千の外番号の1つ) の招待に感謝しています. 初めてTのボスに記事を書いて,完全に自由にプレイし,仕事後に余分な時間を借りて,品質と誤りも書いてください.

量化指数と戦略 (助成も自動化も可能) は,もちろん,最後に老舗がよく言うことを付け加える必要があります: 投資はリスクがあり,市場への入場は慎重で,戦略はすべての人にアイデアと教訓を提供することであり,利益と損失を自負することだけです. この戦略を使用するすべての利益と損失は,私自身と何千もの量化世界の公的な主体とは何の関係もありません.

免責声明が終わると,次の質問が始まります.

02

簡単な波動率戦略

私のことをよく知っている人は,私個人的に,アルファをあまり好きではないことを知っています. 私は比喩的にベータを信頼し,ベータを研究する方が多いです. なぜ,e.........mmmmm,わからない.

量化戦略の研究開発は,実は二面的なもので,初心者にとっては非常に難しいです. 難しさは,術の層のコードだけでなく,略の層の戦略的論理的思考でもあります. どちらも重要です,偏見はありません. 今日皆さんに紹介する戦略は,実は,何年も前に華泰の研究論文からインスピレーションを受けたものです.

この戦略アルゴリズムは,対数値の定周期値の値下落のローリング利回り原理を用いて,定周期ローリング最大値と最小値を探し,最大値が上方パイプ,最小値が下方パイプとして計算され,上方パイプを突破し,取引を開く.上下方パイプのローリング平均値が平行ラインとして計算される. (ここでは黒板を叩く!)

特定のグラフィックビジュアライゼーションインターフェースは,以下のPPTを参照してください. このグラフは,Pyechartsで自分で描いたもので,特定のコードも,T大で私的に相談してください.

img

実際,この戦略は,私が以前使っていた戦略である. 広範囲のETF,もちろん,指数選択時に株式の売買のために使用され,その後,直接コインリングに移され,驚いて,実際にダメージを減らすことを発見しました.

img

グラフは,その年のテスト結果を示し,特定の部分のコードロジックスクリーンショットです.

img

上の図は,データを読み取ってから,パンダで指標データを計算する図です.

img

計算が完了すると,pd.to_csv () 函数でデータ出力し,上記のスクリーンショットで使用されたpyecharts (注:古いバージョンのpyechartsを使用しています) を視覚化出力できます.

具体的には,すべての戦略,視覚化,およびパフォーマンス指標コードは,T大である.

03

量化について

まず第一に,良い戦略は公開を恐れず,これは戦争レベルの対決兵器開発ではなく,生死を決めるものなので,自分や他の機関や個人として,いわゆる秘密の戦略を恐れず,CTAには秘密がないので,私の考えでは,誰もが考えていたことや予想外の点だけしかありません.

2つ目は,新規でも経験のあるプレイヤーでも,多くの人がインスピレーションの源を必要としていること. 株の因子掘り,タイミング戦略のアイデアなど,主観的な経験,研究報告,輪内のコミュニケーション交流などから,現在市場にあるいくつかの戦略を購入し,それを読み,理解し,自分のリスク承受能力と特定のニーズに応じて改訂するなど.

結論として,量化とは,量化の中の一種であり,程序化取引は量化の中の一種である.大学時代 (約2009年) に,TBやピラミッドなどのプログラム化が既に有人狩猟されていた.もし今日も続けば,この部分の先見者は10年ほど前に,ウォール街のからを背負った高周波戦略やシステムを含まないと言えます.したがって,量化戦略や程序化戦略は,中国ではしばらくの間,存在しているものの,現在の市場シェアや主体,政策支持者の間で,量化はまだ非常に小さな存在の一部であり,多種多様な分析や戦略モデルが構築された研究が,天に飛ぶことを示唆しています.

最後に,自分の専門知識に対する信頼と記事への招待状をいただき,千千の量化市民に感謝します. 具体的なコードや戦略に関する質問があれば,私やT大にメールしてください.

ありがとうございました! ありがとうございました!

Qtのグループに参加していない友人は,すぐにグループに加わり,学習資料を入手してください!

千千本尊町ビル!

img

微信が掃く 市民の関心


/*backtest
start: 2019-04-18 00:00:00
end: 2020-04-17 23:59:00
period: 15m
exchanges: [{"eid":"Futures_BitMEX","currency":"XBT_USD"}]
*/

// 胖友们!! 实盘前请注意!! 此内容仅是吕神翻译demo, 上实盘请自行添加相关内容.
// 是Demo!!! 实盘谨慎!!!

// 初始化
exchange.SetContractType('XBTUSD')
var vix_arr = []
var vix_ma = []
var vix_ma_up = []
var vix_ma_dw = []
var LastBarTime = 0
var isFirst = true

function initVix() {
    records = _C(exchange.GetRecords)
    Log(records.length)
    if (records && records.length > 2 * N + 2) {
        // 初始化前N个vix值
        for (var i = -2; i < N - 1; i++) {
            Bar = records[records.length - N + i]
            lastNbar = records[records.length - N + i - N]
            Vix()
        }
    }
    // Log("vix_arr", vix_arr.length, vix_arr)
    // Log("vix_ma", vix_ma.length, vix_ma)
    // Log("vix_ma_up", vix_ma_up.length, vix_ma_up)
    // Log("vix_ma_dw", vix_ma_dw.length, vix_ma_dw)
}

// 获取交易所信息
function UpdateInfo() {
    account = _C(exchange.GetAccount)
    pos = _C(exchange.GetPosition)
    records = _C(exchange.GetRecords)
    Bar = records[records.length - 1]
    lastNbar = records[records.length - N]
    ticker = _C(exchange.GetTicker)
}

// 计算波动率及上下轨
function Vix() {
    // 当每K结束时计算
    if (LastBarTime !== Bar.Time) {
        // 当K达到计算根数开始计算vix_arr
        if (records && records.length > N) {
            // 获取vix 当前close自然对数 除以 前90根自然对数 减一
            vix = Math.log(Bar.Close) / Math.log(lastNbar.Close) - 1
            vix_arr.push(vix)
            //Log("vix_arr", vix_arr)
        }
        // 当vix_arr达到计算根数时开始计算vix_ma
        if (vix_arr && vix_arr.length > N) {
            // 获取对应周期vix算其移动平均值
            vix_ma = TA.MA(vix_arr, N)
            // 去除ma中的null值
            vix_ma = vix_ma.filter(function(val) {
                return !(!val || val === "");
            })
            //Log("vix_ma", vix_ma)
            // 获取上下通道
            vix_up = TA.Highest(vix_arr, N)
            vix_dw = TA.Lowest(vix_arr, N)
            vix_ma_up.push(vix_up)
            vix_ma_dw.push(vix_dw)
            // Log("vix_ma_up", vix_ma_up)
            //Log("vix_ma_dw", vix_ma_dw)
            // 限制所有数组长度
            if (vix_arr.length > 2000) {
                vix_arr.splice(0, 1);
            }
            if (vix_ma.length > 2000) {
                vix_ma.splice(0, 1);
            }
            if (vix_ma_up.length > 2000) {
                vix_ma_up.splice(0, 1);
            }
            if (vix_ma_dw.length > 2000) {
                vix_ma_dw.splice(0, 1);
            }
        }
        LastBarTime = Bar.Time
    }
}

// 画线
function PlotMA_Kline(records, isFirst) {
    //$.PlotRecords(records, "K")
    if (isFirst) {
        for (var i = records.length - 1 - N; i <= records.length - 1; i++) {
            if (vix_ma[i] !== null) {
                $.PlotLine("vix_arr", vix_arr[i], records[i].Time)
                $.PlotLine("vix_ma", vix_ma[i], records[i].Time)
                $.PlotLine("vix_ma_up", vix_ma_up[i], records[i].Time)
                $.PlotLine("vix_ma_dw", vix_ma_dw[i], records[i].Time)
            }
        }
        PreBarTime = records[records.length - 1].Time
    } else {
        if (PreBarTime !== records[records.length - 1].Time) {
            $.PlotLine("vix_arr", vix_arr[vix_arr.length - 2], records[records.length - 2].Time)
            $.PlotLine("vix_ma", vix_ma[vix_ma.length - 2], records[records.length - 2].Time)
            $.PlotLine("vix_ma_up", vix_ma_up[vix_ma_up.length - 2], records[records.length - 2].Time)
            $.PlotLine("vix_ma_dw", vix_ma_dw[vix_ma_dw.length - 2], records[records.length - 2].Time)
            PreBarTime = records[records.length - 1].Time
        }
        $.PlotLine("vix_arr", vix_arr[vix_arr.length - 1], records[records.length - 1].Time)
        $.PlotLine("vix_ma", vix_ma[vix_ma.length - 1], records[records.length - 1].Time)
        $.PlotLine("vix_ma_up", vix_ma_up[vix_ma_up.length - 1], records[records.length - 1].Time)
        $.PlotLine("vix_ma_dw", vix_ma_dw[vix_ma_dw.length - 1], records[records.length - 1].Time)
    }
}

// 交易逻辑
function onTick() {
    // 无仓位时
    if (pos.length == 0) {
        // Long 当前K线的收盘价 > 上轨 && 之前K线的收盘价 <= 上轨
        if (vix_arr[vix_arr.length - 1] > vix_ma_up[vix_ma_up.length - 1] &&
            vix_arr[vix_arr.length - 2] <= vix_ma_up[vix_ma_up.length - 2]) {
            exchange.SetDirection("buy")
            exchange.Buy(ticker.Sell, Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'BK')
        }
        // Short 当前K线的收盘价 < 下轨 && 之前K线的收盘价 >= 下轨
        if (vix_arr[vix_arr.length - 1] < vix_ma_dw[vix_ma_dw.length - 1] &&
            vix_arr[vix_arr.length - 2] >= vix_ma_dw[vix_ma_dw.length - 2]) {
            exchange.SetDirection("sell")
            exchange.Sell(ticker.Buy, Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'SK')
        }
    }
    // 多仓时
    if (pos.length > 0 && pos[0].Type == 0) {
        // 平多 当前K线的收盘价 < 中轨 && 之前K线的收盘价 >= 中轨
        if (vix_arr[vix_arr.length - 1] < vix_ma[vix_ma.length - 1] &&
            vix_arr[vix_arr.length - 2] >= vix_ma[vix_ma.length - 2]) {
            exchange.SetDirection("closebuy")
            exchange.Sell(ticker.Buy, pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'SBK')
        }
    }
    // 空仓时
    if (pos.length > 0 && pos[0].Type == 1) {
        // 平空 当前K线的收盘价 > 中轨 && 之前K线的收盘价 <= 中轨
        if (vix_arr[vix_arr.length - 1] > vix_ma[vix_ma.length - 1] &&
            vix_arr[vix_arr.length - 2] <= vix_ma[vix_ma.length - 2]) {
            exchange.SetDirection("closesell")
            exchange.Buy(ticker.Sell, pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'PSK')
        }
    }
}

function main() {
    initVix()
    while (1) {
        UpdateInfo()
        Vix()
        onTick()
        if (records) {
            PlotMA_Kline(records, isFirst)
            //Log('画线')
            isFirst = false
        }
        Sleep(5 * 1000)
    }
}

関連性

もっと

発明者の量化私は下を横切って来ました.

ルーツメ豆は美しい

紅茶この戦略は波動率とあまり関係していないようです

説教90サイクル前の私以外は,波動率を記述することはできません. HH,LLの開場方法については,唐津通道DCの操作であり,平仓は均線戦略を選択した. 暗黙の不安定性については,専門家が説明してくれます.

軽い雲豆ちゃん,荷物を外包する?

シャイイ支持しないと聞かれたら支持するよ

シャイイ支持しないと聞かれたら支持するよ

軽い雲ほら

半年後に空いていると推測します.

軽い雲┃。。。。。。。。それでいい。。。。

(^U^)ノ~YO

今,時間がないので,後を考えるつもりはありませんが, プログラミングの能力は, 良くないです. それは, シリーズを使うことができません. / () / () / () / ()