Perdagangan Sistem

Automasi Perdagangan dengan MQL5: Panduan Lengkap untuk Trader
MetaTrader5
Automasi Perdagangan dengan MQL5: Panduan Lengkap untuk Trader

Bahagian 6: Automasi Perdagangan Dalam "Bahagian 6: Automasi Perdagangan" dari buku "MQL5 Programming for Traders", kita akan mendalami komponen utama dalam bahasa MQL5. Kita akan mulakan dengan penerangan tentang entiti asas, seperti spesifikasi instrumen kewangan dan tetapan akaun perdagangan. Ini adalah prasyarat untuk mencipta Sistem Trading yang berfungsi dengan baik. Seterusnya, kita akan beralih kepada fungsi terbina dalam dan struktur data, acara khusus robot, serta aspek utama operasi Sistem Trading dalam penguji strategi. Penguji Strategi MetaTrader 5 adalah komponen penting dalam pembangunan robot trading kerana ia membolehkan anda menilai prestasi kewangan dan mengoptimumkan strategi perdagangan. Penguji ini menyediakan alat yang tidak ternilai untuk debug dalam pelbagai mod, termasuk ujian visual menggunakan bar atau tick, sama ada dengan tick yang dimodelkan atau sebenar. Ia juga membolehkan reproduksi visual aliran sebut harga dan ujian mudah tanpa tetingkap visual. Kita telah melihat sebelum ini bagaimana untuk menguji penunjuk dalam mod visual, tetapi hanya set tetapan yang terhad dibenarkan untuknya. Apabila membangunkan Sistem Trading, kita akan mempunyai akses kepada semua ciri penguji. Kita juga akan melihat representasi yang berbeza bagi data pasaran: Depth of Market dan antaramuka perisian yang berkaitan. MetaTrader 5 menawarkan kemampuan untuk menganalisis dan berdagang instrumen kewangan (simbol), yang merupakan asas bagi semua subsistem terminal. Pengguna boleh memilih simbol dari senarai yang disediakan oleh broker dan memantau mereka di Market Watch. Dengan API MQL5, anda boleh melihat dan menganalisis ciri-ciri semua simbol, menambah atau mengeluarkannya dari Market Watch. Selain daripada simbol standard yang disediakan oleh broker, MetaTrader 5 menyokong penciptaan simbol khas, memuatkan sifat dan sejarah sebut harga mereka dari sumber data yang arbitrari atau mengira mereka menggunakan formula dan program MQL5.

2023.12.16
Panduan MQL5 untuk Pedagang: Membina Program Aplikasi dalam MetaTrader 5
MetaTrader5
Panduan MQL5 untuk Pedagang: Membina Program Aplikasi dalam MetaTrader 5

Bahagian 5: Membina Program Aplikasi dalam MQL5 Dalam "Bahagian 5: Membina Program Aplikasi" dari buku MQL5 Programming for Traders, kita akan menyelami lebih dalam tentang API yang berkaitan dengan perdagangan algoritma, termasuk analisis dan pemprosesan data kewangan, visualisasi carta, automasi, dan interaksi pengguna. Kita akan mulakan dengan prinsip umum untuk mencipta program MQL dan akan mempertimbangkan jenis-jenis acara, ciri, dan model dalam terminal. Selepas itu, kita akan meneroka cara mengakses siri masa, operasi dengan carta dan objek grafik, serta prinsip untuk mencipta dan menggunakan setiap jenis program MQL secara terpisah. Terminal MetaTrader 5 menyokong lima jenis program: penunjuk teknikal, Sistem Trading (EA) untuk perdagangan automatik atau separa automatik, skrip untuk melaksanakan tugas sekali sahaja, perkhidmatan untuk operasi latar belakang, dan pustaka untuk modul fungsi individu. Kita akan mendalami cara bekerja dengan penunjuk dan carta serta mempelajari teknik yang juga boleh digunakan untuk Sistem Trading. Pembangunan Sistem Trading akan dibincangkan dalam bahagian seterusnya buku ini, di mana kita akan meneroka pelaksanaan pesanan secara automatik, formaliti strategi perdagangan, serta pengujian dan pengoptimuman menggunakan data sejarah. Kita akan belajar tentang cara menggunakan penunjuk terbina dalam yang standard dan bagaimana untuk mencipta aplikasi khusus dari awal atau berdasarkan penunjuk lain. Semua program yang telah dikompilasi dipaparkan dalam Navigator di MetaTrader 5, kecuali pustaka EX5, yang digunakan oleh program lain tetapi tidak mempunyai representasi terpisah dalam Navigator. Sebagai hasilnya, kita akan memperoleh pemahaman yang lebih mendalam tentang keupayaan bahasa MQL5 dan aplikasinya dalam perdagangan algoritma. Ini akan membolehkan kita bekerja dengan data kewangan secara berkesan dan mencipta penunjuk perdagangan serta Sistem Trading.

