Strategi dagangan berdasarkan aliran dana aktif

Penulis:Kebaikan, Dicipta: 2020-08-01 09:50:44, Dikemas kini: 2023-10-11 19:56:26

img

Ringkasan

Harga adalah sama ada naik atau turun. Dalam jangka panjang, kebarangkalian kenaikan dan kejatuhan harga harus 50%, jadi untuk meramalkan harga masa depan dengan betul, anda perlu mendapatkan semua faktor yang mempengaruhi harga dalam masa nyata, dan kemudian memberikan setiap faktor berat yang betul, dan akhirnya membuat analisis Objektif dan rasional. Untuk menyenaraikan semua faktor yang mempengaruhi harga, ia mungkin mengisi seluruh alam semesta.

Diikutsertakan sebagai: persekitaran ekonomi global, dasar makro negara, dasar perindustrian yang berkaitan, hubungan bekalan dan permintaan, peristiwa antarabangsa, kadar faedah dan kadar pertukaran, inflasi dan deflasi, psikologi pasaran, dan faktor yang tidak diketahui lain, dll. Ramalan telah menjadi tugas yang besar dan mustahil. Jadi awal, saya memahami bahawa pasaran tidak dapat diramalkan. Kemudian semua ramalan di pasaran telah menjadi hipotesis, dan perdagangan telah menjadi permainan kebarangkalian, yang menarik.

Mengapa menggunakan aliran modal

Oleh kerana pasaran tidak dapat diramalkan, adakah ia benar-benar acuh tak acuh? Tidak, semua faktor makro dan mikro telah tercermin dalam harga, yang bermaksud bahawa harga adalah hasil daripada interaksi semua faktor. Kita hanya perlu menganalisis harga untuk membuat strategi perdagangan yang lengkap.

Fikirkan dulu, kenapa harga naik?

Anda mungkin berkata, kerana: negara menyokong dasar perindustrian yang relevan, negara asal hujan lebat, perang perdagangan antarabangsa, garpu emas MACD dibeli, orang lain telah membelinya, dll.

Pada hakikatnya, kenaikan dan penurunan harga adalah serupa dengan pasang naik. Peningkatan harga tidak dapat dipisahkan dari promosi dana. di pasaran, jika terdapat lebih banyak pembeli daripada penjual, harga akan naik. sebaliknya, jika terdapat lebih banyak penjual daripada pembeli, harga akan jatuh. Dengan konsep ini, kita boleh memberikan jangkaan yang munasabah untuk trend harga masa depan berdasarkan hubungan bekalan dan permintaan yang tercermin dalam aliran bersih dana.

Prinsip aliran dana

Berbeza dengan analisis aliran dana tradisional, analisis aliran dana menganalisis transaksi mana yang merupakan aliran masuk dana aktif dan transaksi mana yang merupakan aliran keluar dana aktif berdasarkan data transaksi dalam tempoh masa. Kemudian, dengan mengurangkan jumlah aliran keluar aktif dari jumlah aliran masuk aktif dalam tempoh ini, kita dapat mengetahui aliran masuk dana bersih dalam tempoh ini. Jika aliran masuk dana bersih positif, ini bermakna bekalan produk ini kekurangan; jika aliran keluar dana bersih bermakna bekalan produk ini berlebihan.

Selepas membaca ini, sesetengah orang mungkin tertanya-tanya bahawa dalam transaksi sebenar, perjanjian hanya akan dibuat apabila seseorang membeli dan seseorang menjual. Perintah urus niaga mesti mempunyai jumlah penjualan sebanyak jumlah pembelian, dan dana mesti masuk dan keluar dari jumlah yang sama. Dari mana aliran masuk dan keluar modal berasal? Sebenarnya, secara ketat, setiap pesanan beli mesti sesuai dengan pesanan jual yang sesuai, dan aliran masuk modal dan aliran keluar modal mesti sama. Jika kita ingin mengira pesanan mana yang dibeli secara aktif dan pesanan mana yang dijual secara aktif, kita hanya boleh menggunakan kaedah kompromi, menggunakan data bar garis K, berdasarkan jumlah transaksi dan harga.

Kaedah pengiraan aliran dana

Perubahan dalam aliran dana dengan tepat sepadan dengan tingkah laku pasaran masa nyata, dan aliran bersih dana dikira dalam masa nyata dengan mengintegrasikan data bar garis k. Terdapat dua algoritma untuk mengira aliran dana aktif:

