Phân tích chiến lược giao dịch tần số cao - Penny Jump

Tác giả:Giấc mơ nhỏ, Tạo: 2023-11-03 17:36:56, Cập nhật: 2023-11-03 22:19:32

img

Giao dịch tần số cao là một lĩnh vực đầy thách thức và cạnh tranh, nó phụ thuộc vào việc thực hiện giao dịch nhanh chóng và nhận thức nhạy bén về cấu trúc vi mô thị trường. Một trong những chiến lược nổi tiếng là Penny Jump, một chiến lược tập trung vào việc sử dụng "con voi" trong thị trường để kiếm lợi nhuận nhỏ nhưng thường xuyên. Trong bài viết này, chúng tôi sẽ giải thích chi tiết cách chiến lược Penny Jump hoạt động, đồng thời đi sâu vào các chi tiết của mã chiến lược để giúp người mới bắt đầu hiểu cách nó hoạt động.

Hiểu chiến lược Penny Jump

Trong thị trường chứng khoán, "con voi" thường là những nhà đầu tư tổ chức muốn mua hoặc bán một lượng lớn cổ phiếu, nhưng không muốn giao dịch ở mức giá thị trường. Thay vào đó, họ chọn treo một lượng lớn danh sách giới hạn trên thị trường, hay danh sách treo, để thể hiện ý định của họ. Hành vi này gây ra mối quan tâm rộng rãi trong thị trường vì giao dịch đơn hàng lớn có thể có tác động lớn đến thị trường.

Ví dụ, giả sử một cổ phiếu có độ sâu thị trường như thế này: 200 $1.01 x $1.03 200; sau đó, một con voi bước vào và treo một thanh toán 3000 cổ phiếu với giá 1.01 $.

  • Thị trường cạnh tranh Đối với các nhà giao dịch tần số cao, lợi nhuận của họ chủ yếu đến từ việc phân tích cấu trúc vi mô của thị trường để suy đoán ý định của các nhà giao dịch khác. Một khi có một con voi xuất hiện, các nhà giao dịch tần số cao sẽ nhanh chóng xây dựng vị trí để có được sự biến động giá nhỏ. Mục tiêu của họ là giao dịch thường xuyên trong thời gian ngắn, tích lũy lợi nhuận nhỏ nhưng tích lũy.

  • Vấn đề của voi Mặc dù con voi có thể muốn hoạt động trên quy mô lớn trong thị trường, hành vi của họ cũng tiết lộ ý định giao dịch của họ, khiến họ trở thành mục tiêu của các nhà giao dịch tần số cao. Các nhà giao dịch tần số cao sẽ cố gắng xây dựng vị trí trước và sau đó kiếm lợi nhuận trong biến động giá. Sự hiện diện của con voi trong thị trường có thể gây ra phản ứng của thị trường cạnh tranh, do đó ảnh hưởng đến chiến lược giao dịch của họ.

  • Sự gian lận trong thị trường Trong thực tế, các nhà đầu tư tổ chức lớn thường sẽ không dũng cảm đưa ra một số lượng lớn lệnh mua hoặc bán trên thị trường, vì hành vi như vậy có thể khiến những người tham gia khác trong thị trường có thể phản đối hoặc thậm chí thao túng thị trường. Do đó, họ có thể sử dụng chiến thuật tạo ra ảo giác, thu hút các nhà giao dịch tần suất cao vào và sau đó nhanh chóng bán hoặc mua để lấy lợi nhuận từ sự biến động của giá.

Ý tưởng cốt lõi của chiến lược Penny Jump

Ý tưởng cốt lõi của chiến lược Penny Jump là một khi một con voi xuất hiện trong thị trường và hỗ trợ một mức giá nhất định (ví dụ $1.01), các nhà giao dịch tần số cao sẽ nhanh chóng nâng giá của họ lên một xu, ví dụ $1.02. Điều này là bởi vì các nhà giao dịch tần số cao hiểu rằng sự xuất hiện của con voi có nghĩa là giá này có sự hỗ trợ mạnh mẽ của người mua, vì vậy họ cố gắng theo dõi để mong đợi giá tăng. Khi giá thực sự tăng lên $1.03 x $1.05, các nhà giao dịch tần số cao có thể nhanh chóng bán ra, kiếm được lợi nhuận $0.01.

Không chỉ vậy, các nhà giao dịch tần số cao cũng có thể kiếm được lợi nhuận sau khi mua, ngay cả khi giá không tăng. Vì họ biết con voi đã hỗ trợ giá dưới, họ có thể nhanh chóng bán cổ phiếu cho con voi và kiếm được lợi nhuận chênh lệch nhỏ.

