
Perdagangan frekuensi tinggi ialah bidang yang mencabar dan berdaya saing yang bergantung pada pelaksanaan perdagangan yang pantas dan pandangan sensitif tentang struktur mikro pasaran. Salah satu strategi yang mendapat perhatian ramai ialah Penny Jump, yang memberi tumpuan kepada mengambil kesempatan daripada “gajah” dalam pasaran untuk membuat keuntungan yang kecil tetapi kerap. Dalam artikel ini, kami akan menerangkan secara terperinci cara strategi Penny Jump berfungsi sambil menyelami butiran kod strategi supaya pemula dapat memahami cara ia berfungsi.
Dalam pasaran saham, “gajah” biasanya pelabur institusi yang ingin membeli atau menjual stok dalam kuantiti yang banyak tetapi tidak mahu berdagang pada harga pasaran. Sebaliknya, mereka memilih untuk meletakkan sejumlah besar pesanan had, juga dikenali sebagai pesanan belum selesai, di pasaran untuk menunjukkan niat mereka. Tingkah laku ini telah menarik perhatian meluas dalam pasaran kerana urus niaga yang besar boleh memberi kesan yang ketara kepada pasaran.
Sebagai contoh, katakan kedalaman pasaran saham pada asalnya kelihatan seperti ini: \(1.01 x \)1.03 |. Kemudian, seekor “gajah” masuk dan membuat pesanan untuk membeli 3,000 saham pada $1.01. Pada ketika ini, kedalaman pasaran akan menjadi 3,200 |. Tindakan ini seperti memperkenalkan “gajah” yang menjadi tumpuan peserta lain dalam pasaran.
Pasaran Persaingan Bagi peniaga frekuensi tinggi, keuntungan mereka terutamanya datang daripada menganalisis struktur mikro pasaran untuk membuat kesimpulan niat peniaga lain. Sebaik sahaja seekor gajah muncul, peniaga frekuensi tinggi akan segera menubuhkan kedudukan untuk menangkap turun naik harga yang kecil. Matlamat mereka adalah untuk membuat dagangan yang kerap dalam tempoh yang singkat, mengumpul keuntungan kecil tetapi terkumpul.
Nasib gajah Walaupun gajah mungkin ingin beroperasi secara besar-besaran di pasaran, tindakan mereka juga mengkhianati niat perdagangan mereka, menjadikan mereka sasaran untuk peniaga frekuensi tinggi. Peniaga frekuensi tinggi cuba menubuhkan kedudukan terlebih dahulu dan kemudian mendapat keuntungan daripada turun naik harga. Kehadiran gajah di pasaran boleh mencetuskan reaksi dalam pasaran yang kompetitif, sekali gus menjejaskan strategi dagangannya.
Penipuan di pasaran Pada hakikatnya, pelabur institusi yang besar biasanya tidak secara terang-terangan meletakkan sejumlah besar pesanan beli atau jual di pasaran, kerana tingkah laku sedemikian boleh menyebabkan peserta pasaran lain mengambil tindakan balas atau bahkan memanipulasi pasaran. Oleh itu, mereka mungkin menggunakan strategi untuk mencipta tanggapan palsu untuk menarik peniaga frekuensi tinggi memasuki pasaran, dan kemudian menjual atau membeli dengan cepat untuk mendapat keuntungan daripada turun naik harga.
Idea teras strategi Penny Jump ialah apabila seekor gajah muncul di pasaran dan menyokong harga tertentu (contohnya, \(1.01), peniaga frekuensi tinggi akan menaikkan bida mereka dengan cepat sebanyak satu sen, contohnya kepada \)1.02. Ini kerana peniaga frekuensi tinggi memahami bahawa kemunculan gajah bermakna terdapat sokongan belian yang kukuh pada paras harga tersebut, jadi mereka cuba mengikutinya dengan harapan harga akan meningkat. Apabila harga meningkat kepada \(1.03 x \)1.05, peniaga frekuensi tinggi boleh menjual dengan cepat, membuat keuntungan $0.01.
Bukan itu sahaja, peniaga frekuensi tinggi juga boleh mengaut keuntungan selepas membeli walaupun harga tidak naik. Kerana mereka tahu bahawa gajah menyokong harga terendah, mereka boleh dengan cepat menjual saham mereka kepada gajah dan membuat keuntungan kecil daripada perbezaan itu.
Kod sumber strategi: https://www.fmz.com/strategy/358
Kod strategi yang disediakan di atas adalah contoh yang melaksanakan strategi Penny Jump. Berikut ialah penjelasan terperinci tentang kod supaya pemula dapat memahami cara 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 meneliti kod strategi yang anda berikan baris demi baris untuk membantu anda memahami cara ia berfungsi dengan lebih terperinci.
var Counter = {
i: 0,
w: 0,
f: 0
};
Kod ini memulakan objek yang dipanggil Counter, yang digunakan untuk menjejaki statistik perdagangan strategi. Secara khusus, ia termasuk tiga sifat:
Atribut ini direkodkan dan dikemas kini semasa pelaksanaan dasar.
var InitAccount = null;
Baris kod ini memulakan pembolehubah yang dipanggil 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 aCancelAll()Tujuan fungsi ini adalah untuk membatalkan semua pesanan terbuka di pasaran. Mari terangkan fungsinya langkah demi langkah:
while (true): Ini ialah gelung tak terhingga yang akan dilaksanakan sehingga tiada pesanan tertunggak.var orders = _C(exchange.GetOrders): Baris kod ini menggunakan fungsi pertukaran.GetOrders untuk mendapatkan semua pesanan belum selesai untuk akaun semasa dan menyimpannya dalam pembolehubah pesanan.if (orders.length == 0): Baris kod ini menyemak jika terdapat sebarang pesanan yang tidak dipenuhi. Jika panjang tatasusunan pesanan ialah 0, ini bermakna tiada pesanan yang tidak dipenuhi dan gelung akan pecah.for (var i = 0; i < orders.length; i++): Ini adalah gelung untuk yang berulang melalui semua pesanan tertunggak.exchange.CancelOrder(orders[i].Id): Baris kod ini menggunakan fungsi exchange.CancelOrder() untuk membatalkan setiap pesanan mengikut ID pesanannya.Sleep(Interval): Baris kod ini memperkenalkan kitaran tunggu, menunggu tempoh masa tertentu (dalam milisaat) untuk memastikan operasi pembatalan pesanan tidak terlalu kerap.Tujuan fungsi ini adalah untuk memastikan sebelum melaksanakan strategi utama, tiada pesanan tertunggak wujud untuk mengelak daripada mengganggu pelaksanaan strategi utama.
function updateStatus(msg) {
LogStatus("调戏次数:", Counter.i, "成功:", Counter.w, "失败:", Counter.f, "\n" + msg + "#0000ff\n" + new Date());
}
Ini adalah aupdateStatus(msg)Fungsi yang mengemas kini maklumat status transaksi dan merekodkannya. Ia menerima parameter mesej yang biasanya mengandungi maklumat tentang status pasaran semasa. Operasi khusus fungsi termasuk:
gunaLogStatus()Fungsi merekodkan maklumat yang dipaparkan dalam bar status apabila strategi berjalan. Ia menunjukkan teks tentang bilangan transaksi, kejayaan dan kegagalan.
DilampirkanmsgParameter yang mengandungi maklumat tentang status pasaran semasa.
Cap masa semasa dilampirkan (new Date()) untuk memaparkan maklumat masa.
Tujuan fungsi ini adalah untuk merekod dan mengemas kini maklumat status perdagangan 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 strategimain(), yang mengandungi logik teras strategi. Mari jelaskan operasinya baris demi baris:
if (DisableLog): Baris kod ini menyemak sama ada pembolehubah DisableLog adalah benar, dan jika ya, ia melumpuhkan pengelogan. Ini adalah untuk memastikan polisi tidak mencatatkan maklumat yang tidak diperlukan.
CancelAll(): Panggil fungsi CancelAll() yang dijelaskan sebelum ini untuk memastikan tiada pesanan yang belum selesai wujud.
InitAccount = _C(exchange.GetAccount): Baris kod ini mendapat maklumat akaun semasa dan menyimpannya dalam pembolehubah InitAccount. Ini akan digunakan untuk merekodkan keadaan akaun apabila strategi mula dilaksanakan.
var i = 0; danvar locks = 0;: Mulakan dua pembolehubah i dan kunci, yang akan digunakan dalam logik strategi seterusnya.
while (true): Ini ialah gelung tak terhingga, digunakan terutamanya untuk pelaksanaan strategi yang berterusan.
Seterusnya, kami akan menerangkan baris demi bariswhile (true)Logik strategi utama di dalam gelung.
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 membolehkan strategi tidur untuk tempoh masa untuk mengawal kekerapan pelaksanaan strategi. Parameter Interval mentakrifkan selang tidur dalam milisaat.
var depth = _C(exchange.GetDepth): Dapatkan maklumat kedalaman pasaran semasa, termasuk harga dan kuantiti pesanan jual dan beli. Maklumat ini akan disimpan dalam pembolehubah kedalaman.
if (depth.Asks.length === 0 || depth.Bids.length === 0): Barisan kod ini menyemak maklumat kedalaman pasaran untuk memastikan pesanan jual dan beli wujud. Jika salah satu daripadanya tidak wujud, ini bermakna pasaran mungkin tidak mempunyai maklumat dagangan yang mencukupi, dan strategi akan terus menunggu.
updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ", 卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks): Baris kod ini memanggil fungsi updateStatus untuk mengemas kini maklumat status strategi. Ia merekodkan status pasaran semasa, termasuk harga bida, harga permintaan dan bilangan 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;: Mulakan pembolehubah askPrice, yang akan digunakan untuk menyimpan harga pesanan jual yang memenuhi syarat.
for (i = 0; i < depth.Asks.length; i++): Ini adalah gelung untuk yang digunakan untuk melelaran maklumat harga dan kuantiti pesanan jualan pasaran.
if (depth.Asks[i].Amount >= Lot): Dalam gelung, semak sama ada kuantiti setiap pesanan jualan adalah lebih besar daripada atau sama dengan Lot yang ditentukan. Jika ya, simpan harga pesanan jual dalam askPrice dan tamatkan gelung.
if (askPrice === 0): Jika tiada pesanan jualan yang memuaskan ditemui (askPrice masih 0), strategi akan terus menunggu dan melangkau operasi seterusnya.
var elephant = null;: Mulakan pembolehubah gajah, yang 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 mengulangi maklumat harga dan kuantiti pesanan belian pasaran, melangkau pesanan belian pertama (Bida[0])。
if ((askPrice - depth.Bids[i].Price) > ElephantSpace): Semak sama ada perbezaan antara harga belian semasa dan askPrice adalah lebih besar daripada ElephantSpace. Jika ya, bermakna ia sudah cukup jauh dari “gajah” dan strategi tidak akan meneruskan pencarian.
if (depth.Bids[i].Amount >= ElephantAmount): Semak sama ada jumlah pesanan belian semasa lebih besar daripada atau sama dengan ElephantAmount Jika ya, simpan maklumat pesanan beli dalam pembolehubah gajah.
if (!elephant): Jika “gajah” tidak dijumpai, tetapkan semula kiraan kunci kepada 0 dan teruskan menunggu.
kunci++: Jika “gajah” ditemui, bilangan kunci akan ditambah. Ini bagi memastikan strategi tersebut dilaksanakan selepas kewujudan “gajah” itu disahkan beberapa kali dalam satu tempoh masa.
if (locks < LockCount): Semak sama ada bilangan kunci mencapai keperluan (LockCount). Jika syarat tidak dipenuhi, 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 updateStatus untuk merekodkan status semasa strategi, termasuk kedudukan gear “gajah” yang ditemui dan maklumat berkaitan. Ini akan ditunjukkan dalam lajur Status dasar.
exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant): Gunakan fungsi pertukaran.Beli untuk membeli “gajah” yang ditemui. Harga belian ialah gajah. Harga + PennyTick, kuantiti pembelian ialah Lot, dan operasi pembelian diterangkan sebagai “Bida[” + i + “]“。
var ts = new Date().getTime(): Dapatkan cap masa masa semasa untuk pengiraan selang masa yang berikutnya.
while (true): Masukkan gelung tak terhingga baharu untuk menunggu pelaksanaan pesanan belian “gajah”.
Sleep(CheckInterval): Strategi tidur untuk tempoh masa untuk mengawal kekerapan status pesanan disemak.
var orders = _C(exchange.GetOrders): Dapatkan semua maklumat pesanan akaun semasa.
if (orders.length == 0): Semak jika terdapat sebarang pesanan yang belum selesai, jika tidak, lompat keluar dari gelung.
(new Date().getTime() - ts) > WaitInterval: Kira selang masa antara masa semasa dan masa “gajah” dibeli Jika ia melebihi WaitInterval, ia bermakna penantian telah tamat masa.
for (var i = 0; i < orders.length; i++): Ulangi semua pesanan yang belum selesai.
exchange.CancelOrder(orders[i].Id): Batalkan setiap pesanan terbuka menggunakan fungsi pertukaran.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): Dapatkan maklumat akaun semasa.
var opAmount = _N(account.Stocks - InitAccount.Stocks): Kira perubahan dalam aset dalam akaun selepas membeli “Gajah”. Jika perubahan kurang daripada 0.001, ini bermakna pembelian telah gagal, bilangan kegagalan akan meningkat, dan kitaran seterusnya akan diteruskan.
updateStatus("买单得手: " + opAmount + ", 开始出手..."): Merekodkan maklumat kejayaan pembelian “gajah”, termasuk kuantiti pembelian.
exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount): Gunakan fungsi exchange.Sell untuk menjual “gajah” yang berjaya dibeli untuk mendapat keuntungan. Harga jualan ialah gajah.Harga + (PennyTick * ProfitTick).
Memasuki gelung tak terhingga baharu 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))): Semak maklumat kedalaman pasaran Jika harga pasaran telah jatuh ke harga stop loss, laksanakan operasi stop loss.
CancelAll(): Panggil fungsi CancelAll() untuk membatalkan semua pesanan yang belum selesai untuk mengelakkan risiko kedudukan.
if (opAmount < 0.001): Semak semula kuantiti pembelian Jika kurang daripada 0.001, bermakna pembelian gagal dan gelung akan terkeluar.
exchange.Sell(depth.Bids[0].Price, opAmount): Laksanakan operasi henti rugi dan jual aset yang tinggal pada harga terendah pasaran semasa.
Akhir sekali, bergantung pada sama ada transaksi berjaya atau tidak, bilangan kejayaan dan kegagalan dikemas kini, dan keuntungan transaksi direkodkan.
Itulah penjelasan baris demi baris mengenai keseluruhan strategi. Idea teras strategi ini adalah untuk mencari “gajah” (pesanan belian besar) di pasaran, membelinya dan menjualnya untuk keuntungan kecil. Ia termasuk beberapa parameter penting, seperti kuantiti pembelian (Lot), selang percubaan semula ralat (Selang), tahap gajah (ElephantAmount), jarak gajah (ElephantSpace), dll., untuk melaraskan tingkah laku strategi.
Secara umumnya, strategi ini ialah strategi dagangan frekuensi tinggi yang bertujuan untuk mengeksploitasi maklumat kedalaman pasaran, mengenal pasti pesanan belian yang besar dan melaksanakan transaksi beli dan jual dalam tempoh yang singkat. Ia memerlukan sentiasa memantau pasaran dan melaksanakan operasi beli dan jual untuk memperoleh keuntungan kecil dengan cepat. Walau bagaimanapun, ia juga merupakan strategi berisiko tinggi kerana ia memerlukan tindak balas pantas terhadap turun naik pasaran, sambil turut mempertimbangkan pengurusan risiko dan mekanisme henti rugi untuk mengelakkan kerugian yang ketara.
Sila ambil perhatian bahawa strategi ini adalah berdasarkan pasaran dan platform dagangan tertentu dan mungkin perlu dilaraskan dan dioptimumkan dengan sewajarnya untuk pasaran dan bursa yang berbeza. Dalam aplikasi sebenar, pelabur perlu menguji dan menilai prestasi strategi dengan teliti untuk memastikan ia konsisten dengan objektif pelaburan dan toleransi risiko mereka.
Semasa anda terus melaksanakan strategi, strategi ini akan terus berputar dan melakukan perkara berikut:
Pertama, strategi menyemak maklumat kedalaman pasaran untuk memahami pesanan jual dan beli semasa.
Seterusnya, strategi akan cuba mencari pesanan jual yang menepati syarat, di mana kuantiti pesanan jual adalah lebih besar atau sama dengan Lot. Jika pesanan jualan yang memenuhi syarat ditemui, harga pesanan jualan akan direkodkan sebagai askPrice.
Strategi kemudiannya terus mencari “gajah” (pesanan beli besar). Ia akan berulang melalui pesanan belian di pasaran, melangkau pesanan belian pertama (biasanya pesanan belian dengan harga tertinggi). Sekiranya “gajah” yang memenuhi syarat ditemui, maklumat “gajah” akan direkodkan dan bilangan kunci akan ditambah.
Jika “gajah” yang mencukupi ditemui secara berturut-turut (dikawal oleh parameter LockCount), strategi akan melaksanakan operasi berikut selanjutnya:
Keseluruhan strategi terus berputar melalui operasi di atas untuk menangkap seberapa banyak “gajah” yang mungkin dan memperoleh keuntungan yang kecil. Ini ialah strategi dagangan frekuensi tinggi yang memerlukan tindak balas pantas terhadap perubahan pasaran sambil turut mempertimbangkan pengurusan risiko dan mekanisme henti rugi untuk melindungi modal. Pelabur harus mempertimbangkan dengan teliti menggunakan strategi ini, terutamanya dalam pasaran yang sangat tidak menentu.
Strategi Penny Jump ialah contoh klasik dalam perdagangan frekuensi tinggi, yang menunjukkan permainan dan persaingan yang halus di kalangan peserta pasaran. Strategi ini amat menonjol dalam pasaran mata wang kripto, di mana turun naik adalah tinggi dan pelabur institusi dan peniaga frekuensi tinggi mencari keuntungan yang cepat. Walau bagaimanapun, ini juga menjadikan pasaran mencabar, memerlukan penyesuaian berterusan dan pelarasan strategi untuk mengekalkan kelebihan daya saing. Dalam dunia persaingan yang sengit ini, hanya peniaga yang pandai memerhati struktur mikro pasaran dan bertindak balas dengan cepat akan berjaya.