Sumber dimuat naik... memuat...

Analisis Strategi Dagangan Frekuensi Tinggi - Penny Jump

Penulis:FMZ~Lydia, Dicipta: 2023-11-07 10:44:20, Dikemas kini: 2024-01-01 12:19:43

img

Perdagangan frekuensi tinggi adalah bidang yang mencabar dan kompetitif yang bergantung pada pelaksanaan perdagangan yang cepat dan pandangan sensitif ke dalam struktur mikro pasaran. Salah satu strategi yang terkenal adalah Penny Jump, yang memberi tumpuan kepada mengeksploitasi gajah di pasaran untuk mendapatkan keuntungan yang kecil tetapi kerap.

Memahami Strategi Penny Jump

Dalam pasaran saham, gajah biasanya merujuk kepada para pelabur institusi yang ingin membeli atau menjual sebilangan besar saham tetapi tidak bersedia untuk berdagang pada harga pasaran. Sebaliknya, mereka memilih untuk menggantung sebilangan besar pesanan had di pasaran, iaitu, pesanan tertangguh, untuk menunjukkan niat mereka. tingkah laku ini telah menarik perhatian luas di pasaran, kerana transaksi besar mungkin mempunyai kesan yang signifikan pada pasaran.

Sebagai contoh, anggaplah kedalaman awal pasaran saham adalah seperti ini: 200 ∙ $1.01 x $1.03 ∙ 200. Kemudian seekor gajah masuk dan meletakkan pesanan untuk membeli 3000 saham pada $1.01 setiap satu. Pada ketika ini, kedalaman pasaran akan berubah menjadi 3,200 ∙ $1.01 x $1.03 ∙ 200. Tindakan ini seperti memperkenalkan seekor gajah, yang menjadi tumpuan peserta lain di pasaran.

  • Pasaran Persaingan Bagi peniaga frekuensi tinggi, keuntungan mereka terutamanya berasal dari analisis struktur mikro pasaran untuk membuat spekulasi mengenai niat peniaga lain. Setelah pemain besar muncul, peniaga frekuensi tinggi akan menubuhkan kedudukan dengan cepat untuk menangkap turun naik harga kecil. Matlamat mereka adalah untuk berdagang dengan kerap dalam jangka masa yang singkat dan mengumpulkan keuntungan kecil tetapi terkumpul.

  • Dilemma Gajah Walaupun gajah mungkin ingin beroperasi dalam skala besar di pasaran, tindakan mereka juga mendedahkan niat perdagangan mereka, menjadikan mereka sasaran bagi peniaga frekuensi tinggi. Peniaga frekuensi tinggi cuba untuk menubuhkan kedudukan sebelum masa dan kemudian mendapat keuntungan dari turun naik harga. Kehadiran gajah di pasaran boleh mencetuskan tindak balas di pasaran yang kompetitif, sehingga mempengaruhi strategi perdagangan mereka.

  • Penipuan di Pasaran Sebenarnya, pelabur institusi besar biasanya tidak meletakkan sebilangan besar pesanan beli atau jual di pasaran secara terang-terangan, kerana tingkah laku sedemikian dapat menyebabkan peserta lain di pasaran mengambil langkah balas atau bahkan memanipulasi pasaran. Oleh itu, mereka mungkin menggunakan strategi untuk mewujudkan ilusi, menarik pedagang frekuensi tinggi ke lapangan, dan kemudian dengan cepat menjual atau membeli untuk mendapat keuntungan dari turun naik harga.

Idea Utama Strategi Penny Jump

Idea teras strategi lompatan Penny adalah bahawa sebaik sahaja pemain besar muncul di pasaran dan menyokong harga tertentu (seperti $ 1.01), pedagang frekuensi tinggi akan dengan cepat menaikkan tawaran mereka sebanyak satu sen, misalnya, menjadi $ 1.02. Ini kerana pedagang frekuensi tinggi memahami bahawa penampilan pemain besar bermakna terdapat sokongan pembelian yang kuat pada tahap harga ini, jadi mereka cuba mengikuti dengan teliti dengan harapan kenaikan harga. Apabila harga benar-benar meningkat menjadi $ 1.03 x $ 1.05, pedagang frekuensi tinggi dapat menjual dengan cepat dan memperoleh keuntungan $ 0.01.

