• 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 :)

Bagaimana Cara Membatasi Profit Harian ?

argatafx

Member
Credit Hunter
Credits
0
Halo master semua,,

saya lagi Belajar Membuat EA, nah untuh kasus sekarang saya ingin membatasi profit harian

Misal = jika hari ini sudah profit 5% dari modal awal maka EA akan berhenti dan mleanjutkan trading keesokan harinya.
di keesokan harinya EA akan kembali trading dengan target profit 5% dari akumulasi profit sebelumnya

mohon dibantu. terima kasih
 
ada 3 fungsi yang dibikin itu gan,
1. fungsi ModalAwal() untuk mencari nilai modal awal.
double ModalAwal(){
double modalawal=AccountEquity()-TotalProfitLoss();
return(modalawal);
}

2. fungsi TotalProfitLoss(int mode) untuk mencari total profit/loss dalam akun tersebut.
double TotalProfitLoss(int mode){
// mode 1= all time, mode 2= harian
double totalprofitnya = 0;
if(OrdersHistoryTotal()>0){
for (int indexhistori=0; indexhistori < OrdersHistoryTotal(); indexhistori++){
if (mode==1){if (OrderSelect(indexhistori, SELECT_BY_POS, MODE_HISTORY)==true){totalprofitnya +=OrderProfit();} }
else{
if (OrderSelect(indexhistori, SELECT_BY_POS, MODE_HISTORY)==true&&TimeDayOfYear(OrderCloseTime())==TimeDayOfYear(TimeCurrent())){
totalprofitnya +=OrderProfit();} }
}
return (totalprofitnya);
}

3. fungsi ONOFF(double percentprofittrarget) untuk on dan off sesuai target profit.
int ONOFF(double percentprofittrarget){
// 1= OFF, 0=ON;
int onoffnya=0;
if(TotalProfitLoss(2)>(percentprofittrarget/100)*ModalAwal()){onoffnya=1;}
return(onoffnya);
}

selanjutnya tinggal eksekusi fungsinya gan setelah
void OnTick()
{
// jalankan fungsinya
if(ONOFF(5)==0 ){
// eksekusi ordernya
OrderSend(dan seterusnya...)
}
}// end ontick
 
ada 3 fungsi yang dibikin itu gan,
1. fungsi ModalAwal() untuk mencari nilai modal awal.
double ModalAwal(){
double modalawal=AccountEquity()-TotalProfitLoss();
return(modalawal);
}

2. fungsi TotalProfitLoss(int mode) untuk mencari total profit/loss dalam akun tersebut.
double TotalProfitLoss(int mode){
// mode 1= all time, mode 2= harian
double totalprofitnya = 0;
if(OrdersHistoryTotal()>0){
for (int indexhistori=0; indexhistori < OrdersHistoryTotal(); indexhistori++){
if (mode==1){if (OrderSelect(indexhistori, SELECT_BY_POS, MODE_HISTORY)==true){totalprofitnya +=OrderProfit();} }
else{
if (OrderSelect(indexhistori, SELECT_BY_POS, MODE_HISTORY)==true&&TimeDayOfYear(OrderCloseTime())==TimeDayOfYear(TimeCurrent())){
totalprofitnya +=OrderProfit();} }
}
return (totalprofitnya);
}

3. fungsi ONOFF(double percentprofittrarget) untuk on dan off sesuai target profit.
int ONOFF(double percentprofittrarget){
// 1= OFF, 0=ON;
int onoffnya=0;
if(TotalProfitLoss(2)>(percentprofittrarget/100)*ModalAwal()){onoffnya=1;}
return(onoffnya);
}

selanjutnya tinggal eksekusi fungsinya gan setelah
void OnTick()
{
// jalankan fungsinya
if(ONOFF(5)==0 ){
// eksekusi ordernya
OrderSend(dan seterusnya...)
}
}// end ontick
Makasih gan ,,,
bisa ditulis berupa Bahasa MQ4 gan ?
masih awam soalnya..
ini masih dicoba2
 
ada 3 fungsi yang dibikin itu gan,
1. fungsi ModalAwal() untuk mencari nilai modal awal.
double ModalAwal(){
double modalawal=AccountEquity()-TotalProfitLoss();
return(modalawal);
}

2. fungsi TotalProfitLoss(int mode) untuk mencari total profit/loss dalam akun tersebut.
double TotalProfitLoss(int mode){
// mode 1= all time, mode 2= harian
double totalprofitnya = 0;
if(OrdersHistoryTotal()>0){
for (int indexhistori=0; indexhistori < OrdersHistoryTotal(); indexhistori++){
if (mode==1){if (OrderSelect(indexhistori, SELECT_BY_POS, MODE_HISTORY)==true){totalprofitnya +=OrderProfit();} }
else{
if (OrderSelect(indexhistori, SELECT_BY_POS, MODE_HISTORY)==true&&TimeDayOfYear(OrderCloseTime())==TimeDayOfYear(TimeCurrent())){
totalprofitnya +=OrderProfit();} }
}
return (totalprofitnya);
}

3. fungsi ONOFF(double percentprofittrarget) untuk on dan off sesuai target profit.
int ONOFF(double percentprofittrarget){
// 1= OFF, 0=ON;
int onoffnya=0;
if(TotalProfitLoss(2)>(percentprofittrarget/100)*ModalAwal()){onoffnya=1;}
return(onoffnya);
}

selanjutnya tinggal eksekusi fungsinya gan setelah
void OnTick()
{
// jalankan fungsinya
if(ONOFF(5)==0 ){
// eksekusi ordernya
OrderSend(dan seterusnya...)
}
}// end ontick

Klau untuk membatasi perdagangan dalam waktu tertentu gimana, misalnya setelah take profit atau kena stop loss maka tidak akan membuka perdagangan dalam waktu yg telah ditentukan?

https://soehoe.id/membatasi-perdangan-dalam-waktu-tertentu.t16527/
 
Last edited:
Klau untuk membatasi perdagangan dalam waktu tertentu gimana, misalnya setelah take profit atau kena stop loss maka tidak akan membuka perdagangan dalam waktu yg telah ditentukan?

https://soehoe.id/membatasi-perdangan-dalam-waktu-tertentu.t16527/



Menggunakan Funsgi OrdserHistoryTotal() sepertinya mas,,,
cuma untuk menentukan TP atau SL nya.. Untuk referensi saya menyimpan fungsinya tpi blm tes

ini untuk TP perhari

void OnTick(){
//------membatasi jumlah OP target TP
if(UseTargetDaily == TRUE){
bool tradeOn = true;
int win=0;
for(int i=HistoryTotal()-1;i>=0;i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
if((OrderSymbol()!=Symbol()&& OrderMagicNumber()!=MagicNbr1)
||(OrderSymbol()!=Symbol()&& OrderMagicNumber()!=MagicNbr2)) continue;
if( OrderClosePrice() == OrderTakeProfit())win++;
if ( TimeDay(OrderCloseTime())==Day() && win>=TargetOPProfit ){ tradeOn = false;}else tradeOn = true;
if ( !tradeOn ) {return;}
}
}
 
Klau untuk membatasi perdagangan dalam waktu tertentu gimana, misalnya setelah take profit atau kena stop loss maka tidak akan membuka perdagangan dalam waktu yg telah ditentukan?

https://soehoe.id/membatasi-perdangan-dalam-waktu-tertentu.t16527/

1. bikin fungsi buat ngecek orderan close terakhir kena tp atau kena sl dan kapan waktu close nya
Code:
int CekOrderCloseTerakhir(int menuceking){
//menu 1=cek kena tp sl gak, 2=cek waktu closenya
int nilainya=0;
if(OrdersHistoryTotal()>0){
for (int indexhistori=OrdersHistoryTotal()-1;indexhistori>=0;indexhistori--){
if (OrderSelect(indexhistori, SELECT_BY_POS, MODE_HISTORY)==true
&&((OrderClosePrice()>=OrderStopLoss()-(Point*10*1)&&OrderClosePrice()<=OrderStopLoss()+(Point*10*1))||(OrderClosePrice()>=OrderTakeProfit()-(Point*10*1)&&OrderClosePrice()<=OrderTakeProfit()+(Point*10*1)))
){if (menuceking==1){nilainya=1;}else{nilainya=OrderClosetime();}break;} 
}
return (nilainya);
}

2. jalankan fungsi cekingnya itu
Code:
void OnTick()
{
// jalankan fungsinya
//---tetapkan tenggang waktunya
int tenggangwaktunya=300;// tenggang waktu selama 5 menit dari waktu close terakhir yg kena sl atau tp

if(CekOrderCloseTerakhir(1)==1&&TimeCurrent()>CekOrderCloseTerakhir(1)+tenggangwaktunya){
// eksekusi ordernya
OrderSend(dan seterusnya...)
}
}// end ontick
 
1. bikin fungsi buat ngecek orderan close terakhir kena tp atau kena sl dan kapan waktu close nya
Code:
int CekOrderCloseTerakhir(int menuceking){
//menu 1=cek kena tp sl gak, 2=cek waktu closenya
int nilainya=0;
if(OrdersHistoryTotal()>0){
for (int indexhistori=OrdersHistoryTotal()-1;indexhistori>=0;indexhistori--){
if (OrderSelect(indexhistori, SELECT_BY_POS, MODE_HISTORY)==true
&&((OrderClosePrice()>=OrderStopLoss()-(Point*10*1)&&OrderClosePrice()<=OrderStopLoss()+(Point*10*1))||(OrderClosePrice()>=OrderTakeProfit()-(Point*10*1)&&OrderClosePrice()<=OrderTakeProfit()+(Point*10*1)))
){if (menuceking==1){nilainya=1;}else{nilainya=OrderClosetime();}break;}
}
return (nilainya);
}

2. jalankan fungsi cekingnya itu
Code:
void OnTick()
{
// jalankan fungsinya
//---tetapkan tenggang waktunya
int tenggangwaktunya=300;// tenggang waktu selama 5 menit dari waktu close terakhir yg kena sl atau tp

if(CekOrderCloseTerakhir(1)==1&&TimeCurrent()>CekOrderCloseTerakhir(1)+tenggangwaktunya){
// eksekusi ordernya
OrderSend(dan seterusnya...)
}
}// end ontick


Mantap mas,,
sangat sederhana dan mudah dimengerti.

kalau berkenan mohon dijawab mas untuk Marti sel dan buy
semisal OP BUY SELL sama2 dimarti..
marti sendiri2 BUY dimarti sendiri SELL dimarti sendiri,,
ane gagal mulu malah misahin fungsi yg untuk marti biar work untuk sell dan buy bisa marti bersamaan
 
Back
Top