Berita Anda, Halo Pengunjung blog dimanapun anda berada semoga kalian tetap dalam keadaan sehat, saat ini anda sedang membaca Artikel dengan judul Megenal 10 Fungsi Penting untuk Membuat EA Forex, semoga bermanfaat dan selamat membaca
Dalam coding Forex EA terdapat fungsi-fungsi (functions) yang biasa digunakan.
Demikianlah 10 fungsi penting untuk membuat EA, kita biasa menggunakannya guna mempermudah dalam pembuatan robot forex.
Berikut 10 fungsi penting untuk membuat EA :
1. Fungsi Calculate Point
Fungsi ini digunakan untuk menyesuaikan digit mata uang yang ada di broker adalah :
double pipValue = CalculatePipValue(Symbol);
double CalculatePipValue(string _parity)
{
int digit = MarketInfo(_parity, MODE_DIGITS);
if (digit == 2 || digit == 3) return 0.01;
else if (digit == 4 || digit == 5) return 0.0001;
}
double CalculatePipValue(string _parity)
{
int digit = MarketInfo(_parity, MODE_DIGITS);
if (digit == 2 || digit == 3) return 0.01;
else if (digit == 4 || digit == 5) return 0.0001;
}
2. Fungsi Calculate Slippage
Slippage juga perlu disesuaikan terhadap digit broker adalah :
int Slippage = 10;
Slippage = CalculateSlippage(Symbol, Slippage);
int CalculateSlippage(string _parity, int _slippage)
{
int digit = MarketInfo(_parity, MODE_DIGITS);
if (digit == 2 || digit == 3) return _slippage;
else if (digit == 4 || digit == 5) return _slippage*10;
}
Slippage = CalculateSlippage(Symbol, Slippage);
int CalculateSlippage(string _parity, int _slippage)
{
int digit = MarketInfo(_parity, MODE_DIGITS);
if (digit == 2 || digit == 3) return _slippage;
else if (digit == 4 || digit == 5) return _slippage*10;
}
3. Fungsi Enter Position
Fngsi ini untuk mengeksekusi perintah OP buy atau sell adalah :
void EnterNewTrade(int _orderType)
{
//Secara default kita set sebagai buy order
double orderEnterPrice = Ask;
string orderName = "Buy Order";
double orderStopLoss = orderEnterPrice - stopLoss * pipValue;
double orderTakeProfit = orderEnterPrice + takeProfit * pipValue;
//Jika order SELL, maka kita set sell order
if (_orderType == OP_SELL)
{
orderEnterPrice = Bid;
orderName = "Sell Order";
orderStopLoss = orderEnterPrice + stopLoss * pipValue;
orderTakeProfit = orderEnterPrice - takeProfit * pipValue;
}
//Perintah OP
int ticketNumber = OrderSend(Symbol(), _orderType, lotSize, orderEnterPrice, slippage, orderStopLoss, orderTakeProfit, comment, magic);
}
{
//Secara default kita set sebagai buy order
double orderEnterPrice = Ask;
string orderName = "Buy Order";
double orderStopLoss = orderEnterPrice - stopLoss * pipValue;
double orderTakeProfit = orderEnterPrice + takeProfit * pipValue;
//Jika order SELL, maka kita set sell order
if (_orderType == OP_SELL)
{
orderEnterPrice = Bid;
orderName = "Sell Order";
orderStopLoss = orderEnterPrice + stopLoss * pipValue;
orderTakeProfit = orderEnterPrice - takeProfit * pipValue;
}
//Perintah OP
int ticketNumber = OrderSend(Symbol(), _orderType, lotSize, orderEnterPrice, slippage, orderStopLoss, orderTakeProfit, comment, magic);
}
4. Fungsi Close Position
Fungsi ini untuk close order yang terbuka adalah :
bool CloseOrder(int _orderNumber)
{
//Select order yang mau di close
if (OrderSelect(_orderNumber, SELECT_BY_TICKET, MODE_TRADES)
{
//Secara default nilainya buy
double orderClosingPrice = Bid;
string orderName = "Closing buy trade";
//Jika tipe ordernya sell, ubah nilainya
if (OrderType() == OP_SELL)
{
orderClosingPrice = Ask;
orderName = "Closing sell trade";
}
//Perintah close
int ticketNumber = OrderClose(_orderNumber, OrderLots(), orderClosingPrice, slippage, clrNONE);
//Jika tidak mau close
if (ticketNumber == -1)
{
return false;
}
else
{
return true;
}
}
}
{
//Select order yang mau di close
if (OrderSelect(_orderNumber, SELECT_BY_TICKET, MODE_TRADES)
{
//Secara default nilainya buy
double orderClosingPrice = Bid;
string orderName = "Closing buy trade";
//Jika tipe ordernya sell, ubah nilainya
if (OrderType() == OP_SELL)
{
orderClosingPrice = Ask;
orderName = "Closing sell trade";
}
//Perintah close
int ticketNumber = OrderClose(_orderNumber, OrderLots(), orderClosingPrice, slippage, clrNONE);
//Jika tidak mau close
if (ticketNumber == -1)
{
return false;
}
else
{
return true;
}
}
}
5. Fungsi Revise Position
Fungsi ini untuk merevisi atau mengubah nilai sebagian dari suatu order adalah :
bool ReviseOrder(int _ticketNumber, double _newStopLoss, double _newTakeProfit)
{
if (OrderSelect(_ticketNumber, SELECT_BY_TICKET, MODE_TRADES))
{
int ticketNumber = OrderModify(OrderTicket(), OrderOpenPrice(), _newStopLoss, _newTakeProfit, 0, clrNONE);
if (ticketNumber == -1)
{
return false;
}
else
{
return true;
}
}
}
{
if (OrderSelect(_ticketNumber, SELECT_BY_TICKET, MODE_TRADES))
{
int ticketNumber = OrderModify(OrderTicket(), OrderOpenPrice(), _newStopLoss, _newTakeProfit, 0, clrNONE);
if (ticketNumber == -1)
{
return false;
}
else
{
return true;
}
}
}
6. Fungsi Count Open Position
Fugsi ini berguna untuk menghitung jumlah order yang terbuka adalah :
void CountOpenOrders()
{
sellCount = 0;
buyCount = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POST, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
buyCount++;
}
else if (OrderType() == OP_SELL)
{
sellCount++;
}
}
}
}
{
sellCount = 0;
buyCount = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POST, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
buyCount++;
}
else if (OrderType() == OP_SELL)
{
sellCount++;
}
}
}
}
7. Fungsi Count Closed Position
Fungsi ini sama seperti sebelumnya, hanya saja ini untuk menghitung order yang tertutup adalah :
void CountClosedOrders()
{
sellCount = 0;
buyCount = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POST, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
buyCount++;
}
else if (OrderType() == OP_SELL)
{
sellCount++;
}
}
}
}
{
sellCount = 0;
buyCount = 0;
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POST, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
buyCount++;
}
else if (OrderType() == OP_SELL)
{
sellCount++;
}
}
}
}
8. Fungsi Break Even
Fungsi ini untuk menggeser StopLoss ke posisi Break Even adalah :
//Perhitungan BEP
void BreakEven()
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
if (Ask >= (OrderOpenPrice() + priceBEP * pipValue && OrderStopLoss() < OrderOpenPrice())
{
ReviseStopLoss(OrderTicket(), OrderOpenPrice());
}
}
else if (OrderType() == OP_SELL)
{
if (Ask >= (OrderOpenPrice() - priceBEP * pipValue && OrderStopLoss() > OrderOpenPrice())
{
ReviseStopLoss(OrderTicket(), OrderOpenPrice());
}
}
}
}
}
//Fungsi untuk mengubah stoploss
void ReviseStopLoss(int _orderNumber, double _newStopLoss)
{
if (OrderSelect(_orderNumber, SELECT_BY_TICKET, MODE_TRADES)
{
int controlNumber = OrderModify(OrderTicket(), OrderOpenPrice(), _newStopLoss, OrderTakeProfit(), 0, clrNONE);
}
}
void BreakEven()
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
if (Ask >= (OrderOpenPrice() + priceBEP * pipValue && OrderStopLoss() < OrderOpenPrice())
{
ReviseStopLoss(OrderTicket(), OrderOpenPrice());
}
}
else if (OrderType() == OP_SELL)
{
if (Ask >= (OrderOpenPrice() - priceBEP * pipValue && OrderStopLoss() > OrderOpenPrice())
{
ReviseStopLoss(OrderTicket(), OrderOpenPrice());
}
}
}
}
}
//Fungsi untuk mengubah stoploss
void ReviseStopLoss(int _orderNumber, double _newStopLoss)
{
if (OrderSelect(_orderNumber, SELECT_BY_TICKET, MODE_TRADES)
{
int controlNumber = OrderModify(OrderTicket(), OrderOpenPrice(), _newStopLoss, OrderTakeProfit(), 0, clrNONE);
}
}
9. Fungsi Trailing
Fugsi ini untuk menggeser StopLoss secara bertahap adalah :
//Perhitungan Trailing
void Trail()
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
if (Ask >= (OrderOpenPrice() + trail * pipValue && OrderStopLoss() >= OrderOpenPrice() + trailStep * pipValue)
{
ReviseStopLoss(OrderTicket(), Ask - trail * pipValue);
}
}
else if (OrderType() == OP_SELL)
{
if (Ask >= (OrderOpenPrice() - trail * pipValue && OrderStopLoss() <= OrderOpenPrice() - trailStep * pipValue)
{
ReviseStopLoss(OrderTicket(), Bid + trail * pipValue);
}
}
}
}
}
//Fungsi untuk mengubah stoploss
void ReviseStopLoss(int _orderNumber, double _newStopLoss)
{
if (OrderSelect(_orderNumber, SELECT_BY_TICKET, MODE_TRADES)
{
int controlNumber = OrderModify(OrderTicket(), OrderOpenPrice(), _newStopLoss, OrderTakeProfit(), 0, clrNONE);
}
}
void Trail()
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUY)
{
if (Ask >= (OrderOpenPrice() + trail * pipValue && OrderStopLoss() >= OrderOpenPrice() + trailStep * pipValue)
{
ReviseStopLoss(OrderTicket(), Ask - trail * pipValue);
}
}
else if (OrderType() == OP_SELL)
{
if (Ask >= (OrderOpenPrice() - trail * pipValue && OrderStopLoss() <= OrderOpenPrice() - trailStep * pipValue)
{
ReviseStopLoss(OrderTicket(), Bid + trail * pipValue);
}
}
}
}
}
//Fungsi untuk mengubah stoploss
void ReviseStopLoss(int _orderNumber, double _newStopLoss)
{
if (OrderSelect(_orderNumber, SELECT_BY_TICKET, MODE_TRADES)
{
int controlNumber = OrderModify(OrderTicket(), OrderOpenPrice(), _newStopLoss, OrderTakeProfit(), 0, clrNONE);
}
}
10. Fungsi Close All Positions
Fungsi ini untuk menutup semua order yang terbuka adalah :
void CloseAllOpenOrders()
{
for (int i = 0; i < OrderTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
OrderClose(OrderTicket(), OrderLots(), OrderOpenPrice(), slippage, clrNONE);
}
}
}
{
for (int i = 0; i < OrderTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
OrderClose(OrderTicket(), OrderLots(), OrderOpenPrice(), slippage, clrNONE);
}
}
}
Demikianlah 10 fungsi penting untuk membuat EA, kita biasa menggunakannya guna mempermudah dalam pembuatan robot forex.
Tinggal copas dan modiv sedikit, selesai.
Semoga bermanfaat.
Labels:
Forex,
Pengertian,
Robot EA
Thanks for reading Megenal 10 Fungsi Penting untuk Membuat EA Forex. Please share...!
0 Komentar untuk "Megenal 10 Fungsi Penting untuk Membuat EA Forex"