Bukan itu sahaja, tetapi peniaga frekuensi tinggi juga boleh membuat keuntungan selepas membeli walaupun harga tidak naik, kerana mereka tahu bahawa pemain besar telah menyokong harga asas; oleh itu mereka dapat dengan cepat menjual saham mereka kepada pemain besar ini dan mendapat keuntungan arbitraj kecil.

Menganalisis kod strategi lompatan sen

Kod sumber strategi:https://www.fmz.com/strategy/358

Kod strategi yang diberikan di atas adalah contoh, digunakan untuk melaksanakan strategi Penny Jump. Di bawah ini adalah penjelasan terperinci tentang kod, yang membolehkan pemula memahami bagaimana ia berfungsi:

var Counter = {
    i: 0,
    w: 0,
    f: 0
};

// Variables
var InitAccount = null;

function CancelAll() {
    while (true) {
        var orders = _C(exchange.GetOrders);
        if (orders.length == 0) {
            break;
        }
        for (var i = 0; i < orders.length; i++) {
            exchange.CancelOrder(orders[i].Id);
        }
        Sleep(Interval);
    }
}

function updateStatus(msg) {
    LogStatus("Number of debugging sessions:", Counter.i, "succeeded:", Counter.w, "failed:", Counter.f, "\n"+msg+"#0000ff\n"+new Date());
}

function main() {
    if (DisableLog) {
        EnableLog(false);
    }
    CancelAll();
    InitAccount = _C(exchange.GetAccount);
    Log(InitAccount);
    var i = 0;
    var locks = 0;
    while (true) {
        Sleep(Interval);
        var depth = _C(exchange.GetDepth);
        if (depth.Asks.length === 0 || depth.Bids.length === 0) {
            continue;
        }
        updateStatus("Searching within the elephant... Buy one: " + depth.Bids[0].Price + ",  Sell one:" + depth.Asks[0].Price + ", Lock times: " + locks);
        var askPrice = 0;
        for (i = 0; i < depth.Asks.length; i++) {
            if (depth.Asks[i].Amount >= Lot) {
                askPrice = depth.Asks[i].Price;
                break;
            }
        }
        if (askPrice === 0) {
            continue;
        }
        var elephant = null;
        // skip Bids[0]
        for (i = 1; i < depth.Bids.length; i++) {
            if ((askPrice - depth.Bids[i].Price) > ElephantSpace) {
                break;
            }
            if (depth.Bids[i].Amount >= ElephantAmount) {
                elephant = depth.Bids[i];
                break;
            }
        }

        if (!elephant) {
            locks = 0;
            continue;
        }
        locks++;
        if (locks < LockCount) {
            continue;
        }
        locks = 0;

        updateStatus("Debug the elephant... The elephant is in gear " + i + ", " + JSON.stringify(elephant));
        exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant);
        var ts = new Date().getTime();
        while (true) {
            Sleep(CheckInterval);
            var orders = _C(exchange.GetOrders);
            if (orders.length == 0) {
                break;
            }
            if ((new Date().getTime() - ts) > WaitInterval) {
                for (var i = 0; i < orders.length; i++) {
                    exchange.CancelOrder(orders[i].Id);
                }
            }
        }
        var account = _C(exchange.GetAccount);
        var opAmount = _N(account.Stocks - InitAccount.Stocks);
        if (opAmount < 0.001) {
            Counter.f++;
            Counter.i++;
            continue;
        }
        updateStatus("Successful payment: " + opAmount +", Start taking action...");
        exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount);
        var success = true;
        while (true) {
            var depth = _C(exchange.GetDepth);
            if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price-(STTick*PennyTick))) {
                success = false;
                updateStatus("Didn't get it, start to stop loss, currently buying one: " + depth.Bids[0].Price);
                CancelAll();
                account = _C(exchange.GetAccount);
                var opAmount = _N(account.Stocks - InitAccount.Stocks);
                if (opAmount < 0.001) {
                    break;
                }
                exchange.Sell(depth.Bids[0].Price, opAmount);
            }
            var orders = _C(exchange.GetOrders);
            if (orders.length === 0) {
                break;
            }
            Sleep(CheckInterval);
        }
        if (success) {
            Counter.w++;
        } else {
            Counter.f++;
        }
        Counter.i++;
        var account = _C(exchange.GetAccount);
        LogProfit(account.Balance - InitAccount.Balance, account);
    }
}

