//Function untuk membuka posisi Buy atau Sell berdasarkan indikator Stochastic
void OpenTradeUsingStochastic(){
//Parameter Stochastic
int StochasticKPeriod = 14; //Periode K
int StochasticDPeriod = 3; //Periode D
int StochasticSlowing = 3; //Slowing
double OversoldLevel = 20; //Level oversold 10 - 30
double OverboughtLevel = 80; //Level overbought 90 - 70
//Mendapatkan nilai indikator Stochastic
double KCurrent = iStochastic(Symbol(),0,StochasticKPeriod,StochasticDPeriod,StochasticSlowing,MODE_SMA,0,MODE_MAIN,0);
double KPrevious = iStochastic(Symbol(),0,StochasticKPeriod,StochasticDPeriod,StochasticSlowing,MODE_SMA,0,MODE_MAIN,1);
//Mengecek kondisi untuk membuka posisi Buy (Stochastic di bawah Oversold)
if (KCurrent < OversoldLevel && KPrevious > OversoldLevel){
//Cek jika tidak ada posisi terbuka
if (OrderSelect(0,SELECT_BY_POS) == false || OrderType() != OP_BUY){
//Membuka posisi Buy
double BuyLotSize = 0.1; //Ukuran lot
double BuyPrice = Ask; //Harga saat ini
double StopLoss = BuyPrice - 50 * Point; //Stop Loss (50 pips di bawah harga)
double TakeProfit = BuyPrice + 100 * Point; //Take Profit (100 pips di atas harga)
int ticket = OrderSend(Symbol(),OP_BUY,BuyLotSize,BuyPrice,3,StopLoss,TakeProfit,"Buy by Stochastic",0,0,Blue);
if (ticket < 0){
Print("Error opening Buy order: ",GetLastError());
}
}
}
//Mengecek kondisi untuk membuka posisi Sell (Stochastic di atas Overbought)
if (KCurrent > OverboughtLevel && KPrevious < OverboughtLevel){
//Cek jika tidak ada posisi terbuka
if (OrderSelect(0,SELECT_BY_POS) == false || OrderType() != OP_SELL){
//Membuka posisi Sell
double SellLotSize = 0.1; //Ukuran lot
double SellPrice = Bid; //Harga saat ini
double StopLoss = SellPrice + 50 * Point; //Stop Loss (50 pips di atas harga)
double TakeProfit = SellPrice - 100 * Point; //Take Profit (100 pips di bawah harga)
int ticket = OrderSend(Symbol(),OP_SELL,SellLotSize,SellPrice,3,StopLoss,TakeProfit,"Sell by Stochastic",0,0,Red);
if (ticket < 0){
Print("Error opening Sell order: ",GetLastError());
}
}
}
}