iCustom trả về Empty_val
Results 1 to 8 of 8

Thread: iCustom trả về Empty_val

  1. #1
    Xin chào

    Tôi đang sử dụng chỉ báo sau hoạt động tốt khi tự in các mũi tên, v.v. Mẫu mã bên dưới.

    #chỉ số thuộc tính_chart_window
    #property indior_buffers 2
    #property indior_color1 Vôi
    #property indior_width1 1
    #property indior_color2 Vàng
    #property indior_width2 1
    bool bên ngoài UseAlert = true;
    bên ngoài int BarsToCount = 1000;

    nhân đôi SarUpSig[];
    nhân đôi SarDownSig[];

    ngày giờ TT;
    int init()
    {
    //---- trong nhà
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,233);
    SetIndexBuffer(0,SarUpSig);

    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,234);
    SetIndexBuffer(1,SarDownSig);

    TT=iTime(Ký hiệu(),0,0);
    //----
    trả lại (0);
    }

    int bắt đầu()
    {

    giới hạn int;
    int Counted_bars=IndiorCounted();
    //---- thanh đếm cuối cùng sẽ được kể lại
    if(counted_barsgt;0)count_bars--;
    giới hạn=Bars-counted_bars;
    //---- macd được tính trong bộ đệm thứ nhất
    if(Period()!=PERIOD_H1)
    {
    trả lại (0);
    }

    nếu (BarsToCount lt; giới hạn)
    giới hạn = BarsToCount;


    for(int i=giới hạn; igt;=0; i--)
    {
    ngày giờ thời gian = iTime(Ký hiệu(),0,i);
    int shiftD1 = iBarShift(Symbol(), PERIOD_D1, time, false);
    int shiftH4 = iBarShift(Ký hiệu(), PERIOD_H4, thời gian, sai);
    int shiftH1 = iBarShift(Ký hiệu(),PERIOD_H1,thời gian,sai);

    tăng gấp đôi OsMa1 = iCustom(Symbol(),PERIOD_H1,OsMA,30,200,5,0,shiftH1 );
    tăng gấp đôi OsMa2 = iCustom(Symbol(),PERIOD_H1,OsMA,5,35,35,0,shiftH1) ;

    gấp đôi POsMa1 = iCustom(Symbol(),PERIOD_H1,OsMA,30,200,5,0,shiftH1 1);
    gấp đôi POsMa2 = iCustom(Symbol(),PERIOD_H1,OsMA,5,35,35,0,shiftH1 1);

    //double Up_ST = iCustom(Symbol(),0,4xRider Tín hiệu MẠNH-TREND v2,14,2,i);
    //double Dn_ST = iCustom(Symbol(),0,4xRider Tín hiệu XU HƯỚNG MẠNH v2,14,1,i);

    gấp đôi SARD1 = iSAR(Symbol(),PERIOD_D1,0.22,0.2,shiftD1);
    double SARH4 = iSAR(Symbol(),PERIOD_H4,0.05,0.2,shiftH4);
    double SARH1 = iSAR(Symbol(),PERIOD_H1,0.01,0.2,shiftH1);
    //double SARlast = iSAR(Symbol(),0,0.02,0.2,i 1);
    double CLOSED1 = iClose(Symbol(),PERIOD_D1,shiftD1);
    double CLOSEH4 = iClose(Symbol(),PERIOD_H4,shiftH4);
    double CLOSEH1 = iClose(Symbol(),PERIOD_H1,shiftH1);

    nhân đôi PSARD1 = iSAR(Symbol(),PERIOD_D1,0.22,0.2,shiftD1 1);
    nhân đôi PSARH4 = iSAR(Symbol(),PERIOD_H4,0.05,0.2,shiftH4 1);
    nhân đôi PSARH1 = iSAR(Ký hiệu(),PERIOD_H1,0.01,0.2,shiftH1 1);
    //double SARlast = iSAR(Symbol(),0,0.02,0.2,i 1);
    nhân đôi PCLOSED1 = iClose(Symbol(),PERIOD_D1,shiftD1 1);
    nhân đôi PCLOSEH4 = iClose(Symbol(),PERIOD_H4,shiftH4 1);
    nhân đôi PCLOSEH1 = iClose(Symbol(),PERIOD_H1,shiftH1 1);

    SarUpSig[i]=EMPTY_VALUE;
    SarDownSig[i]=EMPTY_VALUE;

    chuỗi mua;
    //MUA

    //if(Up_ST!=EMPTY_VALUE)
    //{
    //SarUpSig[1] = 1,6094;
    if(SarUpSig[i 1] != EMPTY_VALUE SARH1lt;CLOSEH1 OsMa2gt;0 SARH4lt;CLOSEH4)
    {
    SarUpSig[i] = SARH1;
    if(TT!=iTime(Symbol(),0,0)UseAlert)
    {
    //chuỗi thời gian = TimeToStr(TimeCurrent());
    Cảnh báo(4xRider(MUA) Symbol());
    PlaySound(alert.wav);
    TT=iTime(Ký hiệu(),0,0);
    }
    }
    if((PSARH4gt;PCLOSEH4POsMa1lt;0PSARH1gt;PCLOSEH1)
    (SARH4lt;CLOSEH4OsMa1gt;0SARH1lt;CLOSEH1SARD1lt;CL OSED1) OsMa2gt;0)
    {
    SarUpSig[i] = SARH1;
    mua = giao dịch;
    if(TT!=iTime(Symbol(),0,0)UseAlert)
    {
    //chuỗi thời gian = TimeToStr(TimeCurrent());
    Alert(4xRider (MUA) Symbol());
    PlaySound(alert.wav);
    TT=iTime(Ký hiệu(),0,0);
    }
    }

    //}
    chuỗi bán;
    //BÁN

    //if(Dn_ST!=EMPTY_VALUE)
    //{
    if(SarDownSig[i 1] != EMPTY_VALUE SARH1gt;CLOSEH1 OsMa2lt;0 SARH4gt;CLOSEH4)
    {
    SarDownSig[i] = SARH1;
    if(TT!=iTime(Symbol(),0,0)UseAlert)
    {
    //chuỗi thời gian = TimeToStr(TimeCurrent());
    Alert(4xRider (SELL) Symbol());
    PlaySound(alert.wav);
    TT=iTime(Ký hiệu(),0,0);
    }
    }
    if((PSARH4lt;PCLOSEH4POsMa1gt;0PSARH1lt;PCLOSEH1)
    (SARH4gt;CLOSEH4OsMa1lt;0SARH1gt;CLOSEH1SARD1gt;CL OSED1) OsMa2lt;0)
    {
    SarDownSig[i] = SARH1;
    if(TT!=iTime(Symbol(),0,0)UseAlert)
    {
    //chuỗi thời gian = TimeToStr(TimeCurrent());
    Alert(4xRider (SELL) Symbol());
    PlaySound(alert.wav);
    TT=iTime(Ký hiệu(),0,0);
    }
    }

    //}

    //BÁN

    }
    //----
    //Nhận xét (Từ indior: , DoubleToStr(SarUpSig[1], Digits));
    trả lại (0);
    }


    Tôi đang sử dụng EA để đọc các giá trị như sau.

    #define INDI MyIndior

    gấp đôi IndiUpVal = iCustom(NULL, 0, INDI, sai, 5, 0, 1);
    gấp đôi IndiDownVal = iCustom(NULL, 0, INDI, false, 5, 1, 1);

    Nhận xét(IndiUpVal: D2S(IndiUpVal) . IndiUpVal: D2S(IndiDownVal));

    D2S = DoubleToString có chữ số

    Bất kể tôi làm gì, iCustom trả về EMPTY_VAL.

    Nếu tôi In giá trị từ bên trong chỉ báo vào đúng thời điểm SarUpSig[1]
    sẽ trả về các giá trị chính xác. Nhưng iCustom luôn cung cấp EMPTY_VAL.

    Tại sao?

    Bất kỳ trợ giúp nào cũng được đánh giá rất cao.

  2. #2
    codemeister bạn đã cho tôi. câu trả lời của tôi đã sai. tôi đã có một rắm não lớn. OP: nếu bạn làm 2 việc, nó sẽ giúp bạn sắp xếp việc này. 1. sao chép và dán mã bên trong thẻ CODE để chúng tôi có thể sao chép mã chính xác. bạn có thể không nhận ra điều này nhưng cách bạn vừa dán tập lệnh gây ra NHIỀU vấn đề khi cố gắng sao chép tập lệnh vào metaeditor và biên dịch. nếu bạn muốn chúng tôi biên dịch mã và tìm kiếm bạn thì bạn chỉ cần PHẢI làm điều này CHO CHÚNG TÔI. 2. giải thích ngắn gọn ý nghĩa của indi và kết quả mong đợi. chỉnh sửa: đừng bận tâm. có vẻ như iwjw đang ở trên cùng của nó cho bạn.

  3. #3
    2 (Các) tệp đính kèm Lệnh gọi iCustom của indi nhận các giá trị giống như chính indi Tôi đã sao chép mã của bạn vào .mq4 và đặt tên cho indi là 4xRider Indi thứ hai (4xRider_call) đang sử dụng iCustom để truy xuất các giá trị của 4xRider. Đầu ra tương tự trên biểu đồ (chỉ có 3 khu vực xuất hiện tín hiệu trong 1000 thanh H1 mới nhất)
    https://www.forexibroker.com/attachm...5463976314.mq4
    https://www.forexibroker.com/attachm...1176270264.mq4

  4. #4
    Một lần nữa, tôi đã không cố gắng xem mã, vì vậy tôi đang dựa trên câu trả lời của mình dựa trên quan sát của bạn chứ không phải điều gì có thể xảy ra. Phương pháp đơn giản nhất để xem lệnh gọi iCustom của bạn có chính xác hay không là đặt chỉ mục cho một thanh đã đóng, chẳng hạn như thanh thứ 10 (nếu thanh đó có giá trị). Cố gắng tìm một giá trị cho một thanh đang được tính toán lại (sơn lại) không được khuyến khích trừ khi bạn có chút hiểu biết về cách xử lý nó. Tôi cũng đã sử dụng iCustom nhiều lần mà không gặp vấn đề gì, nhưng tôi cho rằng có thể có trường hợp chỉ báo đang làm điều gì đó mà iCustom không thể xử lý.

  5. #5

    Quote Originally Posted by ;
    Giá trị trả về từ chỉ báo không liên quan gì đến iCustom. iCustom đọc các giá trị từ bộ đệm chỉ thị chứ không phải giá trị trả về. Điều đầu tiên cần làm là xác minh trong Cửa sổ dữ liệu rằng chỉ báo đang tạo ra các giá trị mong đợi. Tiếp theo, hãy đảm bảo rằng các loại giá trị và số lượng tham số là chính xác cho lệnh gọi iCustom. Điều này có thể được thực hiện bằng cách kiểm tra tất cả các biến bên ngoài và so sánh chúng với các giá trị iCustom được gán cho chúng. Mã là một mớ hỗn độn và tôi sẽ không cố gắng làm điều đó cho bạn.
    Chuẩn rồi. Tôi đã xác minh rằng các cửa sổ dữ liệu hiển thị các giá trị một cách chính xác. Tôi cũng có thể xác nhận rằng tất cả các giá trị được chuyển vào lệnh gọi iCustom đều thuộc loại chính xác. Đồng ý rằng mã chỉ báo là một mớ hỗn độn (không phải của tôi). Tôi nghĩ có thể sự cố này đang xảy ra do chỉ báo chuyển từ Giới hạn thành 0 (i--) tức là ngược lại. Vì vậy, có thể nào iCustom đang quay trở lại TRƯỚC KHI chỉ báo có thời gian để điền vào toàn bộ mảng không? Không chắc liệu trả lại từ iCustom có ​​thời gian chờ hay không. Có ai biết điều này không? Hoặc thực hiện cuộc gọi BLOCK cho đến khi indior chạy và hoàn thành. Để loại trừ điều này, tôi chỉ gửi 5 dưới dạng tham số Barcount để chỉ báo sẽ chỉ lặp lại 5 thanh cuối cùng. Tôi xác nhận điều này đang xảy ra bằng cách đặt Print(i) trong vòng lặp indior. Nhưng giá trị trả về vẫn là EMPTY_VALUE. Tôi chỉ không thể hiểu tại sao. Đặc biệt là vì dữ liệu được in trong cửa sổ dữ liệu và câu lệnh Print của tôi từ bên trong indior cũng in các giá trị chính xác trong bộ đệm. Tôi đã sử dụng iCustom rất nhiều lần trước đây và đây là lần đầu tiên tôi nhìn thấy thứ gì đó kỳ lạ như thế này.

  6. #6
    trước tiên, bạn cần sử dụng các thẻ [code ] :S thứ hai, nhìn sơ qua bạn sẽ không trả lại bất kỳ giá trị nào ngoại trừ số không. thay đổi giá trị trả về của hàm bắt đầu thành giá trị mà bạn muốn đọc với icustom và xem cách bạn thực hiện từ đó.

  7. #7
    Giá trị trả về từ chỉ báo không liên quan gì đến iCustom. iCustom đọc các giá trị từ bộ đệm chỉ thị chứ không phải giá trị trả về. Điều đầu tiên cần làm là xác minh trong Cửa sổ dữ liệu rằng chỉ báo đang tạo ra các giá trị mong đợi. Tiếp theo, hãy đảm bảo rằng các loại giá trị và số lượng tham số là chính xác cho lệnh gọi iCustom. Điều này có thể được thực hiện bằng cách kiểm tra tất cả các biến bên ngoài và so sánh chúng với các giá trị iCustom được gán cho chúng. Mã là một mớ hỗn độn và tôi sẽ không cố gắng làm điều đó cho bạn.

  8. #8

    Quote Originally Posted by ;
    Cuộc gọi iCustom của indi nhận các giá trị giống như chính indi. Tôi đã sao chép mã của bạn thành .mq4 và đặt tên cho indi là 4xRider. Indi thứ hai (4xRider_call) đang sử dụng iCustom để truy xuất các giá trị của 4xRider. Đầu ra tương tự trên biểu đồ (chỉ có 3 khu vực xuất hiện tín hiệu trong 1000 thanh H1 mới nhất)
    Có, indi sang indi không có vấn đề gì. Cắt phần tương tự và đặt nó vào EA và chúng tôi quay lại EMPTY_VAL. Đây không phải là tất cả các thời gian mặc dù. Tôi thấy vấn đề này rất nhiều GBPUSD. Trên EURUSD nó hoạt động nhưng có những trường hợp nó trả về EMPTY_VAL. Do đó, giả định ban đầu của tôi rằng nó có liên quan gì đó đến retuern. Ồ tốt. Tôi sẽ tiếp tục cố gắng.

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'.