Bantuan sedikit diperlukan dengan kod EA
Results 1 to 4 of 4

Thread: Bantuan sedikit diperlukan dengan kod EA

  1. #1
    Di bawah adalah EA yang saya gunakan sebagai templat untuk membina EA untuk sistem yang saya gunakan. Saya bukan seorang programmer yang berpengalaman dan saya berharap projek ini akan membolehkan saya membina pengetahuan saya tentang mql4. Kod di bawah berfungsi dengan baik namun saya terjebak pada satu bahagian kecil. EA ini pada masa ini hanya mempunyai satu perdagangan terbuka pada satu masa. Saya ingin perdagangan serentak mungkin. Bolehkah seseorang sila melihat kod ke bawah dan beritahu saya bahagian mana yang mengehadkan ini. Saya percaya bahawa ia boleh menjadi bahagian kedudukan cek. Banyak terima kasih.


    Quote Originally Posted by ;
    #define SIGNAL_NONE 0
    #define SIGNAL_BUY 1
    #define SIGNAL_SELL 2
    #define SIGNAL_CLOSEBUY 3
    #define SIGNAL_CLOSESELL 4
    extern int MagicNumber = 0;
    extern bool SignalMail = False;
    extern bool EachTickMode = False;
    extern double Lots = 1.0;
    extern int Slippage = 3;
    extern bool UseStopLoss = False;
    extern int StopLoss = 30;
    extern bool UseTakeProfit = Palsu;
    extern int TakeProfit = 60;
    extern bool UseTrailingStop = False;
    extern int TrailingStop = 30;
    int BarCount;
    int semasa;
    bool TickCheck = False;
    // ----------------------------------------------- -------------------
    //| fungsi permulaan pakar |
    // ----------------------------------------------- -------------------
    int init () {
    BarCount = Bar;
    jika (SetiapTickMode) Semasa = 0; lain semasa = 1;
    pulangan (0);
    }
    // ----------------------------------------------- -------------------
    //| fungsi deinitialization pakar |
    // ----------------------------------------------- -------------------
    int deinit () {
    pulangan (0);
    }
    // ----------------------------------------------- -------------------
    //| fungsi permulaan pakar |
    // ----------------------------------------------- -------------------
    int start () {
    int Order = SIGNAL_NONE;
    int Jumlah, Tiket;
    double StopLossLevel, TakeProfitLevel;

    jika (EachTickMode Bar! = BarCount) TickCheck = False;
    Jumlah = OrdersTotal ();
    Order = SIGNAL_NONE;
    // ----------------------------------------------- -------------------
    //| Pembolehubah Variable |
    // ----------------------------------------------- -------------------

    double Buy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double Buy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double Sell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double Sell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double CloseBuy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double CloseBuy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double CloseSell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double CloseSell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);

    // ----------------------------------------------- -------------------
    //| Akhir Pembolehubah |
    // ----------------------------------------------- -------------------
    //Periksa kedudukan
    bool IsTrade = Palsu;
    untuk (int i = 0; i lt; Total; i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    jika (OrderType () lt; = OP_SELL OrderSymbol () == Simbol ()) {
    IsTrade = Benar;
    jika (OrderType () == OP_BUY) {
    /Tutup
    // ----------------------------------------------- -------------------
    //| Begin Begin (Beli Keluar) |
    // ----------------------------------------------- -------------------
    jika (CloseBuy1_1 lt; CloseBuy1_2) Pesanan = SIGNAL_CLOSEBUY;

    // ----------------------------------------------- -------------------
    //| Akhir Isyarat (Keluar Keluar) |
    // ----------------------------------------------- -------------------
    jika (Pesanan == SIGNAL_CLOSEBUY ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
    OrderClose (OrderTicket (), OrderLots (), Tawaran, Slippage, MediumSeaGreen);
    jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Bida, Digit) Beli Tutup);
    jika (! EachTickMode) BarCount = Bar;
    IsTrade = False;
    terus;
    }
    /Stop trailing
    jika (UseTrailingStop TrailingStop gt; 0) {
    jika (Bid - OrderOpenPrice () gt; Point * TrailingStop) {
    jika (OrderStopLoss () lt; Tawaran - Titik * TrailingStop) {
    OrderModify (OrderTicket (), OrderOpenPrice (), Bid - Point * TrailingStop, OrderTakeProfit (), 0, MediumSeaGreen);
    jika (! EachTickMode) BarCount = Bar;
    terus;
    }
    }
    }
    } else {
    /Tutup
    // ----------------------------------------------- -------------------
    //| Begin Signal (Keluar Jual) |
    // ----------------------------------------------- -------------------
    jika (CloseSell1_1 gt; CloseSell1_2) Pesanan = SIGNAL_CLOSESELL;

    // ----------------------------------------------- -------------------
    //| Akhir Isyarat (Keluar Jual) |
    // ----------------------------------------------- -------------------
    jika (Order == SIGNAL_CLOSESELL ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
    OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, DarkOrange);
    jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Tanya, Digit) Close Sell);
    jika (! EachTickMode) BarCount = Bar;
    IsTrade = False;
    terus;
    }
    /Stop trailing
    jika (UseTrailingStop TrailingStop gt; 0) {
    jika ((OrderOpenPrice () - Tanya) gt; (Point * TrailingStop)) {
    jika ((OrderStopLoss () gt; (Ask Point * TrailingStop)) || (OrderStopLoss () == 0)) {
    OrderModify (OrderTicket (), OrderOpenPrice (), Ask Point * TrailingStop, OrderTakeProfit (), 0, DarkOrange);
    jika (! EachTickMode) BarCount = Bar;
    terus;
    }
    }
    }
    }
    }
    }
    // ----------------------------------------------- -------------------
    //| Begin Signal (Entry) |
    // ----------------------------------------------- -------------------
    jika (Buy1_1 gt; Buy1_2) Pesanan = SIGNAL_BUY;
    jika (Sell1_1 lt; Sell1_2) Pesanan = SIGNAL_SELL;

    // ----------------------------------------------- -------------------
    //| Akhir Isyarat |
    // ----------------------------------------------- -------------------
    //Beli
    jika (Perintah == SIGNAL_BUY ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount))) {{
    jika (! IsTrade) {
    //Periksa margin percuma
    jika (AccountFreeMargin () lt; (1000 * Banyak)) {
    Cetak (Kami tidak mempunyai wang. Margin Percuma =, AccountFreeMargin ());
    pulangan (0);
    }
    jika (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; lain StopLossLevel = 0.0;
    jika (UseTakeProfit) TakeProfitLevel = Tanya TakeProfit * Point; lain TakeProfitLevel = 0.0;
    Tiket = OrderSend (Simbol (), OP_BUY, Banyak, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy (# MagicNumber ), MagicNumber, 0, DodgerBlue);
    jika (Tiket gt; 0) {
    jika (OrderSelect (Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
    Cetak (pesanan BUY dibuka:, OrderOpenPrice ());
    jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Tanya, Digit) Beli Terbuka);
    } else {
    Cetak (Ralat membuka pesanan BUY:, GetLastError ());
    }
    }
    jika (EachTickMode) TickCheck = Benar;
    jika (! EachTickMode) BarCount = Bar;
    pulangan (0);
    }
    }
    //Jual
    jika (Perintah == SIGNAL_SELL ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
    jika (! IsTrade) {
    //Periksa margin percuma
    jika (AccountFreeMargin () lt; (1000 * Banyak)) {
    Cetak (Kami tidak mempunyai wang. Margin Percuma =, AccountFreeMargin ());
    pulangan (0);
    }
    jika (UseStopLoss) StopLossLevel = Tawaran StopLoss * Point; lain StopLossLevel = 0.0;
    jika (UseTakeProfit) TakeProfitLevel = Bid ??????- TakeProfit * Point; lain TakeProfitLevel = 0.0;
    Tiket = OrderSend (Symbol (), OP_SELL, Banyak, Tawaran, Slippage, StopLossLevel, TakeProfitLevel, Menjual (# MagicNumber ), MagicNumber, 0, DeepPink);
    jika (Tiket gt; 0) {
    jika (OrderSelect (Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
    Cetak (pesanan JUAL dibuka:, OrderOpenPrice ());
    jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Bida, Digit) Open Sell);
    } else {
    Cetak (Ralat membuka pesanan JUAL:, GetLastError ());
    }
    }
    jika (EachTickMode) TickCheck = Benar;
    jika (! EachTickMode) BarCount = Bar;
    pulangan (0);
    }
    }
    jika (! EachTickMode) BarCount = Bar;
    pulangan (0);
    }
    // ----------------------------------------------- -------------------
    Quote Originally Posted by ;
    #define SIGNAL_NONE 0
    #define SIGNAL_BUY 1
    #define SIGNAL_SELL 2
    #define SIGNAL_CLOSEBUY 3
    #define SIGNAL_CLOSESELL 4
    extern int MagicNumber = 0;
    extern bool SignalMail = False;
    extern bool EachTickMode = False;
    extern double Lots = 1.0;
    extern int Slippage = 3;
    extern bool UseStopLoss = False;
    extern int StopLoss = 30;
    extern bool UseTakeProfit = Palsu;
    extern int TakeProfit = 60;
    extern bool UseTrailingStop = False;
    extern int TrailingStop = 30;
    int BarCount;
    int semasa;
    bool TickCheck = False;
    // ----------------------------------------------- -------------------
    //| fungsi permulaan pakar |
    // ----------------------------------------------- -------------------
    int init () {
    BarCount = Bar;
    jika (SetiapTickMode) Semasa = 0; lain semasa = 1;
    pulangan (0);
    }
    // ----------------------------------------------- -------------------
    //| fungsi deinitialization pakar |
    // ----------------------------------------------- -------------------
    int deinit () {
    pulangan (0);
    }
    // ----------------------------------------------- -------------------
    //| fungsi permulaan pakar |
    // ----------------------------------------------- -------------------
    int start () {
    int Order = SIGNAL_NONE;
    int Jumlah, Tiket;
    double StopLossLevel, TakeProfitLevel;

    jika (EachTickMode Bar! = BarCount) TickCheck = False;
    Jumlah = OrdersTotal ();
    Order = SIGNAL_NONE;
    // ----------------------------------------------- -------------------
    //| Pembolehubah Variable |
    // ----------------------------------------------- -------------------

    double Buy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double Buy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double Sell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double Sell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double CloseBuy1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double CloseBuy1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);
    double CloseSell1_1 = iOpen (NULL, PERIOD_H4, Current 0);
    double CloseSell1_2 = iCustom (NULL, PERIOD_H4, AndrewFX HiLo, 0, Current 0);

    // ----------------------------------------------- -------------------
    //| Akhir Pembolehubah |
    // ----------------------------------------------- -------------------
    //Periksa kedudukan
    bool IsTrade = Palsu;
    untuk (int i = 0; i lt; Total; i ) {
    OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
    jika (OrderType () lt; = OP_SELL OrderSymbol () == Simbol ()) {
    IsTrade = Benar;
    jika (OrderType () == OP_BUY) {
    /Tutup
    // ----------------------------------------------- -------------------
    //| Begin Begin (Beli Keluar) |
    // ----------------------------------------------- -------------------
    jika (CloseBuy1_1 lt; CloseBuy1_2) Pesanan = SIGNAL_CLOSEBUY;

    // ----------------------------------------------- -------------------
    //| Akhir Isyarat (Keluar Keluar) |
    // ----------------------------------------------- -------------------
    jika (Pesanan == SIGNAL_CLOSEBUY ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
    OrderClose (OrderTicket (), OrderLots (), Tawaran, Slippage, MediumSeaGreen);
    jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Bida, Digit) Beli Tutup);
    jika (! EachTickMode) BarCount = Bar;
    IsTrade = False;
    terus;
    }
    /Stop trailing
    jika (UseTrailingStop TrailingStop gt; 0) {
    jika (Bid - OrderOpenPrice () gt; Point * TrailingStop) {
    jika (OrderStopLoss () lt; Tawaran - Titik * TrailingStop) {
    OrderModify (OrderTicket (), OrderOpenPrice (), Bid - Point * TrailingStop, OrderTakeProfit (), 0, MediumSeaGreen);
    jika (! EachTickMode) BarCount = Bar;
    terus;
    }
    }
    }
    } else {
    /Tutup
    // ----------------------------------------------- -------------------
    //| Begin Signal (Keluar Jual) |
    // ----------------------------------------------- -------------------
    jika (CloseSell1_1 gt; CloseSell1_2) Pesanan = SIGNAL_CLOSESELL;

    // ----------------------------------------------- -------------------
    //| Akhir Isyarat (Keluar Jual) |
    // ----------------------------------------------- -------------------
    jika (Order == SIGNAL_CLOSESELL ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
    OrderClose (OrderTicket (), OrderLots (), Ask, Slippage, DarkOrange);
    jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Tanya, Digit) Close Sell);
    jika (! EachTickMode) BarCount = Bar;
    IsTrade = False;
    terus;
    }
    /Stop trailing
    jika (UseTrailingStop TrailingStop gt; 0) {
    jika ((OrderOpenPrice () - Tanya) gt; (Point * TrailingStop)) {
    jika ((OrderStopLoss () gt; (Ask Point * TrailingStop)) || (OrderStopLoss () == 0)) {
    OrderModify (OrderTicket (), OrderOpenPrice (), Ask Point * TrailingStop, OrderTakeProfit (), 0, DarkOrange);
    jika (! EachTickMode) BarCount = Bar;
    terus;
    }
    }
    }
    }
    }
    }
    // ----------------------------------------------- -------------------
    //| Begin Signal (Entry) |
    // ----------------------------------------------- -------------------
    jika (Buy1_1 gt; Buy1_2) Pesanan = SIGNAL_BUY;
    jika (Sell1_1 lt; Sell1_2) Pesanan = SIGNAL_SELL;

    // ----------------------------------------------- -------------------
    //| Akhir Isyarat |
    // ----------------------------------------------- -------------------
    //Beli
    jika (Perintah == SIGNAL_BUY ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount))) {{
    jika (! IsTrade) {
    //Periksa margin percuma
    jika (AccountFreeMargin () lt; (1000 * Banyak)) {
    Cetak (Kami tidak mempunyai wang. Margin Percuma =, AccountFreeMargin ());
    pulangan (0);
    }
    jika (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; lain StopLossLevel = 0.0;
    jika (UseTakeProfit) TakeProfitLevel = Tanya TakeProfit * Point; lain TakeProfitLevel = 0.0;
    Tiket = OrderSend (Simbol (), OP_BUY, Banyak, Ask, Slippage, StopLossLevel, TakeProfitLevel, Buy (# MagicNumber ), MagicNumber, 0, DodgerBlue);
    jika (Tiket gt; 0) {
    jika (OrderSelect (Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
    Cetak (pesanan BUY dibuka:, OrderOpenPrice ());
    jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Tanya, Digit) Beli Terbuka);
    } else {
    Cetak (Ralat membuka pesanan BUY:, GetLastError ());
    }
    }
    jika (EachTickMode) TickCheck = Benar;
    jika (! EachTickMode) BarCount = Bar;
    pulangan (0);
    }
    }
    //Jual
    jika (Perintah == SIGNAL_SELL ((EachTickMode! TickCheck) || (! EachTickMode (Bar! = BarCount)))) {
    jika (! IsTrade) {
    //Periksa margin percuma
    jika (AccountFreeMargin () lt; (1000 * Banyak)) {
    Cetak (Kami tidak mempunyai wang. Margin Percuma =, AccountFreeMargin ());
    pulangan (0);
    }
    jika (UseStopLoss) StopLossLevel = Tawaran StopLoss * Point; lain StopLossLevel = 0.0;
    jika (UseTakeProfit) TakeProfitLevel = Bid ??????- TakeProfit * Point; lain TakeProfitLevel = 0.0;
    Tiket = OrderSend (Symbol (), OP_SELL, Banyak, Tawaran, Slippage, StopLossLevel, TakeProfitLevel, Menjual (# MagicNumber ), MagicNumber, 0, DeepPink);
    jika (Tiket gt; 0) {
    jika (OrderSelect (Tiket, SELECT_BY_TICKET, MODE_TRADES)) {
    Cetak (pesanan JUAL dibuka:, OrderOpenPrice ());
    jika (SignalMail) SendMail ([Isyarat Isyarat], [ Simbol () ] DoubleToStr (Bida, Digit) Open Sell);
    } else {
    Cetak (Ralat membuka pesanan JUAL:, GetLastError ());
    }
    }
    jika (EachTickMode) TickCheck = Benar;
    jika (! EachTickMode) BarCount = Bar;
    pulangan (0);
    }
    }
    jika (! EachTickMode) BarCount = Bar;
    pulangan (0);
    }
    // ----------------------------------------------- -------------------

  2. #2
    Kod anda terlalu sukar untuk dibaca! cuba indentasi bahagian-bahagian yang relevan dan mungkin meletakkan bahagian menjadi fungsi supaya anda tidak perlu membaca melalui talian untuk menyelesaikan apa yang sedang berlaku. Dari pandangan yang cepat mungkin anda menetapkan IsTrade = Benar; dan, dengan itu, ia tidak membenarkan perdagangan lain 'cos sudah perdagangan adalah HTH benar

  3. #3
    Ya, ini adalah kod pembina EA ... Saya cadangkan anda menggunakan templat lain untuk membina EA, tetapi jika anda mendesak menggunakannya, anda perlu mengabaikan pembolehubah IsTrade. Secara dasarnya, ubahnya menjadi pemboleh ubah berganda, dan setiap OrderSend menambah 1 ke kiraan perdagangan. Oleh itu, sebelum membuat pesanan, pastikan kiraan perdagangan adalah kurang daripada pembolehubah MaxTrades tertentu. Sesuatu seperti itu.

  4. #4
    1 Lampiran Hi jcalow, Saya telah menambah 2 pemboleh ubah baru. extern bool UseIsTrade = false; extern int Maxtrades = 5; UseIsTrade: Apabila ini ditetapkan kepada palsu, ia akan mengabaikan semua perisytiharan variabel IsTrade dan sebarang perubahan pada nilainya. Sebaliknya berlaku apabila ia ditetapkan kepada benar. Maxtrades: Ini adalah pemboleh ubah semak pengesahan. Pada dasarnya, ia akan mengira bilangan perdagangan terbuka yang dibuka oleh EA anda sama ada sama ada jika ia adalah perdagangan BUY atau SELL. Ini dilakukan melalui Nombor Magic seperti yang ditetapkan oleh EA anda. Ia juga akan menyemak sama ada dagangan dibuka oleh pasangan mata wang yang sepadan. Sekiranya bilangan dagangan terbuka lebih daripada atau sama dengan No maksimum. perdagangan seperti yang ditanam, ia tidak akan membenarkan EA membuka lebih banyak perdagangan baru. Singkatnya Jika saya menetapkan Maxtrades kepada nilai 5 dan jika saya mempunyai 5 dagangan terbuka, EA akan berhenti membuka yang baru.
    https://www.justgetforex.com/attachm...3665102391.mq4

Kebenaran Posting

  • Anda tidak boleh menghantar thread baru
  • Anda tidak boleh membalas kiriman
  • Anda tidak boleh mengedit siaran anda
  • Anda tidak boleh menyiarkan lampiran
  •  
  • Kod BB Hidup
  • Smilies Hidup
  • Kod [IMG] adalah Hidup
  • Kod [VIDEO] adalah Hidup
  • Kod HTML Tidak Hidup
Polisi Kuki
We use cookies to store session information to facilitate remembering your login information, to allow you to save website preferences, to personalise content and ads, to provide social media features and to analyse our traffic. We also share information about your use of our site with our social media, advertising and analytics partners.