Saturday, 19 January 2013

koding untuk upperband dan lowerband (BB)

ane mau membuat EA sederhana dimana kita akan memasang SELL saat harga berada di atas UPPERBAND...
jadi kodingannya:
if(close[0]> upper band)
{ ordersend OP_SELL blablabla)

trus kalau harga berada di bawah lower band, maka ane akan pasang posisi buy
so, kodingannya:
if(close[0]< lower band)
{ordersend OP_BUY blablabla}

skalian kalau ada kode untuk middle band apa??
ane udah coba cari di help menu namun tidak ada... thanks ya bagi yang mau bantu

--------------------


PHP Code:
//+------------------------------------------------------------------+
//| Input variables                                                             |
//+------------------------------------------------------------------+
extern int        BB_Period = 96;int start()
  {
     
double upperband, middleband,lowerband;

     
upperband_0=iBands(NULL,0,BB_Period,2,0,PRICE_WEIGHTED,MODE_UPPER,0)
     
middleband_0=iBands(NULL,0,BB_Period,2,0,PRICE_WEIGHTED,0,0)
     
lowerband_0=iBands(NULL,0,BB_Period,2,0,PRICE_WEIGHTED,MODE_LOWER,0)
     if(.......)
       {...........;
        }
  }  
ket.
Null = simbol dimana Band di baca
0= tf yang digunakan // bisa di isi TF_PeriodM5 utk TF M5...PeriodM60 utk tf H1
BB_Period=variable periode
2=Band deviation // bisa juga di extern
0= lupa
PRICE_WEIGHTED=price Apply to
MODE_UPPER=utk line atas, 0 utk line tengah, MODE_LOWER utk line bawah
0=bar saat ini/ shift 0, 1 utk lastbar , 2 dst...utk bar ke 2 kebelakang


semoga membantu...
ati2 pake band kalo strategi spt itu...kalo kena breakout....bisa MC, harus pake filter dan riskmanagement lho

-----------------------------------


thanks gan atas penjelasannya,, ini akan langsung ane coba gan,,, trims ya... trus ane mau nanya berarti kalau ane mau OP_SELL saat harga menembus bolinger atas kode nya begini ya gan: 

if (close[0]>UPPERBAND_0)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, Bid+TakeProfit, Bid-TakeProfit, EAComment, EAMagicNumber);
}
begitu ya gan?? maksudnya angka 'nol' di upperband itu apa seh?? kok agan tulis UPPERBAND_0??? kalau ditulis UPPERBAND saja gak bisa ya?

---------- Post added at 11:27 AM ---------- Previous post was at 10:40 AM ----------
permisi master-master koding.... bantu ane dong,, ini hasil kodingan ane:

PHP Code:
//+------------------------------------------------------------------+
//|                                                      belajar.mq4 |
//|                                                              oyi |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "oyi"
#property link      "oyi"
extern   int      TakeProfit  = 50;extern   int      PipStep     = 50; extern   int      Slippage    = 3; extern   double   Lots        = 0.1;
string   EAComment            = "oyi";       int      EAMagicNumber        = 8095;//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----

//----
   
return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
//----
   
return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  
Comment("\nServer Time: ",Hour(),"\nPairs : ",Symbol(),"\nEquity : ",AccountEquity(),"\nBalance : ",AccountBalance());             // Tampilkan Nama EA di layar
  
double upperband, middleband,lowerband;

     
upperband=iBands(NULL,0,480,2,0,PRICE_CLOSE,MODE_UPPER,0);
     
middleband=iBands(NULL,0,480,2,0,PRICE_CLOSE,0,0);
     
lowerband=iBands(NULL,0,480,2,0,PRICE_CLOSE,MODE_LOWER,0);
if (
Close[0]<lowerband)
   {
    
OrderSend(Symbol(), OP_BUY, Lots,  Ask, Slippage, Ask-TakeProfit, Ask+TakeProfit, EAComment, EAMagicNumber);
   }
if (
Close[0]>upperband)
   {
    
OrderSend(Symbol(), OP_SELL, Lots,  Bid, Slippage, Bid+TakeProfit, Bid-TakeProfit, EAComment, EAMagicNumber);
   }
   return(
0);
  }
