//+------------------------------------------------------------------+
//| Raito System.mq4 |
//| @Pherry Chandra |
//| TIPE : EA |
//+------------------------------------------------------------------+
#property copyright "@Pherry Chandra"
#property link "http://"
extern string MgmComment = "=== MANAGEMENT ORDER ===";
int TakeProfit = 1000;
int StopLoss = 1000;
extern int Slippage = 3;
extern int Spread = 3;
extern double lot = 0.01;
double Increment = 0.01;
extern double Multipliers = 1.5;
int PipStep = 10;
extern int MaxBuy = 20;
extern int MaxSell = 20;
extern double ReachMoney = 1;
double TPinMoney = 1;
extern string HourComment = "=== TIME FILTER ===";
extern bool UseTime = True;
extern int OpenHour = 0;
extern int CloseHour = 23;
bool EnterOpenBar = true;
bool ProfitTrailing = True;
int TrailingStop = 50; //4 Digit
int TrailingStep = 10; //4 Digit
extern string IndikatorComment = "=== INDIKATOR ORDER ===";
extern int RISK = 3;
extern int SSP = 9;
extern bool Enablemail = false;
extern string iComment = "=======================";
extern string EAName = "EA";
extern string EAComment = "EA";
extern int EAMagicNumber = 111;
double SetPoint = 0;
int a,b,x,y;
bool Ans;
int CurrentTime;
bool ContinueTrade;
color TitleColor = White;
color Line_Color = Yellow;
color PosColor = Lime;
color NegColor = Red;
color TextColor = White;
bool holdOpen = false;
int init()
{
string chart[256]; int i;
for (i = 0; i < 256; i++) chart[i] = CharToStr(i);
int TradeMark=StrToInteger(chart[67]+chart[111]+chart[112]+chart[121]+chart[32]+chart[82]+chart[105]+chart[103]+chart[104]+chart[116]+chart[32]+chart[169]+chart[32]+chart[75]+chart[97]+chart[122]+chart[97]+chart[111]+chart[111]+chart[32]+chart[50]+chart[48]+chart[49]+chart[49]+chart[32]);
CurrentTime= Time[0];
SetBroker();
return(0);
}
int deinit()
{
ObjectsDeleteAll(0,OBJ_LABEL);
return(0);
}
int start()
{
Comment(EAName);
int hard_accnt = 3597016;
string expire_date = "2015.05.31";
datetime e_d = StrToTime(expire_date);
int accnt = AccountNumber();
if (CurrentTime >= e_d)
{
//Alert ("The trial version has been expired!");
//return(0);
}
if (accnt != hard_accnt)
{
//Alert ("You can not use this account (" + DoubleToStr(accnt,0) + ") with this program!");
//return(0);
}
int i,cnt=0,ticket=0;
int Bought=0,Sold=0,bs=0,ss=0;
int iCount = 0;
double orderprofit = 0;
double TotLotsBuy = 0;
double TotLotsSell = 0;
double TempLotBuy = 0;
double TempLotSell = 0;
double LastLots = 0;
int LastOP = -1;
//Check Orders
for (i=0;i<OrdersTotal();i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber && OrderType()==OP_BUY) {Bought++; }
if(OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber && OrderType()==OP_SELL) {Sold++; }
if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==EAMagicNumber)
{
if(LastLots<OrderLots()) {LastLots=OrderLots();}
TotLotsBuy+=OrderLots();
LastOP = 1;
}
if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==EAMagicNumber)
{
if(LastLots<OrderLots()) {LastLots=OrderLots();}
TotLotsSell+=OrderLots();
LastOP = 0;
}
orderprofit+=OrderProfit();
}
if (Tradetime() > 0)
{
if (EnterOpenBar)
{
if(CurrentTime != Time[0])
{
if((Signal() ==1 || Signal() == 0) )
{
if((Bought+Sold) == 1 && orderprofit > ReachMoney)
{
holdOpen = true;
}
else if((Bought+Sold) > 1 && orderprofit > 0)
{
holdOpen = true;
}
}
CurrentTime= Time[0];
}
}
while(holdOpen == true)
{
ForceCloseAllBuy();
ForceCloseAllSell();
bs = 0;
ss = 0;
for (int j=0;j<OrdersTotal();j++)
{
OrderSelect(j,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber && OrderType()==OP_BUY) {bs++; }
if(OrderSymbol() == Symbol() && OrderMagicNumber() == EAMagicNumber && OrderType()==OP_SELL) {ss++; }
}
if(bs + ss == 0)
{
holdOpen = false;
LastLots = lot;
}
}
if((Bought + Sold == 0) && holdOpen == false)
{
if( Signal() == 1 )
{
OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, EAComment, EAMagicNumber);
}
//Sell
else if(Signal() == 0 )
{
OrderSend(Symbol(), OP_SELL, lot, Bid, Slippage, 0, 0, EAComment, EAMagicNumber);
}
}
else if((Bought + Sold > 0) && holdOpen == false)
{
//Buy
if( Signal() == 1 && LastOP == 0)
{
TempLotBuy = (2*TotLotsSell) - TotLotsBuy;
OrderSend(Symbol(), OP_BUY, TempLotBuy, Ask, Slippage, 0, 0, EAComment, EAMagicNumber);
//OrderSend(Symbol(), OP_BUY, NormalizeDouble(LastLots*Multipliers,2), Ask, Slippage, 0, 0, EAComment, EAMagicNumber);
//OrderSend(Symbol(), OP_BUY, NormalizeDouble(LastLots+Increment,2), Ask, Slippage, 0, 0, EAComment, EAMagicNumber);
}
//Sell
else if(Signal() == 0 && LastOP == 1)
{
TempLotSell = (2*TotLotsBuy) - TotLotsSell;
OrderSend(Symbol(), OP_SELL, TempLotSell, Bid, Slippage, 0, 0, EAComment, EAMagicNumber);
//OrderSend(Symbol(), OP_SELL, NormalizeDouble(LastLots*Multipliers,2), Bid, Slippage, 0, 0, EAComment, EAMagicNumber);
//OrderSend(Symbol(), OP_SELL, NormalizeDouble(LastLots+Increment,2), Bid, Slippage, 0, 0, EAComment, EAMagicNumber);
}
}
}
return(0);
}
void SetBroker()
{
if (Digits==3 || Digits==5) // Perintah untuk broker 5 Digits
{SetPoint=Point*10;}
else // Perintah untuk broker 4 Digits
{SetPoint=Point;}
}
int Tradetime()
{
int TradingTime=0;
if(OpenHour<CloseHour)
{
if (Hour() >= OpenHour && Hour() <= CloseHour) TradingTime=1;
}
else if(OpenHour>CloseHour)
{
if (Hour() >= OpenHour || Hour() <= CloseHour) TradingTime=1;
}
return(TradingTime);
}
void ForceCloseAllBuy()
{
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
{
Ans=false;
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==EAMagicNumber)
{
if(OrderType()==OP_BUY && OrderSymbol() == Symbol())
while (Ans==false)
{
RefreshRates();
Ans = OrderClose(OrderTicket(),OrderLots(),Bid,Slippage); // Close order
}
}
}
}
void ForceCloseAllSell()
{
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
{
Ans=false;
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber()==EAMagicNumber )
{
if(OrderType()==OP_SELL && OrderSymbol() == Symbol())
{
while (Ans==false)
{
RefreshRates();
Ans = OrderClose(OrderTicket(),OrderLots(),Ask,Slippage); // Close order
}
}
}
}
}
void ForceCloseAllBuyProfit()
{
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
{
Ans=false;
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber()==EAMagicNumber )
{
if(OrderType()==OP_BUY && OrderProfit() > TPinMoney)
while (Ans==false)
{
RefreshRates();
Ans = OrderClose(OrderTicket(),OrderLots(),Bid,Slippage); // Close order
}
}
}
}
void ForceCloseAllSellProfit()
{
for (int cnt = OrdersTotal()-1 ; cnt >= 0; cnt--)
{
Ans=false;
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber()==EAMagicNumber )
{
if(OrderType()==OP_SELL && OrderProfit() > TPinMoney)
{
while (Ans==false)
{
RefreshRates();
Ans = OrderClose(OrderTicket(),OrderLots(),Ask,Slippage); // Close order
}
}
}
}
}
void LABEL(string name,string fontname,int besarfont,int jarak_X,int jarak_Y,color a_color, int corner,string text)
{
if(ObjectFind(name)<0) ObjectCreate(name,OBJ_LABEL,0,0,0);
ObjectSetText(name,text,besarfont,fontname,a_color);
ObjectSet(name,OBJPROP_CORNER,corner);
ObjectSet(name,OBJPROP_XDISTANCE,jarak_X);
ObjectSet(name,OBJPROP_YDISTANCE,jarak_Y);
}
void Trailing() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
TrailingPositions();
}
}
}
void TrailingPositions() {
double pBid, pAsk, pp;
pp = MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY && OrderSymbol() == Symbol() && OrderMagicNumber()==EAMagicNumber) {
pBid = MarketInfo(OrderSymbol(), MODE_BID);
if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp) {
if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp) {
ModifyStopLoss(pBid-TrailingStop*pp);
return;
}
}
}
if (OrderType()==OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber()==EAMagicNumber) {
pAsk = MarketInfo(OrderSymbol(), MODE_ASK);
if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp) {
if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0) {
ModifyStopLoss(pAsk+TrailingStop*pp);
return;
}
}
}
}
void ModifyStopLoss(double ldStopLoss) {
bool fm;
fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
}
int Signal()
{
int signal = -1;
int MA_sig = -1;
double Down = iCustom(Symbol(),0,"pro",RISK,SSP,Enablemail,1,0);
double UP = iCustom(Symbol(),0,"pro",RISK,SSP,Enablemail,0,0);
if(UP > 0 && UP != ( EMPTY_VALUE|| 0)) MA_sig =1; //Buy
else if(Down > 0 && Down != ( EMPTY_VALUE|| 0)) MA_sig = 0; //Sell
//Signal
if (MA_sig == 1) //Buy
signal = 1;
else if(MA_sig == 0) //Sell
signal = 0;
return(signal);
}