2023.12.16
MQL5 untuk Trader: Memahami API dan Fungsi Terbina Dalam
MetaTrader5
MQL5 untuk Trader: Memahami API dan Fungsi Terbina Dalam

Bahagian 4. API MQL5 yang Umum Pada bahagian sebelum ini, kita telah mengupas asas bahasa pengaturcaraan MQL5, termasuk sintaks, peraturan penggunaan, dan konsep-konsep penting. Namun, untuk menghasilkan program yang benar-benar berfungsi dalam pemprosesan data dan dagangan automatik, kita perlu memanfaatkan banyak fungsi terbina dalam untuk berinteraksi dengan terminal MetaTrader 5. Dalam "Bahagian 4. API MQL5 yang Umum", kita akan fokus kepada penguasaan fungsi terbina dalam (MQL5 API) dan secara beransur-ansur menyelami subsistem yang lebih khusus. Setiap program MQL5 boleh memanfaatkan pelbagai teknologi dan fungsi. Oleh itu, adalah wajar untuk memulakan dengan fungsi yang paling mudah dan berguna yang boleh digunakan dalam kebanyakan program. Antara topik utama yang akan kita pelajari termasuk operasi array, pemprosesan string, interaksi fail, penukaran data, dan fungsi interaksi pengguna. Kita juga akan meneroka fungsi matematik serta pengurusan persekitaran program. Berbeza dengan beberapa bahasa pengaturcaraan lain, menggunakan fungsi terbina dalam API MQL5 tidak memerlukan arahan praprosesor tambahan. Nama semua fungsi API MQL5 tersedia dalam konteks global (namespace) dan boleh diakses tanpa syarat. Kita juga akan membincangkan kemungkinan penggunaan nama yang sama dalam konteks program yang berbeza, seperti nama metode kelas atau namespace khusus. Dalam kes seperti ini, anda perlu menggunakan operator resolusi konteks untuk memanggil fungsi global, yang telah kita bincangkan dalam bahagian mengenai jenis bersarang, namespace, dan operator konteks '::'. Pemrograman sering memerlukan operasi dengan pelbagai jenis data. Pada bahagian sebelum ini, kita telah melihat mekanisme untuk penukaran jenis data terbina dalam secara eksplisit dan implisit. Namun, ini mungkin tidak selalu sesuai atas pelbagai sebab. Untuk memberikan penukaran data yang lebih tepat antara pelbagai jenis, API MQL5 menyertakan set fungsi penukaran. Perhatian khusus diberikan kepada fungsi untuk penukaran antara string dan jenis lain, seperti nombor, tarikh dan waktu, warna, struktur, dan enumerasi.

2023.12.15
Pengaturcaraan MQL5 untuk Trader: Memahami OOP dan Kode Sumber
MetaTrader5
Pengaturcaraan MQL5 untuk Trader: Memahami OOP dan Kode Sumber

Bahagian 3: Pengaturcaraan Berorientasikan Objek dalam MQL5 "Bahagian 3: Pengaturcaraan Berorientasikan Objek dalam MQL5" membawa kita ke dalam dunia pengaturcaraan berorientasikan objek (OOP) dalam bahasa MQL5. Dalam pembangunan perisian, kita sering berhadapan dengan kerumitan yang berkaitan dengan pengurusan pelbagai entiti, dan ini memerlukan teknologi canggih untuk meningkatkan kemudahan pengaturcaraan, produktiviti, dan kualiti. Teknologi OOP berasaskan konsep objek, yang merupakan pemboleh ubah jenis khusus yang ditakrifkan oleh pengaturcara menggunakan alat MQL5. Dengan mencipta jenis khusus, kita dapat memodelkan objek dan memudahkan penulisan serta penyelenggaraan program. Bahagian ini membincangkan pelbagai cara untuk mendefinisikan jenis baru, termasuk kelas, struktur, dan union. Jenis khusus ini dapat menggabungkan data dan algoritma untuk menggambarkan keadaan dan tingkah laku objek aplikasi. Penulis menekankan prinsip "pecah dan takluk", menunjukkan bahawa objek adalah mini-program, masing-masing bertanggungjawab untuk menyelesaikan tugas kecil tetapi lengkap secara logik. Anda boleh menggabungkan objek menjadi satu sistem dan mencipta produk serta perkhidmatan dengan kerumitan yang arbitrari. Untuk membantu pengguna memahami kemampuan MQL5, bahagian "Pengaturcaraan Berorientasikan Objek dalam MQL5" memperkenalkan prinsip-prinsip OOP bersama dengan contoh pelaksanaan praktikal. Buku ini juga merangkumi templat, antaramuka, dan ruang nama, yang menunjukkan fleksibiliti dan kuasa OOP dalam membangunkan program MQL5.