//+------------------------------------------------------------------+  
nah, yang jadi masalah kok gak mau Open position yah?? apabila harga close sekarang > nilai middle band ane buka posisi BUY, tapi kok gak mau Open yah,??? bantu dong


------------------------------


Hmmm..kan di logic open posisinya memang tidak ada memakai middleband gan..jd ya mana ngerti si EAnya..itu sih yg ane lihat..
Tp coba di cek di bagian expertnya..ada error apa..
Soalnya memang codingnya sederhana..gak ada point utk digit broker..gak ada lotnya..
Mungkin sebaiknya mencoba memasukan logic open di EA yg sdh bisa jalan aja gan..
oh, saya salah ngomong gan,... ini kan codingnya:
if (Close[0]<lowerband)
{
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Ask-TakeProfit, Ask+TakeProfit, EAComment, EAMagicNumber);
}
if (Close[0]>upperband)
{
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, Bid+TakeProfit, Bid-TakeProfit, EAComment, EAMagicNumber);

nah seharusnya dari coding itu open position BUY dilakukan saat harga tembus BB bawah, trus OP_SELL dilakukan saat harga close sekarang tembus BB atas,,, namun kenyataannya tidak ada open position sama sekali gan

---------------------------------------


nah, yang jadi masalah kok gak mau Open position yah?? apabila harga close sekarang > nilai middle band ane buka posisi BUY, tapi kok gak mau Open yah,??? bantu dong
StopLoss/TakeProfit merupakan tipe data integer.

OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Ask-TakeProfit, Ask+TakeProfit, EAComment, EAMagicNumber);


yang saya bold itu bukan tipe integer

--------------------------------------------

apakah kesalahannya gara-gara itu aja gan???
masalah integer bukankah ane udah deklarasikan di awal? nih deklarasinya:

extern int TakeProfit = 50;
extern int PipStep = 50; 
extern int Slippage = 3; 
extern double Lots = 0.1;

---------- Post added at 07:17 PM ---------- Previous post was at 06:27 PM ----------
permisi agan-agan semuanya..... problem nya udah solved nih... thanks banget ya bantuannya...
ini ane sertakan kode BB buatan ane sendiri (ane nubi banget nih,, gak pernah programming soalnya)
PHP Code:
if (OrdersTotal()==0)
{
if (
Close[0]>middleband)
   {
    
OrderSend(Symbol(), OP_BUY, Lots,  Ask, 3, Ask-0.005, Ask+0.005, EAComment, EAMagicNumber);
    return;
    }
else if (
Close[0]<middleband)
   {
    
OrderSend(Symbol(), OP_SELL, Lots,  Bid, 3, Bid+0.005, Bid-0.005, EAComment, EAMagicNumber);
   return;
   }
  }
  }  
nah, yang sekarang jadi problem adalah bagaimana menentukan TP-nya?? enaknya kan pakai extern nih,, akan tetapi ternyata ane coba kok gak bisa,, jadinya ane masukkan stop loss dan take profitnya pakai ini: Bid+0.005, atau Bid-0.005.....
rasanya tidak convenience gan

-----------------------------------------


Quote Originally Posted by oyi123 View Post
nah, yang sekarang jadi problem adalah bagaimana menentukan TP-nya?? enaknya kan pakai extern nih,, akan tetapi ternyata ane coba kok gak bisa,, jadinya ane masukkan stop loss dan take profitnya pakai ini: Bid+0.005, atau Bid-0.005.....
rasanya tidak convenience gan
tinggal di kalikan Point aja....
jadi kodenya:

OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Ask-TakeProfit*Point, Ask+TakeProfit*Point, EAComment, EAMagicNumber);

tapi perlu di ingat....kode ente TP sama SL nya kan menggunakan 1 parameter...so nilainya harus diatas "MarketInfo(Symbol(),MODE_STOPLEVEL) + spread".


---------------------------------------




Friday, 18 January 2013

EA zigzag martingale modif for safety


//+------------------------------------------------------------------+
//|                                                     10point3.mq4 |
//|                              Copyright © 2005, Alejandro Galindo |
//|                                   Revised version from davidke20 |
//|                 Settings by Marcel Corzo - marcelcorzo@yahoo.com |
//|                  Added ZigZag by Yast77
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Alejandro Galindo"
#property link      ""

