Perdagangan Sistem

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
Strategi Pembalikan - EA untuk MetaTrader 5
MetaTrader5
Strategi Pembalikan - EA untuk MetaTrader 5

Hai rakan-rakan trader! Hari ini, kita akan membincangkan tentang strategi pembalikan yang menggunakan EA (Expert Advisor) untuk MetaTrader 5. EA ini menggunakan tiga indikator untuk mengenal pasti pembalikan harga bagi simbol tertentu. Strategi ini menggunakan purata bergerak yang sederhana, bersama dengan deviasi piawai dan RSI. Ia akan menghantar isyarat beli apabila harga buka adalah lebih rendah daripada purata bergerak tolak 2 kali deviasi piawai, dan RSI berada di bawah nilai oversold. Selain itu, harga tutup mesti lebih tinggi daripada purata bergerak tolak 2 kali deviasi piawai, dan RSI melintasi isyarat oversold ke atas. Bagi ambilan untung (take profit), ia ditetapkan sama dengan harga tanya (ask price) ditambah 2 kali deviasi piawai pada ketika itu, manakala henti rugi (stop loss) ditetapkan sama dengan harga tanya tolak deviasi piawai pada ketika itu. Untuk isyarat jual, apabila harga buka lebih tinggi daripada purata bergerak tambah 2 kali deviasi piawai, dan RSI lebih tinggi daripada nilai overbought, serta harga tutup lebih rendah daripada purata bergerak tambah 2 kali deviasi piawai dan RSI melintasi nilai overbought dari atas, maka isyarat jual akan dihantar. Ambilan untung untuk posisi jual ditetapkan sama dengan harga bida (bid price) tolak 2 kali deviasi piawai pada waktu itu, dan henti rugi adalah harga bida tambah deviasi piawai pada waktu itu. Posisi beli akan ditutup apabila harga tutup lebih tinggi daripada purata bergerak tambah 2 kali deviasi piawai, manakala posisi jual akan ditutup apabila harga jatuh di bawah purata bergerak tolak 2 kali deviasi piawai. Ini mirip dengan teknik Bollinger Bands. Strategi ini lebih baik diaplikasikan pada waktu yang tidak terlalu volatil, di mana tiada trend yang jelas dan pasaran lebih mudah diramal. Tujuannya adalah untuk meraih banyak keuntungan kecil. Simbol yang sesuai untuk diperdagangkan menggunakan strategi ini adalah EURUSD, dan pada tahap yang lebih rendah, GBPUSD. Saya sendiri lebih suka berdagang EURUSD pada timeframe kecil seperti M5.

2023.03.12
Mengira Drawdown Relatif untuk MetaTrader 5 dengan Mudah
MetaTrader5
Mengira Drawdown Relatif untuk MetaTrader 5 dengan Mudah

Fungsi DD_Relative digunakan untuk mengira keuntungan atau kerugian relatif (drawdown) bagi akaun dagangan semasa dalam bentuk peratus. Cara kerjanya adalah dengan menggunakan fungsi Current_LossOrProfit() untuk mendapatkan jumlah keuntungan atau kerugian bagi semua posisi terbuka, kemudian membahagikannya dengan baki akaun semasa yang diperoleh melalui fungsi AccountInfoDouble(ACCOUNT_BALANCE). Selepas mengira keuntungan atau kerugian relatif dalam bentuk peratus, fungsi ini akan menggunakan NormalizeDouble() untuk membundarkan hasil kepada dua tempat perpuluhan, dan seterusnya memaparkan keputusan tersebut sebagai komen pada carta menggunakan fungsi Comment(). Akhirnya, fungsi ini akan mengembalikan hasil keuntungan atau kerugian relatif dalam bentuk peratus. Fungsi Current_LossOrProfit() bertanggungjawab untuk mengira keuntungan atau kerugian semasa bagi semua posisi terbuka dalam akaun dagangan. Ia akan melakukan gelung (loop) melalui semua posisi terbuka menggunakan for loop, dan untuk setiap posisi, ia akan memeriksa sama ada nombor ajaib (magic number)nya sepadan dengan nombor ajaib yang ditetapkan dalam kod (MAGIC) dan jika simbol posisi tersebut sama dengan simbol semasa pada carta. Jika kriteria ini dipenuhi, komisen, swap, dan keuntungan atau kerugian semasa posisi tersebut akan ditambahkan ke dalam pembolehubah Positionsprofit. Setelah semua keuntungan dan kerugian posisi telah ditambahkan, fungsi ini akan menggunakan NormalizeDouble() untuk membundarkan hasil kepada dua tempat perpuluhan, dan seterusnya mengembalikan nilai keuntungan atau kerugian semasa.

