Multi_Lot_Scalper

Multi_Lot_Scalper 最新版

开心版 无广告 97

更新日期:2022-03-15 分类标签: 语言:中文 平台:没限制

18 人已下载 手机查看

//+------------------------------------------------------------------+
//| Multi_Lot_Scalper(10points 3).mq4 |
//| Copyright ?2005, Alejandro Galindo |
//| http://elCactus.com |
//+------------------------------------------------------------------+
#property copyright "Copyright ?2005, Alejandro Galindo"
#property link "http://elCactus.com"
//----
extern double TakeProfit = 40;
extern double Lots = 0.1;
extern double InitialStop = 0;
extern double TrailingStop = 20;
extern int MaxTrades = 10;
extern int Pips = 15;
extern int SecureProfit = 10;
extern int AccountProtection = 1;
extern int OrderstoProtect = 3;
extern int ReverseCondition = 0;
extern double EURUSDPipValue = 10;
extern double GBPUSDPipValue = 10;
extern double USDCHFPipValue = 10;
extern double USDJPYPipValue = 9.715;
extern int StartYear = 2005;
extern int StartMonth = 1;
extern int EndYear = 2006;
extern int EndMonth = 12;
extern int EndHour = 22;
extern int EndMinute = 30;
extern int mm = 0;
extern int risk = 12;
extern int AccountisNormal = 0;
//----
int OpenOrders = 0, cnt = 0;
int slippage = 5;
double sl = 0, tp = 0;
double BuyPrice = 0, SellPrice = 0;
double lotsi = 0, mylotsi = 0;
int mode = 0, myOrderType = 0;
bool ContinueOpening = True;
double LastPrice = 0;
int PreviousOpenOrders = 0;
double Profit = 0;
int LastTicket = 0, LastType = 0;
double LastClosePrice = 0, LastLots = 0;
double Pivot = 0;
double PipValue = 0;
string text = "", text2 = "";
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if(AccountisNormal == 1)
if(mm != 0)
lotsi = MathCeil(AccountBalance()*risk/10000);
else
lotsi=Lots;
else
// then is mini
if(mm != 0)
lotsi = MathCeil(AccountBalance()*risk / 10000) / 10;
else
lotsi = Lots;
//----
if(lotsi > 100)
lotsi = 100;
OpenOrders = 0;
//----
for(cnt = 0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
OpenOrders++;
}
//----
if(OpenOrders < 1)
{
if(TimeYear(CurTime()) < StartYear)
return(0);
//----
if(TimeMonth(CurTime()) < StartMonth)
return(0);
//----
if(TimeYear(CurTime()) > EndYear)
return(0);
//----
if(TimeMonth(CurTime()) > EndMonth )
return(0);
}
//----
if(Symbol() == "EURUSD")
PipValue = EURUSDPipValue;
//----
if(Symbol() == "GBPUSD")
PipValue = GBPUSDPipValue;
//----
if(Symbol() == "USDJPY")
PipValue = USDJPYPipValue;
//----
if(Symbol() == "USDCHF")
PipValue = USDCHFPipValue;
//----
if(PipValue == 0)
{
PipValue = 5;
}
//----
if(PreviousOpenOrders > OpenOrders)
for(cnt = OrdersTotal(); cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode = OrderType();
//----
if(OrderSymbol() == Symbol())
{
if(mode == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Blue);
//----
if(mode == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Red);
return(0);
}
}
PreviousOpenOrders = OpenOrders;
//----
if(OpenOrders >= MaxTrades)
ContinueOpening = False;
else
ContinueOpening = True;
//----
if(LastPrice == 0)
for(cnt = 0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
mode = OrderType();
//----
if(OrderSymbol() == Symbol())
{
LastPrice = OrderOpenPrice();
//----
if(mode == OP_BUY)
myOrderType = 2;
//----
if(mode == OP_SELL)
myOrderType = 1;
}
}
//----
if(OpenOrders < 1)
{
myOrderType = 3;
//----
if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 0) >
iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 1))
myOrderType = 2;
//----
if(iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 0) <
iMACD(NULL,0,14,26,9,PRICE_CLOSE, MODE_MAIN, 1))
myOrderType = 1;
//----
if(ReverseCondition == 1)
if(myOrderType == 1)
myOrderType = 2;
else
if(myOrderType == 2)
myOrderType=1;
}
// if we have opened positions we take care of them
for(cnt = OrdersTotal(); cnt >= 0; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
if(OrderType() == OP_SELL)
if(TrailingStop > 0)
if(OrderOpenPrice() - Ask >= (TrailingStop + Pips)*Point)
if(OrderStopLoss() > (Ask + Point*TrailingStop))
{
OrderModify(OrderTicket(), OrderOpenPrice(),
Ask + Point*TrailingStop, OrderClosePrice() -
TakeProfit*Point - TrailingStop*Point, 800, Purple);
return(0);
}
if(OrderType() == OP_BUY)
if(TrailingStop > 0)
if(Bid - OrderOpenPrice() >= (TrailingStop + Pips)*Point)
if(OrderStopLoss() < (Bid - Point*TrailingStop))
{
OrderModify(OrderTicket(), OrderOpenPrice(),
Bid - Point*TrailingStop, OrderClosePrice() +
TakeProfit*Point + TrailingStop*Point, 800, Yellow);
return(0);
}
}
}
Profit = 0;
LastTicket = 0;
LastType = 0;
LastClosePrice = 0;
LastLots = 0;
//----
for(cnt = 0; cnt < OrdersTotal(); cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
//----
if(OrderSymbol() == Symbol())
{
LastTicket = OrderTicket();
//----
if(OrderType() == OP_BUY)
LastType = OP_BUY;
//----
if(OrderType() == OP_SELL)
LastType = OP_SELL;
LastClosePrice = OrderClosePrice();
LastLots = OrderLots();
//----
if(LastType == OP_BUY)
{
if(OrderClosePrice() < OrderOpenPrice())
Profit = Profit - (OrderOpenPrice() - OrderClosePrice())*OrderLots() /
Point;
//----
if(OrderClosePrice() > OrderOpenPrice())
Profit = Profit + (OrderClosePrice() - OrderOpenPrice())*OrderLots() /
Point;
}
//----
if(LastType==OP_SELL)
{
if(OrderClosePrice() > OrderOpenPrice())
Profit = Profit - (OrderClosePrice() - OrderOpenPrice())*OrderLots() /
Point;
//----
if(OrderClosePrice() < OrderOpenPrice())
Profit = Profit + (OrderOpenPrice() - OrderClosePrice())*OrderLots() /
Point;
}
}
}
Profit = Profit*PipValue;
text2 = "Profit: $" + DoubleToStr(Profit,2) + " +/-";
//----
if(OpenOrders >= (MaxTrades - OrderstoProtect) && AccountProtection == 1)
if(Profit >= SecureProfit)
{
OrderClose(LastTicket, LastLots, LastClosePrice, slippage, Yellow);
ContinueOpening = False;
return(0);
}
//----
if(!IsTesting())
{
if(myOrderType == 3)
text="No conditions to open trades";
else
text=" ";
Comment("LastPrice=", LastPrice, " Previous open orders=", PreviousOpenOrders,
"\nContinue opening=", ContinueOpening, " OrderType=", myOrderType, "\n",
text2, "\nLots=", lotsi, "\n", text);
}
//----
if(myOrderType == 1 && ContinueOpening)
{
if((Bid - LastPrice) >= Pips*Point || OpenOrders < 1)
{
SellPrice = Bid;
LastPrice = 0;
//----
if(TakeProfit == 0)
tp = 0;
else
tp = SellPrice - TakeProfit*Point;
//----
if(InitialStop == 0)
sl = 0;
else
sl = SellPrice + InitialStop*Point;
//----
if(OpenOrders != 0)
{
mylotsi = lotsi;
//----
for(cnt = 1; cnt <= OpenOrders; cnt++)
if(MaxTrades > 12)
mylotsi = NormalizeDouble(mylotsi*1.5, 1);
else
mylotsi = NormalizeDouble(mylotsi*2, 1);
}
else
mylotsi=lotsi;
//----
if(mylotsi > 100)
mylotsi = 100;
OrderSend(Symbol(), OP_SELL, mylotsi, SellPrice, slippage, sl, tp, NULL, 0, 0,
Red);
return(0);
}
}
if(myOrderType == 2 && ContinueOpening)
{
if((LastPrice-Ask) >= Pips*Point || OpenOrders < 1)
{
BuyPrice = Ask;
LastPrice = 0;
//----
if(TakeProfit == 0)
tp = 0;
else
tp = BuyPrice + TakeProfit*Point;
//----
if(InitialStop==0)
sl = 0;
else
sl = BuyPrice - InitialStop*Point;
//----
if(OpenOrders != 0)
{
mylotsi = lotsi;
for(cnt = 1; cnt <= OpenOrders; cnt++)
if(MaxTrades > 12)
mylotsi = NormalizeDouble(mylotsi*1.5, 1);
else
mylotsi = NormalizeDouble(mylotsi*2, 1);
}
else
mylotsi = lotsi;
//----
if(mylotsi > 100)
mylotsi = 100;
OrderSend(Symbol(), OP_BUY, mylotsi, BuyPrice, slippage, sl, tp, NULL, 0, 0,
Blue);
return(0);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+

相关资源

暂无评论

暂无评论...