extern int    Magic              = 20081107;
extern double TakeProfit         = 45;
extern double Lots               = 0.01;
extern double InitialStop        = 300;
extern double TrailingStop       = 45;
extern int    MaxTrades          = 10;
extern double Multiplier         = 2;
extern int    Pips               = 30;
extern int    OrderstoProtect    = 6;
extern bool   Money_management   = false;
extern int    AccountType        = 2;        //0: Standard account(NorthFinance,MiG,Alpari) 1: Normal account(FXLQ,FXDD) 2:InterbankFX's NANO Account
extern double risk               = 0.5;
extern bool   ReverseSignal      = false;
//extern int    Fast_EMA           = 12;
//extern int    Slow_EMA           = 26;
//extern int    Signal_SMA         = 9;
//extern int    Shift              = 1;
//extern int    TradingRange       = 0;
extern bool UseTimeFilter=false;
extern int StopTrade = 18;
extern int StartTrade = 19;

extern int ExtDepth=17; //10-21 !15 !17
extern int ExtDeviation=7; //!7
extern int ExtBackstep=5;  //!5
int Urgency=2;

datetime TimeStamp=0;
int  OpenOrders=0, cnt=0;
int  slippage=5;
double sl=0, tp=0;
double BuyPrice=0, SellPrice=0;
double lotsi=0, mylotsi=0;
int mode=0, myOrderType=0;
bool ContinueOpening=True;
double LastPrice=0;
int  PreviousOpenOrders=0;
double Profit=0;
int LastTicket=0, LastType=0;
double LastClosePrice=0, LastLots=0;
double PipValue=0;
string text="", text2="",text3="",text4="";

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{

   double MinLots = NormalizeDouble((MarketInfo(Symbol(), MODE_MINLOT)),2);
   double MaxLots = NormalizeDouble((MarketInfo(Symbol(), MODE_MAXLOT)),2);
   double LotSizeValue = NormalizeDouble((MarketInfo(Symbol(), MODE_LOTSIZE)),0);
   double PipValue=MarketInfo(Symbol(),16);

   if(Money_management)
   {
      switch(AccountType)
      {
         case 0: lotsi=NormalizeDouble(MathCeil((risk*AccountEquity())/10000)/10,1); break;
         case 1: lotsi=NormalizeDouble((risk*AccountEquity())/100000,2); break;
         case 2: lotsi=NormalizeDouble((risk*AccountEquity())/1000,2); break;
         default: lotsi=NormalizeDouble(MathCeil((risk*AccountEquity())/10000)/10,1); break;
      }
   }
   else
   {
      lotsi=Lots;
   }
 
   if(lotsi<MinLots){lotsi=MinLots;}
   if(lotsi>MaxLots){lotsi=MaxLots;}
 
   OpenOrders=0;
   for(cnt=0;cnt<OrdersTotal();cnt++)
   {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
 if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
 {
   OpenOrders++;
 }
   }  
   if (PreviousOpenOrders>OpenOrders)
   {
 for(cnt=OrdersTotal();cnt>=0;cnt--)
 {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
   mode=OrderType();
 if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
 {
if (mode==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Blue); }
if (mode==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),slippage,Red); }
return(0);
}
 }
   }

   PreviousOpenOrders=OpenOrders;
   if (OpenOrders>=MaxTrades)
   {
 ContinueOpening=False;
   } else {
 ContinueOpening=True;
   }

   if (LastPrice==0)
   {
 for(cnt=0;cnt<OrdersTotal();cnt++)
 {
   OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode=OrderType();
if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
{
LastPrice=OrderOpenPrice();
if (mode==OP_BUY) { myOrderType=2; }
if (mode==OP_SELL) { myOrderType=1; }
}
 }
   }

   if (OpenOrders<1)
   {
     if (UseTimeFilter)
     {//check trading time
        if (Hour()>StopTrade && Hour()<StartTrade)
        {Comment("No trading, danger time zone!");
        return(0);}//End of trading time check
     }

    myOrderType=ZIGZAG();


       if (ReverseSignal)
    {
      if (myOrderType==1) { myOrderType=2; }
   else { if (myOrderType==2) { myOrderType=1; } }
    }
   }

   // if we have opened positions we take care of them
   for(cnt=OrdersTotal();cnt>=0;cnt--)
   {
     OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
 if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
 {
   if (OrderType()==OP_SELL)
   {
     if (TrailingStop>0)
 {
 if (OrderOpenPrice()-Ask>=(TrailingStop*Point+Pips*Point))
 {
if (OrderStopLoss()>(Ask+Point*TrailingStop))
{
   OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderClosePrice()-TakeProfit*Point-TrailingStop*Point,800,Purple);
  return(0);  
  }
   }
 }
   }
 
   if (OrderType()==OP_BUY)
   {
  if (TrailingStop>0)
  {
  if (Bid-OrderOpenPrice()>=(TrailingStop*Point+Pips*Point))
{
if (OrderStopLoss()<(Bid-Point*TrailingStop))
{
  OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderClosePrice()+TakeProfit*Point+TrailingStop*Point,800,Yellow);
                  return(0);
}
  }
}
   }
    }
   }
 
   Profit=0;
   LastTicket=0;
   LastType=0;
