Multi_Lot_Scalper
Multi_Lot_Scalper

Multi_Lot_Scalper最新版

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

37 人已下载 手机查看

//+——————————————————————+
//| 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);
}
//+——————————————————————+

如果你对文件有了解,请帮助投票!

If you are familiar with the file, please help vote!

平均评分 0 / 5. 投票数: 0

到目前为止还没有投票!成为第一位投票人。

相关资源

暂无评论

none
暂无评论...