Sumber dimuat naik... memuat...

Strategi membuang syiling (●''●)

Penulis:Kacang, Tarikh: 2020-04-21 17:39:52
Tag:

Penulisan ini dibuat oleh seorang ahli media tempatan bernama T.S.A.R. Di bawah ini adalah kandungan yang dipindahkan. Sila lihat lebih banyak tentang Dunia Kuantitatif Ribuan untuk mendapatkan lebih banyak kod sumber strategi! Saya juga membuat iklan untuk diri saya sendiri. "Log kuantitatif kacang kedelai" Di sini, saya akan berkongsi dengan anda semua tentang bagaimana saya boleh menghalalkan kebankrapan kuantitatif dalam talian setiap hari. Lebih banyak faedah, lebih banyak yang anda dapat.


Dengan kadar fluktuasi yang baik, anda boleh memenangi Bitcoin dengan mudah! Asal-asalan, dunia kuantitatif berjuta-juta hari yang lalu R&D strategi kuantitatif yang sebenarnya adalah dua hala, sangat sukar untuk orang yang baru memulakan, sukar bukan sahaja kod pada tahap teknik ketuhar, tetapi juga sukar untuk pemikiran logik strategi pada tahap ketuhar. Kedua-duanya penting dan tidak boleh dipisahkan.

Selamat datang kepada semua rakan-rakan saya yang berjumlah ribuan!

Artikel ini adalah edisi kedua dari surat lamaran istimewa, dan kami sangat terhormat untuk menjemput anda ke Tianjin Tianjin (LE_CHIFFRE1) untuk memperkenalkan kepada anda: bagaimana menggunakan faktor turun naik dengan mudah untuk memenangi pasaran BTC, untuk mencapai penolakan yang lebih besar!

Yang Shen berasal dari institusi pelaburan kuantiti tradisional, pernah juga terlibat dalam perniagaan bursa lingkaran wang, mempunyai pengalaman yang kaya dan pandangan yang unik dalam bidang kuantiti. Yang Shen edisi ini mengandungi wahyu pemikiran, pelaksanaan pengekodan dan kesedaran peribadi dan lain-lain, tidak boleh dikatakan tidak penuh, beribu-ribu orang melihat sendiri juga merasa bermanfaat, benar-benar sangat mengagumi dan berterima kasih kepada Yang Shen, sangat mengesyorkan anda membaca buku ini!

Di bawah ini adalah petikan mengenai strategi kadar turun naik.

01

Pengantar

Halo semua, hari ini saya bernasib baik untuk memajukan artikel di nombor umum kuantitatif yang berjuta-juta, dan juga mengucapkan terima kasih atas jemputan bos T (salah satu daripada ribuan nombor luar). Pertama kali menulis artikel kepada bos T, bebas bermain, meminjam masa lapang selepas bekerja, kualiti dan kesilapan juga diarahkan kepada semua orang yang betul dan terkandung dalam artikel, terima kasih.

Pemilik T berkata menulis kuantitatif, dan tidak memberikan apa-apa ruang, benar-benar tidak tahu di mana untuk menulis. Kemudian mulakan dengan topik kegemaran anda untuk membincangkan dengan orang lain. Indikator kuantitatif dan strategi (yang boleh dibantu dan juga boleh diotomatikkan), tentu saja, akhirnya kita juga perlu menambah satu perkataan lama yang sering diucapkan: anda boleh melabur berisiko, masuk ke pasaran perlu berhati-hati, strategi hanya untuk memberi anda idea dan pengajaran, untung dan rugi diri. Semua keuntungan dan kerugian menggunakan strategi ini tidak ada kaitan dengan diri saya sendiri dan ribuan pelabur dunia kuantitatif.

Jika anda tidak mempunyai masalah, anda boleh teruskan dengan menulis di bawah.

02

Satu strategi mudah untuk kadar turun naik

Orang yang mengenali saya sebenarnya tahu, secara peribadi, saya tidak terlalu suka bermain dengan Alpha, agaknya saya lebih mempercayai Beta, lebih banyak untuk mengkaji Beta.

Pembangunan strategi kuantitatif sebenarnya adalah dua hala, sangat sukar untuk orang yang baru memulakan, sukar untuk tidak hanya kod tingkat yang bermasalah, juga sukar untuk pemikiran logik strategik peringkat yang bermasalah. Kedua-duanya adalah penting dan tidak boleh dipisahkan. Strategi yang saya sampaikan kepada anda hari ini sebenarnya diilhamkan banyak tahun yang lalu dari sebuah laporan penyelidikan di Huai'an, kita melihat dengan teliti hanya memberi ilham kepada anda, kerana itu dikatakan kerana logik strategi itu sama sekali tidak seperti yang disebutkan dalam laporan penyelidikan, khususnya laporan peribadi anda semua berbual-bual.