LastClosePrice=0;
LastLots=0;
for(cnt=0;cnt<OrdersTotal();cnt++)
{
 OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
 if (OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
 {
    LastTicket=OrderTicket();
if (OrderType()==OP_BUY) { LastType=OP_BUY; }
if (OrderType()==OP_SELL) { LastType=OP_SELL; }
LastClosePrice=OrderClosePrice();
LastLots=OrderLots();
if (LastType==OP_BUY)
{
//Profit=Profit+(Ord(cnt,VAL_CLOSEPRICE)-Ord(cnt,VAL_OPENPRICE))*PipValue*Ord(cnt,VAL_LOTS);
if (OrderClosePrice()<OrderOpenPrice())
{ Profit=Profit-(OrderOpenPrice()-OrderClosePrice())*OrderLots()/Point; }
if (OrderClosePrice()>OrderOpenPrice())
{ Profit=Profit+(OrderClosePrice()-OrderOpenPrice())*OrderLots()/Point; }
}
if (LastType==OP_SELL)
{
//Profit=Profit+(Ord(cnt,VAL_OPENPRICE)-Ord(cnt,VAL_CLOSEPRICE))*PipValue*Ord(cnt,VAL_LOTS);
if (OrderClosePrice()>OrderOpenPrice())
{ Profit=Profit-(OrderClosePrice()-OrderOpenPrice())*OrderLots()/Point; }
if (OrderClosePrice()<OrderOpenPrice())
{ Profit=Profit+(OrderOpenPrice()-OrderClosePrice())*OrderLots()/Point; }
}
//Print(Symbol,":",Profit,",",LastLots);
 }
   }

Profit=Profit*PipValue;
text2="Profit: $"+DoubleToStr(Profit,2)+" +/-";
   if (OpenOrders>=OrderstoProtect)
   {  
    //Print(Symbol,":",Profit);
    if ((Profit>=(AccountBalance()*(risk/100) && Money_management)) || (Profit>=(lotsi*(LotSizeValue/100)) && !Money_management))
    {
       OrderClose(LastTicket,LastLots,LastClosePrice,slippage,Yellow);
       ContinueOpening=False;
       return(0);
    }
   }

      if (!IsTesting())
      {
    if (myOrderType==3) { text="No conditions to open trades"; }
    else { text="                         "; }
    Comment("Buy range: ",text3,"\nSellRange: ",text4,"\n","LastPrice=",LastPrice," Previous open orders=",PreviousOpenOrders,"\nContinue opening=",ContinueOpening," OrderType=",myOrderType,"\n",text2,"\nLots=",lotsi,"\n",text,
    "\nProperty of Alejandro Gallindo","\nhttp://elcactus.com\nhttp://www.forex-tsd.com");
      }

      if (myOrderType==1 && ContinueOpening)
      {
    if ((Bid-LastPrice)>=Pips*Point || OpenOrders<1)
    {
   SellPrice=Bid;
   LastPrice=0;
   if (TakeProfit==0) { tp=0; }
   else { tp=SellPrice-TakeProfit*Point; }
   if (InitialStop==0) { sl=0; }
   else { sl=NormalizeDouble(SellPrice+InitialStop*Point + (MaxTrades-OpenOrders)*Pips*Point, Digits);  }
   if (OpenOrders!=0)
   {
     mylotsi=lotsi;
     for(cnt=1;cnt<=OpenOrders;cnt++)
     {
    if (MaxTrades>12) { mylotsi=NormalizeDouble(mylotsi*1.5,2); }
    else { mylotsi=NormalizeDouble(mylotsi*Multiplier,2); }
     }
   } else { mylotsi=lotsi; }
   if (mylotsi>10) { mylotsi=10; }
   OrderSend(Symbol(),OP_SELL,mylotsi,SellPrice,slippage,sl,tp,"10p3-Sell",Magic,0,Red);      
   return(0);
    }
      }
   
      if (myOrderType==2 && ContinueOpening)
      {
    if ((LastPrice-Ask)>=Pips*Point || OpenOrders<1)
    {
   BuyPrice=Ask;
   LastPrice=0;
   if (TakeProfit==0) { tp=0; }
   else { tp=BuyPrice+TakeProfit*Point; }
   if (InitialStop==0)  { sl=0; }
   else { sl=NormalizeDouble(BuyPrice-InitialStop*Point - (MaxTrades-OpenOrders)*Pips*Point, Digits); }
   if (OpenOrders!=0) {
  mylotsi=lotsi;
  for(cnt=1;cnt<=OpenOrders;cnt++)
  {
 if (MaxTrades>12) { mylotsi=NormalizeDouble(mylotsi*1.5,2); }
 else { mylotsi=NormalizeDouble(mylotsi*Multiplier,2); }
  }
   } else { mylotsi=lotsi; }
   if (mylotsi>5) { mylotsi=5; }
   OrderSend(Symbol(),OP_BUY,mylotsi,BuyPrice,slippage,sl,tp,"10p3-Buy",Magic,0,Blue);  
   return(0);
    }
      }

//----
   return(0);
  }
