Les ressources ont été chargées... Je charge...

Les stratégies de fluctuation facile

Auteur:Les haricots, Date: 18 avril 2020 à 22h54
Les étiquettes:ATR

Le nom public de T'Challa est le même que celui de T'Challa, et le nom de T'Challa est le même que celui de T'Challa. Voici le contenu de l'émission. S'il vous plaît, faites attention à "Le monde quantifié par milliers" pour obtenir plus de code source de la stratégie! Il a aussi fait une publicité pour lui-même. Le journal public "Le journal quantitatif des haricots rouges" Il y a des milliers de personnes qui ont été condamnées à la faillite quotidiennement. Il y a plus d'avantages sociaux, plus vous pouvez en profiter.

Ce n'est que Démo! Démo! Je suis désolé. Parents, soyez prudents avec les vrais jeux!


C'est aussi simple que de gagner du BTC avec une bonne volatilité! Il y a 3 jours, le monde quantifié par milliers a été créé. La recherche et le développement de stratégies de quantification du lithium sont en fait à double sens, très difficiles pour ceux qui commencent tout juste, difficiles non seulement pour le code au niveau du lithium, mais aussi pour la logique stratégique au niveau du lithium.

Bonjour à tous les petits amis de la quantité!

Ce billet est la deuxième édition de l'exposé spécial, et nous sommes très honorés d'être invités à le voir (le micro-signal LE_CHIFFRE1) pour vous présenter: comment utiliser le facteur de volatilité pour gagner facilement sur le marché BTC et atteindre le but de la lutte contre le taux de dépréciation!

Il est issu d'une institution traditionnelle de placement de quantité, a également été profondément impliqué dans les affaires de l'échange de billets, a une riche expérience et des idées uniques dans le domaine de la quantification. Le contenu de ce numéro couvre l'inspiration de l'idée, la mise en œuvre du codage et la réalisation personnelle, etc.

Je vous invite à découvrir les stratégies des taux de volatilité.

01

Précédent

