Widget ini memungkinkan anda untuk menemukan mata uang yang sedang kuat ataupun lemah saat ini & seberapa kuat hubungan antar satu dengan yang lainnya. Alat trading ini dapat membantu untuk memilih strategi trading, mencari peluang, dan melakukan trade dengan penuh percaya diri. Buat tabel nilai pribadi melalui beberapa kali klik saja dengan memilih mata uang yang anda inginkan.

Megenal 10 Fungsi Penting untuk Membuat EA Forex

Dalam coding Forex EA terdapat fungsi-fungsi (functions) yang biasa digunakan.
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;
}

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;
}

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);

}

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;
          }

     }

}

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;
          }
     }
}

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++;
               }
          }
     }
}

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++;
               }
          }
     }
}

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);
     }
}

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);
     }
}
     

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);
          }
     }
}

Demikianlah 10 fungsi penting untuk membuat EA, kita biasa menggunakannya guna mempermudah dalam pembuatan robot forex.

Tinggal copas dan modiv sedikit, selesai.

Semoga bermanfaat.
Blogger
Disqus