//+------------------------------------------------------------------+

int ZIGZAG()
{
   myOrderType=3;
   int i, candle;
   double ZigZag;
   int CurrentCondition;
 
    while(candle<100)  // ganti angka 100 ---> 1
     {
      ZigZag=iCustom(NULL,0,"ZigZag",   ExtDepth,ExtDeviation,ExtBackstep,   0,candle);
      if(ZigZag!=0) break;
      candle++;
     }
   if(candle>99) return(0);
   if(ZigZag==High[candle])
      myOrderType=2;
   else if(ZigZag==Low[candle])
      myOrderType=1;
   
   
/*
   double MACDMainCurr=iMACD(NULL,0,Fast_EMA,Slow_EMA,Signal_SMA,PRICE_CLOSE,MODE_MAIN,Shift);
   double MACDSigCurr=iMACD(NULL,0,Fast_EMA,Slow_EMA,Signal_SMA,PRICE_CLOSE,MODE_SIGNAL,Shift);
   double MACDMainPre=iMACD(NULL,0,Fast_EMA,Slow_EMA,Signal_SMA,PRICE_CLOSE,MODE_MAIN,Shift+1);
   double MACDSigPre=iMACD(NULL,0,Fast_EMA,Slow_EMA,Signal_SMA,PRICE_CLOSE,MODE_SIGNAL,Shift+1);

   double SellRange=TradingRange*Point;
   double BuyRange=(TradingRange-(TradingRange*2))*Point;

   if(MACDMainCurr>MACDSigCurr && MACDMainPre<MACDSigPre && MACDSigPre<BuyRange && MACDMainCurr<0 && TimeStamp!=iTime(NULL,0,0)) {myOrderType=2; TimeStamp=iTime(NULL,0,0);}
   if(MACDMainCurr<MACDSigCurr && MACDMainPre>MACDSigPre && MACDSigPre>SellRange && MACDMainCurr>0 && TimeStamp!=iTime(NULL,0,0)) {myOrderType=1; TimeStamp=iTime(NULL,0,0);}
 
   text3=DoubleToStr(SellRange,Digits);
   text4=DoubleToStr(BuyRange,Digits);
*/
if(candle<=Urgency){return(myOrderType);}
else
return(0);
}

============================================================
modiv :