2023.02.17
Algoritma GridTrading di Pasaran Volatil - Penjana Keuntungan untuk MetaTrader 4
MetaTrader4
Algoritma GridTrading di Pasaran Volatil - Penjana Keuntungan untuk MetaTrader 4

Dalam dunia trading, penggunaan algoritma yang tepat dapat membantu kita mengambil peluang dalam pasaran yang tidak menentu. Mari kita bincangkan tentang algoritma GridTrading yang boleh membantu anda dalam MetaTrader 4. Parameter Input yang Perlu Diketahui Ada beberapa parameter penting yang perlu anda ketahui: Tp - Ini adalah nombor yang menunjukkan nilai keuntungan. Robot akan mengambil keuntungan apabila keuntungan mencapai Tp x Wang Pelaburan (disarankan antara 0.01 hingga 0.1). SlowMovingAverage - Merupakan tempoh purata bergerak yang digunakan untuk menentukan arah trend. Multiplier - Faktor yang menentukan saiz volume pada pesanan seterusnya dalam Grid. Pesanan seterusnya akan diletakkan dengan Multiplier x Saiz Volume Pesanan Terakhir. TimeFrame - Tempoh masa dalam minit. (Disarankan: 1 jam - 60 atau 15 minit - 15). Fungsi Utama dalam Expert Advisor Expert Advisor ini dilengkapi dengan beberapa fungsi yang berguna: TotalOrderLots() - Mengembalikan jumlah lot yang telah digunakan. CalcMaxLot() - Mengembalikan jumlah maksimum lot yang boleh diperdagangkan. CalcGridLot() - Mengembalikan lot permulaan berdasarkan parameter yang diberikan untuk aset tertentu. Fungsi Bearish dan Bullish Engulfing - Mengembalikan nilai benar jika salah satu pola candlestick ini berlaku. OpenOrderProfits() - Mengembalikan semua keuntungan dari pesanan terbuka. CloseAllOrders() - Menutup semua pesanan (memeriksa beberapa kali). Pesanan Grid Berdasarkan Nilai ATR EA ini akan meletakkan pesanan grid berdasarkan nilai ATR (Average True Range), yang membantu dalam menentukan jarak antara pesanan yang diletakkan. Dengan memahami dan menggunakan algoritma GridTrading ini, anda dapat meningkatkan peluang untuk meraih keuntungan walaupun dalam pasaran yang tidak menentu. Sentiasa ingat untuk menguji strategi anda sebelum menggunakannya secara langsung. Selamat berdagang!

2023.01.27
AK-47 Scalper EA: Panduan Lengkap untuk MetaTrader 4
MetaTrader4
AK-47 Scalper EA: Panduan Lengkap untuk MetaTrader 4

