Penyelidikan strategi perdagangan frekuensi tinggi - Penny Jump

Penulis:Mimpi kecil, Dicipta: 2023-11-03 17:36:56, Dikemas kini: 2023-11-03 22:19:32

img

Perdagangan frekuensi tinggi adalah bidang yang penuh cabaran dan persaingan, yang bergantung pada pelaksanaan perdagangan yang cepat dan wawasan yang sensitif terhadap struktur mikro pasaran. Salah satu strategi yang sangat popular adalah lompatan denda, yang memberi tumpuan kepada memanfaatkan "gajah" di pasaran untuk keuntungan kecil tetapi kerap. Dalam artikel ini, kami akan menerangkan secara terperinci bagaimana strategi lompatan denda berfungsi, sambil menggali secara terperinci kod strategi untuk membolehkan pemula memahami bagaimana ia berfungsi.

Memahami Strategi Penny Jump

Dalam pasaran saham, "gajah" biasanya merujuk kepada pelabur institusi yang ingin membeli atau menjual sejumlah besar saham tetapi tidak mahu berdagang pada harga pasaran. Sebaliknya, mereka memilih untuk memasang banyak senarai harga terhad di pasaran, atau daftar gantung, untuk menunjukkan niat mereka. Tindakan ini menimbulkan perhatian luas di pasaran kerana perdagangan besar boleh memberi kesan besar kepada pasaran.

Sebagai contoh, katakanlah kedalaman pasaran saham adalah seperti ini: 200 $1.01 x $1.03 200; kemudian, seekor gajah masuk dan menggantung bayaran $1.01 untuk 3,000 saham; pada masa ini kedalaman pasaran akan menjadi 3,200; $1.01 x $1.03 200; tindakan ini adalah seperti memperkenalkan seekor gajah, yang menjadi tumpuan bagi semua pemain lain di pasaran.

  • Pasaran Persaingan Bagi peniaga frekuensi tinggi, keuntungan mereka adalah daripada analisis struktur mikro pasaran untuk meneka niat peniaga lain. Apabila gajah muncul, peniaga frekuensi tinggi akan membina kedudukan dengan cepat untuk mendapatkan turun naik harga yang kecil. Matlamat mereka adalah untuk berdagang dengan kerap dalam masa yang singkat, mengumpulkan keuntungan yang kecil tetapi terkumpul.

  • Masalah Gajah Walaupun gajah mungkin ingin beroperasi secara besar-besaran di pasaran, tingkah laku mereka juga mendedahkan niat perdagangan mereka, menjadikan mereka menjadi sasaran pedagang frekuensi tinggi. Pedagang frekuensi tinggi akan cuba membina kedudukan terlebih dahulu dan kemudian memperoleh keuntungan dalam turun naik harga. Kehadiran gajah di pasaran mungkin mencetuskan tindak balas pasaran yang kompetitif, yang mempengaruhi strategi dagangan mereka.

  • Penipuan di pasaran Dalam realiti, pelabur institusi yang besar biasanya tidak akan dengan berani memaparkan pesanan beli atau jual yang besar di pasaran, kerana tingkah laku sedemikian boleh menyebabkan peserta lain di pasaran mengambil tindakan balas, atau bahkan memanipulasi pasaran. Oleh itu, mereka mungkin menggunakan strategi untuk membuat khayalan, menarik pedagang frekuensi tinggi masuk, dan kemudian menjual atau membeli dengan cepat untuk mendapatkan keuntungan dari turun naik harga.

Idea utama strategi Penny Jump

Idea utama strategi lompatan senar adalah bahawa sebaik sahaja gajah muncul di pasaran dan menyokong harga tertentu (misalnya $1.01), pedagang frekuensi tinggi akan dengan cepat menaikkan tawaran mereka dengan satu sen, misalnya hingga $1.02. Ini kerana pedagang frekuensi tinggi memahami bahawa kehadiran gajah bermakna harga ini mempunyai sokongan pembeli yang kuat, jadi mereka cuba mengikutinya dengan harapan harga naik. Apabila harga benar-benar meningkat hingga $1.03 x $1.05, pedagang frekuensi tinggi boleh menjual dengan cepat, memperoleh keuntungan $0.01.