Phân tích mã chính sách Penny Jump

Nguồn mã chiến lược:https://www.fmz.com/strategy/358

Mã chiến lược được cung cấp ở trên là một ví dụ để thực hiện chiến lược Penny Jump. Dưới đây là một lời giải thích chi tiết về mã để người mới bắt đầu có thể hiểu cách nó hoạt động:

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);
    }
}

Tôi sẽ phân tích từng bước mã chính sách mà bạn cung cấp để giúp bạn hiểu rõ hơn về cách nó hoạt động.

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

Mã này khởi tạo một đối tượng có tên là Counter, được sử dụng để theo dõi các thông tin thống kê giao dịch; cụ thể hơn, nó bao gồm ba thuộc tính:

  • i: Tổng số lần giao dịch.
  • w: Số lần giao dịch thành công.
  • f: Số lần giao dịch thất bại.

Các thuộc tính này sẽ được ghi lại và cập nhật trong quá trình thực hiện chính sách.

var InitAccount = null;

Dòng mã này khởi tạo một biến tên là InitAccount, nó sẽ lưu thông tin tài khoản khi chính sách bắt đầu thực hiện.

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);
    }
}

Đó là một cái tênCancelAll()Một trong những điều quan trọng nhất là bạn có thể sử dụng một chức năng như là "tạm dịch" để xóa tất cả các đơn đặt hàng chưa hoàn thành trên thị trường.

  • while (true): Đây là một vòng lặp vô tận, nó sẽ tiếp tục được thực hiện cho đến khi không có đơn đặt hàng chưa hoàn thành.
  • var orders = _C(exchange.GetOrders):这一行代码使用exchange.GetOrders函数获取当前账户所有挂出的订单,并将它们存储在orders变量中。
  • if (orders.length == 0): Dòng mã này kiểm tra xem có lệnh chưa hoàn thành không. Nếu chiều dài của hàng lệnh là 0, nghĩa là không có lệnh chưa hoàn thành, vòng lặp sẽ bị gián đoạn.
  • for (var i = 0; i < orders.length; i++): Đây là một vòng lặp for, nó đi qua tất cả các đơn đặt hàng chưa hoàn thành.
  • exchange.CancelOrder(orders[i].Id)Dòng mã này sử dụng hàm exchange.CancelOrder (), để hủy mỗi đơn đặt hàng thông qua ID của đơn đặt hàng.
  • Sleep(Interval): Dòng mã này giới thiệu một chu kỳ chờ, chờ một thời gian (được tính theo đơn vị milliseconds) để đảm bảo việc hủy đặt hàng không quá thường xuyên.

Mục đích của chức năng này là đảm bảo rằng không có lệnh chưa hoàn thành nào tồn tại trước khi thực hiện chính sách chính, để tránh can thiệp vào việc thực hiện chính sách chính.

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

Đó là một cái tênupdateStatus(msg)Các chức năng này được sử dụng để cập nhật thông tin trạng thái giao dịch và ghi lại. Nó chấp nhận một tham số msg, thường chứa thông tin về trạng thái thị trường hiện tại.

Sử dụngLogStatus()Chức năng ghi lại thông tin hiển thị trong thanh trạng thái khi chính sách chạy. Nó hiển thị văn bản về số lần giao dịch, số lần thành công, số lần thất bại. ThêmmsgCác tham số chứa thông tin về tình trạng thị trường hiện tại. Thêm dấu hiệu thời gian hiện tạinew Date()(Tạm dịch: "Tạm dịch: Mục đích của chức năng này là ghi lại và cập nhật thông tin trạng thái giao dịch để theo dõi và phân tích trong khi thực hiện chiến lược.

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);
    }
}

Đây là chức năng thực thi chính của chiến lược.main()Trong khi đó, một số người cho rằng nó là một chiến lược, và chúng tôi sẽ giải thích cách hoạt động của nó:

  • if (DisableLog): Dòng mã này kiểm tra biến DisableLog là đúng, nếu đúng, sẽ vô hiệu hóa các bản ghi nhật ký.

  • CancelAll()Gọi hàm CancelAll (): được giải thích ở trên để đảm bảo không có đơn đặt hàng chưa hoàn thành.

  • InitAccount = _C(exchange.GetAccount): Dòng mã này lấy thông tin về tài khoản hiện tại và lưu nó trong biến InitAccount. Điều này sẽ được sử dụng để ghi lại trạng thái tài khoản khi chính sách bắt đầu thực hiện.

  • var i = 0;var locks = 0;: khởi tạo hai biến i và locks, chúng sẽ được sử dụng trong logic chiến lược tiếp theo.

  • while (true): Đây là một vòng lặp vô hạn, chủ yếu được sử dụng để thực hiện chiến lược liên tục.