2023.12.15
Pengenalan kepada MQL5: Asas Pemrograman untuk Trader
MetaTrader5
Pengenalan kepada MQL5: Asas Pemrograman untuk Trader

Pengenalan kepada MQL5 dan Persekitaran Pembangunan Bahagian pertama buku ini bertajuk "Pengenalan kepada MQL5 dan Persekitaran Pembangunan" yang menerangkan asas-asas bahasa MQL5 serta persekitaran pembangunannya. Salah satu ciri baru yang diperkenalkan dalam bahasa MQL5 berbanding MQL4 (bahasa untuk MetaTrader 4) adalah sokongan untuk pemrograman berorientasikan objek (OOP), yang menjadikannya serupa dengan C++. Walaupun beberapa fungsi OOP telah dipindahkan dari MQL5 ke MQL4, ramai pengguna yang tidak biasa dengan pemrograman mungkin merasakan OOP agak mencabar. Tujuan buku ini adalah untuk menjadikan pendekatan ini lebih mudah difahami dan diakses. Buku ini berfungsi sebagai pelengkap kepada rujukan MQL5, meliputi semua aspek pemrograman MQL5 dan menerangkan semua proses dengan terperinci. Pembangun boleh memilih antara gaya pemrograman berorientasikan objek dan prosedur, serta menggabungkan kedua-duanya. Untuk mereka yang sudah mempunyai pengalaman dalam pemrograman, anda boleh melangkau bahagian asas. Pengaturcara C++ akan mendapati lebih mudah untuk menguasai MQL5, tetapi anda perlu memberi perhatian kepada perbezaan bahasa untuk mengelakkan kesilapan. Dengan menggunakan MQL5, anda boleh mencipta pelbagai jenis program, seperti indikator untuk paparan grafik data, Sistem Trading (Expert Advisors) untuk automasi perdagangan, skrip untuk tindakan sekali sahaja, dan perkhidmatan untuk tugas latar belakang. Ciri khas MetaTrader 5 adalah pengurusan keseluruhan sistem perdagangan dari terminal klien, di mana program MQL5 berfungsi dan menghantar arahan perdagangan kepada pelayan perdagangan. Aplikasi MQL5 tidak dipasang pada pelayan. Bahagian 1 menerangkan cara untuk mengedit, menyusun, dan menjalankan program, serta merangkumi pelbagai jenis data, pembolehubah, ungkapan, array, penyahpepijatan, dan output.

2023.12.15
Panduan Menggunakan Model ONNX untuk Kenali Nombor Tangan dalam MetaTrader 5
MetaTrader5
Panduan Menggunakan Model ONNX untuk Kenali Nombor Tangan dalam MetaTrader 5