Pertama, jika harga urus niaga semasa pesanan semasa dilaksanakan pada harga pihak lawan atau pada harga yang lebih tinggi, harga urus niaga pembelian >= harga urus niaga jualan, yang bermaksud bahawa pembeli lebih bersedia untuk menyelesaikan urus niaga pada harga yang lebih tinggi, yang termasuk dalam aliran dana aktif.

Kedua, jika harga urus niaga semasa > harga urus niaga terakhir, maka dapat difahami bahawa jumlah urus niaga semasa secara aktif mendorong kenaikan harga, yang termasuk dalam aliran dana aktif.

Ambil algoritma kedua di atas sebagai contoh:

Harga penutupan produk tertentu pada pukul 10:00 adalah 3450, dan harga penutupan pada pukul 11:00 adalah 3455, jadi kita akan memasukkan jumlah urus niaga antara 10:00 dan 11:00 sebagai aliran masuk modal aktif. Jika tidak, ia termasuk dalam aliran keluar inisiatif dana. Artikel ini berdasarkan kaedah kedua, menambah faktor turun naik harga. Dengan membandingkan harga penutupan bar k sebelum dan selepas, jumlah kenaikan atau penurunan k bar bar * turun naik dimasukkan dalam urutan, dan kemudian lebih lanjut mengikut urutan Mengira nisbah aliran masuk aktif dana.

Logik Perdagangan

Artikel ini menerangkan aliran dana di pasaran niaga hadapan dari perspektif volume, dan menubuhkan model perdagangan untuk menilai trend harga jangka pendek melalui analisis masa nyata data bar garis K. Dalam keadaan biasa, aliran modal dan trend harga boleh dibahagikan kepada empat syarat asas:

Peningkatan harga dan aliran bersih aktif dana per unit masa: keadaan ini kuat, dan harga masa depan akan terus meningkat lebih mungkin;

Harga saham meningkat, dan aliran keluar bersih aktif dana setiap unit masa: Dalam kes ini, ia adalah kedudukan yang sederhana-kuat, dan kadar kenaikan harga masa depan akan berkurang dengan ketara;

Harga saham jatuh, manakala aliran bersih aktif dana setiap unit masa: ini adalah keadaan yang lemah, dan harga masa depan terus jatuh lebih mungkin;

Harga saham jatuh, dan pada masa yang sama aliran keluar bersih aktif dana per unit masa: dalam kes ini, ia adalah kedudukan yang lemah, dan kadar penurunan harga masa depan akan berkurang dengan ketara;

Pemboleh ubah utama adalah seperti berikut:

Rendah sebelumnya (ll) Jumlah tertinggi sebelum ini (hh) Pembelian aktif (barIn) Penjualan aktif (barOut) Nisbah aliran dana aktif ke aliran dana aktif (barRatio) Sempadan kedudukan pembukaan (openValve) Posisi pemegang semasa (myAmount) Harga penutupan K-line terakhir (tutup)

Syarat kemasukan dan keluar

Strategi perdagangan kuantitatif yang baik memerlukan bukan sahaja pulangan yang stabil, tetapi juga keupayaan untuk mengawal risiko dan mengelakkan kerugian besar apabila terdapat kebarangkalian kecil.

  • Pembukaan kedudukan panjang: jika tidak ada kedudukan tahan semasa, dan barRatio > openValve, buka kedudukan panjang;

  • Pembukaan kedudukan pendek: jika tidak ada kedudukan tahan semasa dan barRatio < 1 / openValve, buka kedudukan pendek;

  • Penutupan kedudukan panjang: Jika kedudukan panjang semasa dipegang dan ditutup < ll, jual dan tutup kedudukan panjang;

  • Penutupan kedudukan pendek: Jika kedudukan pendek semasa dipegang dan ditutup > hh, beli dan tutup kedudukan pendek;

Menulis kod sumber strategi

Mendapatkan dan mengira data

