Vui lòng trợ giúp với mã chức năng tùy chỉnh
Results 1 to 7 of 7

Thread: Vui lòng trợ giúp với mã chức năng tùy chỉnh

  1. #1
    Xin chào các bạn, bất cứ ai có thể cho tôi biết mã của tôi bị sai ở đâu.
    Vì vậy, tôi muốn thực hiện một chức năng để đóng tất cả các lệnh đang mở (bất kể loại lệnh nào) sau khi đạt được lợi nhuận mục tiêu, nhưng bằng cách nào đó, EA chỉ đóng mua hoặc chỉ đóng bán sau khi đạt được lợi nhuận mục tiêu.
    Đây là mã:

    Đã chèn mã void close (tích lũy bool, mục tiêu kép) {if (tích lũy == true) {double orderProfit = 0; for (int i = 0; ilt; OrderTotal (); i ) {if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) {orderProfit = OrderProfit (); if (orderProfit gt; = target) {for (int ic = 0; iclt; OrderTotal (); ic ) {if (OrderSelect (ic, SELECT_BY_POS) == true) {if (OrderType () == 0) {bool tutup = OrderClose (OrderTicket (), OrderLots (), Bid, 0, clrGreen); komen (Đóng TẤT CẢ karena MỤC TIÊU, 255, 255, 255); } if (OrderType () == 1) {bool tutup = OrderClose (OrderTicket (), OrderLots (), Ask, 0, clrGreen); komen (Đóng TẤT CẢ karena MỤC TIÊU, 255, 255, 255); }}}}}}}}

  2. #2

    Quote Originally Posted by ;
    {quote} Khi đóng đơn đặt hàng, bạn phải: 1Chạy vòng lặp của bạn theo thứ tự ngược lại ... for (int ic = OrderTotal () - 1; icgt; = 0; ic--) hoặc 2Xác minh sau vòng lặp của bạn rằng tất cả các đơn đặt hàng liên quan của bạn đã bị đóng Bởi vì trong vòng lặp ic , khi một đơn đặt hàng bị đóng, nhóm đơn hàng sẽ bị sai và (các) đơn hàng mới nhất trong nhóm sẽ không được tìm thấy. Không chắc liệu giải thích bằng tiếng Anh của tôi có ổn không ... nhưng kia là nó!
    Bạn đúng rồi! Vấn đề là thứ tự vòng lặp, bởi vì nếu sử dụng logic ic , nó sẽ làm cho OrderTotal bị rối tung lên. Tôi thử vòng lặp đối diện và nó đã hoạt động! Cảm ơn rất nhiều! Tôi sẽ đóng chủ đề này càng sớm càng tốt.

  3. #3

    Quote Originally Posted by ;
    ... if (OrderSelect (ic, SELECT_BY_POS) == true)
    Ngoài ra, tốt hơn là thêm MODE_TRADES vào lựa chọn thứ tự như bạn đã làm trong vòng lặp đầu tiên.

  4. #4

    Quote Originally Posted by ;
    {quote} Ý của bạn là như thế này phải không? Đây là phiên bản mã đầu tiên của tôi, ban đầu nó trông giống như sau: void close (bool tích lũy, mục tiêu kép) {if (tích lũy == true) {double orderProfit = 0; for (int i = 0; ilt; OrderTotal (); i ) {if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) {orderProfit = OrderProfit (); }} if (orderProfit gt; = target) {for (int ic = 0; iclt; OrderTotal (); ic ) {if (OrderSelect (ic, SELECT_BY_POS) == true) {if (OrderType () == 0) { bool tutup = OrderClose (OrderTicket (), OrderLots (), Bid, 0, clrGreen); komen (Đóng TẤT CẢ ...
    Khi đóng lệnh, bạn phải: 1Chạy vòng lặp của bạn theo thứ tự ngược lại ... Đã chèn Mã cho (int ic = OrderTotal () - 1; icgt; = 0; ic--) hoặc 2Xác minh sau vòng lặp của bạn rằng tất cả các đơn đặt hàng liên quan của bạn đã bị đóng Bởi vì trong vòng lặp ic , khi một đơn hàng bị đóng, nhóm đơn hàng sẽ bị sai và (các) đơn hàng mới nhất trong nhóm sẽ không được tìm thấy. Không chắc liệu giải thích bằng tiếng Anh của tôi có ổn không ... nhưng đó là nó!

  5. #5

    Quote Originally Posted by ;
    Xin chào các bạn, bất cứ ai có thể cho tôi biết mã của tôi bị sai ở đâu. Vì vậy, tôi muốn thực hiện một chức năng để đóng tất cả các lệnh đang mở (bất kể loại lệnh nào) sau khi đạt được lợi nhuận mục tiêu, nhưng bằng cách nào đó, EA chỉ đóng mua hoặc chỉ đóng bán sau khi đạt được lợi nhuận mục tiêu. Đây là mã: void close (tích lũy bool, mục tiêu kép) {if (tích lũy == true) {double orderProfit = 0; for (int i = 0; ilt; OrderTotal (); i ) {if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) {orderProfit = OrderProfit (); if (orderProfit gt; = target) {for (int ic = 0; iclt; OrderTotal (); ic ) {if (OrderSelect (ic, ...
    Không đặt vòng lặp thứ 2 gọi lệnh OrderTotal () bên trong vòng lặp thứ nhất. Chạy vòng lặp thứ nhất cho tổng PL ... Sau đó, nếu PL ở mức mục tiêu của bạn hoặc cao hơn, hãy chạy vòng lặp thứ hai để đóng tất cả các lệnh của bạn.

  6. #6

    Quote Originally Posted by ;
    {quote} Không đặt vòng lặp thứ hai gọi OrderTotal () bên trong vòng lặp thứ nhất. Chạy vòng lặp thứ nhất cho tổng PL ... Sau đó, nếu PL ở mức mục tiêu của bạn hoặc cao hơn, hãy chạy vòng lặp thứ hai để đóng tất cả các lệnh của bạn.
    Ý bạn là như thế này phải không? Đây là phiên bản mã đầu tiên của tôi, ban đầu nó trông giống như sau: Đã chèn Mã void close (bool tích lũy, mục tiêu kép) {if (tích lũy == true) {double orderProfit = 0; for (int i = 0; ilt; OrderTotal (); i ) {if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == true) {orderProfit = OrderProfit (); }} if (orderProfit gt; = target) {for (int ic = 0; iclt; OrderTotal (); ic ) {if (OrderSelect (ic, SELECT_BY_POS) == true) {if (OrderType () == 0) { bool tutup = OrderClose (OrderTicket (), OrderLots (), Bid, 0, clrGreen); komen (Đóng TẤT CẢ karena MỤC TIÊU, 255, 255, 255); } if (OrderType () == 1) {bool tutup = OrderClose (OrderTicket (), OrderLots (), Ask, 0, clrGreen); komen (Đóng TẤT CẢ karena MỤC TIÊU, 255, 255, 255); }}}}}} Và tôi đã cố gắng thay đổi nó trở lại phiên bản này và không có gì thay đổi, chỉ mua các lệnh đã đóng hoặc các lệnh bán đã đóng

  7. #7

    Quote Originally Posted by ;
    {quote} Bạn đúng! Vấn đề là thứ tự vòng lặp, bởi vì nếu sử dụng logic ic , nó sẽ làm cho OrderTotal bị rối tung lên. Tôi thử vòng lặp đối diện và nó đã hoạt động! Cảm ơn rất nhiều! Tôi sẽ đóng chủ đề này càng sớm càng tốt.
    Tuyệt quá!

Quyền đăng bài

  • Bạn không thể đăng bài viết mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng tệp đính kèm
  • Bạn không thể chỉnh sửa bài đăng của bạn
  •  
Chính sách Cookie
Chính sách Cookie: Website forexibroker sử dụng cookies và khi tiếp tục sử dụng website bạn chấp thuận với điều này. Để có thêm thông tin, vui lòng đọc 'Thông tin Cookie'.