Selain itu, peniaga frekuensi tinggi juga boleh memperoleh keuntungan selepas membeli walaupun harga tidak meningkat. Oleh kerana mereka tahu bahawa harga bawah disokong oleh gajah, mereka boleh menjual saham dengan cepat kepada gajah itu, dengan keuntungan perbezaannya yang kecil.

Membaiki kod dasar Penny Jump

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

Kod dasar yang diberikan di atas adalah contoh kod yang digunakan untuk melaksanakan strategi Penny Jump. Berikut adalah penjelasan terperinci mengenai kod untuk membantu 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("调戏次数:", Counter.i, "成功:", Counter.w, "失败:", 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("搜索大象中.... 买一: " + depth.Bids[0].Price + ",  卖一:" + depth.Asks[0].Price + ", 锁定次数: " + 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("调戏大象中....大象在第" + 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("买单得手: " + opAmount +", 开始出手...");
        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("没有得手, 开始止损, 当前买一: " + 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 satu per satu kod strategi yang anda berikan untuk membantu anda memahami cara kerjanya dengan lebih terperinci.

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

Kod ini menginisialisasikan objek yang dipanggil Counter, yang digunakan untuk memantau statistik transaksi untuk dasar; secara khusus, ia merangkumi tiga sifat:

  • i: menunjukkan jumlah transaksi.
  • w: menunjukkan jumlah transaksi yang berjaya.
  • f: menunjukkan jumlah transaksi yang gagal.

Sifat-sifat ini akan direkodkan dan dikemas kini semasa pelaksanaan dasar.

var InitAccount = null;

Baris kod ini menginisialisasi pembolehubah yang dipanggil InitAccount, yang akan menyimpan maklumat akaun apabila dasar 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 sebuah jenamaCancelAll()Fungsi ini bertujuan untuk memadamkan semua pesanan yang belum selesai di pasaran. Mari kita jelaskan fungsinya secara ringkas:

  • while (true): Ini adalah pusingan tanpa akhir, dan ia akan terus dijalankan sehingga tidak ada pesanan yang belum selesai.
  • var orders = _C(exchange.GetOrders):这一行代码使用exchange.GetOrders函数获取当前账户所有挂出的订单,并将它们存储在orders变量中。
  • if (orders.length == 0): baris kod ini memeriksa apakah terdapat pesanan yang belum selesai. Jika panjang array order adalah 0, bermakna tiada pesanan yang belum selesai, gelung akan terputus.
  • for (var i = 0; i < orders.length; i++): Ini adalah putaran for, yang melintasi semua pesanan yang belum selesai.
  • exchange.CancelOrder(orders[i].Id): Baris kod ini menggunakan fungsi exchange.CancelOrder (), untuk membatalkan setiap pesanan melalui ID pesanan.
  • Sleep(Interval): Baris kod ini memperkenalkan kitaran tunggu, menunggu untuk sementara waktu (dalam unit mili saat) untuk memastikan operasi untuk membatalkan pesanan tidak terlalu kerap.

Tujuan fungsi ini adalah untuk memastikan tiada pesanan yang belum selesai sebelum menjalankan dasar utama, untuk mengelakkan gangguan dalam pelaksanaan dasar utama.

function updateStatus(msg) {
    LogStatus("调戏次数:", Counter.i, "成功:", Counter.w, "失败:", Counter.f, "\n" + msg + "#0000ff\n" + new Date());
}

Ini adalah sebuah jenamaupdateStatus(msg)Fungsi ini digunakan untuk mengemas kini maklumat keadaan dagangan dan mencatatnya. Ia menerima parameter msg, yang biasanya mengandungi maklumat mengenai keadaan pasaran semasa. Operasi khusus fungsi ini termasuk:

PenggunaanLogStatus()Fungsi ini merakam maklumat yang dipaparkan dalam tetingkap status apabila dasar dijalankan. Ia memaparkan teks mengenai jumlah transaksi, bilangan kejayaan, bilangan kegagalan. TambahmsgParameter yang mengandungi maklumat mengenai keadaan pasaran semasa. Tambah tanda masa semasa (((new Date()), untuk memaparkan maklumat masa. Fungsi ini bertujuan untuk merakam dan mengemas kini maklumat status dagangan 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("搜索大象中.... 买一: " + depth.Bids[0].Price + ",  卖一:" + depth.Asks[0].Price + ", 锁定次数: " + 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("调戏大象中....大象在第" + 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("买单得手: " + opAmount +", 开始出手...");
        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("没有得手, 开始止损, 当前买一: " + 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 pelaksanaan utama strategi.main()Ini adalah satu strategi yang mempunyai logik utama. Mari kita jelaskan cara kerjanya secara garis demi garis:

  • if (DisableLog): Baris kod ini memeriksa sama ada pembolehubah DisableLog adalah benar, jika ya, log akan dilumpuhkan. Ini untuk memastikan dasar tidak mencatat log yang tidak diperlukan.

  • CancelAll(): memanggil fungsi CancelAll (() yang dijelaskan di atas untuk memastikan tiada pesanan yang belum selesai.

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

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

  • while (true): Ini adalah pusingan tanpa akhir yang digunakan untuk melaksanakan strategi secara berterusan.

Di bawah ini, kita akan menerangkannya satu per satu.while (true)Logik strategi utama dalam gelung ini.

while (true) {
    Sleep(Interval);
    var depth = _C(exchange.GetDepth);
    if (depth.Asks.length === 0 || depth.Bids.length === 0) {
        continue;
    }
    updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ",  卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks);
  • Sleep(Interval): baris kod ini meletakkan dasar dalam keadaan tidur untuk tempoh tertentu untuk mengawal kekerapan pelaksanaan dasar. Parameter Interval menentukan selang masa tidur (dalam milisaat).

  • var depth = _C(exchange.GetDepth): Dapatkan maklumat kedalaman pasaran semasa, termasuk harga dan jumlah pesanan jual dan beli. Maklumat ini akan disimpan dalam pembolehubah kedalaman.

  • if (depth.Asks.length === 0 || depth.Bids.length === 0): Baris kod ini memeriksa maklumat kedalaman pasaran untuk memastikan kedua-dua pesanan jual dan beli ada. Jika salah satu daripada kedua-dua tidak ada, menunjukkan pasaran mungkin tidak mempunyai maklumat perdagangan yang mencukupi, maka strategi akan terus menunggu.

  • updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ", 卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks): baris kod ini memanggil fungsi Status kemas kini, maklumat status untuk mengemas kini dasar. Ia merakam keadaan pasaran semasa, termasuk harga beli, harga jual dan jumlah kunci sebelumnya.

    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;: Initialize variable askPrice, yang akan digunakan untuk menyimpan harga jual yang memenuhi syarat.

  • for (i = 0; i < depth.Asks.length; i++): Ini adalah putaran for yang digunakan untuk merangkumi maklumat harga dan kuantiti pesanan yang dijual di pasaran.

  • if (depth.Asks[i].Amount >= Lot): dalam gelung, periksa sama ada jumlah setiap order lebih besar daripada atau sama dengan Lot (jumlah tangan) yang ditetapkan. Jika ya, simpan harga order tersebut dalam AskPrice dan hentikan gelung.

  • if (askPrice === 0): Jika tidak ada pesanan yang memenuhi syarat (askPrice masih 0), polisi akan terus menunggu dan melangkau operasi seterusnya.

  • var elephant = null;: Initialize the elephant variable, yang akan digunakan untuk menyimpan maklumat pembayaran yang dikenal pasti sebagai ikan 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;

Untuk terus mengembara melalui maklumat harga dan kuantiti tawaran di pasaran, lupakan tawaran pertama ((Bids[0])).

  • if ((askPrice - depth.Bids[i].Price) > ElephantSpace): Periksa sama ada jurang antara harga pembelian semasa dan harga permintaan lebih besar daripada ElephantSpace. Jika ya, menunjukkan bahawa anda sudah cukup jauh dari keranjang gajah dan strategi tidak lagi mencari.

  • if (depth.Bids[i].Amount >= ElephantAmount): Periksa sama ada jumlah pembayaran semasa lebih besar daripada atau sama dengan ElephantAmount, jika ya, simpan maklumat pembayaran dalam pembolehubah elephant.

  • if (!elephant): Jika tidak menemui kerang gajah, kunci bilangan akan disetel semula ke 0 dan terus menunggu.

locks++: Jika ternampak, jumlah penguncian akan meningkat. Ini untuk memastikan bahawa strategi akan dijalankan semula selepas beberapa kali pengesahan untuk ketupat.

  • if (locks < LockCount): Periksa jika jumlah penguncian telah memenuhi keperluan. Jika tidak, teruskan menunggu.
    updateStatus("调戏大象中....大象在第" + 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("调戏大象中....大象在第" + i + "档, " + JSON.stringify(elephant)): Panggil fungsi Status update, yang merakam status semasa dasar, termasuk peringkat dan maklumat yang berkaitan dengan sarang gajah yang ditemui. Ini akan dipaparkan di bar status dasar.

  • exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant): menggunakan fungsi exchange.Buy untuk membeli kerang yang ditemui; harga pembelian adalah elephant.Price + PennyTick, jumlah pembelian adalah Lot, dan operasi pembelian digambarkan sebagai "Bids[" + i + ] kerang".

  • var ts = new Date().getTime(): Dapatkan tetikus masa masa sekarang untuk tempoh masa yang akan dihitung seterusnya.

  • while (true): memasuki satu pusingan yang tidak berkesudahan yang baru, digunakan untuk melaksanakan pesanan pembelian ikan gajah yang sedang menunggu.

  • Sleep(CheckInterval)Strategi: tidur sejenak untuk mengawal kekerapan memeriksa status pesanan.

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

  • if (orders.length == 0): Periksa sama ada ada pesanan yang belum selesai, jika tidak, keluar dari pusingan.

  • (new Date().getTime() - ts) > WaitInterval: Mengira selang masa masa semasa dan masa semasa membeli kelengkeng gajah, jika melebihi WaitInterval, menunjukkan masa tunggu yang lebih lama.

  • for (var i = 0; i < orders.length; i++)Perintah yang belum diselesaikan.

  • exchange.CancelOrder(orders[i].Id):使用exchange.CancelOrder函数取消每个未完成的订单。

    var account = _C(exchange.GetAccount);
    var opAmount = _N(account.Stocks - InitAccount.Stocks);
    if (opAmount < 0.001) {
        Counter.f++;
        Counter.i++;
        continue;
    }
    updateStatus("买单得手: " + opAmount + ", 开始出手...");
    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("没有得手, 开始止损, 当前买一: " + 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)Di bawah ini adalah senarai akaun anda:

  • var opAmount = _N(account.Stocks - InitAccount.Stocks): Mengira perubahan aset dalam akaun selepas membeli ikan gajah. Jika perubahan kurang daripada 0.001, menunjukkan pembelian gagal, jumlah kegagalan akan meningkat dan berlanjut ke kitaran seterusnya.

  • updateStatus("买单得手: " + opAmount + ", 开始出手...")Di bawah ini adalah senarai maklumat mengenai pembelian yang berjaya, termasuk jumlah pembelian.

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

Memasuki satu pusingan tanpa had yang baru, untuk pelaksanaan pesanan menunggu jualan.

  • var depth = _C(exchange.GetDepth)Di samping itu, mereka juga mempunyai peluang untuk mendapatkan maklumat yang lebih mendalam mengenai pasaran.

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

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

  • if (opAmount < 0.001): periksa semula jumlah pembelian, jika kurang daripada 0.001, menunjukkan pembelian gagal, keluar dari pusingan.

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

Akhirnya, berdasarkan kejayaan atau kegagalan transaksi, jumlah kejayaan dan kegagalan diperbaharui dan keuntungan dagangan direkodkan.

Ini adalah penjelasan garis demi garis mengenai keseluruhan strategi. Idea utama strategi ini adalah mencari ikan gajah di pasaran (membayar banyak) dan membelinya dan menjualnya untuk keuntungan kecil. Ia merangkumi beberapa parameter penting seperti jumlah pembelian (Lot), selang ujian semula kesalahan (Interval), tahap gajah (ElephantAmount), jarak gajah (ElephantSpace) dan lain-lain untuk menyesuaikan tingkah laku strategi.

Secara keseluruhan, strategi ini adalah strategi perdagangan frekuensi tinggi yang bertujuan untuk menggunakan maklumat mendalam pasaran, mengenal pasti banyak pembayaran dan melakukan perdagangan jual beli dalam masa yang singkat. Ia memerlukan pemantauan pasaran secara berterusan dan menjalankan operasi jual beli untuk mendapatkan keuntungan kecil dengan cepat. Walau bagaimanapun, ia juga merupakan strategi berisiko tinggi kerana ia memerlukan tindak balas cepat terhadap turun naik pasaran, sementara ia memerlukan pengurusan risiko dan mekanisme stop loss untuk mengelakkan kerugian besar.

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

Apabila anda terus menjalankan dasar, ia akan terus berputar untuk melakukan tindakan berikut:

Pertama, strategi akan memeriksa maklumat mendalam mengenai pasaran untuk mengetahui keadaan jual beli dan pembelian semasa.

2, Seterusnya, strategi akan cuba mencari pesanan yang memenuhi syarat, dengan syarat bahawa jumlah pesanan yang dijual adalah lebih besar daripada atau sama dengan Lot (jumlah tangan). Jika pesanan yang memenuhi syarat ditemui, harga pesanan akan direkodkan sebagai AskPrice.

3. Kemudian, strategi akan terus mencari ikan hias (pembayaran yang banyak); ia akan melaluinya di pasaran dan melangkau pembayaran pertama (biasanya pembayaran dengan harga tertinggi); jika ikan hias yang layak ditemui, maklumat ikan hias akan direkodkan dan jumlah kunci akan ditingkatkan (kunci).

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

  • Menggunakan fungsi Update Status untuk merakam kedudukan dan maklumat yang berkaitan.
  • Membeli kelopak gajah dengan menggunakan fungsi exchange.Buy, harga pembelian ialah elephant.Price + PennyTick, jumlah pembelian ialah Lot.
  • Mulakan satu pusingan tanpa henti yang baru untuk menunggu pemesanan pembelian dijalankan.
  • Memeriksa status pesanan, jika pesanan telah selesai, keluar dari pusingan.
  • Jika masa tunggu melebihi julat tunggu yang ditetapkan, membatalkan semua pesanan yang belum selesai.
  • Mengira perubahan aset akaun selepas pembelian yang berjaya, jika perubahan kurang daripada 0.001, menunjukkan pembelian gagal, meningkatkan jumlah kegagalan, dan meneruskan kitaran seterusnya.
  • Mencatatkan maklumat mengenai pembelian yang berjaya, termasuk jumlah pembelian.

5. Seterusnya, strategi akan meneruskan ke dalam lingkaran tanpa akhir yang baru untuk menunggu pelaksanaan operasi jual. Dalam lingkaran ini, ia akan melakukan operasi berikut:

  • Untuk mendapatkan maklumat mendalam mengenai pasaran dan memeriksa sama ada harga pasaran telah mencapai harga stop loss.
  • Jika harga pasaran telah mencapai atau di bawah harga stop loss, operasi stop loss akan dijalankan, iaitu menjual aset yang tersisa.
  • Menggunakan fungsi CancelAll untuk membatalkan semua pesanan yang belum selesai untuk mengurangkan risiko penyimpanan.
  • Periksa semula perubahan aset akaun selepas pembelian yang berjaya, jika perubahan kurang daripada 0.001, menunjukkan pembelian gagal, keluar dari loop.
  • Akhirnya, ia mencatat sama ada transaksi berjaya atau tidak, dan mengemas kini bilangan kejayaan dan kegagalan berdasarkan hasil dagangan.

Strategi ini terus-menerus melakukan operasi di atas untuk menangkap sebilangan besar ikan lele dan mendapatkan keuntungan yang kecil. Ini adalah strategi perdagangan frekuensi tinggi yang memerlukan tindak balas cepat terhadap perubahan pasaran, sambil mempertimbangkan pengurusan risiko dan mekanisme stop loss untuk melindungi modal. Pelabur harus mempertimbangkan dengan teliti untuk menggunakan strategi ini, terutamanya dalam pasaran yang sangat berubah-ubah.

Perkataan akhir

Strategi lompatan senar adalah contoh utama perdagangan frekuensi tinggi yang menunjukkan permainan halus dan persaingan antara peserta pasaran. Dalam pasaran mata wang kripto, strategi ini sangat menonjol kerana pasaran sangat berfluktuasi, pelabur institusi dan peniaga frekuensi tinggi mengejar keuntungan cepat. Namun, ini juga menjadikan pasaran penuh cabaran yang memerlukan strategi yang sentiasa disesuaikan dan disesuaikan untuk mengekalkan kelebihan kompetitif. Dalam dunia yang sangat kompetitif ini, hanya peniaga yang memahami struktur mikro pasaran dan bertindak balas dengan cepat yang akan berjaya.


Lebih lanjut