function data() {
    var self = {};
    var barVol = [];
    var bars = _C(exchange.GetRecords); //Get K line bar data
    if (bars.length < len * 2) { //Control the length of the K line bar data array
        return;
    }
    for (var i = len; i > 0; i--) {
        var barSub_1 = bars[bars.length - (i + 1)].Close - bars[bars.length - (i + 2)].Close; //Calculate the difference between the current closing price and the previous K line bar closing price
        if (barSub_1 > 0) { //If the price rises, add a positive number to the array
            barVol.push(bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        } else if (barSub_1 < 0) { //If the price drops, add a negative number to the array
            barVol.push(-bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        }
    }
    if (barVol.length > len) {
        barVol.shift(); //Free up excess data
    }
    self.barIn = 0;
    self.barOut = 0;
    for (var v = 0; v < barVol.length; v++) {
        if (barVol[v] > 0) {
            self.barIn += barVol[v]; //Consolidate all active inflows funds
        } else {
            self.barOut -= barVol[v]; //Consolidate all active outflow funds
        }
    }
    self.barRatio = self.barIn / Math.abs(self.barOut); //Calculate the ratio of active inflows to active outflows
    bars.pop(); //Delete unfinished K line bar data
    self.close = bars[bars.length - 1].Close; //Get the closing price of the pervious bar
    self.hh = TA.Highest(bars, hgLen, 'High'); //Get the previous high price
    self.ll = TA.Lowest(bars, hgLen, 'Low'); //Get the previous low price
    return self;
}

Dapatkan data bar garis K terus melaluiGetRecordskaedah dalam API FMZ. mengandungi harga tertinggi, harga terendah, harga pembukaan, harga penutupan, jumlah, dan stempel masa standard. Jika harga urus niaga terkini lebih besar daripada harga urus niaga terakhir, maka jumlah urus niaga terkini * (harga tertinggi-harga terendah) dimasukkan ke dalam pembelian aktif; jika harga urus niaga terkini adalah lebih rendah daripada harga urus niaga terakhir, maka jumlah terakhir * (harga tertinggi-harga terendah) dimasukkan ke dalam penjualan aktif;

Dapatkan data kedudukan

function positions(name) {
    var self = {};
    var mp = _C(exchange.GetPosition); //Get positions
    if (mp.length == 0) {
        self.amount = 0;
    }
    for (var i = 0; i < mp.length; i++) { //Position data processing
        if (mp[i].ContractType == name) {
            if (mp[i].Type == PD_LONG || mp[i].Type == PD_LONG_YD) {
                self.amount = mp[i].Amount;
            } else if (mp[i].Type == PD_SHORT || mp[i].Type == PD_SHORT_YD) {
                self.amount = -mp[i].Amount;
            }
            self.profit = mp[i].Profit;
        } else {
            self.amount = 0;
        }
    }
    return self;
}

Dapatkan data kedudukan asas melaluiGetPositionJika kedudukan panjang semasa dipegang, maka kuantiti kedudukan positif dikembalikan; jika kedudukan semasa pendek, maka kuantiti kedudukan negatif dikembalikan. Tujuan ini adalah untuk memudahkan pengiraan logik kedudukan pembukaan dan penutupan.

Menempatkan pesanan

function trade() {
    var myData = data(); //Execute data function
    if (!myData) {
        return;
    }
    var mp = positions(contractType); //Get position information
    var myAmount = mp.amount; //Get the number of positions
    var myProfit = mp.profit; //Get floating profit and loss
    if (myAmount > 0 && myData.close < myData.ll) {
        p.Cover(contractType, unit); //close long position
    }
    if (myAmount < 0 && myData.close > myData.hh) {
        p.Cover(contractType, unit); //close short position
    }
    if (myAmount == 0) {
        if (myData.barRatio > openValve) {
            p.OpenLong(contractType, unit); //open long position
        } else if (myData.barRatio < 1 / openValve) {
            p.OpenShort(contractType, unit); //open short position
        }
    }
}

Ciri strategik

  • Ciri:

Beberapa parameter teras: Model ini mempunyai idea reka bentuk yang jelas, dengan hanya tiga parameter teras. Ruang pengoptimuman kecil, dan pemasangan berlebihan dapat dielakkan dengan berkesan. Keseluruhan yang kuat: Strategi ini mudah dalam logik dan mempunyai keseluruhan yang tinggi. Ia boleh disesuaikan dengan kebanyakan jenis kecuali produk pertanian dan boleh digabungkan dengan pelbagai jenis.

  • Penambahbaikan:

Menambah syarat-syarat kedudukan pegangan: aliran dana satu hala (pasaran saham) boleh menentukan aliran masuk atau keluar dana berdasarkan faktor-faktor seperti turun naik harga dan jumlah dagangan.

Menambah keadaan penyimpangan standard: hanya bergantung pada aliran dana sebagai syarat untuk membuka kedudukan, mungkin terdapat isyarat palsu yang kerap, mengakibatkan pembukaan dan penutupan kedudukan yang kerap. Menapis isyarat palsu dengan mengira nilai purata aliran keluar bersih dana dalam masa yang ditentukan dan menambah penyimpangan standard ke atas dan ke bawah.

Kod sumber strategi lengkap:

/*backtest
start: 2016-01-01 09:00:00
end: 2019-12-31 15:00:00
period: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
*/

var p = $.NewPositionManager(); //Call commodity futures trading library

//Holding Position data processing
function positions(name) {
    var self = {};
    var mp = _C(exchange.GetPosition); //Get positions
    if (mp.length == 0) {
        self.amount = 0;
    }
    for (var i = 0; i < mp.length; i++) { //Holding Position data processing
        if (mp[i].ContractType == name) {
            if (mp[i].Type == PD_LONG || mp[i].Type == PD_LONG_YD) {
                self.amount = mp[i].Amount;
            } else if (mp[i].Type == PD_SHORT || mp[i].Type == PD_SHORT_YD) {
                self.amount = -mp[i].Amount;
            }
            self.profit = mp[i].Profit;
        } else {
            self.amount = 0;
        }
    }
    return self;
}

//Market data processing function
function data() {
    var self = {};
    var barVol = [];
    var bars = _C(exchange.GetRecords); //Get K line bar data
    if (bars.length < len * 2) { //Control the length of the K line bar data array
        return;
    }
    for (var i = len; i > 0; i--) {
        var barSub_1 = bars[bars.length - (i + 1)].Close - bars[bars.length - (i + 2)].Close; //Calculate the difference between the current closing price and the previous K line bar closing price
        if (barSub_1 > 0) { //If the price rises, add a positive number to the array
            barVol.push(bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        } else if (barSub_1 < 0) { //If the price drops, add a negative number to the array
            barVol.push(-bars[bars.length - (i + 1)].Volume * (bars[bars.length - (i + 1)].High - bars[bars.length - (i + 1)].Low));
        }
    }
    if (barVol.length > len) {
        barVol.shift(); //Free up excess data
    }
    self.barIn = 0;
    self.barOut = 0;
    for (var v = 0; v < barVol.length; v++) {
        if (barVol[v] > 0) {
            self.barIn += barVol[v]; //Consolidate all active inflows funds
        } else {
            self.barOut -= barVol[v]; //Consolidate all active outflow funds
        }
    }
    self.barRatio = self.barIn / Math.abs(self.barOut); //Calculate the ratio of active inflows to active outflows
    bars.pop(); //Delete unfinished K line bar data
    self.close = bars[bars.length - 1].Close; //Get the closing price of the last K line bar
    self.hh = TA.Highest(bars, hgLen, 'High'); //Get the previous high price
    self.ll = TA.Lowest(bars, hgLen, 'Low'); //Get the previous low price
    return self;
}

//Trading function
function trade() {
    var myData = data(); //Execute data function
    if (!myData) {
        return;
    }
    var mp = positions(contractType); //Get position information
    var myAmount = mp.amount; //Get the number of positions
    var myProfit = mp.profit; //Get floating profit and loss
    if (myAmount > 0 && myData.close < myData.ll) {
        p.Cover(contractType, unit); //close long position
    }
    if (myAmount < 0 && myData.close > myData.hh) {
        p.Cover(contractType, unit); //close short position
    }
    if (myAmount == 0) {
        if (myData.barRatio > openValve) {
            p.OpenLong(contractType, unit); //open long position
        } else if (myData.barRatio < 1 / openValve) {
            p.OpenShort(contractType, unit); //open short position
        }
    }
}

//The main entrance of the program, start from here
function main() {
    while (true) { //Enter the loop
        if (exchange.IO("status")) { //If it is the market opening time
            _C(exchange.SetContractType, contractType); //Subscription contract
            trade(); //Execute trade function
        }
    }
}

Alamat strategi:https://www.fmz.com/strategy/87698

Ujian belakang strategi

Konfigurasi strategi:

img

Prestasi ujian belakang:

img

Ringkasnya

Melalui pemodelan, artikel ini menggunakan data bar garis K niaga hadapan komoditi yang disediakan oleh platform perdagangan FMZ untuk mewujudkan model aliran modal bersih melalui pengumpulan data, analisis yang berkaitan, dan teknologi ramalan.

Perlu diperhatikan bahawa aliran dana yang dirujuk dalam artikel ini merujuk kepada aliran dana yang aktif. Ia merujuk kepada kekuatan penjual dan pembeli di pasaran, bukan masuk atau keluar dana. Menghakimi harga masa depan dengan menganalisis tingkah laku pembeli dan penjual di pasaran tidak mempunyai kepentingan rujukan jangka pendek.


Berkaitan

Lebih lanjut