Saya akan menganalisis kod strategi yang anda berikan baris demi baris untuk membantu anda memahami operasi secara terperinci.

var Counter = {
    i: 0,
    w: 0,
    f: 0
};

Kod ini memulakan objek bernama Counter, yang digunakan untuk mengesan maklumat statistik perdagangan strategi.

  • i: Melambangkan jumlah keseluruhan transaksi.
  • w: Melambangkan bilangan transaksi yang berjaya.
  • f: Melambangkan bilangan transaksi gagal.

Atribut ini akan direkodkan dan dikemas kini semasa proses pelaksanaan strategi.

var InitAccount = null;

Baris kod ini memulakan pembolehubah bernama InitAccount, yang akan menyimpan maklumat akaun apabila strategi mula dilaksanakan.

function CancelAll() {
    while (true) {
        var orders = _C(exchange.GetOrders);
        if (orders.length == 0) {
            break;
        }
        for (var i = 0; i < orders.length; i++) {
            exchange.CancelOrder(orders[i].Id);
        }
        Sleep(Interval);
    }
}

Ini adalah fungsi bernamaCancelAll(), tujuannya adalah untuk membatalkan semua pesanan yang belum dipenuhi di pasaran.

  • while (true): Ini adalah gelung yang tidak berkesudahan, ia akan terus berjalan sehingga tidak ada pesanan yang belum selesai.
  • var orders = _C(exchange.GetOrders): Baris kod ini menggunakan fungsi exchange.GetOrders untuk mendapatkan semua pesanan yang menunggu dalam akaun semasa dan menyimpannya dalam pemboleh ubah pesanan.
  • if (orders.length == 0): Baris kod ini memeriksa sebarang pesanan yang belum selesai. Jika panjang array pesanan adalah 0, ini bermakna tidak ada pesanan yang belum selesai dan gelung akan terganggu (pecah).
  • for (var i = 0; i < orders.length; i++): Ini adalah gelung for yang berulang melalui semua perintah yang belum selesai.
  • exchange.CancelOrder(orders[i].Id): Baris kod ini menggunakan fungsi exchange.CancelOrder() untuk membatalkan setiap pesanan dengan IDnya.
  • Sleep(Interval): Baris kod ini memperkenalkan tempoh menunggu, berehat untuk jangka masa tertentu (dalam mili saat), untuk memastikan operasi pembatalan pesanan tidak terlalu kerap.

Baris kod ini memperkenalkan tempoh menunggu, berhenti untuk jangka masa tertentu (dalam mili saat), untuk memastikan operasi pesanan pembatalan tidak terlalu kerap.

function updateStatus(msg) {
    LogStatus("Number of debugging sessions:", Counter.i, "succeeded:", Counter.w, "failed:", Counter.f, "\n" + msg + "#0000ff\n" + new Date());
}

Ini adalah fungsi bernamaupdateStatus(msg), yang digunakan untuk mengemas kini dan merakam maklumat status transaksi. Ia menerima parameter msg, yang biasanya mengandungi maklumat mengenai status pasaran semasa. Operasi khusus fungsi termasuk:

