Ein einfacher Wandelkurs-Strategien

Schriftsteller:Die Bohnen, Datum: 2020-04-18 22:54:45 Uhr
Tags:ATR

Die vollständige Public Domain von T-Shirt, übersetzt von T-Shirt Strategy. Hier ist ein Video, das von der Autorin und dem Autor übertragen wurde. Bitte beachten Sie mehr von "Quantified World of Thousands" und erhalten Sie mehr Strategie-Sourcecode! Ich habe mir auch eine Anzeige gemacht. Der öffentliche Journal "Quantitative Tagebuch der Bohnen" Ich bin der Ansicht, dass es nicht möglich ist, die Bankrottung zu quantifizieren. Ich bin nicht derjenige, der das Problem hat, aber ich bin derjenige, der es hat.

Es ist nur Demo! Demo! Tante Demo! Eltern, ihr müsst vorsichtig sein!


Mit einer guten Volatilitätsrate ist es so einfach, Bitcoin zu gewinnen! Original von "Ocean Ocean: Quantified World of Thousands" vor drei Tagen Die Entwicklung von Quantitative Strategien ist in Wirklichkeit zweiseitig, sehr schwierig für einen Anfänger, nicht nur das Code auf der Ebene der Quantifizierung, sondern auch das strategische Logikdenken auf der Ebene der Quantifizierung. Beide sind wichtig und sollten nicht voreingenommen werden.

Hallo, ihr tausend Quantitative Kollegen!

Wir sind sehr stolz darauf, dass wir uns mit Ihnen in der zweiten Ausgabe dieses Gastbuches treffen, um Ihnen zu zeigen, wie man mit dem Volatilitätsfaktor Bitcoin leicht gewinnen kann, um die Wahrscheinlichkeit zu reduzieren, dass die Wahrscheinlichkeit ansteigt.

Von der traditionellen Quantität Einlage Institution, war auch tief in die Münzkreis Börse Geschäft beteiligt, hat eine reiche Erfahrung und einzigartige Einblicke im Bereich der Quantifizierung. Die Inhalte der Ausgabe umfassen Gedanken Offenbarung, Codierung Realisierung und persönliche Erkenntnis usw.

Ich möchte Sie bitten, uns über die Strategie der Schwankungen zu unterrichten.

01

Vorwort

Hallo alle, heute habe ich das Vergnügen, einen Artikel in der Quantifizierung von Tausenden von Quantifizierung von Quantifizierung von Quantifizierung von Quantifizierung von Quantifizierung von Quantifizierung von Quantifizierung von Quantifizierung von Quantifizierung zu veröffentlichen.

T-Boss sagt, dass man eine quantifizierte schreiben muss, aber keine Reichweite gibt, und wirklich nicht weiß, woher man schreiben soll. Dann fangen Sie mit Ihrem Lieblingsthema an, mit anderen zu diskutieren. Quantitative Indikatoren und Strategien (das kann auch unterstützt werden und automatisiert werden), natürlich, und schließlich müssen wir ein altes Sprichwort hinzufügen: Investitionen sind riskant, Börsen müssen vorsichtig sein, Strategien bieten nur Ideen und Lehren, Gewinn und Verlust.

Die Erklärung ist abgeschlossen und wir beginnen mit dem eigentlichen Thema.

02

Eine einfache Strategie zur Volatilität

Die Leute, die mich kennen, wissen, dass ich persönlich nicht sehr gerne Alpha-Spiele spiele, ich vertraue relativ eher auf Beta, mehr auf Beta-Studien. Warum, e.........mmmmm, weiß ich nicht.

Die Entwicklung von quantitativen Strategien ist in der Tat zweiseitig, für diejenigen, die gerade erst begonnen haben, ist es sehr schwierig. Es ist nicht nur schwierig, den Code auf der Stufe der Tactics zu erstellen, sondern auch schwierig, das strategische logische Denken auf der Stufe der Tactics zu erstellen. Beide sind wichtig und sollten nicht voreingenommen sein.

Der Strategie-Algorithmus verwendet das Prinzip der rollenden Ertragsquote, bei der der Preis in einem bestimmten Zyklus nach unten fällt, und sucht nach einem bestimmten Zyklus-Rollmaximum und -Minimum, wobei der höchste Wert als Uppipe, der minimale Wert als Downpipe, der Durchbruch des Uppipe und der Open-Position verwendet werden.

Die spezifische Grafik-Visualisierungs-Schnittstelle ist in der folgenden PPT zu finden. Die Grafik wurde von mir selbst mit Pyecharts gezeichnet.

img