Algoritma strategi ini menggunakan prinsip turun naik kadar pulangan bergulir untuk penurunan harga logaritma pada satu tempoh tertentu, dan mencari nilai maksimum dan minimum bergulir pada satu tempoh tertentu, nilai tertinggi sebagai paip ke atas, nilai minimum sebagai paip ke bawah, memecahkan paip ke atas, membuka perdagangan.

Antara muka visualisasi grafik yang spesifik boleh dilihat di bawah PPT. Grafik ini digambar sendiri dengan Pyecharts, kod spesifik juga boleh dihubungi secara peribadi.

img

Sebenarnya, strategi ini adalah strategi yang digunakan sebelum ini untuk melakukan ETF berasaskan luas, tentu saja juga digunakan untuk membeli dan menjual saham semasa memilih indeks, kemudian dipindahkan terus ke lingkaran mata wang, terkejut untuk mengetahui bahawa ia benar-benar menurunkan tekanan, parameter tidak perlu berubah.

img

Di bawah ini adalah grafik prestasi untuk tahun itu, dengan skrin logik kod tertentu:

img

Di atas sebenarnya adalah data yang dibaca dan dihitung dengan pandas.

img

Apabila pengiraan selesai, output data boleh dilakukan dengan menggunakan fungsi pd.to_csv (), dan output pyecharts yang digunakan dalam skrin gambar di atas dapat dilihat (catatan: saya menggunakan pyecharts versi lama).

Semua strategi, visualisasi, dan kod penanda prestasi adalah T-Building.

03

Perbincangan Kuantiti

Pertama, strategi yang baik tidak takut untuk mendedahkan secara terbuka, ini bukan lagi pembangunan senjata yang bertentangan dengan peringkat perang, yang akan menentukan hidup atau mati, jadi saya sendiri dan beberapa agensi atau individu, tidak takut apa-apa yang dipanggil rahsia taktik, kerana bagi saya, CTA tidak mempunyai rahsia. Hanya satu perkara yang difikirkan dan tidak difikirkan oleh semua orang telah hilang. Versi ini adalah versi tertua, dan beberapa versi juga telah ditingkatkan berdasarkannya, seperti menambahkan syarat lain untuk pertimbangan dan penghalang kerosakan, dan sebagainya, tentu saja termasuk penyesuaian parameter kitaran jenis lain, dan sebagainya.

Kedua: Ramai orang, sama ada yang baru atau yang sudah mula atau juga pemain lama, memerlukan sumber inspirasi, termasuk penggalian faktor saham, idea untuk memilih strategi masa, dan lain-lain, yang seringnya berasal dari pengalaman subjektif, laporan penyelidikan, pertukaran komunikasi dalam kalangan, dan lain-lain.

Kesimpulannya, kuantitatif adalah barang asing, perdagangan programatik adalah subset dalam kuantitatif, sejak masa universiti sendiri (sekitar tahun 2009), ketika itu, programatik seperti TB, piramid dan lain-lain telah diburu, jika berterusan hari ini, dapat dikatakan bahawa beberapa orang yang pertama melihat ramalan telah 10 tahun, yang belum termasuk mereka yang membawa balik dari Wall Street yang menyala-nyala. Oleh itu, strategi kuantitatif atau strategi programatik telah berlangsung untuk sementara waktu di China, tetapi dalam kalangan pasaran sekarang bahagian dan pemain utama, dan sokongan dasar, kuantitatif masih merupakan sebahagian kecil yang wujud, walaupun banyak analisis dan model strategi yang dibangunkan oleh kajian menunjukkan bahawa ada orang-orang yang menyukai logik kecil.

Akhirnya, terima kasih kepada orang ramai yang telah mempercayai saya dan mengundang saya untuk menulis artikel. Jika anda mempunyai masalah kod dan strategi tertentu, sila hantar e-mel peribadi kepada saya atau kepada T-Bone, saya juga dalam kumpulan T-Bone.

Terima kasih sekali lagi untuk penjelasan yang sangat baik!

Jika anda masih belum menyertai kumpulan perbincangan kuantitatif, sila segera bergabung untuk mendapatkan bahan pembelajaran!

Bangunan Bandar Seribu!

img

WeChat menghapuskan Perhatian kepada isu awam


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

Lebih lanjut

AllahAdakah kita boleh mengubahnya menjadi versi Bitcoin?