• Welcome back! Thank you for being a part of this Traders Community. Let's discuss and share :)
    Selamat datang kembali! Trimakasih telah menjadi bagian dari Komunitas Trader ini. Mari berdiskusi dan berbagi :)

Cara Mengontrol Slippage pada EA

kebogiras

New Member
Credits
0
Salam SoeHoe ..sy sedang belajar buat EA setelah nonton tutorial SoeHoe di forum ini dan di youtube berikut sy kirimkan source code ny.

Kendala EA tsb adalah munculny slippage berulang kali.

bagaimana cara mengatasi hal tsb?

jikalau memang harus kena slippage sy maklum tapi hanya sekali aj

ini baru sy cb di tester

terimakasih sebelum ny
 

Attachments

  • P_1.mq4
    P_1.mq4
    2.7 KB · Views: 10
  • SS-EA 2.jpg
    SS-EA 2.jpg
    250.9 KB · Views: 25
Code:
//+------------------------------------------------------------------+
//|                                                          P_1.mq4 |
//|                                                            LOKAL |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "LOKAL"
#property link      ""
#property version   "1.00"
#property strict

double   SL_1     = 200;
double   TP_1     = 200;
string   K_1      = "K1";
int      Kode_EA  = 123;
color    Y        = Yellow;
int      ticket   = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
//Rule---> Sinyal EA muncul sell saat Low[5] > High[5]
//dieksekusi dengan order send saat harga pembukaan candle [0]
//jika SL_1 kena
//maka op sel kedua di harga SL_1 dengan lot lebih besar

//==============================================================//

//==============================================================//
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//==============================================================// Sinyal dan Order
   for (int i=ticket;OrdersTotal() >=0;i++)
   {
   if (
         Low[5] > High[1]
       //&&  (Close[40] > Open[40])
       //&&  (Close[30] > Open[30])
       //&&  (Close[20] > Open[20])
      && TimeCurrent ()==Time[0]
      && Volume[0] <= 1
      )
      {
      RefreshRates();
      ticket = OrderSend (Symbol(),OP_SELL,0.1,Open[0],0,Ask+SL_1*Point,Ask-TP_1*Point,K_1,123,0,Y);
      }
   break;
   }
//==============================================================//  Recover
   for (int i=0;OrdersHistoryTotal() >=0;i++)
   {
   if (
         OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == true
      )
      {
      RefreshRates();
      ticket = OrderSend (Symbol(),OP_SELL,0.2,OrderClosePrice(),0,Ask+SL_1*Point,Ask-TP_1*Point,K_1,123);
      }
   break;
   }
  return;
  }

//+------------------------------------------------------------------+
 
Last edited by a moderator:
Saya kurang paham apa yang mas maksudkan soal Slippage berulang kali. Kemungkinan yg mas maksud adalah requote, atau mungkin Open Order berulang kali.

Menurut apa yg saya perhatikan adalah bahwa mas belum benar membuat perintah looping for.

Code:
for (int i=ticket;OrdersTotal() >=0;i++)
{

}

Pada looping for, ada 3 bagian parameter syarat.
Bagian pertama adalah start angka awal mulai looping
Bagian kedua adalah batas end atau akhir looping
Bagian ketiga adalah step

Di script yg mas buat di atas maka:
start = 0 yaitu ticket
end = tidak jelas
step = ++ yg artinya penambahan 1 ke angka start pada setiap looping

sehingga terjadi unlimited looping. Maka lebih baik mas tonton dulu video yang berkaitan dengan looping for. Cobalah dengan contoh yang paling mudah, pastikan dulu mas sudah bisa membuat looping dengan benar, baru selanjutnya mencoba membuat perintah yg lebih bercabang banyak.
 
Saya kurang paham apa yang mas maksudkan soal Slippage berulang kali. Kemungkinan yg mas maksud adalah requote, atau mungkin Open Order berulang kali.

Menurut apa yg saya perhatikan adalah bahwa mas belum benar membuat perintah looping for.

Code:
for (int i=ticket;OrdersTotal() >=0;i++)
{

}

Pada looping for, ada 3 bagian parameter syarat.
Bagian pertama adalah start angka awal mulai looping
Bagian kedua adalah batas end atau akhir looping
Bagian ketiga adalah step

