Ngày Tôi Tắt Đi Công Tắc An Toàn Của Chính Mình

Đâu đó trong lịch sử của con bot giao dịch thực đầu tiên của tôi có một commit mà tôi không lấy làm tự hào. Nó dài đúng hai từ. Giữa lúc hệ thống đang chạy, để làm cho một vấn đề biến mất, tôi đã thò tay vào cơ chế an toàn vốn được cho là để bảo vệ tài khoản và viết: if False.

Nó có hiệu quả, theo cái cách mà việc tắt một báo động khói “có hiệu quả.” Tiếng báo động ngừng lại. Còn cái thứ mà báo động đang canh chừng thì không.

Cái chốt chặn cứ liên tục báo động

Lúc đầu, tôi đã làm đúng một việc: tôi cho con bot thực một hạn mức lỗ theo ngày. Nếu tài khoản tụt quá sâu trong một ngày duy nhất, hệ thống được cho là sẽ dừng giao dịch và chờ tôi. Đó là loại cầu dao ngắt mạch cơ bản nhất, và trên lý thuyết thì nó đúng là kiểu kỷ luật mà một người mới được dạy phải xây dựng.

Vấn đề là nó cứ báo động liên tục dù thực ra chẳng có gì sai cả. Mỗi khi con bot rót tiền mặt vào một vị thế, cái chốt chặn lại thấy số dư tiền mặt giảm xuống và đọc đó là một khoản lỗ. Thế là nó làm đúng phận sự của mình, ầm ĩ và liên tục, dừng một hệ thống vốn không hề trải qua tình trạng thua lỗ mà cái chốt chặn ấy tuyên bố. Một báo động cứ vài phút lại kêu lên vô cớ không phải là một tính năng an toàn; nó là tiếng ồn. Và tiếng ồn, rốt cuộc, sẽ bị làm cho im đi.

Bản vá nóng hai từ

Vậy là tôi làm nó im đi. Giữa phiên, trong khi bot đang chạy, tôi vô hiệu hóa phép kiểm tra lỗ theo ngày — if False — và đẩy nó lên. Việc dừng giao dịch chấm dứt. Con bot lại giao dịch thoải mái. Trong vài phút, nó có cảm giác như một bản sửa lỗi.

Nó không phải là một bản sửa lỗi. Nó là một trong những quyết định nguy hiểm nhất tôi đã đưa ra trong toàn bộ dự án đó, và việc nói chính xác lý do tại sao là điều đáng làm.

Điều tôi thực sự đã làm

Cái chốt chặn báo động vì nó được nạp thông tin sai — nó nhầm lẫn việc chi tiền mặt vào một vị thế với việc mất tiền. Đó là một lỗi thật sự, và nó có một cách sửa thật sự: dạy cho cái chốt chặn biết phân biệt giữa việc mua và việc thua lỗ.

Tôi đã không làm điều đó. Tôi tắt cái chốt chặn đi. Tôi đã xử lý một vấn đề đo lường như thể nó là một vấn đề chốt chặn, và tôi giải quyết nó bằng cách gỡ bỏ chốt chặn. Đó là phiên bản kỹ thuật của việc tháo pin ra khỏi đầu báo khói vì nó cứ kêu tí tách. Tiếng kêu tí tách ngừng lại. Sự bảo vệ cũng vậy.

Một chốt chặn bị tắt là một món nợ tích lũy theo thời gian

Đây là phần lẽ ra phải làm tôi sợ hãi hơn so với lúc đó. Trước khi có bản vá nóng, vấn đề của tôi chỉ đơn thuần là khó chịu: một chốt chặn dừng tôi lại quá thường xuyên. Sau bản vá nóng, vấn đề của tôi trở nên vô hình và không có giới hạn — một con bot thực, giao dịch bằng tiền thật, mà hoàn toàn không có hạn mức lỗ nào còn hoạt động.

