//+------------------------------------------------------------------+
//| SilverTrendTrading.mq4 |
//+------------------------------------------------------------------+
#include
#property copyright "fukinagashi"
#property link "http://www.strategybuilderfx.com/forums/showthread.php?t=15429"
#property stacksize 1024
extern int MAPeriod=60;
extern double TrailingStop = 0;
extern double TakeProfit = 0;
extern double InitialStopLoss=0;
extern double FridayNightHour=16;
double Lots = 1;
int risk=3;
double MaxTradesPerType=2;
datetime bartime = 0;
int BarHour=0;
double Slippage=0;
double DeMarkerPeriod=13;
//extern int bartime = 0;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, err, result, total;
int has_a_short_trade=0, has_a_long_trade=0;
int MagicNumber;
double ts, tp, Min_OrderPrice;
double MA, MAPrevious;
int BuySellSignal=0;
string setup;
static double lastslope= 0.0;
static int didbreakalert= false;
MagicNumber = 40000;
setup="SILVERTREND";
double BuyST=iCustom(NULL, 0, "SilverTrend", 0, 0);
double SellST=iCustom(NULL, 0, "SilverTrend", 0, 0);
MA=iMA(NULL, 0, 60, 0, MODE_EMA, PRICE_MEDIAN, 0);
MAPrevious=iMA(NULL, 0, 60, 0, MODE_EMA, PRICE_MEDIAN, 1);
if (bartime == Time[0]) {
return(0);
} else {
bartime = Time[0]; // a new bar, so record its open time.
}
if(IsTesting() && Bars<100) return(0);
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// MODIFICATIONS ON OPEN ORDERS ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
total = OrdersTotal();
for(cnt=OrdersTotal();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && OrderMagicNumber()==MagicNumber) {
if(SellST>0) {
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
} else if(TrailingStop>0) {
if(Bid-OrderOpenPrice()>Point*TrailingStop) {
ts = Bid-Point*TrailingStop;
}
if((OrderStopLoss()1) {
Print("Error modifying BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
}
}
} else if (OrderType()==OP_SELL && OrderMagicNumber()==MagicNumber) {
if (BuyST>0) {
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
} else if(TrailingStop>0) {
if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) {
ts=Ask+Point*TrailingStop;
}
if((ts!=0) && ((OrderStopLoss()>ts) || (OrderStopLoss()==0))) {
result=OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
err = GetLastError();
if (err>1) {
Print("Error modifying Sell order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
}
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// SETTING ORDERS ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(AccountFreeMargin()<(1000*Lots)) return(0);
has_a_short_trade=0;
has_a_long_trade=0;
for(cnt=0;cnt0 &&
MA>MAPrevious)
) {
if (FridayNightHour>0 &&TimeDayOfWeek(Time[0])==5 && TimeHour(Time[0])>FridayNightHour) {
if (!IsTesting()) Print("Friday: No New Trades: " + TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
return(0);
}
if(InitialStopLoss>0) {
ts = Ask-(InitialStopLoss*Point);
} else { ts = 0;
}
if(TakeProfit>0) { tp = Ask+(TakeProfit*Point);
} else { tp = 0;}
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,ts,tp,setup,MagicNumber,0,Green);
if (!IsTesting()) PlaySound("expert.wav");
if(ticket>0) {
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
OrderPrint();
}
} else {
err = GetLastError();
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
if (!IsTesting()) PlaySound("alert2.wav");
}
}
if(
(has_a_short_trade0 &&
MA0 &&TimeDayOfWeek(Time[0])==5 && TimeHour(Time[0])>FridayNightHour) {
if (!IsTesting()) Print("Friday: No New Trades: " + TimeToStr(Time[0],TIME_DATE|TIME_MINUTES));
return(0);
}
if(InitialStopLoss>0) {
ts = Bid+(InitialStopLoss*Point);
} else { ts = 0;}
if(TakeProfit>0) { tp = Bid-(TakeProfit*Point);
} else { tp = 0;}
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,ts,tp,setup,MagicNumber,0,Green);
if (!IsTesting()) PlaySound("expert.wav");
if(ticket>0) {
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) {
OrderPrint();
}
} else {
err = GetLastError();
Print("Error opening BUY order [" + setup + "]: (" + err + ") " + ErrorDescription(err) + " " + setup);
if (!IsTesting()) PlaySound("alert2.wav");
}
}
return(0);
}