Sau đây, chúng ta sẽ giải thích từng dòng.while (true)Các chiến lược chính trong vòng lặp này là:

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): Dòng mã này cho phép chính sách nghỉ ngơi một thời gian để kiểm soát tần suất thực hiện chính sách. Các tham số Interval xác định khoảng thời gian nghỉ ngơi (với các đơn vị millisecond).

  • var depth = _C(exchange.GetDepth)Nhận thông tin sâu về thị trường hiện tại, bao gồm giá và số lượng của các đơn đặt hàng và mua hàng.

  • if (depth.Asks.length === 0 || depth.Bids.length === 0): Dòng mã này kiểm tra thông tin sâu thị trường để đảm bảo rằng cả hai lệnh mua và bán đều có. Nếu không có một trong hai lệnh mua và bán, có thể thị trường không có đủ thông tin giao dịch, chiến lược sẽ tiếp tục chờ.

  • updateStatus("搜索大象中.... 买一: " + depth.Bids[0].Price + ", 卖一:" + depth.Asks[0].Price + ", 锁定次数: " + locks): dòng mã này gọi chức năng update Status, thông tin trạng thái của chính sách cập nhật. Nó ghi lại trạng thái thị trường hiện tại, bao gồm giá mua, giá bán và số lần khóa trước đó ((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;

  • var askPrice = 0;: Initialize askPrice variable, nó sẽ được sử dụng để lưu trữ giá bán đơn đáp ứng các điều kiện.

  • for (i = 0; i < depth.Asks.length; i++): Đây là một vòng xoay for, được sử dụng để thông báo về giá và số lượng của các đơn hàng bán trên thị trường.

  • if (depth.Asks[i].Amount >= Lot): trong chu kỳ, kiểm tra xem số lượng mỗi đơn đặt hàng có lớn hơn hoặc bằng số lượng Lot (số bàn tay) được chỉ định không. Nếu có, lưu giá cho đơn đặt hàng đó trong AskPrice và kết thúc chu kỳ.

  • if (askPrice === 0): Nếu không tìm thấy đơn hàng đáp ứng các điều kiện (askPrice vẫn là 0), chính sách sẽ tiếp tục chờ và bỏ qua các thao tác tiếp theo.

  • var elephant = null;: khởi tạo biến số elephant, nó sẽ được sử dụng để lưu trữ thông tin thanh toán được xác định là con voi.

    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;

Tiếp tục đi qua thông tin về giá và số lượng giao dịch trên thị trường, bỏ qua giao dịch đầu tiên ((Bids[0])).

  • if ((askPrice - depth.Bids[i].Price) > ElephantSpace): Kiểm tra xem giá mua hiện tại có chênh lệch lớn hơn so với giá hỏi của ElephantSpace không. Nếu vậy, chỉ ra rằng bạn đã đi đủ xa khỏi con voi và chiến lược không tìm kiếm nữa.

  • if (depth.Bids[i].Amount >= ElephantAmount): Kiểm tra số lượng thanh toán hiện tại lớn hơn hoặc bằng với ElephantAmount, nếu có, lưu thông tin thanh toán trong biến elephant.

  • if (!elephant): Nếu không tìm thấy con voi, khóa số lượng khóa sẽ được đặt lại là 0 và tiếp tục chờ.

locks++: sẽ tăng số lần khóa nếu tìm thấy lông voi. Điều này là để đảm bảo thực hiện lại chính sách sau khi xác nhận lông voi nhiều lần trong một khoảng thời gian.

  • if (locks < LockCount): Kiểm tra số lần khóa được yêu cầu. Nếu không, tiếp tục chờ.
    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)): gọi chức năng Status update, ghi lại trạng thái chính sách hiện tại, bao gồm cả vị trí và thông tin liên quan của con rồng rồng được tìm thấy. Điều này sẽ hiển thị trong thanh trạng thái của chính sách.

  • exchange.Buy(elephant.Price + PennyTick, Lot, "Bids[" + i + "]", elephant): sử dụng chức năng exchange.Buy để mua con voi. Giá mua là elephant. Giá + PennyTick, số lượng mua là Lot, và mô tả các hoạt động mua là "Bids[" + i + ] con voi".

  • var ts = new Date().getTime(): lấy dấu thời gian của thời gian hiện tại để tính toán khoảng thời gian sau đó.

  • while (true): bước vào một vòng lặp vô hạn mới, được sử dụng để thực hiện các đơn đặt hàng mua con voi.

  • Sleep(CheckInterval)Chiến lược ngủ tạm thời để kiểm soát tần suất kiểm tra trạng thái đặt hàng.

  • var orders = _C(exchange.GetOrders)Bạn có thể truy cập thông tin về tất cả các đơn đặt hàng trên tài khoản hiện tại của bạn.

  • if (orders.length == 0): Kiểm tra xem có lệnh chưa hoàn thành hay không, nếu không, thoát vòng lặp.

  • (new Date().getTime() - ts) > WaitInterval: tính thời gian hiện tại và khoảng thời gian khi mua ốp voi, nếu vượt quá khoảng thời gian chờ, nghĩa là chờ quá thời gian.

  • for (var i = 0; i < orders.length; i++)Một người phụ nữ ở Việt Nam đã được yêu cầu phải đi qua tất cả các đơn đặt hàng chưa hoàn thành.

  • 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)Bạn có thể truy cập thông tin tài khoản hiện tại.

  • var opAmount = _N(account.Stocks - InitAccount.Stocks): tính toán sự thay đổi tài sản trong tài khoản sau khi mua con voi. Nếu sự thay đổi nhỏ hơn 0,001, cho thấy mua đã thất bại, sẽ tăng số lần thất bại và tiếp tục chu kỳ tiếp theo.

  • updateStatus("买单得手: " + opAmount + ", 开始出手...")Các nhà nghiên cứu cho biết: ghi lại thông tin về những người mua thành công nhựa voi, bao gồm số lượng mua.

  • exchange.Sell(elephant.Price + (PennyTick * ProfitTick), opAmount): sử dụng chức năng exchange.Sell để bán những con voi đã mua thành công để kiếm được lợi nhuận. Giá bán là elephant.Price + (PennyTick * ProfitTick).

