Die Strategie des Münzwerfers (●''●)

Schriftsteller:Die Bohnen, Datum: 2020-04-21 17:39:52
Tags:

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.


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: 2020-01-20 00:00:00
end: 2021-01-19 23:59:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_BitMEX","currency":"XBT_USD","fee":[0.008,0.1]}]
args: [["st",0.1]]
*/

// 初始化
exchange.SetContractType('XBTUSD')
_CDelay(100)
// 止盈止损
var TP_status = false // 是否触发追踪止盈 
var TP_HH = 0
var TP_LL = 0
var B = 1

// 获取交易所信息
function UpdateInfo() {
    account = exchange.GetAccount()
    pos = exchange.GetPosition()
    records = exchange.GetRecords()
    ticker = exchange.GetTicker()
}

// 定制本次盈亏
function Onept() {
    // 更新用户信息
    UpdateInfo()
    // 如果现在余额 大于 之前的余额, 那么 盈利次数+1, 且pt_1设为现在余额
    if (account.Stocks - pt_1 > 0) {
        pt_times = pt_times + 1
        Log('这回赚钱啦~~~~ (^U^)ノ~YO', account.Stocks - pt_1)
        B = 1
        pt_1 = account.Stocks
    }
    // 如果现在余额 小于 之前的余额, 那么 亏损次数+1, 且pt_1设为现在余额
    if (account.Stocks - pt_1 < 0) {
        st_times = st_times + 1
        Log('这回亏掉了.... /(ㄒoㄒ)/~~', account.Stocks - pt_1)
        B = B * 1.618
        pt_1 = account.Stocks
    }
}

// 画线
function PlotMA_Kline(records) {
    $.PlotRecords(records, "K")
}

// 追踪止盈 初始%, 追踪U
function TP() {
    var TP_first_long = pos[0].Price + tp_first * ticker.Last
    var TP_trailing_long = TP_HH - trailing_tp * ticker.Last
    var TP_first_short = pos[0].Price - tp_first * ticker.Last
    var TP_trailing_short = TP_LL + trailing_tp * ticker.Last
    // 当多仓时, 现价大于开仓+初始止赢价 -> 触发追踪止盈 
    if ((pos[0].Type == 0) && (ticker.Last > TP_first_long)) {
        // Log('当多仓时, 现价大于开仓+初始止赢价 -> 触发追踪止盈', TP_HH)
        TP_status = true
        // 触发追踪止盈, 未初始化开仓最大价格 -> 开仓后最大价格更新为现价
        if (TP_status === true && TP_HH == 0) {
            Log('触发追踪止盈, 未初始化开仓最大价格 -> 开仓后最大价格更新为现价', TP_HH)
            TP_HH = ticker.Last
        }
        // 触发追踪止盈, 已有开仓后最大价格, 现价大于开仓后最大价格 -> 开仓后最大价格更新为现价
        else if (TP_status === true && TP_HH != 0 && ticker.Last > TP_HH) {
            Log('触发追踪止盈, 已有开仓后最大价格, 现价大于开仓后最大价格 -> 开仓后最大价格更新为现价', TP_HH)
            TP_HH = ticker.Last
        }
        // 触发追踪止盈, 已有开仓后最大价格, 现价小于 (开仓后最大价格减 - 回撤USD) -> 开空平仓止盈
        else if (TP_status === true && TP_HH != 0 && ticker.Last < TP_trailing_long) {
            Log('触发追踪止盈, 已有开仓后最大价格, 现价小于 (开仓后最大价格减 - 回撤USD) -> 开空平仓止盈', TP_HH)
            exchange.SetDirection("closebuy")
            exchange.Sell(ticker.Buy, pos[0].Amount, "在" + ticker.Last + "止赢平多仓!! 开仓价格: " + pos[0].Price + "数量: " + pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'PT_BK' + ticker.Sell)
            Onept()
            TP_status = false
            TP_HH = 0
        }
    }
    // 当空仓时, 现价小于开仓-初始止赢价 -> 触发追踪止盈
    else if ((pos[0].Type == 1) && (ticker.Last < TP_first_short)) {
        // Log('当空仓时, 现价小于开仓-初始止赢价 -> 触发追踪止盈', TP_LL)
        TP_status = true
        // 触发追踪止盈, 未初始化开仓最大价格 -> 开仓后最小价格更新为现价
        if (TP_status === true && TP_LL == 0) {
            Log('触发追踪止盈, 未初始化开仓最大价格 -> 开仓后最小价格更新为现价', TP_LL)
            TP_LL = ticker.Last
        }
        // 触发追踪止盈, 已有开仓后最小价格, 现价小于开仓后最小价格 -> 开仓后最小价格更新为现价
        else if (TP_status === true && TP_LL != 0 && ticker.Last < TP_LL) {
            Log('触发追踪止盈, 已有开仓后最小价格, 现价小于开仓后最小价格 -> 开仓后最小价格更新为现价', TP_LL)
            TP_LL = ticker.Last
        }
        // 触发追踪止盈, 已有开仓后最小价格, 现价大于 (开仓后最小价格减 + 回撤USD) -> 开多平仓止盈
        else if (TP_status === true && TP_LL != 0 && ticker.Last > TP_trailing_short) {
            Log('触发追踪止盈, 已有开仓后最小价格, 现价大于 (开仓后最小价格减 + 回撤USD) -> 开多平仓止盈', TP_LL)
            exchange.SetDirection("closesell")
            exchange.Buy(ticker.Sell, pos[0].Amount, "在" + ticker.Last + "止赢平空仓!! 开仓价格: " + pos[0].Price + "数量: " + pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'PT_SK' + ticker.Sell)
            Onept()
            TP_status = false
            TP_LL = 0
        }
    }
}