1. Parameter Input #define ExtBotName "AK-47 Scalper EA" //Nama Bot #define  Version "1.00" //--- parameter input extern string  EASettings        = "---------------------------------------------"; //-------- <EA Settings> -------- input int      InpMagicNumber    = 124656;   //Magic Number extern string  TradingSettings   = "---------------------------------------------"; //-------- <Trading Settings> -------- input double   Inpuser_lot       = 0.01;     //Lot input double   InpSL_Pips        = 3.5;      //Stoploss (dalam Pips) input double   InpMax_spread     = 0.5;      //Spread maksimum dibenarkan (dalam Pips) (0 = mengambang) extern string  MoneySettings     = "---------------------------------------------"; //-------- <Money Settings> -------- input bool     isVolume_Percent  = true;     //Benarkan Volume Peratus input double   InpRisk           = 3        //Peratus Risiko daripada Baki (%) 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 Akhir input int      InpEndMinute      = 0         //Minit Akhir 2. Inisialisasi Pembolehubah Tempatan //--- Pembolehubah int      Pips2Points;               // slippage  3 pips    3=points    30=points double   Pips2Double;               // Stoploss 15 pips    0.015      0.0150 int      InpMax_slippage   = 3;     // Slippage maksimum dibenarkan. bool     isOrder           = false; // hanya buka 1 order int      slippage; string   strComment        = ""; 3. Kod Utama a/ Fungsi Inisialisasi EA 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;    }    //---    return(INIT_SUCCEEDED);   } b/ Fungsi Tick EA void OnTick()   { //---      if(IsTradeAllowed() == false)      {       Comment("AK-47 EA\nTrade 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 akhir        structTime.hour = InpEndHour;        structTime.min = InpEndMinute;        datetime timeEnd = StructToTime(structTime);               double acSpread = MarketInfo(Symbol(), MODE_SPREAD);        StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL);              strComment = "\n" + ExtBotName + " - v." + (string)Version;       strComment += "\nWaktu GMT = " + TimeToString(TimeGMT(),TIME_DATE|TIME_SECONDS);       strComment += "\nWaktu Trading = [" + (string)InpStartHour + "h" + (string)InpStartMinute + " --> " +  (string)InpEndHour + "h" + (string)InpEndMinute + "]";              strComment += "\nSpread Semasa = " + (string)acSpread + " Points";       strComment += "\nStoplevel semasa = " + (string)StopLevel + " Points";              Comment(strComment);          //Kemas Kini Nilai       UpdateOrders();              TrailingStop();              //Periksa Waktu Trading       if(InpTimeFilter)       {          if(TimeCurrent() >= timeStart && TimeCurrent() < timeEnd)          {             if(!isOrder) OpenOrder();          }       }       else       {          if(!isOrder) OpenOrder();       }   } 3.1 Mengira isyarat untuk menghantar pesanan void OpenOrder(){       //int OrdType = OP_SELL;//-1;    double TP = 0;    double SL = 0;    string comment = ExtBotName;    //Mengira Lots    double lot1 = CalculateVolume();       //if(OrdType == OP_SELL){       double OpenPrice = NormalizeDouble(Bid - (StopLevel * _Point) - (InpSL_Pips/2) * Pips2Double, Digits);       SL = NormalizeDouble(Ask + StopLevel * _Point + InpSL_Pips/2 * Pips2Double, Digits);              if(CheckSpreadAllow())                                    //Semak Spread       {          if(!OrderSend(_Symbol, OP_SELLSTOP, lot1, OpenPrice, slippage, SL, TP, comment, InpMagicNumber, 0, clrRed))          Print(__FUNCTION__,"--> Ralat OrderSend ",GetLastError());       }    //} } 3.2 Mengira Volume double CalculateVolume()   {    double LotSize = 0;    if(isVolume_Percent == false)      {       LotSize = Inpuser_lot;      }    else      {       LotSize = (InpRisk) * AccountFreeMargin();       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 > MarketInfo(Symbol(),MODE_MAXLOT))          LotSize = MarketInfo(Symbol(),MODE_MAXLOT);       if(LotSize < MarketInfo(Symbol(),MODE_MINLOT))          LotSize = MarketInfo(Symbol(),MODE_MINLOT);      }    return(LotSize);   } 3.3 EA mempunyai fungsi "trailing Stop", SL akan berubah setiap kali harga berubah (turun)   void TrailingStop()   {    for(int i = OrdersTotal() - 1; i >= 0; i--)      {       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))         {          if((OrderMagicNumber() == InpMagicNumber) && (OrderSymbol() == Symbol()))   //_Symbol))            {             //Untuk Pesanan Jual             if(OrderType() == OP_SELL)               {                   //--Mengira SL apabila harga berubah                   double SL_in_Pip = NormalizeDouble(OrderStopLoss() - (StopLevel * _Point) - Ask, Digits) / Pips2Double;                   if(SL_in_Pip > InpSL_Pips){                         double newSL = NormalizeDouble(Ask + (StopLevel * _Point) + InpSL_Pips * Pips2Double, Digits);                         if(!OrderModify(OrderTicket(), OrderOpenPrice(), newSL, OrderTakeProfit(), 0, clrRed))                         {                            Print(__FUNCTION__,"--> Ralat OrderModify ",GetLastError());                          continue                           }               }                          //Untuk Pesanan JualStop             else if(OrderType() == OP_SELLSTOP)               {                   double SL_in_Pip = NormalizeDouble(OrderStopLoss() - (StopLevel * _Point) - Ask, Digits) / Pips2Double;                                      if(SL_in_Pip < InpSL_Pips/2){                      double newOP = NormalizeDouble(Bid - (StopLevel * _Point) - (InpSL_Pips/2) * Pips2Double, Digits);                      double newSL = NormalizeDouble(Ask + (StopLevel * _Point) + (InpSL_Pips/2) * Pips2Double, Digits);                                           if(!OrderModify(OrderTicket(), newOP, newSL, OrderTakeProfit(), 0, clrRed))                      {                         Print(__FUNCTION__,"--> Ralat Modify PendingOrder!", GetLastError());                         continue                        }                         }               }                          }         }   }

2023.01.14
Pertama Sebelumnya 5 6 7 8 9 10 11 12 13 14 15 Seterusnya Terakhir