87 行
2.4 KiB
Text
87 行
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);
| |||
}
| |||
}
|