In der Tat ist diese Strategie die Strategie, die ich zuvor bei Broad-Based-ETFs benutzt habe, natürlich auch bei der Indexwahl verwendet wurde, um Aktien zu kaufen und zu verkaufen.

img

Das folgende Diagramm zeigt die Leistung der Überprüfung für das Jahr, wobei die folgenden Screenshots für die einzelnen Code-Teile enthalten sind:

img

Die oben stehende Tabelle zeigt, wie Pandas die Daten lesen und berechnen können.

img

Nach Beendigung der Berechnung können die Daten mit der Funktion pd.to_csv () ausgegeben und die Pyecharts, die im obigen Screenshot verwendet wurden, visualisiert werden.

Die Strategie, die Visualisierung und der Performance-Meter-Code sind alles nur Scherze.

03

Quantifizieren

Zwei Punkte, über die ich vor allem sprechen werde. Erstens: Es gibt viele Fragen, warum ihr euch für eine echte Strategie entscheiden könnt, ob ihr falsche Betrüger seid, oder ob ihr wirklich ein universelles Wesen seid. Jaha. Erstens, eine gute Strategie hat keine Angst davor, offen zu sein, und das ist nicht die Entwicklung von Waffen, die auf Kriegsniveau gegeneinander kämpfen und das Leben oder das Leben entscheiden.

Zweitens: Viele Menschen, egal ob Neulinge oder bereits eingetretene Spieler oder sogar alte Spieler, benötigen Inspirationsquellen, einschließlich der Faktoren der Aktien, der Ideen für die Wahl der Zeitstrategie usw., die oft aus subjektiven Erfahrungen, Forschungsberichten, Kommunikationsbeziehungen im Kreis usw. stammen.

Abschließend kann man zusammenfassen, dass Quantitative Strategien eigentlich ein Objekt waren, und dass Programmatic Trading eine Untergruppe von Quantitative Transaktionen war, die bereits in der Universität (um 2009) begann, und wenn man es heute fortsetzt, kann man sagen, dass dieser Teil der ersten Propheten bereits 10 Jahre alt ist, ohne die High-Frequency-Strategien und -systeme, die von Wall Street zurückgebracht wurden. Daher hat sich die Quantitative Strategie oder Programmatic Strategy in China schon eine Weile fortgesetzt, aber in der aktuellen Marktanteil und die Akteure und die politischen Unterstützer, und in der Tat, Quantitative Strategien sind immer noch ein sehr kleiner Teil, obwohl viele Analysen und Modelle von Strategien gebaut wurden.

Schließlich möchte ich mich bei der Quantifizierungs-Publikum für ihr Vertrauen und die Einladung zum Artikel bedanken. Wenn Sie irgendwelche spezifischen Code- und Strategieprobleme haben, schreiben Sie mir persönlich oder an T-Daily, ich bin auch in der Gruppe von T-Daily.

Zum Schluss nochmals vielen Dank für die wundervolle Erklärung von Liu Bei!

Wer sich noch nicht an der Quantitative Discussion Group beteiligt hat, kann sich schnell anmelden, um mehr zu erfahren!

Das Gebäude der Stadt!

img

WeChat hat es aufgeräumt Aufmerksamkeit für die Öffentlichkeit


/*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)
    }
}

Verwandt

Mehr

Der Erfinder quantifiziertIch bin hier, um zu überqueren.

RootmeDie Bohnen sind immer schön.

Ein KaffeeDiese Strategie hat nicht viel mit der Volatilität zu tun.

PredigtIch kann die Schwankungsrate nicht beschreiben, außer ich war vor 90 Zyklen und kann kaum sagen, dass es sich um eine Relation zwischen der Schwankungsgröße handelt. H.H. und LL, die sich auf die Operation von Dongch'an Tunnel DC beziehen, wählten eine einheitliche Strategie; im Allgemeinen ein verbessertes Seagull-System. Ich möchte Ihnen sagen, dass es sich bei Implicit Volatility um ein Problem handelt, das von Experten beschrieben wird.

Leichte WolkenMöchtest du die Koffer abholen, Schwester Beans?

SchüchternWenn du mich fragst, ob ich nicht unterstütze, unterstütze ich es natürlich.

SchüchternWenn du mich fragst, ob ich nicht unterstütze, unterstütze ich es natürlich.

Leichte WolkenDas ist gut.

Die BohnenIch schätze, dass es im nächsten Halbjahr frei ist.

Leichte WolkenIch habe eine Frage, die ich mir stellen muss.

Die Bohnen (^U^)ノ~YO

Die BohnenIch habe jetzt keine Zeit mehr, ich kann es mir nicht vorstellen, aber ich kann so gut wie nicht programmieren. /(Ooh-Ooh-Ooh) /~~