EA yang Mampu Mengenali Nombor TanganDatabase MNIST mengandungi 60,000 imej untuk latihan dan 10,000 imej untuk ujian. Imej-imej ini dihasilkan dengan mencampurkan set asal NIST yang terdiri daripada sampel hitam-putih bersaiz 20x20 piksel, yang diambil daripada Biro Bancian AS dan ditambah dengan sampel ujian daripada pelajar sekolah menengah Amerika. Sampel-sampel ini telah dinormalisasi kepada saiz 28x28 piksel dan diproses dengan anti-aliasing, yang memperkenalkan tahap kelabu.Model pengenalan nombor tangan yang telah dilatih, mnist.onnx, boleh dimuat turun dari Github menerusi Model Zoo (opset 8). Bagi mereka yang berminat, anda boleh memuat turun dan mencuba model-model lain, kecuali untuk model dengan opset 1 yang tidak lagi disokong oleh runtime ONNX terkini. Menariknya, vektor output tidak diproses dengan fungsi pengaktifan Softmax, seperti yang biasa dilakukan dalam model klasifikasi. Namun, ini bukanlah masalah kerana kita boleh melaksanakannya dengan mudah sendiri.int PredictNumber(void)   {    static matrixf image(28,28);    static vectorf result(10);    PrepareMatrix(image);    if(!OnnxRun(ExtModel,ONNX_DEFAULT,image,result))      {       Print("OnnxRun error ",GetLastError());       return(-1);      }    result.Activation(result,AF_SOFTMAX);    int predict=int(result.ArgMax());    if(result[predict]<0.8)       Print(result);       Print("value ",predict," predicted with probability ",result[predict]);    return(predict);   } Anda boleh melukis nombor dalam grid khas menggunakan tetikus dengan menekan butang kiri tetikus. Untuk mengenali nombor yang dilukis, tekan butang CLASSIFY. Jika kebarangkalian untuk nombor yang dikenali adalah kurang dari 0.8, vektor hasil dengan kebarangkalian untuk setiap kelas akan dicetak ke log. Sebagai contoh, cuba klasifikasikan medan input yang kosong.[0.095331445,0.10048489,0.10673151,0.10274081,0.087865397,0.11471312,0.094342403,0.094900772,0.10847695,0.09441267] value 5 predicted with probability 0.11471312493085861 Untuk beberapa sebab, ketepatan pengenalan adalah lebih rendah untuk nombor sembilan (9). Nombor yang dilukis ke kiri lebih dikenali dengan tepat.

2023.11.23
Strategi Breakout Martin Gale: EA Terbaik untuk MT5
MetaTrader5
Strategi Breakout Martin Gale: EA Terbaik untuk MT5

Strategi "Martin Gale Breakout" adalah satu Sistem Trading (EA) yang direka khas untuk perdagangan dalam pasaran Forex. EA ini menggabungkan pendekatan perdagangan breakout dengan elemen sistem pengurusan wang Martin Gale untuk mengoptimumkan prestasi perdagangan. Parameter Input: TakeProfPoints: Parameter ini membolehkan anda menetapkan tahap Take Profit dalam mata untuk setiap perdagangan. BalancePercentageAvailable: Tentukan peratusan baki akaun anda yang akan digunakan untuk perdagangan. TP_Percentage_of_Balance: Ini menentukan peratusan baki akaun anda yang akan digunakan sebagai Take Profit untuk setiap perdagangan. SL_Percentage_of_Balance: Ini menetapkan peratusan baki yang akan diperuntukkan sebagai Stop Loss untuk perdagangan. Start_The_Recovery: Parameter ini memainkan peranan penting dalam proses pemulihan, mengawal bila dan bagaimana langkah pemulihan diaktifkan. TP_Points_Multiplier: Pengganda untuk mata Take Profit, membolehkan strategi pengambilan keuntungan yang fleksibel. MagicNumber: Pengenal unik untuk EA ini, memastikan ia boleh menguruskan perdagangan sendiri secara bebas. Sorotan Strategi: Perdagangan Breakout: EA ini pakar dalam mengenal pasti peluang breakout di pasaran, di mana pergerakan harga menembusi tahap-tahap utama. Penyusunan Lot Dinamik: Saiz lot disesuaikan secara dinamik berdasarkan baki akaun dan pilihan risiko anda, mengikuti prinsip pengurusan wang Martin Gale. Pemulihan Kerugian: EA ini mempunyai mekanisme pemulihan yang kuat yang direka untuk memulihkan kerugian dengan mengubahsuai parameter perdagangan secara adaptif apabila perlu. Fungsi utama yang digunakan dalam EA ini adalah fungsi CalcLotWithTP() yang mempunyai 3 parameter input: Takeprofit, Startprice, Endprice. Ia mengira jumlah yang diperlukan untuk perdagangan agar mencapai matlamat keuntungan apabila memasuki perdagangan pada Startprice dan keluar pada Endprice. Semuanya dalam kod ini telah dikomen, jadi pemahaman tentangnya menjadi lebih mudah.

2023.09.26
AK-47 Scalper EA: Panduan Lengkap untuk MetaTrader 5
MetaTrader5
AK-47 Scalper EA: Panduan Lengkap untuk MetaTrader 5