Những báo động giả có một cái giá mà tôi nhìn thấy được: giao dịch bị gián đoạn. Cái chốt chặn bị tắt có một cái giá mà tôi không nhìn thấy được — cho đến ngày một khoản lỗ thực sự có thể ập đến và phát hiện ra chẳng có gì đứng chắn đường nó. Tôi đã đánh đổi một sự bực mình hữu hình, có thể sống sót qua được, để lấy một rủi ro vô hình, không có điểm dừng, và tôi đã làm điều đó chỉ để khiến một đèn đỏ chuyển sang xanh nhanh hơn.

Đó là sự cám dỗ của việc tắt đi một biện pháp bảo vệ: cái giá bị trì hoãn. Không có gì tồi tệ xảy ra ngay lập tức. Hóa đơn, nếu nó đến, sẽ đến muộn hơn và đến cùng một lúc — vào thời điểm tồi tệ nhất có thể, mà đó chính xác là thời điểm cái chốt chặn tồn tại để ứng phó.

Nước đi đúng đắn: sửa chốt chặn, đừng làm nó im đi

Phản ứng đúng đắn là cái phản ứng nhàm chán. Biện pháp bảo vệ đã định là hợp lệ, nhưng các đầu vào đo lường và hạch toán của nó bị hỏng. Vậy thì bạn sửa đầu vào: tách các tín hiệu nạp vào nó ra để nó phản ứng với những khoản lỗ thực sự, chứ không phải với chuyển động bình thường của tiền mặt vào các vị thế. Một khi cái chốt chặn có thể phân biệt một khoản lỗ thật với một giao dịch mua thông thường, nó ngừng kêu báo động sai — và nó vẫn ở đó, nguyên vẹn, cho những khoản lỗ thực sự quan trọng.

Quy tắc tôi rút ra từ chuyện này đơn giản đến mức gần như đáng xấu hổ, và giờ đây tôi xem nó như gần với một điều tuyệt đối: bạn không tiếp tục giao dịch với một cơ chế an toàn đang bị tắt. Nếu một chốt chặn kích hoạt sai, hãy chẩn đoán các đầu vào và logic của chính nó trước khi bạn thay đổi hay vô hiệu hóa nó — và hãy sửa hoặc thay thế nó trước khi bạn tiếp tục, thay vì chạy mà không có bảo vệ.

Toàn bộ ý nghĩa của một chốt chặn nằm ở khoảnh khắc bạn không có mặt ở đó

Có một lý do khiến điều này quan trọng đối với một hệ thống tự động hơn là đối với hầu hết mọi thứ bạn vận hành bằng tay. Một con bot thực chạy trong khi bạn ngủ, trong khi bạn đi làm, trong khi bạn gần như đã quên mất sự tồn tại của nó. Các cơ chế an toàn của nó không thực sự dành cho những khoảnh khắc bạn đang theo dõi — lúc đó bạn gần như không cần đến chúng. Chúng dành cho những khoảnh khắc bạn không theo dõi: cú biến động mạnh lúc 4 giờ sáng, lỗi chỉ kích hoạt vào một ngày lễ, chuỗi đổ vỡ diễn ra trong chín mươi giây bạn rời khỏi bàn làm việc.

Khi bạn tắt một chốt chặn để vượt qua một sự khó chịu của ngày hôm nay, bạn đang vay mượn dựa trên chính những khoảnh khắc đó. Bạn đang đặt cược rằng giờ phút không được theo dõi sẽ là một giờ phút yên ả. Thị trường không đưa ra ván cược đó với những điều khoản công bằng.

Tôi luôn ghi nhớ cái commit hai từ ấy như một dạng nhãn cảnh báo. if False là bản sửa lỗi dễ nhất trên đời, và thường thì, nó hoàn toàn không phải là một bản sửa lỗi — nó là một cách biến một vấn đề bạn có thể nhìn thấy thành một thảm họa bạn không thể nhìn thấy.

— Không tín hiệu, không lợi nhuận, không phải lời khuyên đầu tư.