MenggunakanLogStatus()Fungsi untuk merakam maklumat yang dipaparkan dalam bar status semasa pelaksanaan strategi. Peraturanmsgparameter yang mengandungi maklumat mengenai keadaan pasaran semasa. Stempel masa semasa (new Date()) dilampirkan untuk memaparkan maklumat masa. Tujuan fungsi ini adalah untuk merakam dan mengemas kini maklumat status transaksi untuk pemantauan dan analisis semasa pelaksanaan strategi.

function main() {
    if (DisableLog) {
        EnableLog(false);
    }
    CancelAll();
    InitAccount = _C(exchange.GetAccount);
    Log(InitAccount);
    var i = 0;
    var locks = 0;
    while (true) {
        Sleep(Interval);
        var depth = _C(exchange.GetDepth);
        if (depth.Asks.length === 0 || depth.Bids.length === 0) {
            continue;
        }
        updateStatus("Searching within the elephant... Buy one: " + depth.Bids[0].Price + ",  Sell one:" + depth.Asks[0].Price + ", Lock times: " + locks);
        var askPrice = 0;
        for (i = 0; i < depth.Asks.length; i++) {
            if (depth.Asks[i].Amount >= Lot) {
                askPrice = depth.Asks[i].Price;
                break;
            }
        }
        if (askPrice === 0) {
            continue;
        }
        var elephant = null;
        // skip Bids[0]
        for (i = 1; i < depth.Bids.length; i++) {
            if ((askPrice - depth.Bids[i].Price) > ElephantSpace) {
                break;
            }
            if (depth.Bids[i].Amount >= ElephantAmount) {
                elephant = depth.Bids[i];
                break;
            }
        }

        if (!elephant) {
            locks = 0;
            continue;
        }
        locks++;
        if (locks < LockCount) {
            continue;
        }
        locks = 0;

        updateStatus("Debug the elephant... The elephant is in gear " + i + ", " + JSON.stringify(elephant));
        exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant);
        var ts = new Date().getTime();
        while (true) {
            Sleep(CheckInterval);
            var orders = _C(exchange.GetOrders);
            if (orders.length == 0) {
                break;
            }
            if ((new Date().getTime() - ts) > WaitInterval) {
                for (var i = 0; i < orders.length; i++) {
                    exchange.CancelOrder(orders[i].Id);
                }
            }
        }
        var account = _C(exchange.GetAccount);
        var opAmount = _N(account.Stocks - InitAccount.Stocks);
        if (opAmount < 0.001) {
            Counter.f++;
            Counter.i++;
            continue;
        }
        updateStatus("Successful payment: " + opAmount +", Start taking action...");
        exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount);
        var success = true;
        while (true) {
            var depth = _C(exchange.GetDepth);
            if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price-(STTick*PennyTick))) {
                success = false;
                updateStatus("Didn't get it, start to stop loss, currently buying one: " + depth.Bids[0].Price);
                CancelAll();
                account = _C(exchange.GetAccount);
                var opAmount = _N(account.Stocks - InitAccount.Stocks);
                if (opAmount < 0.001) {
                    break;
                }
                exchange.Sell(depth.Bids[0].Price, opAmount);
            }
            var orders = _C(exchange.GetOrders);
            if (orders.length === 0) {
                break;
            }
            Sleep(CheckInterval);
        }
        if (success) {
            Counter.w++;
        } else {
            Counter.f++;
        }
        Counter.i++;
        var account = _C(exchange.GetAccount);
        LogProfit(account.Balance - InitAccount.Balance, account);
    }
}