Sedikit ulasan mengenai ea nya mbah Aji
Back test setingan TP = 100, biar trailingnya aktif
Yang lain default
Result good...
Tp ada yng OP nya sampai banyak

Iseng2 signal zz nya tak ganti dikit...
while(candle<1)
{
ZigZag=iCustom(NULL,0,"ZigZag", ExtDepth,ExtDeviation,ExtBackstep, 0,candle);
if(ZigZag!=0) break;
candle++;
}

candle<100 ----> tak ganti candle<1
Maksudnya biar ea OP nya selalu pakai signal yang terbaru

Lihatlah perbedaannya
Candle = 100



Jadi apabila ada perubahan arah market.....dah ga dag dig dug der lah...
Paling tidak mengurangi potensi jumlah OP yang berlebihan

Semoga bermanfaat....



Thursday, 17 January 2013

Belajar Membuat EA Sederhana 22 Martingel (Jebakan II)


Pastikan sudah mengikuti part 21 disini

Pada posting kali ini saya akan mengedit EA pada part 21 untuk ditambahi martingel .
Martingel yang di maksud juga mengacu pada jarak (range) order dan pergantian candel untuk mencegah terjadinya beberapa order ketika terjadi lonjakan harga dan candel panjang , seperti pada part 18

Penambahan coding martingelnya :

1. Fungsi untuk perintah order martingelnya

if(trad()==1 && wt!=Time[0] && jumlahorder(1)==0 && jumlahorder(0)<Max_order ) {OrderSend(Symbol(),OP_BUY,xlot(0),Ask,3,slb, tpb,Nama_EA,Magic,0,Blue); wt=Time[0]; }
if(trad()==2 && wk!=Time[0] && jumlahorder(0)==0 && jumlahorder(1)<Max_order ) {OrderSend(Symbol(),OP_SELL,xlot(1),Bid,3,sls, tps,Nama_EA,Magic,0,Red); wk=Time[0];  }

2. Fungsi untuk perhitungan jarak order dan  perintah ketika jarak terpenuhi


int trad()
{
 int type,dp; double opb,ops,lastlotb,lastlots; 
  for (int i = 0; i < OrdersTotal(); i++) {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
     type=OrderType();
   if(type==0)opb = OrderOpenPrice();
   if(type==1)ops = OrderOpenPrice();
  }
   double as = opb - Jarak_order * pt;
   double bi = ops + Jarak_order * pt;
   if ( Ask <= as &&  jumlahorder(0)> 0 ) dp=1; 
 if ( Bid >= bi &&  jumlahorder(1)> 0 ) dp=2; 

return(dp);
}

3. Fungsi untuk perhitungan Lots setiap pengulangan ordernya
double xlot(int m)
{
 double ylot,dlot; 
  for (int i = 0; i < OrdersTotal(); i++) {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic ||OrderType()!=m) continue;
     dlot=OrderLots();
     }
if(OrderType()==m)ylot=NR(Lots*MathPow(DiMarti,jumlahorder(m)));
return(ylot);
}


Nah setelah di rakit begini deh hasinya:


//+------------------------------------------------------------------+
//|                                                    EA Jum+Profit |
//|                                                gifaesa@yahoo.com |
//|                                     http://JumForex.blogspot.com |
//+------------------------------------------------------------------+

#property copyright "JumForex.blogspot.com"
#property link      "Gifaesa@yahoo.com"

extern string  Nama_EA                 = "Jum+Profit";
extern bool    Trade_buystop           = true;
extern bool    Trade_sellstop          = true;
extern string  Jam_server              = "Set sesuai selera";
extern int     Jam                     = 0;
extern int     Menit                   = 30;
extern bool    Tp_in_Money             = false;
extern double  TP_in_money             = 5;
extern int     Jarak_order             = 35;
extern int     Max_order               = 10;
extern double  DiMarti                 = 1.3;
extern int     TP                      = 100;
extern int     SL                      = 20;
extern double  Lots                    = 0.1;
extern int     Jarak_stop              = 25;
extern bool    TrailingStop_           = true;
extern int     TrailingStop            = 12;
extern int     Magic                   = 69;
double slb,tpb,sls,tps,pt,lslb,ltpb;
int wt,wk,tiket,ticet;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   if(Digits==3 || Digits==5) pt=10*Point;   else   pt=Point;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
label();
if(TrailingStop_)dtrailing();
if(Tp_in_Money ){
  if(TP_in_money<= money(0)){ 
   closeall(0);
   closeall(2);
   }
  if(TP_in_money<= money(1)){ 
   closeall(1);
   closeall(3);
   }
 }