Selamat datang, rakan-rakan trader! Hari ini kita akan membincangkan tentang AK-47 Scalper EA, sebuah sistem trading yang direka khusus untuk MetaTrader 5. Sistem ini menggunakan algoritma yang canggih untuk membantu anda mendapatkan keuntungan dalam trading. Mari kita lihat dengan lebih mendalam mengenai ciri-ciri dan cara mengkonfigurasi EA ini. 1. Parameter Input #define ExtBotName "AK-47 EA" // Nama Bot #define  Version "1.00" // Import kelas inputal #include <Trade\PositionInfo.mqh> #include <Trade\Trade.mqh> #include <Trade\SymbolInfo.mqh>   #include <Trade\AccountInfo.mqh> #include <Trade\OrderInfo.mqh> //--- memperkenalkan pembolehubah yang telah ditetapkan untuk kebolehbacaan kod #define Ask    SymbolInfoDouble(_Symbol, SYMBOL_ASK) #define Bid    SymbolInfoDouble(_Symbol, SYMBOL_BID) //--- parameter input input string  EASettings         = "---------------------------------------------"; //-------- <EA Settings> -------- input int      InpMagicNumber    = 124656;   //Nombor Ajaib input string  MoneySettings      = "---------------------------------------------"; //-------- <Money Settings> -------- input bool     isVolume_Percent  = true;     //Benarkan Peratusan Volume input double   InpRisk           = 3;        //Peratus Risiko dari Baki (%) input string  TradingSettings    = "---------------------------------------------"; //-------- <Trading Settings> -------- input double   Inpuser_lot       = 0.01;     //Lot input double   InpSL_Pips        = 3.5      //Stoploss (dalam Pips) input double   InpTP_Pips        = 7        //TP (dalam Pips) (0 = Tiada TP) input int      InpMax_slippage   = 3        //Slippage maksimum yang dibenarkan Pips. input double   InpMax_spread     = 5        //Spread maksimum yang dibenarkan (dalam Point) (0 = mengambang) input string   TimeSettings      = "---------------------------------------------"; //-------- <Trading Time Settings> -------- input bool     InpTimeFilter     = true;     //Penapis Waktu Trading input int      InpStartHour      = 2;        //Jam Mula input int      InpStartMinute    = 30       //Minit Mula input int      InpEndHour        = 21       //Jam Tamat input int      InpEndMinute      = 0        //Minit Tamat 2. Inisialisasi Pembolehubah Tempatan //--- Pembolehubah int      Pips2Points;    // slippage  3 pips    3=points    30=points double   Pips2Double;    // Stoploss 15 pips    0.015      0.0150 bool     isOrder = false; int      slippage; long     acSpread; string   strComment = ""; CPositionInfo  m_position;                   // objek posisi perdagangan CTrade         m_trade;                      // objek perdagangan CSymbolInfo    m_symbol;                     // objek info simbol CAccountInfo   m_account;                    // pembalut info akaun COrderInfo     m_order;                      // objek pesanan yang tertunda 3. Kod Utama a/ Fungsi Inisialisasi Expert //+------------------------------------------------------------------+ //| Fungsi inisialisasi Expert                                   | //+------------------------------------------------------------------+ int OnInit() {    //Pengesanan 3 atau 5 digit    //Pip dan point    if(_Digits % 2 == 1) {       Pips2Double  = _Point*10;       Pips2Points  = 10;       slippage = 10* InpMax_slippage;    }    else {       Pips2Double  = _Point;       Pips2Points  =  1;       slippage = InpMax_slippage;    }         if(!m_symbol.Name(Symbol())) // menetapkan nama simbol       return(INIT_FAILED);           RefreshRates(); //---    m_trade.SetExpertMagicNumber(InpMagicNumber);    m_trade.SetMarginMode();    m_trade.SetTypeFillingBySymbol(m_symbol.Name());    m_trade.SetDeviationInPoints(slippage); //---    return(INIT_SUCCEEDED); } b/ Fungsi Tick Expert //+------------------------------------------------------------------+ //| Fungsi tick Expert                                             | //+------------------------------------------------------------------+ void OnTick() {    if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) == false) {       Comment("LazyBot\nPerdagangan tidak dibenarkan.");       return;    }         MqlDateTime structTime;    TimeCurrent(structTime);    structTime.sec = 0;       //Tetapkan waktu mula    structTime.hour = InpStartHour;    structTime.min = InpStartMinute;          datetime timeStart = StructToTime(structTime);       //Tetapkan waktu tamat    structTime.hour = InpEndHour;    structTime.min = InpEndMinute;    datetime timeEnd = StructToTime(structTime);       acSpread = SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);          strComment = "\n" + ExtBotName + " - v." + (string)Version;    strComment += "\nMasa pelayan = " + TimeToString(TimeCurrent(),TIME_DATE|TIME_SECONDS) + " - " + DayOfWeekDescription(structTime.day_of_week);    strComment += "\nWaktu perdagangan = [" + (string)InpStartHour + "j" + (string)InpStartMinute + " --> " +  (string)InpEndHour + "j" + (string)InpEndMinute + "]";       strComment += "\nSpread Semasa = " + (string)acSpread + " Poin";       Comment(strComment);       //Kemas kini Nilai    UpdateOrders();       TrailingStop();           //Syarat perdagangan mengikut sesi    if(InpTimeFilter) {       if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd) {          if(!isOrder) OpenOrder();       }    }    else {       if(!isOrder) OpenOrder();    }    } //---Akhir fungsi 3.1 Mengira isyarat untuk menghantar pesanan //+------------------------------------------------------------------+ //| MENGIRA ISYARAT DAN HANTAR PESANAN                                  | //+------------------------------------------------------------------+ void OpenOrder(){       ENUM_ORDER_TYPE OrdType = ORDER_TYPE_SELL;//-1;       double TP = 0;    double SL = 0;    string comment = ExtBotName;       //Mengira Lots    double lot1 = CalculateVolume();       if(OrdType == ORDER_TYPE_SELL) {       double OpenPrice = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);              TP = OpenPrice - NormalizeDouble(InpTP_Pips * Pips2Double, _Digits);       SL = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);                if(CheckSpreadAllow()                                             //Periksa Spread          && CheckVolumeValue(lot1)                                      //Periksa volume          && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_SELL_STOP, OpenPrice)  //Periksa Jarak dari openPrice ke Bid          && CheckStopLoss(OpenPrice,  SL, TP)                       //Periksa Jarak dari SL, TP ke OpenPrice          && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_SELL)) //Periksa Baki ketika arahan dibenarkan       {          if(!m_trade.SellStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))          Print(__FUNCTION__,"--> Kesalahan OrderSend ", m_trade.ResultComment());       }    }    else if(OrdType == ORDER_TYPE_BUY) {       double OpenPrice = Ask + NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);       SL = Bid - NormalizeDouble(InpSL_Pips/2 * Pips2Double, _Digits);              if(CheckSpreadAllow()                                             //Periksa Spread          && CheckVolumeValue(lot1)                                      //Periksa volume          && CheckOrderForFREEZE_LEVEL(ORDER_TYPE_BUY_STOP, OpenPrice)   //Periksa Jarak dari openPrice ke Bid          && CheckStopLoss(OpenPrice,  SL, TP)                       //Periksa Jarak dari SL, TP ke OpenPrice                  && CheckMoneyForTrade(m_symbol.Name(), lot1, ORDER_TYPE_BUY))  //Periksa Baki ketika arahan dibenarkan       {          if(!m_trade.BuyStop(lot1, OpenPrice, m_symbol.Name(), SL, TP, ORDER_TIME_GTC, 0, comment))// gunakan "ORDER_TIME_GTC" apabila tarikh tamat = 0          Print(__FUNCTION__,"--> Kesalahan OrderSend ", m_trade.ResultComment());       }    }    } 3.2 Mengira Volume //+------------------------------------------------------------------+ //| MENGIRA VOLUME                                                 | //+------------------------------------------------------------------+ // Kami mendefinisikan fungsi untuk mengira saiz posisi dan mengembalikan lot untuk pesanan. double CalculateVolume() {    double LotSize = 0;    if(isVolume_Percent == false) {       LotSize = Inpuser_lot;      }    else {       LotSize = (InpRisk) * m_account.FreeMargin();       LotSize = LotSize /100000;       double n = MathFloor(LotSize/Inpuser_lot);       //Comment((string)n);       LotSize = n * Inpuser_lot;              if(LotSize < Inpuser_lot)          LotSize = Inpuser_lot;       if(LotSize > m_symbol.LotsMax()) LotSize = m_symbol.LotsMax();       if(LotSize < m_symbol.LotsMin()) LotSize = m_symbol.LotsMin();    }      //---    return(LotSize); }3.3 EA mempunyai fungsi "trailing Stop", SL akan berubah setiap kali harga berubah (turun) //+------------------------------------------------------------------+ //| TRAILING STOP                                                    | //+------------------------------------------------------------------+ void TrailingStop() {    double SL_in_Pip = 0;    for(int i = PositionsTotal() - 1; i >= 0; i--) {       if(m_position.SelectByIndex(i)) {    // memilih pesanan mengikut indeks untuk akses seterusnya kepada sifatnya                  if((m_position.Magic() == InpMagicNumber) && (m_position.Symbol() == m_symbol.Name())) {             // Untuk pesanan Buy             if(m_position.PositionType() == POSITION_TYPE_BUY) {                //--Mengira SL apabila harga berubah                SL_in_Pip = NormalizeDouble(Bid - m_position.StopLoss(), _Digits) / Pips2Double;                if(SL_in_Pip > InpSL_Pips) {                 double newSL = NormalizeDouble(Bid - InpSL_Pips * Pips2Double, _Digits);                              if(!m_trade.PositionModify(m_position.Ticket(), newSL, m_position.TakeProfit())) {                  Print(__FUNCTION__,"--> Kesalahan OrderModify ", m_trade.ResultComment());                  continue                   }                              }             }             //Untuk Pesanan Jual             else if(m_position.PositionType() == POSITION_TYPE_SELL) {                //--Mengira SL apabila harga berubah                SL_in_Pip = NormalizeDouble(m_position.StopLoss() - Bid, _Digits) / Pips2Double;                if(SL_in_Pip > InpSL_Pips){                   double newSL = NormalizeDouble(Bid + (InpSL_Pips) * Pips2Double, _Digits);                   if(!m_trade.PositionModify(m_position.Ticket(), newSL, m_position.TakeProfit())) {                      Print(__FUNCTION__,"--> Kesalahan OrderModify ", m_trade.ResultComment());                  //continue;                 }                            }                  }       }   }       //--- Mengubah pesanan tertunda      for(int i=OrdersTotal()-1; i>=0; i--) {// mengembalikan jumlah pesanan semasa       if(m_order.SelectByIndex(i)) {      // memilih pesanan tertunda mengikut indeks untuk akses seterusnya kepada sifatnya          if(m_order.Symbol() == m_symbol.Name() && m_order.Magic()==InpMagicNumber) {             if(m_order.OrderType() == ORDER_TYPE_BUY_STOP) {                SL_in_Pip = NormalizeDouble(Bid - m_order.StopLoss(), _Digits) / Pips2Double;                                   if(SL_in_Pip < InpSL_Pips/2) {                   double newOP = NormalizeDouble(Bid + (InpSL_Pips/2) * Pips2Double, _Digits);                   double newTP =  NormalizeDouble(newOP + InpTP_Pips * Pips2Double, _Digits);                   double newSL = NormalizeDouble(Bid - (InpSL_Pips/2) * Pips2Double, _Digits);                                      if(!m_trade.OrderModify(m_order.Ticket(), newOP, newSL, newTP, ORDER_TIME_GTC,0)) {                      Print(__FUNCTION__,"--> Kesalahan Modify PendingOrder!", m_trade.ResultComment());                      continue                                                    //continue;                                                else if(m_order.OrderType() == ORDER_TYPE_SELL_STOP) {                SL_in_Pip = NormalizeDouble(m_order.StopLoss() - Ask, _Digits) / Pips2Double;                               if(SL_in_Pip < InpSL_Pips/2){                   double newOP = NormalizeDouble(Ask - (InpSL_Pips/2) * Pips2Double, _Digits);                   double newTP =  NormalizeDouble(newOP - InpTP_Pips * Pips2Double, _Digits);                   double newSL = NormalizeDouble(Ask + (InpSL_Pips/2) * Pips2Double, _Digits);                                   if(!m_trade.OrderModify(m_order.Ticket(), newOP, newSL, newTP, ORDER_TIME_GTC,0)) {                      Print(__FUNCTION__,"--> Kesalahan Modify PendingOrder!", m_trade.ResultComment());                      //continue;                                                    //continue;                                               }                                }

