Cần một bàn tay mã hóa một MA chéo EA
Trang 1 trên 622 12 CuốiCuối
Results 1 to 10 of 15

Thread: Cần một bàn tay mã hóa một MA chéo EA

  1. #1
    Tôi đang cố gắng tìm hiểu cách viết mã những chuyên gia tư vấn chuyên môn để tôi có một thứ đơn giản để bắt đầu.

    Ý tưởng là để EA mở một vị thế dài khi giá vượt qua MA từ bên dưới.

    Hơn nữa, khi giá quay trở lại và vượt qua MA từ trên vị trí dài sẽ được đóng lại và một đoạn ngắn sẽ được mở ra.

    Ý tưởng này có vẻ đơn giản và mã bên dưới dường như đúng nhưng không có gì xảy ra.

    Ai đó có thể chỉ cho tôi biết sai lầm của tôi ở đâu không?




    extern double Lots = 0,01;
    extern int Slippage = 7;
    extern string comment = MA_Template;
    extern int MagicNumber = 0;
    /////////////////////////////////////
    int ThisBarTrade = 0;
    int Position = 0;

    int init () {
    CalcPosition ();
    }

    int start () {
    đôi MA;


    bool closed = false;
    if (ThisBarTrade! = Bars) {
    MA = iMA (NULL, 0,5,0,0,0,0);

    //Mua điều kiện
    nếu (MA gt; = Vị trí Giá thầu lt; = 0) {
    CalcPosition ();
    if (Vị trí lt; 0) {
    if (CloseSingleSell () == false) trả về (0);/thất bại nhưng nó có thể thử lại
    }
    nếu (OpenSingleBuy () == false) trả về (0);/không mua được nhưng có thể thử lại
    ThisBarTrade = Thanh;
    }
    //Bán điều kiện
    if (MA lt; = Hỏi Vị trí gt; = 0) {
    CalcPosition ();
    if (Vị trí gt; 0) {
    if (CloseSingleBuy () == false) trả về (0);/thất bại nhưng nó có thể thử lại
    }
    nếu (OpenSingleSell () == false) trả lại (0);/không bán được nhưng có thể thử lại
    ThisBarTrade = Thanh;
    }
    }
    }
    // ----------------------------------------------- -------------------

    void CalcPosition () {
    Vị trí = 0;
    cho (int i = 0; i lt; OrdersTotal (); i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    if (OrderSymbol () == Biểu tượng ()) {
    if (OrderType () == OP_BUY) Vị trí = 1;
    if (OrderType () == OP_SELL) Vị trí - = 1;
    }
    }
    }

    bool CloseSingleBuy () {
    bool đóng;
    cho (int i = 0; i lt; OrdersTotal (); i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    if (Symbol () == OrderSymbol () MagicNumber == OrderMagicNumber ()) {
    if (OrderType () == OP_BUY) {
    while (! IsTradeAllowed ()) Ngủ (MathRand ()10);
    RefreshRates ();
    closed = OrderClose (OrderTicket (), OrderLots (), Bid, Slippage, White);
    In (Cố gắng CloseSingleMua đơn hàng # i Giá thầu);
    if (closed == -1) {
    return (false);
    } else {
    return (true);
    }
    }
    }
    }
    return (false);
    }

    bool CloseSingleSell () {
    bool đóng;
    cho (int i = 0; i lt; OrdersTotal (); i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    if (Symbol () == OrderSymbol () MagicNumber == OrderMagicNumber ()) {
    if (OrderType () == OP_SELL) {
    while (! IsTradeAllowed ()) Ngủ (MathRand ()10);
    RefreshRates ();
    closed = OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, White);
    In (Cố gắng CloseSingleĐặt hàng # i Hỏi);
    if (closed == -1) {
    return (false);
    } else {
    return (true);
    }
    }
    }
    }
    return (false);
    }

    bool OpenSingleBuy () {
    if (Position! = 0) return (false);
    int ticket = -1;
    while (! IsTradeAllowed ()) Ngủ (MathRand ()10);
    RefreshRates ();
    ticket = OrderSend (Ký hiệu (), OP_BUY, Rất nhiều, Hỏi, Trượt, 0.0, 0.0, bình luận mua, MagicNumber, 0, Lime);
    if (ticket lt; 0) {
    In (Thất bại trong OpenSingleMua, lỗi #, GetLastError ());
    return (false);
    } else {
    In (Đặt hàng thành công với OpenSingleBuy);
    return (true);
    }
    return (false);
    }

    bool OpenSingleSell () {
    if (Position! = 0) return (false);
    int ticket = -1;
    while (! IsTradeAllowed ()) Ngủ (MathRand ()10);
    RefreshRates ();
    ticket = OrderSend (Biểu tượng (), OP_SELL, Rất nhiều, Giá thầu, Trượt, 0.0, 0.0, bình luận bán, MagicNumber, 0, Lime);
    if (ticket lt; 0) {
    In (Không thể OpenSingleSell, lỗi #, GetLastError ());
    return (false);
    } else {
    In (Đặt hàng thành công với OpenSingleSell);
    return (true);
    }
    return (false);
    }

  2. #2
    Tôi đang cố gắng một cái gì đó thậm chí còn đơn giản hơn nhưng vẫn không thành công. Mục đích là để làm cho EA mua khi 1SMA và 15SMA có cùng giá trị (chéo) nhưng nó vẫn không làm việc đó. Bất kỳ sự giúp đỡ nào đều luôn được đánh giá cao./Khai báo đôi _Moving_Avarage; double _Moving_Avarage_2; bool _Compare; bool _buy; int start () {//Cấp 1 _Moving_Avarage = iMA (Ký hiệu (), 0,15,0,0,0,0); _Moving_Avarage_2 = iMA (Biểu tượng (), 0,1,0,0,0,0); _Compare = 0 == 0;/Cấp 2 nếu (_Compare! __ isExist (0)) _ buy = OrderSend (Ký hiệu (), 0,0.1, MarketInfo (Ký hiệu (), MODE_ASK), 100,200,0 ,, __ STRATEGY_MAGIC 0) gt; = 0; return (0); }/Dịch vụ bool __selectOrderByMagic (int __magic) {cho (int __i = 0; __ ilt; OrdersTotal (); __ i ) {if (OrderSelect (__ i, SELECT_BY_POS, MODE_TRADES) OrderMagicNumber () == __ STRATEGY_MAGIC __ magic) trả về (true) ;} return (false);} bool __isExist (int __magic) {return (__ selectOrderByMagic (__ magic));}

  3. #3
    1) Họ hầu như không bao giờ có cùng giá trị. Để phát hiện dấu thập, bạn tìm thanh trước đó để có giá trị nhanh hơn giá trị chậm và thanh hiện tại giá trị nhanh bên dưới giá trị chậm (đối với các mục nhập ngắn). 2) Có những ví dụ hiện có trên mạng. Sử dụng chúng.

  4. #4

    Quote Originally Posted by ;
    1) Họ hầu như không bao giờ có cùng giá trị. Để phát hiện dấu thập, bạn tìm thanh trước đó để có giá trị nhanh hơn giá trị chậm và thanh hiện tại giá trị nhanh bên dưới giá trị chậm (đối với các mục nhập ngắn). 2) Có những ví dụ hiện có trên mạng. Sử dụng chúng.
    Hey RR cảm ơn thông tin. Ý tưởng ban đầu của tôi là tìm thời điểm chính xác khi PRICE vượt qua SMA. Tôi đang sử dụng 1SMA làm proxy vì tôi không biết cách xác định giá hiện tại trong thanh. Nếu bạn không nhớ trả lời tôi. Tại sao chúng ta thấy (trực quan) chữ thập trên màn hình nhưng EA không nhìn thấy nó. Có một phạm vi giá tôi có thể xác định mà sẽ mô phỏng nhiều hơn hoặc ít hơn những gì tôi nhìn thấy trong thời gian thực? Cảm ơn

  5. #5
    Những gì EA thấy là một tập các số. Làm thế nào để bạn dịch một mô hình trực quan thành một tập hợp các số?

  6. #6
    Đăng mã bằng cách sử dụng thẻ mã và bạn có thể sẽ nhận được trợ giúp thêm. Tôi chưa xem xét mã của bạn vì trình chỉnh sửa chưa được định dạng. Tuy nhiên, đây là một ví dụ về những gì bạn có thể làm: Đã chèn Mã #define CROSS_UP 1 #define CROSS_DOWN 2 int my_ticket; int start () {if (ma_crossover (1) == CROSS_UP) my_ticket = OrderSend (Ký hiệu (), OP_BUY, 1, Hỏi, 3, Ask-10 * Điểm, Hỏi 10 * Điểm); if (ma_crossover (1) == CROSS_DOWN) my_ticket = OrderSend (Ký hiệu (), OP_SELL, 1, Bid, 3, Bid-10 * Point, Ask 10 * Point); }/----------------------------------------------- -------------------/ma_crossover ()/Trả về số 1 trên thập tự giá. Trả lại số 2 khi gạch chéo/------------------------------------------- ----------------------- int ma_crossover (int pos) {double ma1_current, ma1_previous, ma2_current, ma2_previous; ma1_current = iMA (NULL, 0,5,0, MODE_SMA, PRICE_CLOSE, vị trí); ma1_previous = iMA (NULL, 0,5,0, MODE_SMA, PRICE_CLOSE, pos 1); ma2_current = iMA (NULL, 0,21,0, MODE_SMA, PRICE_CLOSE, vị trí); ma2_previous = iMA (NULL, 0,21,0, MODE_SMA, PRICE_CLOSE, pos 1);/Bỏ qua nếu (ma1_currentgt; ma1_previous ma2_currentlt; ma2_previous) return (CROSS_UP);/Bỏ qua nếu (ma1_currentlt; ma1_previous ma2_currentgt; ma2_previous) return (CROSS_DOWN); return (0); }

  7. #7

    Quote Originally Posted by ;
    Những gì EA thấy là một tập các số. Làm thế nào để bạn dịch một mô hình trực quan thành một tập hợp các số?
    Chính xác, đó là lý do tại sao tôi gặp khó khăn với mã. Tôi đã ấn tượng rằng đối với metatrader để vẽ một MA vượt qua khác hoặc qua giá các con số nên là như nhau tại thời điểm của thập tự giá. Si nếu iMA đang gửi tọa độ tới trục X và Y sẽ được vẽ và thanh được vẽ theo chức năng của giá trong cùng một thời điểm và các điều phối X, Y trong iMA của tôi và Giá thầu hoặc Hỏi (hoặc iMA và iMA trong trường hợp của MA chéo) nên có cùng một giá trị trong thời điểm chính xác này. Nhưng tôi đoán nó không hoạt động theo cách này.

  8. #8
    Rất hiếm khi hai MA khác nhau có cùng giá trị. Vì vậy, bạn kiểm tra chuyển động MA tương đối.

  9. #9

    Quote Originally Posted by ;
    Đăng mã bằng cách sử dụng thẻ mã và bạn có thể sẽ nhận được trợ giúp thêm. Tôi chưa xem xét mã của bạn vì trình chỉnh sửa chưa được định dạng. Tuy nhiên, đây là một ví dụ về những gì bạn có thể làm: [code] #define CROSS_UP 1 #define CROSS_DOWN 2 int my_ticket; int start () {if (ma_crossover (1) == CROSS_UP) my_ticket = OrderSend (Ký hiệu (), OP_BUY, 1, Hỏi, 3, Ask-10 * Điểm, Hỏi 10 * Điểm); if (ma_crossover (1) == CROSS_DOWN) my_ticket = OrderSend (Ký hiệu (), OP_SELL, 1, Bid, 3, Bid-10 * Point, Ask 10 * Point); }/----------------------------------------------- -------------------/...
    Cảm ơn các đầu vào. Tôi đã làm rối tung toàn bộ sợi chỉ khi tôi đề cập đến những từ MA CROSS. Điểm ban đầu của tôi là tìm một mã có thể tìm thấy giá trị của một MA và giá Bid hoặc Ask được vẽ trên thanh. Hơn tôi sẽ có một lệnh kích hoạt tại chính xác đánh dấu vào MA và thanh cắt nhau. Tôi bắt đầu sử dụng 2 MA một trong số họ đặt tại 1 giống như một proxy cho lời giải thích ở trên bởi vì tôi không biết mã nào cho giá trong thời gian thực.

  10. #10

    Quote Originally Posted by ;
    Rất hiếm khi hai MA khác nhau có cùng giá trị. Vì vậy, bạn kiểm tra chuyển động MA tương đối.
    Vì vậy, khi 2 MA vượt qua. Làm thế nào để metatrader vẽ các điểm ảnh trên màn hình. Khi các điểm ảnh với số cho màu sắc vv được tạo ra để được sơn. Ở đâu đó cùng tọa độ X, Y (số) được tạo ra. Các số phải khớp với một thời điểm nhất định nếu không, các MA sẽ không bao giờ vượt qua. Đú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'.