Làm thế nào để tìm giá gần nhau nhất?
Results 1 to 7 of 7

Thread: Làm thế nào để tìm giá gần nhau nhất?

  1. #1
    Tôi đang cố gắng tìm cách để làm điều này. Lúc đầu, tôi đã cố gắng làm điều gì đó bằng cách sử dụng MathAbs và trừ các giá trị cho nhau, nhưng có vẻ như tôi đã đơn giản hóa nó quá mức vì tôi đang xử lý khoảng 20 mức giá ở đây. Tôi đã khai báo tất cả chúng rồi, vì vậy vấn đề chỉ là tìm ra những cái đúng.

    Có cách nào nhanh chóng và dễ dàng để lấy một số giá như vậy và nhận được chênh lệch giá của mọi kết hợp có thể (hoặc tìm cách nào đó để chỉ nhận được các kết hợp quan trọng)? Hoặc có thể lọc chúng theo một số giá trị tối đa tùy ý (rằng nếu chênh lệch vượt quá thì giá sẽ bị bỏ qua)?

  2. #2
    Tôi đã không sử dụng mảng trong khoảng 1 năm và quên mất cách sử dụng chúng. Trong MetaEditor có nút Trợ giúp và từ đó bạn có thể tìm cách khai báo mảng, v.v. Hoặc tại đây:
    http://docs.mql4.com/Xin lỗi, tôi không có thời gian để đọc cho bạn

  3. #3
    Ví dụ tôi đã đăng sẽ không hoạt động? Có lẽ để làm cho nó rõ ràng hơn, giá có thể là mục tiêu của giá trong tương lai dựa trên các chỉ số khác nhau. Tôi muốn tìm hiểu xem khi nào nhiều mục tiêu khả thi này gần nhau và điểm vào/ra dựa trên các mức giá này. Làm thế nào tôi sẽ xác định gần nhau là một vấn đề hoàn toàn khác có thể được giải quyết bằng ATR hoặc một cái gì đó tương tự, hoặc chỉ là một giá trị bên ngoài mà tôi có thể điều chỉnh khi biến động thay đổi. Tôi nhận ra rằng nó không giống với những gì được hỏi trong tiêu đề chủ đề, nhưng vấn đề là tôi chưa chắc chắn 100% về cách thực hiện. Nửa chừng, tôi nhận ra rằng sẽ tốt hơn nếu xác định mức tối đa vì có thể có hơn 2 mức giá gần nhau. Tôi quan tâm đến cách thiết lập cơ bản và tôi có thể đi theo một cách khác từ đó. Nếu mã tôi đã đăng hoạt động như tôi nghĩ nó hoạt động thì điều này là đủ cho những gì tôi muốn làm. Tôi không có bất kỳ kinh nghiệm nào với Mảng ngoài chuỗi được sử dụng trong chỉ báo nên tôi không chắc chính xác cách làm việc với mảng là gì. Tôi hình dung bạn cứ đi như Array [Dimension1] [Dimension2] và bạn có giá trị tại các tọa độ đó. Tôi chỉ bỏ qua phần khai báo lặp đi lặp lại của tất cả các giá trong mảng (Giá0, Giá1 sẽ tiếp tục cho đến Giá19). Chẳng hạn, is double Array[19][1]; đúng hay tôi cần sử dụng [20][2] vì số 0 không được tính khi khai báo? (nó sẽ tạo một mảng có kích thước 20x2 và nếu tôi giả sử đúng thì chỉ mục sẽ bắt đầu từ 0 và kết thúc ở 19 và các chỉ số thứ nguyên phải là 0 và 1)

  4. #4

    Quote Originally Posted by ;
    Bạn có biết tôi sẽ phải điều chỉnh như thế nào trong trường hợp có 4-5 giá trị tương đối gần nhau (giả sử chênh lệch, nhưng nó có thể là bất kỳ số tiền nào dưới mức tối đa được chỉ định: 0,00005, 0,00004, 0,00003, 0,00002). Không phải tôi đặc biệt cần 2 mức giá gần nhau nhất, mà là một số mức giá phù hợp với mức chênh lệch tối đa?
    Pipsgeek, điều này khác với những gì bạn đã hỏi. Vì vậy, bạn muốn xác định khoảng cách tối đa và tìm tất cả các cặp giá gần nhau? Có nhiều hơn một cách để làm điều đó. Một là: Tạo một mảng 1 chiều và điền vào đó tất cả các mức giá mà bạn có. Sắp xếp nó (tăng dần hoặc giảm dần, không quan trọng). Lặp lại một lần qua mảng và kiểm tra xem khoảng cách giữa 2 giá đó lt;= maximum_difference Nếu có, hãy làm gì đó với giá trị đó. Lưu trữ nó trong một mảng khác (hoặc thực hiện toàn bộ kiểm tra trong một mảng 2 chiều trong đó chỉ mục 0 chứa giá và chỉ mục 1 chứa khoảng cách đến giá trước đó) Từ kiểm tra này, bạn có tất cả các mức giá được trích xuất gần nhau hơn bạn đã xác định max_difference (hoặc bằng max diff ). Tôi không thể nói nhiều hơn vì tôi không biết tại sao bạn lại làm điều này và bạn sẽ làm gì với các mức giá được trích xuất. Nhưng điều đó là cần thiết để biết cách lưu trữ các cấp độ và thông tin bổ sung nào cần thiết để làm việc với các cấp độ này.

  5. #5
    Một cách để thực hiện: Tạo một mảng và điền vào đó tất cả các mức giá mà bạn muốn kiểm tra. Sắp xếp mảng, theo cách này bạn sẽ có được chúng theo thứ tự tăng dần hoặc giảm dần đẹp mắt với 1 lệnh. khai báo một đôi LowestDistance = 9999999,99; bắt đầu ở một đầu của mảng và so sánh giá như sau: if(price1-price2 lt;= LowestDistance) {LowestDistance=price1-price2;
    price_a = price1; giá_b = giá2; } if(price2 - price3 lt;= Khoảng cách thấp nhất) {Khoảng cách thấp nhất = price2-price3;
    price_a = price2; price_b = price3 } if(price3 - price4 lt;= LowestDistance) {LotestDistance = price3-price4;
    price_a = price3; price_b = price4 } ..... .... Điều này có thể được thực hiện trong một vòng lặp. Sau khi kết thúc vòng lặp, bạn sẽ có 3 trường chứa các giá trị chính xác: Khoảng cách thấp nhất price_a price_b Tôi nghĩ đó là thứ bạn cần.

  6. #6
    Cảm ơn. Vì vậy, tôi tạo một mảng và sau đó là một vòng lặp lặp qua chỉ mục của mảng và so sánh các giá trị trong các chỉ mục? Bạn có biết tôi sẽ phải điều chỉnh như thế nào trong trường hợp có 4-5 giá trị tương đối gần nhau (giả sử chênh lệch, nhưng nó có thể là bất kỳ số tiền nào dưới mức tối đa được chỉ định: 0,00005, 0,00004, 0,00003, 0,00002). Không phải tôi đặc biệt cần 2 mức giá gần nhau nhất, mà là một số mức giá phù hợp với mức chênh lệch tối đa? Đây sẽ là một giải pháp tốt cho vấn đề đó? Mã được chèn Mảng kép#91;19#93;#91;1#93;; Khởi tạo mảng(Mảng#91;19#93;#91;1#93;, 20); Mảng#91;0#93;#91;0#93; = Giá0; Mảng#91;1#93;#91;0#93; = Giá1;/etc...etc...etc... ArraySort(Array#91;19#93;#91;1#93;,WHOLE_ARRAY,0,M ODE_ASCEND); maxdiff = 0,00005; Ngừng = 19; for (i=0;ilt;Stop;i ) { if (MathAbs(MathAbs#91;i#93;#91;0#93; - Array#91;i 1#93;#91;0#93; ) lt;= maxdiff) {Mảng#91;i#93;#91;1#93; = i 1; Array#91;i 1#93;#91;1#93; = i;} Nếu tôi đang sử dụng mảng chính xác như thế này thì chúng ta sẽ có một mảng 2 chiều, và chiều đầu tiên chứa 20 giá và chiều thứ hai là số nguyên 20 hoặc từ 0 đến 19. Nếu số nguyên là 20 thì không có giá nào đủ gần, nếu giá là 0-19 thì giá này tương ứng với chỉ số của giá đủ gần với giá này. Mặc dù chỉ số có thể bị ghi đè bởi giá tiếp theo nhưng giá khác sẽ vẫn chứa chỉ số và tôi có thể thêm vào một tấm séc so sánh sự khác biệt của giá 1 và giá 3 (giá 2 nằm trong phạm vi maxdiff của cả giá 1 và giá 3) trước khi đặt thứ nguyên thứ hai của mảng (nếu (Mảng == 20), đại loại như vậy).

  7. #7
    lol, cảm ơn vì đã cho tôi ý tưởng sử dụng mảng. Tôi cho rằng các mảng là đậu phộng đối với bạn và bạn có thể ngay lập tức biết nó đúng hay sai. Từ các ví dụ trợ giúp MQL4 khá không rõ ràng, có vẻ như cách chính xác để khai báo nó là sử dụng số lượng giá trị, không phải số chỉ mục (vì vậy Array[20][2] cho mảng 20x2).

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