if(jumlahorder(0)==1 && jumlahorder(1)==0){ 
   closeall(5);
   }
if(jumlahorder(0)==0 && jumlahorder(1)==1){ 
   closeall(4);
   }
if(Hour()==23){
   closeall(4);
   closeall(5);
   }
//----
   double as = Ask + Jarak_stop*pt;
   double bi = Bid - Jarak_stop*pt;
   if(SL==0)slb=0;else slb=as-SL*pt;
   if(SL==0)sls=0;else sls=bi+SL*pt;
   if(TP==0)tpb=0;else tpb=as+TP*pt;
   if(TP==0)tps=0;else tps=bi-TP*pt;
if(DayOfWeek()!=1 && Hour()==Jam && Minute()==Menit && jumlahorder(0)==0 && jumlahorder(1)==0){
  if(jumlahorder(4)==0  && Trade_buystop  ) {OrderSend(Symbol(),OP_BUYSTOP,NR(Lots),as,3,slb, tpb,Nama_EA,Magic,0,Blue);}
  if(jumlahorder(5)==0  && Trade_sellstop ) {OrderSend(Symbol(),OP_SELLSTOP,NR(Lots),bi,3,sls, tps,Nama_EA,Magic,0,Red);}
 }
if(trad()==1 && wt!=Time[0] && jumlahorder(1)==0 && jumlahorder(0)<Max_order ) {OrderSend(Symbol(),OP_BUY,xlot(0),Ask,3,slb, tpb,Nama_EA,Magic,0,Blue); wt=Time[0]; }
if(trad()==2 && wk!=Time[0] && jumlahorder(0)==0 && jumlahorder(1)<Max_order ) {OrderSend(Symbol(),OP_SELL,xlot(1),Bid,3,sls, tps,Nama_EA,Magic,0,Red); wk=Time[0];  }

   return(0);
  }
//+------------------------------------------------------------------+

int jumlahorder( int tipe)
{
int total=0;
for(int i=0; i<OrdersTotal(); i++)
  {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic || OrderType()!=tipe) continue;
     total++;
  }

return(total);
}
double NR(double thelot)
{
    double maxlots = MarketInfo(Symbol(), MODE_MAXLOT),
    minilot = MarketInfo(Symbol(), MODE_MINLOT),
    lstep = MarketInfo(Symbol(), MODE_LOTSTEP);
    double lots = lstep * NormalizeDouble(thelot / lstep, 0);
    lots = MathMax(MathMin(maxlots, lots), minilot);
    return (lots);
}

void dtrailing()
{
for(int i=0; i<OrdersTotal(); i++){
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic ) continue;
        if(OrderType()==OP_BUY)  {
         if(Bid-OrderOpenPrice()>pt*TrailingStop)  {
           if((OrderStopLoss()<Bid-pt*TrailingStop) || (OrderStopLoss()==0)) {
              OrderModify(OrderTicket(),OrderOpenPrice(),Bid-pt*TrailingStop,OrderTakeProfit(),0,Green);
              return(0);
              }
              }
           }
        if(OrderType()==OP_SELL)  {
         if((OrderOpenPrice()-Ask)>(pt*TrailingStop)){
           if(OrderStopLoss()>(Ask+pt*TrailingStop) || (OrderStopLoss()==0)){
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+pt*TrailingStop,OrderTakeProfit(),0,Red);
              return(0);
              }
              }
           }
     }
  
}
void closeall(int m)
{
 for (int i = OrdersTotal() - 1; i >= 0; i--) {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if (OrderSymbol() != Symbol() || OrderMagicNumber()!=Magic /*|| m!= OrderType()*/) continue;
  if (OrderType() == m) OrderDelete(OrderTicket());
  if (OrderType() == m) OrderDelete(OrderTicket());
  if (OrderType() == m) OrderClose(OrderTicket(), OrderLots(), Bid, 3, CLR_NONE);
  if (OrderType() == m)OrderClose(OrderTicket(), OrderLots(), Ask, 3, CLR_NONE);
 }
}
double money(int m)
{
 double dp = 0;
 int i;
 for (i = 0; i < OrdersTotal(); i++) {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if (OrderSymbol() != Symbol()  || OrderMagicNumber()!=Magic || m!=OrderType()) continue;
  dp += OrderProfit();
 }
 return(dp);
}