Nhập vào một vòng lặp vô hạn mới, được sử dụng để thực hiện các lệnh chờ bán.

  • var depth = _C(exchange.GetDepth)Những người tham gia vào cuộc họp này nói rằng:

  • if (depth.Bids.length > 0 && depth.Bids[0].Price <= (elephant.Price - (STTick * PennyTick)))- Kiểm tra thông tin sâu thị trường, nếu giá thị trường đã giảm xuống mức dừng lỗ, thực hiện lệnh dừng lỗ.

  • CancelAll()Gọi hàm: CancelAll ((() để hủy tất cả các đơn đặt hàng chưa hoàn thành để tránh rủi ro lưu trữ.

  • if (opAmount < 0.001): kiểm tra lại số lượng mua, nếu nhỏ hơn 0.001, thì mua đã thất bại, thoát khỏi vòng lặp.

  • exchange.Sell(depth.Bids[0].Price, opAmount)Trong khi đó, các nhà đầu tư khác cũng có thể tham gia vào hoạt động này.

Cuối cùng, cập nhật số lần thành công và thất bại dựa trên việc giao dịch thành công hay không, và ghi lại lợi nhuận giao dịch.

Đây là giải thích từng dòng của toàn bộ chiến lược. Ý tưởng cốt lõi của chiến lược này là tìm kiếm con voi trong thị trường (trả tiền nhiều) và mua và bán để kiếm được lợi nhuận nhỏ. Nó bao gồm một số tham số quan trọng như số lượng mua (Lot), khoảng thời gian thử nghiệm lỗi (Interval), mức độ con voi (ElephantAmount), khoảng cách con voi (ElephantSpace) để điều chỉnh hành vi của chiến lược.

Nhìn chung, chiến lược này là một chiến lược giao dịch tần số cao, nhằm sử dụng thông tin sâu về thị trường, xác định số lượng lớn thanh toán và giao dịch mua bán trong một thời gian ngắn. Nó đòi hỏi phải liên tục giám sát thị trường và thực hiện các hoạt động mua bán để nhanh chóng kiếm được lợi nhuận nhỏ. Tuy nhiên, nó cũng là một chiến lược có rủi ro cao, vì nó đòi hỏi phải phản ứng nhanh với biến động thị trường, đồng thời cần phải xem xét các cơ chế quản lý rủi ro và dừng lỗ để tránh tổn thất lớn.

Xin lưu ý rằng chiến lược này dựa trên thị trường và nền tảng giao dịch cụ thể và có thể cần phải điều chỉnh và tối ưu hóa thích hợp cho các thị trường và sàn giao dịch khác nhau. Trong ứng dụng thực tế, nhà đầu tư cần kiểm tra và đánh giá cẩn thận hiệu suất của chiến lược để đảm bảo nó phù hợp với mục tiêu đầu tư và khả năng chịu rủi ro.

Khi bạn tiếp tục thực hiện chính sách, nó sẽ lặp lại và thực hiện các thao tác sau:

Đầu tiên, chiến lược sẽ kiểm tra thông tin sâu về thị trường để hiểu tình hình bán và mua hiện tại.

2, Sau đó, chiến lược sẽ cố gắng tìm các đơn đặt hàng phù hợp, cụ thể là số lượng đơn đặt hàng lớn hơn hoặc bằng Lot (số bàn tay). Nếu tìm thấy các đơn đặt hàng phù hợp, giá của đơn đặt hàng sẽ được ghi là AskPrice.

3, sau đó, chiến lược sẽ tiếp tục tìm kiếm con voi (các thanh toán lớn); nó sẽ đi qua các thanh toán trên thị trường, bỏ qua thanh toán đầu tiên (thường là thanh toán có giá cao nhất); nếu tìm thấy con voi phù hợp, thông tin về con voi sẽ được ghi lại và tăng số lần khóa (các khóa).

4, nếu liên tục tìm thấy đủ số lần nhấp nháy (được điều khiển bởi tham số LockCount), chính sách sẽ thực hiện thêm các thao tác sau:

  • Gọi chức năng update Status để ghi lại vị trí và thông tin liên quan của con voi.
  • Sử dụng hàm exchange.Buy để mua con voi, giá mua là elephant.Price + PennyTick, số lượng mua là Lot.
  • Bắt đầu một vòng lặp vô hạn mới để chờ lệnh mua được thực hiện.
  • Kiểm tra trạng thái của đơn đặt hàng, nếu đơn đặt hàng đã hoàn thành, thoát khỏi vòng lặp.
  • Nếu thời gian chờ vượt quá khoảng thời gian chờ được thiết lập, hãy hủy tất cả các đơn đặt hàng chưa hoàn thành.
  • Tính toán sự thay đổi tài sản tài khoản sau khi mua thành công, nếu thay đổi nhỏ hơn 0.001, cho thấy mua thất bại, tăng số lần thất bại và tiếp tục chu kỳ tiếp theo.
  • Thông tin về việc mua thành công nấm nhựa voi, bao gồm số lượng mua.

5, sau đó, chính sách sẽ tiếp tục vào một vòng lặp vô hạn mới, để chờ hành động bán được thực hiện. Trong vòng lặp này, nó sẽ thực hiện các hoạt động sau:

  • Nhận thông tin sâu về thị trường, kiểm tra xem giá thị trường đã đạt mức dừng lỗ hay chưa.
  • Nếu giá thị trường đạt hoặc thấp hơn giá dừng lỗ, thì lệnh dừng lỗ sẽ được thực hiện, tức là bán các tài sản còn lại.
  • Gọi chức năng CancelAll để hủy tất cả các đơn đặt hàng chưa hoàn thành để giảm rủi ro lưu trữ.
  • Kiểm tra lại sự thay đổi trong tài sản tài khoản sau khi mua thành công, nếu thay đổi nhỏ hơn 0.001, thì mua đã thất bại và thoát khỏi vòng lặp.
  • Cuối cùng, ghi lại các giao dịch thành công hay không và cập nhật số lần thành công và thất bại dựa trên kết quả giao dịch.

Toàn bộ chiến lược liên tục lặp đi lặp lại các hoạt động trên để nắm bắt càng nhiều con voi và kiếm được lợi nhuận nhỏ. Đây là một chiến lược giao dịch tần suất cao, cần phải phản ứng nhanh với sự thay đổi của thị trường, đồng thời cần xem xét quản lý rủi ro và cơ chế dừng lỗ để bảo vệ vốn. Các nhà đầu tư nên xem xét cẩn thận việc sử dụng chiến lược này, đặc biệt là trong thị trường biến động cao.

Lời kết thúc

Chiến lược Penny Jump là một ví dụ điển hình trong giao dịch tần số cao, nó thể hiện sự chơi đùa và cạnh tranh tinh tế giữa các thành viên thị trường. Trong thị trường tiền điện tử, chiến lược này đặc biệt nổi bật vì thị trường biến động, cả nhà đầu tư tổ chức và các nhà giao dịch tần số cao đều theo đuổi lợi nhuận nhanh chóng. Tuy nhiên, nó cũng khiến thị trường đầy thử thách, cần phải luôn thích nghi và điều chỉnh chiến lược để duy trì lợi thế cạnh tranh.


Thêm nữa