Bonjour, aujourd'hui, j'ai le privilège de publier un article dans le numéro de presse de masse de masse de masse, et je tiens également à remercier le patron T (l'un des milliers de numéros étrangers) pour son invitation.

Le patron de T dit d'écrire un chiffre quantifié, sans donner de portée, sans vraiment savoir d'où il vient. Alors commencez par votre sujet de discussion préféré avec les autres. Indicateurs quantifiés et stratégies (qui peuvent être aidés ou automatisés), bien sûr, enfin, nous ajoutons une phrase que les gens disent souvent: investir en tant que grand est risqué, entrer sur le marché doit être prudent, la stratégie est juste pour donner des idées et des leçons, gagner et perdre.

Après avoir terminé la déclaration d'exonération, voici le début de la vraie question.

02

Une stratégie simple de volatilité

Les gens qui me connaissent savent que personnellement, je n'aime pas beaucoup le jeu Alpha, et que je fais plutôt confiance à la version bêta, plutôt à la recherche de versions bêta.

Le développement de stratégies de quantification est en fait à double sens, très difficile pour ceux qui viennent d'entrer, difficile non seulement le code au niveau de la magie magique, mais aussi la logique stratégique au niveau de la magie. Les deux sont importants et ne doivent pas être biaisés. La stratégie que je vous présente aujourd'hui est en fait l'inspiration d'un article de recherche de HuaThai il y a de nombreuses années.

L'algorithme de la stratégie utilise le principe de la fluctuation du taux de rendement en rotation de la chute du prix de la logique sur des cycles déterminés, en fonction de cette période de fluctuation, la recherche de valeurs maximales et minimales de rotation de certains cycles est calculée, la valeur la plus élevée étant le pipeline vers le haut, la valeur la plus faible étant le pipeline vers le bas, la rupture du pipeline vers le haut, l'ouverture d'une position.

L'interface de visualisation graphique spécifique peut être consultée dans le PPT ci-dessous.

img

En fait, cette stratégie est la même que celle utilisée par lui-même pour faire des ETF à large base, bien sûr, elle est également utilisée pour acheter et vendre des actions lors de la sélection d'indices, puis déplacée directement dans la sphère monétaire.

img

Le graphique ci-dessous montre les performances de la revue pour l'année, avec une capture d'écran de logique de code spécifique:

img

En fait, après avoir lu les données, les pandas sont utilisés pour calculer les données d'indicateur.

img

Une fois le calcul terminé, vous pouvez exécuter la sortie de données avec la fonction pd.to_csv et visualiser les pyecharts utilisés dans la capture d'écran ci-dessus.

Toutes les stratégies, visualisations et codes pour les indicateurs de performance sont des "T-shirts".

03

Le débat est quantifié

La première: il y a beaucoup de questions ou de gens qui se demandent pourquoi vous pouvez publier des stratégies réelles, des faux imposteurs? ou dire que c'est vraiment universel? haha. Premièrement, une bonne stratégie n'a pas peur d'être publique, ce n'est pas un développement d'armes de combat au niveau de la guerre qui décidera de la vie ou de la mort, donc moi-même et d'autres agences ou individus, je n'ai pas peur des soi-disant secrets stratégiques, car à mon avis, le CTA n'a pas de secret.

Deuxièmement, beaucoup de gens, qu'ils soient débutants ou débutants, voire même des joueurs expérimentés, ont besoin d'inspiration, y compris l'exploration des facteurs de l'action, les idées de stratégie de choix du moment, etc. Ces sources sont souvent l'expérience subjective, les rapports de recherche, l'échange de communication dans le cercle, etc.

En conclusion, la quantification était un phénomène domestique, les transactions programmatiques appartenaient à la sous-catégorie de la quantification, dès l'époque de l'université elle-même (environ 2009), alors que des programmes tels que TB, pyramides et autres étaient en cours de chasse, et si cela se poursuit aujourd'hui, on peut dire que cette partie des premiers prédicateurs de l'avenir est de 10 ans, sans compter les stratégies et les systèmes à haute fréquence qui sont revenus de Wall Street. Par conséquent, la stratégie de la quantification ou la stratégie de la programmation en Chine a duré pendant un certain temps, mais dans le cercle actuel de parts de marché et d'acteurs, ainsi que le soutien des politiques, la quantification est toujours une petite partie de la réalité, malgré des études remplies d'analyses et de modèles stratégiques.

Enfin, je remercie le public pour sa confiance en moi et pour l'invitation à écrire un article. Si vous avez des questions spécifiques sur le code et la stratégie, veuillez m'envoyer un e-mail personnel ou à T-Bone, je suis dans le groupe T-Bone.

Je vous remercie encore une fois pour votre magnifique exposé!

Pour ceux qui n'ont pas encore rejoint le groupe de discussion quantitative, rejoignez-le rapidement pour en apprendre davantage!

Le bâtiment de la ville!

img

Le WeChat a été effacé Attention au numéro du public


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

Relationnée

Plus de

Inventeur de la quantificationJe suis passé par là. https://www.fmz.com/strategy/361827

la racineLes haricots sont toujours beaux.

Une tasse de théCette stratégie semble peu liée à la volatilité.

l' homélieJe ne peux pas décrire la fréquence de fluctuation, à part celle de 90 cycles auparavant, et je peux à peine dire qu'il s'agit d'une relation entre la fréquence et l'amplitude. La méthode d'ouverture de HH, LL est l'opération de la DC du canal de Dongcheng, où le placement est choisi par la stratégie de l'uniformité. La volatilité implicite, laissez-la à des spécialistes pour la décrire.

Des nuages légersSœur Beyo, pouvez-vous prendre les valises?

Je suis dégoûté.Si vous me demandez si je ne suis pas d'accord, je le suis.

Je suis dégoûté.Si vous me demandez si je ne suis pas d'accord, je le suis.

Des nuages légersJe vous en prie.

Les haricotsJe pense que le prochain semestre est libre.

Des nuages légersJe ne sais pas comment faire.

Les haricotsJe ne peux pas.

Les haricotsJe n'ai pas beaucoup de temps, je ne peux pas penser à plus tard... mais je ne suis pas très doué pour le code... c'est comme ça, ou je ne peux pas utiliser la série. Je ne sais pas si j'ai bien compris.