Ini adalah fungsi utama pelaksanaanmain()Mari kita jelaskan operasi baris demi baris:

  • if (DisableLog): Baris kod ini memeriksa jika pembolehubah DisableLog adalah benar, dan jika ya, ia akan melumpuhkan rakaman log. Ini adalah untuk memastikan bahawa log yang tidak perlu tidak direkodkan oleh strategi.

  • CancelAll(): Panggil fungsi CancelAll( yang dijelaskan sebelumnya untuk memastikan bahawa tidak ada pesanan yang belum selesai.

  • InitAccount = _C(exchange.GetAccount): Baris kod ini mengambil maklumat akaun semasa dan menyimpannya dalam pembolehubah InitAccount. Ini akan digunakan untuk merakam status akaun apabila strategi mula dilaksanakan.

  • var i = 0;danvar locks = 0;: Memulakan dua pembolehubah, i dan kunci, yang akan digunakan dalam logik strategi berikutnya.

  • while (true): Ini adalah gelung tanpa akhir, terutamanya digunakan untuk pelaksanaan strategi yang berterusan.

Seterusnya, kita akan menerangkan logik strategi utama dalamwhile (true)lingkaran baris demi baris.

while (true) {
    Sleep(Interval);
    var depth = _C(exchange.GetDepth);
    if (depth.Asks.length === 0 || depth.Bids.length === 0) {
        continue;
    }
    updateStatus("Searching within the elephant... Buy one: " + depth.Bids[0].Price + ",  Sell one:" + depth.Asks[0].Price + ", Lock times: " + locks);
  • Sleep(Interval): Baris kod ini membolehkan strategi untuk tidur untuk tempoh masa, untuk mengawal kekerapan pelaksanaan strategi. Parameter Interval menentukan selang tidur (dalam mili saat).

  • var depth = _C(exchange.GetDepth): Dapatkan maklumat kedalaman pasaran semasa, termasuk harga dan kuantiti pesanan jual dan pesanan beli.

  • if (depth.Asks.length === 0 || depth.Bids.length === 0): Baris kod ini memeriksa maklumat kedalaman pasaran, memastikan bahawa kedua-dua pesanan jual dan pesanan beli wujud.

  • updateStatus("Searching within the elephant... Buy one: " + depth.Bids[0].Price + ", Sell one:" + depth.Asks[0].Price + ", Lock times: " + locks): Baris kod ini memanggil fungsi updateStatus untuk mengemas kini maklumat status strategi. Ia merekodkan status pasaran semasa, termasuk harga tawaran tertinggi, harga permintaan terendah dan masa kunci sebelumnya (kunci).

    var askPrice = 0;
    for (i = 0; i < depth.Asks.length; i++) {
        if (depth.Asks[i].Amount >= Lot) {
            askPrice = depth.Asks[i].Price;
            break;
        }
    }
    if (askPrice === 0) {
        continue;
    }
    var elephant = null;

  • var askPrice = 0;: Memulakan pembolehubah askPrice, ia akan digunakan untuk menyimpan harga pesanan jual yang memenuhi syarat.

  • for (i = 0; i < depth.Asks.length; i++): Ini adalah gelung for yang digunakan untuk melintasi maklumat harga dan kuantiti pesanan jual pasaran.

  • if (depth.Asks[i].Amount >= Lot): Dalam gelung, periksa sama ada kuantiti setiap pesanan jual lebih besar daripada atau sama dengan Lot yang ditentukan (pengiraan tangan). Jika ya, simpan harga pesanan jual itu dalam askPrice dan selesaikan gelung.

  • if (askPrice === 0): Jika tiada pesanan jual yang memenuhi syarat ditemui (askPrice masih 0), strategi akan terus menunggu dan melangkau operasi berikutnya.

  • var elephant = null;: Memulakan pembolehubah gajah, ia akan digunakan untuk menyimpan maklumat pesanan beli yang dikenal pasti sebagai gajah.

    for (i = 1; i < depth.Bids.length; i++) {
        if ((askPrice - depth.Bids[i].Price) > ElephantSpace) {
            break;
        }
        if (depth.Bids[i].Amount >= ElephantAmount) {
            elephant = depth.Bids[i];
            break;
        }
    }

    if (!elephant) {
        locks = 0;
        continue;
    }
    locks++;
    if (locks < LockCount) {
        continue;
    }
    locks = 0;

Teruskan melintasi maklumat harga dan kuantiti pesanan beli pasaran, melangkau pesanan beli pertama (Tawaran[0]).

  • if ((askPrice - depth.Bids[i].Price) > ElephantSpace): Periksa sama ada jurang antara harga tawaran semasa dan askPrice lebih besar daripada ElephantSpace. Jika ya, ia menunjukkan bahawa ia cukup jauh dari elephant, dan strategi tidak akan terus mencari.

  • if (depth.Bids[i].Amount >= ElephantAmount): Periksa sama ada kuantiti pesanan beli semasa lebih besar daripada atau sama dengan ElephantAmount. Jika ya, simpan maklumat pesanan beli dalam pembolehubah gajah.

  • if (!elephant): Jika elephant tidak dijumpai, set semula kiraan kunci kepada 0 dan terus menunggu.

  • locks++: Jika gajah ditemui, meningkatkan bilangan kunci. Ini adalah untuk memastikan bahawa strategi dijalankan hanya selepas mengesahkan kewujudan gajah beberapa kali dalam tempoh masa.

  • if (locks < LockCount): Periksa sama ada bilangan masa kunci telah memenuhi keperluan (LockCount). Jika tidak, terus menunggu.

    updateStatus("Debug the elephant... The elephant is in gear " + i + ", " + JSON.stringify(elephant));
    exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant);
    var ts = new Date().getTime();
    while (true) {
        Sleep(CheckInterval);
        var orders = _C(exchange.GetOrders);
        if (orders.length == 0) {
            break;
        }
        if ((new Date().getTime() - ts) > WaitInterval) {
            for (var i = 0; i < orders.length; i++) {
                exchange.CancelOrder(orders[i].Id);
            }
        }
    }

  • updateStatus("Debug the elephant... The elephant is in gear " + i + ", " + JSON.stringify(elephant)): Panggil fungsi updateStatus untuk merakam status semasa strategi, termasuk kedudukan gear elephant yang ditemui dan maklumat yang berkaitan.

  • exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant): Gunakan fungsi pertukaran.Beli untuk membeli yang dijumpai gajah. Harga pembelian adalah gajah. Harga + PennyTick, kuantiti pembelian adalah Lot, dan menerangkan operasi pembelian sebagai Bids[ + i + ].

  • var ts = new Date().getTime(): Dapatkan cap masa masa semasa untuk pengiraan selang masa seterusnya.

  • while (true): Masukkan gelung tak terhingga baru, digunakan untuk menunggu pelaksanaan gajah pesanan beli.

  • Sleep(CheckInterval): Strategi tidur untuk seketika untuk mengawal kekerapan pemeriksaan status pesanan.

  • var orders = _C(exchange.GetOrders): Dapatkan semua maklumat pesanan akaun semasa.

  • if (orders.length == 0): Periksa jika ada sebarang pesanan yang belum selesai, jika tidak, memecahkan gelung.

  • (new Date().getTime() - ts) > WaitInterval: Mengira selang masa antara masa semasa dan apabila elephant telah dibeli.

  • for (var i = 0; i < orders.length; i++)Pergi melalui semua pesanan yang belum selesai.

  • exchange.CancelOrder(orders[i].Id): Gunakan fungsi exchange.CancelOrder untuk membatalkan setiap pesanan yang belum selesai.

    var account = _C(exchange.GetAccount);
    var opAmount = _N(account.Stocks - InitAccount.Stocks);
    if (opAmount < 0.001) {
        Counter.f++;
        Counter.i++;
        continue;
    }
    updateStatus("Successful payment: " + opAmount + ", Start taking action...");
    exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount);
    var success = true;
    while (true) {
        var depth = _C(exchange.GetDepth);
        if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price - (STTick * PennyTick))) {
            success = false;
            updateStatus("Didn't get it, start to stop loss, currently buying one: " + depth.Bids[0].Price);
            CancelAll();
            account = _C(exchange.GetAccount);
            var opAmount = _N(account.Stocks - InitAccount.Stocks);
            if (opAmount < 0.001) {
                break;
            }
            exchange.Sell(depth.Bids[0].Price, opAmount);
        }
        var orders = _C(exchange.GetOrders);
        if (orders.length === 0) {
            break;
        }
        Sleep(CheckInterval);
    }
    if (success) {
        Counter.w++;
    } else {
        Counter.f++;
    }
    Counter.i++;
    var account = _C(exchange.GetAccount);
    LogProfit(account.Balance - InitAccount.Balance, account);
}

  • var account = _C(exchange.GetAccount): Dapatkan maklumat akaun semasa.

  • var opAmount = _N(account.Stocks - InitAccount.Stocks): Mengira perubahan aset akaun selepas membeli gajah. Jika perubahan kurang daripada 0.001, ia menunjukkan bahawa pembelian telah gagal, meningkatkan bilangan kegagalan dan terus ke gelung seterusnya.

  • updateStatus("Successful payment: " + opAmount + ", Start taking action..."): Mencatatkan maklumat pembelian berjaya gajah, termasuk kuantiti yang dibeli.

  • exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount): Gunakan fungsi exchange.Sell untuk menjual elephant yang berjaya dibeli untuk keuntungan. Harga jualan adalah elephant.Price + (PennyTick * ProfitTick).