// 止损 %
function Stoploss() {
    // 当多仓时, 现价小于开仓-止损价, 做空平多
    if ((pos[0].Type == 0) && (ticker.Last < pos[0].Price - st * ticker.Last)) {
        Log('当多仓时, 现价小于开仓-止损价, 做空平多')
        exchange.SetDirection("closebuy")
        exchange.Sell(ticker.Buy, pos[0].Amount, "在" + ticker.Last + "止损平多仓!! 开仓价格: " + pos[0].Price + "数量: " + pos[0].Amount)
        $.PlotFlag(new Date().getTime(), 'Sell', 'ST_BK' + ticker.Buy)
        Onept()
    }
    // 当空仓时, 现价大于开仓+止损价, 做多平空
    else if ((pos[0].Type == 1) && (ticker.Last > pos[0].Price + st * ticker.Last)) {
        Log('当空仓时, 现价大于开仓+止损价, 做多平空')
        exchange.SetDirection("closesell")
        exchange.Buy(ticker.Sell, pos[0].Amount, "在" + ticker.Last + "止损平空仓!! 开仓价格: " + pos[0].Price + "数量: " + pos[0].Amount)
        $.PlotFlag(new Date().getTime(), 'Buy', 'ST_SK' + ticker.Sell)
        Onept()
    }
}

// 计算凯利公式 仓位
function PriceAmount() {
    // 赢可以赢多少 
    y = tp_first
    // 输会输多少 
    s = st
    //赔率
    b = y / s
    // 赢的概率
    if (total_times < 10) {
        p = 0.382
    } else {
        p = pt_times / total_times
    }
    // 输的概率
    q = 1 - p
    // 凯莉公式
    f = (b * p - q) / b
    // 限制B最大值
    if (B > 16.18) {
        B = 16.18
    }
    //Amount = _N(Math.abs(f) * account.Stocks * ticker.Last * B, 0)
    Amount = _N(0.618 * account.Stocks * ticker.Last, 0)
    //Log(Amount)
}

// 交易逻辑
function onTick() {
    // 获取均匀分布 0-9 随机数
    ToTheMoon = Math.floor(Math.random() * 10)
    // 无仓位时
    if (pos.length == 0) {
        // Long 
        if (ToTheMoon > 5) {
            exchange.SetDirection("buy")
            exchange.Buy(ticker.Sell, Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'BK' + ticker.Sell)
            total_times = total_times + 1
        }
        // Short 
        if (ToTheMoon < 4) {
            exchange.SetDirection("sell")
            exchange.Sell(ticker.Buy, Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'SK' + ticker.Buy)
            total_times = total_times + 1
        }
    }
        // 多仓时
    if (pos.length > 0 && pos[0].Type == 0) {
        // 平多 
        if (ToTheMoon < 1) {
            exchange.SetDirection("closebuy")
            exchange.Sell(ticker.Buy, pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Sell', 'PBK')
            Onept()
        }
    }
    // 空仓时
    if (pos.length > 0 && pos[0].Type == 1) {
        // 平空 
        if (ToTheMoon > 8) {
            exchange.SetDirection("closesell")
            exchange.Buy(ticker.Sell, pos[0].Amount)
            $.PlotFlag(new Date().getTime(), 'Buy', 'PSK')
            Onept()
        }
    }
}


function main() {
    UpdateInfo()
    // 统计
    pt_1 = account.Stocks
    total_times = 0
    pt_times = 0
    st_times = 0
    while (1) {
        UpdateInfo()
        PriceAmount()
        onTick()
        PlotMA_Kline(records)
        if (pos.length > 0) {
            TP()
        }
        if (pos.length > 0) {
            Stoploss()
        }
        LogStatus("总余额: " + _N(ticker.Last * account.Stocks, 2), " 下单量: " + Amount, " 下单倍数: " + B, " ToTheMoon: " + ToTheMoon, " 下单量比: " + _N(Amount * 100 / _N(ticker.Last * account.Stocks, 2), 2), "% 胜率: " + _N(p * 100, 2), "%", total_times, pos)
    }
}

Mehr

Ich weiß.Kann man es in eine Bitcoin-Version umwandeln?