Bạn có thể code trực tiếp Stoploss và Takeprofit vào thuật toán của Amibroker. Tuy nhiên sẽ có vài biến thể khác nhau, bạn có thể tham khảo các cách sau:
- Stoploss và Take Profit đóng nến
Stoploss và Take Profit đóng nến tức là điều kiện đóng lệnh sẽ được kiểm tra sau khi kết thúc 1 nến. Đoạn code dưới đây là Stoploss cho chiến thuật nếu đóng nến lỗ quá 4 điểm
SL = 4; //dien so diem muon stoploss
SLBuy = C < ValueWhen(Buy1,O) – SL;
SLShort = C > ValueWhen(Short1,O) + SL;
Cover = Ref(CloseDowntrend,-1) Or Ref(SLShort,-1); //dong nen
Sell = Ref(CloseUptrend,-1) Or Ref(SLBuy,-1); //dong nen
Ví dụ tại đây Stoploss được lùi lại 1 nến, nếu đóng nến trước đạt điều kiện Stoploss thì sẽ đóng lệnh. Ưu điểm của Stoploss dạng này là sẽ tránh được các việc râu nến quét qua stoploss rồi rút chân, Stoploss chỉ nhận khi kết thúc nến giá vẫn đạt điều kiện Stoploss. Tương tự với Takeprofit. Nhược điểm là đợi tới khi đóng nến thì giá đã trôi xa khỏi mức Stoploss, phần lỗ thực sẽ lớn hơn mức Stoploss
2. Stoploss và Take Profit ngay lập tức
Lệnh đóng sẽ được thực hiện ngay khi giá chạm tới mức Stoploss hay Takeprofit được cài đặt (cách thông thường). Đoạn code dưới đây là Stoploss 4 điểm cho chiến thuật
SL = 4; //dien so diem muon stoploss
SLBuy = C < ValueWhen(Buy1,O) – SL;
SLShort = C > ValueWhen(Short1,O) + SL;
Cover = Ref(CloseDowntrend,-1) Or SLShort; //chua dong nen
Sell = Ref(CloseUptrend,-1) Or SLBuy; //chua dong nen
Ví dụ này chỉ khác với trường hợp trên ở việc không lùi Stoploss lại 1 nến. Đây là cách phần lớn mọi người quen sử dụng. Tuy nhiên khi Backtest điều kiện Stoploss hay Takeprofit kiểu này sẽ không chính xác và bị lỗi Repaint, nên cách viết trên chỉ dùng cho Bot chạy tài khoản thật. Còn với Bot để Backtest thì ta bỏ điều kiện Stoploss trên mà sử dụng hàm ApplyStop của Amibroker. Chi tiết đọc tại: https://www.amibroker.com/guide/afl/applystop.html
Các bạn có thể thêm đoạn code dưới đây để dùng Backtest Stoploss, với SL là số điểm muốn cài Stoploss
SetOption(“ActivateStopsImmediately”, True);
ApplyStop(stopTypeLoss ,stopModePoint, SL,ExitAtStop = 1,False,1,0,-1,0);
Khi dùng hàm ApplyStop Amibroker sẽ check giá cao nhất hay thấp nhất của nến đó để xem trong nến đó có xảy ra điều kiện Stoploss không, rồi sẽ ghi nhận phần lỗ của Trade đó đúng bằng mức Stoploss.
Các Bot của Ami X hiện tại đang sử dụng Stoploss lùi 1 nến, nếu muốn đổi sang Stoploss chạm đóng luôn thì bạn cần sửa như hướng dẫn bên trên, thay Ref(SLShort,-1) bằng SLShort