Masukkan gelung tak terhingga baru, digunakan untuk menunggu pelaksanaan pesanan jual.

  • var depth = _C(exchange.GetDepth): Dapatkan maklumat mendalam pasaran.

  • if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price - (STTick * PennyTick))): Periksa maklumat kedalaman pasaran, jika harga pasaran telah jatuh ke tahap stop-loss, kemudian pelaksanaan operasi stop-loss.

  • CancelAll(): Panggil fungsi CancelAll( untuk membatalkan semua pesanan yang belum selesai, untuk mengelakkan risiko kedudukan.

  • if (opAmount < 0.001): Periksa semula kuantiti pembelian, jika ia kurang daripada 0.001, ia menunjukkan bahawa pembelian telah gagal, keluar dari gelung.

  • exchange.Sell(depth.Bids[0].Price, opAmount): Melakukan operasi stop-loss, menjual aset yang selebihnya pada harga pasaran semasa yang terendah.

Akhirnya, mengemas kini bilangan urus niaga yang berjaya dan gagal berdasarkan sama ada urus niaga itu berjaya atau tidak, dan mencatat keuntungan perdagangan.

Ini adalah penjelasan baris demi baris keseluruhan strategi. Idea teras strategi ini adalah untuk mencari gajah (pesanan beli besar) di pasaran, membelinya dan menjualnya untuk mendapatkan keuntungan kecil. Ia termasuk beberapa parameter penting, seperti Lot, selang percubaan semula ralat (Interval), ElephantAmount, ElephantSpace, dll, untuk menyesuaikan strategi.

Secara umum, strategi ini adalah strategi perdagangan frekuensi tinggi yang bertujuan untuk menggunakan maklumat kedalaman pasaran untuk mengenal pasti pesanan beli besar dan menjalankan urus niaga beli dan jual dalam jangka masa yang singkat. Ia memerlukan pemantauan pasaran yang berterusan dan pelaksanaan operasi beli dan jual untuk mendapatkan keuntungan yang kecil dengan cepat. Walau bagaimanapun, ia juga merupakan strategi berisiko tinggi, kerana ia memerlukan tindak balas cepat terhadap turun naik pasaran sambil mempertimbangkan pengurusan risiko dan mekanisme hentian kerugian untuk mengelakkan kerugian yang besar.

Sila ambil perhatian bahawa strategi ini berdasarkan pasaran dan platform dagangan tertentu. Untuk pasaran dan bursa yang berbeza, penyesuaian dan pengoptimuman yang sesuai mungkin diperlukan. Dalam aplikasi praktikal, pelabur perlu menguji dan menilai prestasi strategi dengan teliti untuk memastikan ia sejajar dengan matlamat pelaburan dan toleransi risiko mereka.

Apabila anda terus melaksanakan strategi, ia akan berulang kali melakukan operasi berikut:

  1. Pertama, strategi akan memeriksa maklumat mendalam pasaran untuk memahami keadaan semasa pesanan jual dan pesanan beli.

  2. Seterusnya, strategi akan cuba mencari pesanan jual yang memenuhi kriteria, khususnya pesanan jual dengan kuantiti lebih besar daripada atau sama dengan Lot.

  3. Kemudian, strategi akan terus mencari gajah (jumlah besar pesanan beli). Ia akan melintasi pesanan beli pasaran, melangkau yang pertama (biasanya pesanan beli harga tertinggi). Jika ia mencari gajah yang memenuhi kriteria, ia akan merakam maklumat mengenai gajah, dan meningkatkan kunci.

  4. Jika jumlah gajah yang mencukupi dijumpai secara berturut-turut (dikendalikan oleh parameter LockCount), strategi akan menjalankan operasi berikut:

  • Panggil fungsi updateStatus untuk merakam peralatan dan maklumat berkaitan gajah.
  • Gunakan fungsi pertukaran.Beli untuk membeli gajah, dengan harga pembelian gajah.Harga + PennyTick, dan kuantiti Lot.
  • Mulakan gelung tak terhingga baru untuk menunggu pelaksanaan pesanan beli.
  • Periksa status pesanan, jika selesai, keluar dari gelung.
  • Jika masa menunggu melebihi selang masa yang ditetapkan (WaitInterval), batalkan semua pesanan yang belum selesai.
  • Mengira perubahan dalam aset akaun selepas pembelian yang berjaya. Jika perubahan kurang daripada 0.001, ia menunjukkan bahawa pembelian gagal; meningkatkan bilangan kegagalan dan meneruskan gelung seterusnya.
  • Mencatatkan maklumat mengenai pembelian gajah yang berjaya, termasuk kuantiti yang dibeli.
  1. Seterusnya, strategi akan terus memasuki gelung tanpa akhir yang baru, menunggu pelaksanaan operasi jual. Dalam gelung ini, ia akan melakukan tindakan berikut:
  • Dapatkan maklumat mendalam pasaran, periksa sama ada harga pasaran telah mencapai tahap stop-loss.
  • Jika harga pasaran telah mencapai atau jatuh di bawah tahap stop-loss, operasi stop-loss akan dilaksanakan, iaitu aset yang selebihnya akan dijual.
  • Panggil fungsi CancelAll untuk membatalkan semua pesanan yang belum selesai, mengurangkan risiko kedudukan.
  • Periksa semula perubahan aset akaun selepas pembelian yang berjaya. Jika perubahan kurang daripada 0.001, ia menunjukkan bahawa pembelian telah gagal dan keluar daripada gelung.
  • Akhirnya, catat sama ada urus niaga berjaya atau tidak, dan mengemas kini bilangan kejayaan dan kegagalan berdasarkan hasil urus niaga.

Strategi keseluruhan secara berterusan menjalankan operasi di atas untuk menangkap sebanyak mungkin gajah dan memperoleh keuntungan yang kecil. Ini adalah strategi perdagangan frekuensi tinggi yang memerlukan tindak balas cepat terhadap perubahan pasaran, sambil juga mempertimbangkan pengurusan risiko dan mekanisme berhenti kerugian untuk melindungi modal. Pelabur harus mempertimbangkan dengan teliti menggunakan strategi ini, terutama di pasaran yang sangat tidak menentu.

Ringkasan

Strategi Penny Jump adalah contoh khas dalam perdagangan frekuensi tinggi, menunjukkan permainan halus dan persaingan di kalangan peserta pasaran. Strategi ini sangat menonjol di pasaran cryptocurrency kerana turun naiknya yang besar, di mana pelabur institusi dan peniaga frekuensi tinggi semuanya mengejar keuntungan cepat. Walau bagaimanapun, ini juga menjadikan pasaran penuh cabaran, yang memerlukan penyesuaian dan penyesuaian strategi yang berterusan untuk mengekalkan kelebihan kompetitif.


Lebih lanjut