//+------------------------------------------------------------------+ //| Robot_Tren_MT5.mq5 | //+------------------------------------------------------------------+ #property version "1.00" #property strict input double LotSize=0.01; input int EmaCepat=9; input int EmaLambat=21; input int SL=50; input int TP=100; input ulong Magic=55555; #include CTrade t; int h1,h2; int OnInit() { t.SetExpertMagicNumber(Magic); t.SetTypeFillingBySymbol(_Symbol); h1=iMA(_Symbol,_Period,EmaCepat,0,MODE_EMA,PRICE_CLOSE); h2=iMA(_Symbol,_Period,EmaLambat,0,MODE_EMA,PRICE_CLOSE); return (h1==INVALID_HANDLE||h2==INVALID_HANDLE)?INIT_FAILED:INIT_SUCCEEDED; } void OnTick() { double e1[],e2[]; ArraySetAsSeries(e1,true); ArraySetAsSeries(e2,true); if(CopyBuffer(h1,0,0,3,e1)<3 || CopyBuffer(h2,0,0,3,e2)<3) return; bool adaBeli=adaPosisi(ORDER_TYPE_BUY); bool adaJual=adaPosisi(ORDER_TYPE_SELL); if(!adaBeli && e1[1]>e2[1] && e1[2]<=e2[2]) { tutupSemua(); buka(ORDER_TYPE_BUY); } if(!adaJual && e1[1]=e2[2]) { tutupSemua(); buka(ORDER_TYPE_SELL); } } void buka(ENUM_ORDER_TYPE tipe) { double titik=SymbolInfoDouble(_Symbol,SYMBOL_POINT); int dig=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); double harga=(tipe==ORDER_TYPE_BUY)?SymbolInfoDouble(_Symbol,SYMBOL_ASK):SymbolInfoDouble(_Symbol,SYMBOL_BID); double sl,tp; if(tipe==ORDER_TYPE_BUY) { sl=NormalizeDouble(harga-SL*titik*10,dig); tp=NormalizeDouble(harga+TP*titik*10,dig); } else { sl=NormalizeDouble(harga+SL*titik*10,dig); tp=NormalizeDouble(harga-TP*titik*10,dig); } t.SetStopLevel(sl); t.SetTakeLevel(tp); if(tipe==ORDER_TYPE_BUY) t.Buy(LotSize,_Symbol,harga,sl,tp); else t.Sell(LotSize,_Symbol,harga,sl,tp); } bool adaPosisi(ENUM_ORDER_TYPE tipe) { for(int i=0;i=0;i--) { ulong tiket=PositionGetTicket(i); if(PositionSelectByTicket(tiket) && PositionGetString(POSITION_SYMBOL)==_Symbol && PositionGetInteger(POSITION_MAGIC)==Magic) t.Close(tiket); } }