void label()
{
 Comment("\n ",
   "\n ",
   "\n ------------------------------------------------",
   "\n :: =>+Jum+Profit<=",
   "\n :: =>JumForex.blogspot.com<=",
   "\n ------------------------------------------------",
   "\n :: Spread                 : ", MarketInfo(Symbol(), MODE_SPREAD),
   "\n :: Leverage               : 1 : ", AccountLeverage(),
   "\n :: Equity                 : ", AccountEquity(),
   "\n :: Jam Server             :", Hour(), ":", Minute(),
   "\n ------------------------------------------------",
   "\n :: Floting buy : ",money(0),
   "\n :: Floting sell : ",money(1),
   "\n ------------------------------------------------",
   "\n :: >>By: Jum69<<",
   "\n ------------------------------------------------");
}
int trad()
{
 int type,dp; double opb,ops,lastlotb,lastlots; 
  for (int i = 0; i < OrdersTotal(); i++) {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
     type=OrderType();
   if(type==0)opb = OrderOpenPrice();
   if(type==1)ops = OrderOpenPrice();
  }
   double as = opb - Jarak_order * pt;
   double bi = ops + Jarak_order * pt;
   if ( Ask <= as &&  jumlahorder(0)> 0 ) dp=1; 
 if ( Bid >= bi &&  jumlahorder(1)> 0 ) dp=2; 

return(dp);
}
double xlot(int m)
{
 double ylot,dlot; 
  for (int i = 0; i < OrdersTotal(); i++) {
   if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
   if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic ||OrderType()!=m) continue;
     dlot=OrderLots();
     }
if(OrderType()==m)ylot=NR(Lots*MathPow(DiMarti,jumlahorder(m)));
return(ylot);
}

Ini hasil BTnya:



Okey seilahkan de coba ya...
Bila mana ada yang kurang jelas dan ada ide positif silahkan comment ya!

How brokers can mess with your account and take your money

Oh they can mess with you alright...

You've got to be warey when a broker rings you for business lol. Called me asking to try their new MT4 trading platform. Even the demo spreads are 33% larger than an average broker, no thanks.

I kept on getting trade context error 146, so I added some nice code to fix that... guess what... still get them, not as frequent but still messing with orders. Should expect that from a market making broker... wont be opening an account with them.

SD, have you ever noticed a significant delay in ticks on the chart your EA is trading every time you recompile that EA to be a little better? somethin fishy like EA transmission to broker me thinks...
I get my EA's to place an arrow on the chart its trading to provide a visual means that the signal happened on that very bar & time. If the trade doesn't go through I know that its broker manipulation then.



// my context busy code just before orderclose & ordersend, shouldn't get error 146

for (double tb=0; IsTradeContextBusy() && tb < 30; tb++) Sleep(100); //Wait upto 3 seconds (ie 30 x 100milliseconds)
if (tb > 0) Print("Trade context was busy ", DoubleToStr(100 * tb / 1000, 2)," seconds");
if (!IsTradeAllowed()) return;


// my arrow codes to tell me that my EA had a signal but if No Trade was executed? That would more than make me suspicious, I'd have proof!

// Place code before or after ordersend BUY

ObjectCreate("X137_Buy_" + Time[0], OBJ_ARROW, 0, TimeCurrent(), Bid);
ObjectSet("X137_Buy_" + Time[0], OBJPROP_ARROWCODE, 228);
ObjectSet("X137_Buy_" + Time[0], OBJPROP_COLOR, ArrowUP);

// Place code before or after ordersend SELL

ObjectCreate("X137_Sell_" + Time[0], OBJ_ARROW, 0, TimeCurrent(), Bid);
ObjectSet("X137_Sell_" + Time[0], OBJPROP_ARROWCODE, 230);
ObjectSet("X137_Sell_" + Time[0], OBJPROP_COLOR, ArrowDOWN);