2023.06.12
Pengurusan Stop Loss Dinamik dan Sasaran Keuntungan untuk Traders MetaTrader 5
MetaTrader5
Pengurusan Stop Loss Dinamik dan Sasaran Keuntungan untuk Traders MetaTrader 5

Dalam dunia trading, pengurusan risiko adalah kunci untuk kejayaan. Kali ini, kita akan membincangkan satu strategi pengurusan risiko yang boleh membantu anda menguruskan trade yang sedia ada dengan lebih berkesan menggunakan EA (Expert Advisor) di MetaTrader 5. Berikut adalah ringkasan tentang cara kod ini berfungsi: Fail header yang diperlukan dimasukkan untuk kelas maklumat trade dan simbol. Parameter input ditetapkan untuk peratusan risiko, peratusan keuntungan, dan titik trailing stop. Variabel global diisytiharkan untuk objek maklumat trade dan simbol. Fungsi OnInit menginisialisasi objek maklumat simbol dan memeriksa sebarang ralat. Fungsi OnDeinit tidak melakukan apa-apa dalam kes ini. Fungsi OnTick dipanggil setiap kali tick baru diterima, dan ia akan memanggil fungsi CheckTrades. Fungsi CheckTrades mengulangi semua posisi terbuka dan memeriksa jika posisi tersebut adalah untuk simbol semasa. Jika ya, ia mengira keuntungan semasa dan menentukan sama ada ambang keuntungan atau kerugian telah dicapai. Jika salah satu ambang dicapai, posisi tersebut akan ditutup. Jika tiada ambang dicapai, kod akan memeriksa sama ada jenis posisi adalah order beli atau jual dan mengemas kini tahap stop loss dengan trailing stop. Jika tahap stop loss baru adalah lebih baik berbanding tahap stop loss semasa, posisi tersebut akan diubahsuai dengan tahap stop loss yang baru. Kod ini menyediakan satu strategi pengurusan risiko yang mudah untuk menguruskan trade sedia ada dengan menyesuaikan tahap stop loss secara dinamik berdasarkan trailing stop serta menutup trade apabila ambang keuntungan atau kerugian dicapai. Dengan menggunakan strategi ini, anda dapat mengunci keuntungan dan mengurangkan kerugian dengan lebih berkesan.