Di script yg mas buat di atas maka:
start = 0 yaitu ticket
end = tidak jelas
step = ++ yg artinya penambahan 1 ke angka start pada setiap looping

sehingga terjadi unlimited looping. Maka lebih baik mas tonton dulu video yang berkaitan dengan looping for. Cobalah dengan contoh yang paling mudah, pastikan dulu mas sudah bisa membuat looping dengan benar, baru selanjutnya mencoba membuat perintah yg lebih bercabang banyak.


nah betul SoeHoe..maafkan msh belajar.

msh kacau penggunaan istilah

baik..terimakasih jawaban ny

sy belajar lebih lanjut
 
Saya kurang paham apa yang mas maksudkan soal Slippage berulang kali. Kemungkinan yg mas maksud adalah requote, atau mungkin Open Order berulang kali.

Menurut apa yg saya perhatikan adalah bahwa mas belum benar membuat perintah looping for.

Code:
for (int i=ticket;OrdersTotal() >=0;i++)
{

}

Pada looping for, ada 3 bagian parameter syarat.
Bagian pertama adalah start angka awal mulai looping
Bagian kedua adalah batas end atau akhir looping
Bagian ketiga adalah step

Di script yg mas buat di atas maka:
start = 0 yaitu ticket
end = tidak jelas
step = ++ yg artinya penambahan 1 ke angka start pada setiap looping

sehingga terjadi unlimited looping. Maka lebih baik mas tonton dulu video yang berkaitan dengan looping for. Cobalah dengan contoh yang paling mudah, pastikan dulu mas sudah bisa membuat looping dengan benar, baru selanjutnya mencoba membuat perintah yg lebih bercabang banyak.

SoeHoe kalo sy lihat koding sy..

open order pertama lncar sesuai ruleruleyg

yg bermasalah saat, requote order send berulang kali yg kedua (recover)
 
Code:
//+------------------------------------------------------------------+
//|                                                          P_1.mq4 |
//|                                                            LOKAL |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "LOKAL"
#property link      ""
#property version   "1.00"
#property strict

double   SL_1     = 200;
double   TP_1     = 200;
string   K_1      = "K1";
int      Kode_EA  = 123;
color    Y        = Yellow;
int      ticket   = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
//Rule---> Sinyal EA muncul sell saat Low[5] > High[5]
//dieksekusi dengan order send saat harga pembukaan candle [0]
//jika SL_1 kena
//maka op sel kedua di harga SL_1 dengan lot lebih besar

//==============================================================//

//==============================================================//
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//==============================================================// Sinyal dan Order
   for (int i=ticket;OrdersTotal() >=0;i++)
   {
   if (
         Low[5] > High[1]
       //&&  (Close[40] > Open[40])
       //&&  (Close[30] > Open[30])
       //&&  (Close[20] > Open[20])
      && TimeCurrent ()==Time[0]
      && Volume[0] <= 1
      )
      {
      RefreshRates();
      ticket = OrderSend (Symbol(),OP_SELL,0.1,Open[0],0,Ask+SL_1*Point,Ask-TP_1*Point,K_1,123,0,Y);
      }
   break;
   }
//==============================================================//  Recover
   for (int i=0;OrdersHistoryTotal() >=0;i++)
   {
   if (
         OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == true
      )
      {
      RefreshRates();
      ticket = OrderSend (Symbol(),OP_SELL,0.2,OrderClosePrice(),0,Ask+SL_1*Point,Ask-TP_1*Point,K_1,123);
      }
   break;
   }
  return;
  }

//+------------------------------------------------------------------+

dari yg saya lihat, untuk recover tdk peduli kena SL atau TP, EA tetap menggandakan lot nya.
dan betul saja. EA akan melakukan order terus menerus.... sy coba contohkan hanya 1 order saja. krn code yg salah adlh recover.
Code:
for (int i=0;OrdersHistoryTotal() >=0;i++)
   {
   if (
         OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == true
      )
      {
if(OrdersTotal()==0){
      ticket = OrderSend (Symbol(),OP_SELL,0.2,OrderClosePrice(),0,Ask+SL_1*Point,Ask-TP_1*Point,K_1,123);}
      }
   }
sy rasa penggunaan break pun kurang sesuai..
 
Back
Top