Beranda Perdagangan Sistem Postingan

Strategi Breakout dengan Fungsi Pembantu untuk Tantangan Prop Firm

Lampiran
49713.zip (3.14 KB, Unduh 0 kali)

Halo semua,

Kali ini saya ingin memberikan update tentang Strategi Breakout yang Sederhana Namun Efektif. Dalam kode ini, saya telah menambahkan beberapa fungsi pembantu untuk tantangan prop firm.

Secara umum, untuk melewati tantangan prop firm, Anda perlu memenuhi tiga kriteria utama:

  • Target profit
  • Tidak melanggar batas kerugian harian maksimum
  • Tidak melanggar batas kerugian maksimum

Pada kode ini, saya menyertakan dua fungsi untuk memeriksa "Target profit" dan "Hampir melanggar batas kerugian harian maksimum" yang secara otomatis akan menutup semua posisi dan menghapus semua order yang tertunda. Untuk "batas kerugian maksimum", itu sangat tergantung pada strategi dan manajemen risiko Anda, jadi tidak akan dibahas dalam skrip MQL5 ini.

//+------------------------------------------------------------------+
//| Fungsi Pembantu Prop Firm                                       |
//+------------------------------------------------------------------+

// Menghapus semua order yang tertunda dan menutup semua posisi
void ClearAll(string message) {
   Comment(message);
   for (int i = OrdersTotal() - 1; i >= 0; i--) {
      ulong orderTicket = OrderGetTicket(i);
      if (OrderSelect(orderTicket)) {
         trade.OrderDelete(orderTicket);
      }
   }

   for (int i = PositionsTotal() - 1; i >= 0; i--) {
      ulong posTicket = PositionGetTicket(i);
      trade.PositionClose(posTicket);
   }
}

// Memeriksa apakah kita telah mencapai target profit
bool isPassed() {
   return AccountInfoDouble(ACCOUNT_EQUITY) > PASS_CRITERIA;
}

// Memeriksa apakah kita hampir melanggar batas kerugian harian maksimum
bool isDailyLimit() {
   MqlDateTime date_time;
   TimeToStruct(TimeCurrent(), date_time);
   int current_day = date_time.day, current_month = date_time.mon, current_year = date_time.year;
   
   // Saldo saat ini
   double current_balance = AccountInfoDouble(ACCOUNT_BALANCE);
   
   // Mendapatkan PL dari transaksi yang ditutup hari ini
   HistorySelect(0, TimeCurrent());
   int orders = HistoryDealsTotal();
   
   double PL = 0.0;
   for (int i = orders - 1; i >= 0; i--) {
      ulong ticket=HistoryDealGetTicket(i);
      if(ticket==0) {
         Print("HistoryDealGetTicket gagal, tidak ada riwayat trade");
         break;
      }
      double profit = HistoryDealGetDouble(ticket,DEAL_PROFIT);
      if (profit != 0) {
         // Mendapatkan waktu transaksi
         MqlDateTime deal_time;
         TimeToStruct(HistoryDealGetInteger(ticket, DEAL_TIME), deal_time);
         // Memeriksa waktu transaksi
         if (deal_time.day == current_day && deal_time.mon == current_month && deal_time.year == current_year) {
            PL += profit;
         }
         else
            break;
      }
   }
   double starting_balance = current_balance - PL;
   double current_equity   = AccountInfoDouble(ACCOUNT_EQUITY);
   return current_equity < starting_balance - DAILY_LOSS_LIMIT;
}

Parameter yang perlu kita tentukan adalah:

input string dd = "-------------TANTANGAN PROP FIRM-----------------";
input bool   isChallenge = false;
input double PASS_CRITERIA = 110100;
input double DAILY_LOSS_LIMIT = 4500;

Saya harap Anda menemukan nilai dalam skrip ini.


Postingan terkait

Komentar (0)