2023.04.28
CheckTrades - Pengurus Risiko untuk MetaTrader 5
MetaTrader5
CheckTrades - Pengurus Risiko untuk MetaTrader 5

Salam traders! Hari ini kita akan bincangkan tentang CheckTrades, satu sistem trading yang berfungsi sebagai pengurus risiko bagi platform MetaTrader 5. Code yang disediakan adalah skrip Expert Advisor (EA) MQL5 yang berfungsi untuk menutup posisi terbuka apabila ia mencapai ambang keuntungan atau kerugian yang ditetapkan oleh pengguna. Ambang ini diukur sebagai peratusan daripada baki akaun. EA ini tidak memberikan isyarat masuk atau peraturan masa pasaran; tujuan utamanya adalah untuk menguruskan risiko posisi yang sedia ada dengan menutupnya apabila ambang keuntungan atau kerugian tertentu dicapai. Variabel Eksternal dalam Code: RiskPercentage: Variabel ini mewakili kerugian maksimum yang dibenarkan bagi setiap dagangan sebagai peratusan daripada baki akaun. Apabila kerugian semasa bagi posisi terbuka mencapai peratusan ini, posisi tersebut akan ditutup untuk menghadkan risiko. ProfitPercentage: Variabel ini mewakili keuntungan yang diingini bagi setiap dagangan sebagai peratusan daripada baki akaun. Apabila keuntungan semasa bagi posisi terbuka mencapai peratusan ini, posisi tersebut akan ditutup untuk mengunci keuntungan. Kerana EA ini fokus kepada pengurusan risiko dan tidak bergantung kepada sebarang penunjuk pasaran tertentu, ia boleh digunakan pada mana-mana simbol atau jangka masa. Walau bagaimanapun, penting untuk diingat bahawa EA ini seharusnya digabungkan dengan strategi trading yang merangkumi isyarat masuk dan peraturan pengurusan dagangan lain untuk menjadikannya satu sistem trading yang lengkap. Jika anda menggunakan code ini sebagai fail include (dengan meletakkannya dalam folder MQL5\Include), tujuan utamanya adalah untuk pengurusan risiko dengan menutup posisi berdasarkan ambang keuntungan dan kerugian yang ditetapkan pengguna. Anda juga boleh menggabungkan fail include ini dengan fail include lain yang mempunyai tujuan tertentu, seperti mengira saiz posisi berdasarkan risiko akaun, trailing stop-loss, dan banyak lagi. Untuk berbuat demikian, gunakan arahan #include dalam fail EA utama anda untuk menyertakan fail ini, dan kemudian panggil fungsi CheckTrades() apabila diperlukan untuk mengurus posisi terbuka.

2023.04.25
Pertama Sebelumnya 1 2 3 4 5 6 7 8 9 10 11 Seterusnya Terakhir