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

Question Ad solusi untuk Ordermodify error1

Oedyne Gwibroed

New Member
Credits
0
bool Trail(int Stop)
{
double newStopLoss=0.0;
textstring="";
int StopLevel = (int)MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Stop<StopLevel)Stop=StopLevel;
for (int i = OrdersTotal() - 1; i >= 0; i--){
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber ) continue;
if(OrderType()==OP_BUY) {
newStopLoss=Bid-(Stop*Point);
if(Bid-OrderOpenPrice()>Point*Stop) {
if((OrderStopLoss()<Bid-Point*Stop) || (OrderStopLoss()==0)) {
if(OrderModify(OrderTicket(),OrderOpenPrice(),newStopLoss,OrderTakeProfit(),0,clrNONE)==false)
{
return(false);
}else
{
return(true);
}
}
}
}
if(OrderType()==OP_SELL) {
newStopLoss=Ask+(Stop*Point);
if((OrderOpenPrice()-Ask)>(Point*Stop)){
if(OrderStopLoss()>Ask+(Point*Stop) || (OrderStopLoss()==0)){
if(OrderModify(OrderTicket(),OrderOpenPrice(),newStopLoss,OrderTakeProfit(),0,clrNONE)==false)
{
return(false);
}else
{
return(true);
}
}
}
}
}
return(true);
}
 
for (int i = OrdersTotal() - 1; i >= 0; i--){
misalkan diganti
int i;
for ( i = 0 ; i < OrdersTotal() ; i++){

atau dideklarasikan di luar
int i;
for(i = OrdersTotal() -1 ; i >= 0 ; i--){
kalo ada full codenya mungkin bisa dilihat ada error dimana
 
fungsi OrderModify() nilai kembaliannya itu True/False.
True Nilainya 1
False Nilainya 0

Jadi kalo ordermodify error 1 kemungkinan ada error handling yang tidak berfungsi menangkap True nya.

Kalo sekilas saya lihat kodenya, mungkin errormodify 1 itu karena memang tidak ada yang dirubah.

Logika nya gini,
Robot menemukan order
setelah itu robot merubah order menjadi SL dan TP sesuai parameter yang ditentukan.
Lalu robot jalan lagi, nyari order lagi.
Sialnya robot nemuin order yang sama tadi yang udah dia rubah.
Jadi MQL 4 kemungkinan mengingatkan programmer seperti anda bahwa ini sudah sama loh, ngapain dirubah lagi?
 
fungsi OrderModify() nilai kembaliannya itu True/False.
True Nilainya 1
False Nilainya 0

Jadi kalo ordermodify error 1 kemungkinan ada error handling yang tidak berfungsi menangkap True nya.
agan apakah benar karna OrderModifynya ada dalam looping dan kurang error handlingnya saat nilainya true atau bisa juga error handlingnya gak berfungsi ?.
kalo dilihat dari error kodenya memang terjadi pengulangan fungsi OrderModify.
nah terus terang ane juga menghadapi kasus serupa untuk OrderSelect yang di dalam looping
padahal dah di kasih break;
tetep aja di log ngeprint no order selected tapi kalo ngak di print ngak ada warning merah.
EA nya ilan lho ini?
 
Masalahnya Ilan tidak menemukan error. Karena memang sudah dirubah sesuai dengan nilai TP.
Logikanya ilan untuk break ada pada "NO Error" lalu break.
sedangkan No error itu nilainya = 0.

Coba fikirkan ketika ordermodif tidak merubah dan karena sudah dirubah maka nilai perubahan tetap satu, apa gak retry mulu tuh ilan?
 
Coba dirubah nilai breaknya jadi 1, buat nangkep tuh error. atau ditambah dua logic err==0 && err==1
bisa juga dipisah, kalo 1 artinya sudah dirubah. tapi tetep ini bakalan menghilangkan arti eror yang sesungguhnya. hanya untuk testing doank.
 
Coba dirubah nilai breaknya jadi 1, buat nangkep tuh error. atau ditambah dua logic err==0 && err==1
bisa juga dipisah, kalo 1 artinya sudah dirubah. tapi tetep ini bakalan menghilangkan arti eror yang sesungguhnya. hanya untuk testing doank.
yup ma kasih penjelasanya gan,dasar ane newbie kodingnya masih blepotan.
Masalahnya Ilan tidak menemukan error. Karena memang sudah dirubah sesuai dengan nilai TP.
Logikanya ilan untuk break ada pada "NO Error" lalu break.
sedangkan No error itu nilainya = 0.

Coba fikirkan ketika ordermodif tidak merubah dan karena sudah dirubah maka nilai perubahan tetap satu, apa gak retry mulu tuh ilan?
ok gan dari sini ane dapat gambaran nanti sampe rumah ane praktekan saran dari agan.
 
bool Trail(int Stop)
{
double newStopLoss=0.0;
textstring="";
int StopLevel = (int)MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Stop<StopLevel)Stop=StopLevel;
for (int i = OrdersTotal() - 1; i >= 0; i--){
bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber ) continue;
if(OrderType()==OP_BUY) {
newStopLoss=Bid-(Stop*Point);
if(Bid-OrderOpenPrice()>Point*Stop) {
if((OrderStopLoss()<Bid-Point*Stop) || (OrderStopLoss()==0)) {
if(OrderModify(OrderTicket(),OrderOpenPrice(),newStopLoss,OrderTakeProfit(),0,clrNONE)==false)
{
return(false);
}else
{
return(true);
}
}
}
}
if(OrderType()==OP_SELL) {
newStopLoss=Ask+(Stop*Point);
if((OrderOpenPrice()-Ask)>(Point*Stop)){
if(OrderStopLoss()>Ask+(Point*Stop) || (OrderStopLoss()==0)){
if(OrderModify(OrderTicket(),OrderOpenPrice(),newStopLoss,OrderTakeProfit(),0,clrNONE)==false)
{
return(false);
}else
{
return(true);
}
}
}
}
}
return(true);
}

Kode trailing di atas sudah benar, dan sudah pasti dapat bekerja dengan baik tanpa error.
Kesalahan pasti terjadi pada saat "call" (pemanggilan function Trail).
Coba lakukan pemanggilan function dengan code berikut ini untuk menampilkan kode kesalahan yang benar:

Code:
if(!Trail(15)) Print("OrderModify error ",GetLastError());

Happy coding :):ok:
 
Back
Top