87 lines
2.4 KiB
Text
87 lines
2.4 KiB
Text
//+------------------------------------------------------------------+
|
|
//| 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 <Trade\Trade.mqh>
|
|
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[1] && e1[2]>=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<PositionsTotal();i++)
|
|
{
|
|
ulong tiket=PositionGetTicket(i);
|
|
if(PositionSelectByTicket(tiket) && PositionGetString(POSITION_SYMBOL)==_Symbol &&
|
|
PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetInteger(POSITION_TYPE)==tipe)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void tutupSemua()
|
|
{
|
|
for(int i=PositionsTotal()-1;i>=0;i--)
|
|
{
|
|
ulong tiket=PositionGetTicket(i);
|
|
if(PositionSelectByTicket(tiket) && PositionGetString(POSITION_SYMBOL)==_Symbol &&
|
|
PositionGetInteger(POSITION_MAGIC)==Magic) t.Close(tiket);
|
|
}
|
|
}
|