//Fungsi untuk menutup semua posisi terbuka
void CloseAllOpenPositions(){
for(int i = OrdersTotal() - 1; i >= 0; i--){
if(OrderSelect(i, SELECT_BY_POS)){
//Memeriksa apakah order adalah posisi yang terbuka
if(OrderType() == OP_BUY || OrderType() == OP_SELL){
bool closed = OrderClose(OrderTicket(), OrderLots(), Bid, 3, Red);
if(closed){
Print("Posisi tertutup: ", OrderTicket());
} else {
Print("Gagal menutup posisi: ", OrderTicket(), " Error: ", GetLastError());
}
}
}
}
}
//Fungsi untuk memeriksa apakah MA 20 sudah crossing dengan MA 50
bool CheckMACross(){
double ma20Current = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);//MA 20 saat ini
double ma50Current = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 0);//MA 50 saat ini
double ma20Previous = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1);//MA 20 sebelumnya
double ma50Previous = iMA(NULL, 0, 50, 0, MODE_SMA, PRICE_CLOSE, 1);//MA 50 sebelumnya
//Mengecek persilangan MA
if ((ma20Previous < ma50Previous && ma20Current > ma50Current) || (ma20Previous > ma50Previous && ma20Current < ma50Current)){
return true;//MA crossing terjadi
}
return false;//Tidak ada persilangan
}
//Fungsi yang dijalankan setiap ada MA cross
void hapusSaatCross(){
//Mengecek apakah ada crossing antara MA 20 dan MA 50
if(CheckMACross()){
//Menutup semua posisi terbuka jika ada crossing
CloseAllOpenPositions();
Print("MA 20 crossing dengan MA 50, posisi-posisi telah ditutup.");
}
}