Perdagangan Sistem

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
Pengurus Risiko EA - Pakar untuk MetaTrader 4
MetaTrader4
Pengurus Risiko EA - Pakar untuk MetaTrader 4

Untuk mendapatkan hasil terbaik, anda perlu melakukan analisis teknikal (TA) anda sendiri. Anda yang menentukan arah mana yang ingin EA lakukan perdagangan (anda boleh melakukan pembelian dan penjualan, tetapi fungsi hedging tidak akan berfungsi) & EA akan menunggu sehingga terdapat setup yang berlaku dan membuat perdagangan untuk anda. Parameter Level & Length merujuk kepada tahap dan panjang penarikan harga. Semakin panjang Length, semakin banyak ia akan melakukan scaling, dan semakin besar Level, semakin dalam penarikan harga yang akan dicari. Close PL adalah jumlah maksimum floating PL sebelum EA menutup semua posisi. Had keuntungan & risiko adalah parameter yang anda perlu gunakan untuk menentukan berapa banyak keuntungan/risk yang ingin anda capai berdasarkan isyarat yang diberikan. Parameter modal akan ditetapkan kepada baki anda sebelum EA disambungkan. Jika anda mempunyai kerugian atau keuntungan yang mengapung, anda mungkin ingin mengubahnya, tetapi nilai lalai 0 akan menganggap baki awal anda sebelum EA disambungkan. Jika anda berdagang dengan pelbagai pasangan mata wang, fungsi hedging tidak akan berfungsi, jadi ia tidak akan melakukan hedging. Pastikan anda mematikan fungsi Perdagangan Pelbagai Pasangan jika anda hanya berdagang satu pasangan dan ingin menggunakan fungsi hedging. Fungsi hedging akan melindungi posisi anda setelah level hedging dicapai, di mana level hedging bermakna peratusan risiko yang masih anda miliki, dan kepada nisbah yang ditentukan. Maxsize adalah posisi terbesar yang akan EA lakukan scaling, manakala layers adalah jumlah posisi yang anda ingin sebarkan ke dalam Maxsize. Sebagai contoh, jika anda ingin membeli 1 lot untuk instrumen dan melakukan scaling sebanyak 10 kali, Maxsize = 1, Layers = 10.

2023.04.08
Pertama Sebelumnya 4 5 6 7 8 9 10 11 12 13 14 Seterusnya Terakhir