[MT4指标]通道用ea指标
通道用ea指标
//+------------------------------------------------------------------+
//| Charles.mq4 |
//| Copyright 2012, AlFa Corp. |
//| alessio.fabiani @ gmail.com |
//+------------------------------------------------------------------+
#property copyright \"Copyright 2012, AlFa\"
#property link \"alessio.fabiani @ gmail.com\"
#define VER \"2.1.8\"
#define DECIMAL_CONVERSION 10
extern string Comment_1 = \" -- Comma separated list of Symbol Pairs: EURUSD,USDCHF\";
extern string Comment_1a = \" --- must be equal to the string of your account provider.\";
//extern string Symbols = \"EURUSD,EURGBP,EURJPY,CHFJPY,GBPUSD,GBPJPY,GBPCHF,GBPAUD,USDCAD,USDCHF,USDJPY,AUDNZD,AUDUSD,NZDUSD\";
extern string Symbols = \"\";
extern int MagicNumber = 3939;
extern double xFactor = 2;
extern string TimeSet = \"07:32\";
extern string Comment_2 = \" -- Balance percentage order balance and Lot value\";
extern double RiskPercent = 10;
extern string Comment_3 = \" -- Percentage of the risk for each Lot\";
extern string Comment_3a = \" --- auto-adapted to number of pairs.\";
extern double RiskPerTrade = 30;
extern int MaxAllowedOrders = 15;
extern int MaxOpenHours = 0;
extern int ProfitCheckPeriod = 3;
extern string Comment_4 = \" -- Whether or not use more strict supports and resistances\";
extern bool Aggressive = false;
extern bool UsePivots = true;
extern string Comment_5 = \" -- Whether or not leave open profitable orders\";
extern int FastPeriod = 18;
extern int SlowPeriod = 60;
extern int Selectivity = 14;
extern string Comment_6 = \" -- Fixed value if RiskPerTrade == 0\";
extern double Lots = 0.01;
extern int Slippage = 3;
extern string Comment_7 = \" -- Set to true if broker is ECN/STP needing stops adding after order\";
extern bool ECN = true;
extern double MarginPercent = 20;
extern string Comment_8 = \" -- On all orders\";
extern int StopLoss = 0;
extern int TrailStart = 25;
extern int TrailingAmount = 5;
extern int TakeProfit = 25;
extern string Comment_9 = \" -- Whether or not manage ALL opened orders (manual too)\";
extern bool AllOrders = true;
extern string Comment_10 = \" -- Whether or not compute the Profit on ALL pairs\";
extern bool AllSymbols = false;
extern string Comment_11 = \" -- Log to console or to a file\";
extern bool LogToFile = false;
extern string Comment_12 = \" -- On init delete all pending orders\";
extern bool InitResetOrders = true;
extern string Comment_13 = \" -- Trading Time Management\";
extern int StartHour = 0;
extern int EndHour = 24;
extern bool CloseAllNow = false;
extern int FridayCloseTime = 0;
int Anchor, PendingBuy, PendingSell, Buys, Sells, i, StopLevel, Spread;
int MaxOpenOrders;
double BuyLots, SellLots, PendingBuyLots, PendingSellLots;
double Amount, Profit, LastProfit, Up, Dw, SL, TP;
double LotsValue, LotsHedgeValue;
double MaxPrice,MinPrice,MaxOpenPrice,MinOpenPrice;
bool isInGain=false, blockConditionHit, unlockOrdersPlaced=false;
int LastOrderTicket, UnlockingOrderTicket, Result, Error;
int Delta; //Order price shift (in points) from High/Low price
int LastDay;
double stopLoss, delta;
double trailStart, trailAmount, takeProfit;
double lastBarTime,lastpM5BarTime,lastpM15BarTime,lastpH1BarTime;
string SymbolsArray[0], CurrentSymbol;
bool canSell[0], canBuy[0], bullish[0], bearish[0];
bool Inited[0], DayStart[0], inited=false;
bool tradingAllowed=false;
double Pivot[0];
double Resist1[0];
double Resist2[0];
double Resist3[0];
double Support1[0];
double Support2[0];
double Support3[0];
double pPoint[0];
bool isCals[0];
double r1[0] , s1[0] ,s2[0], r2[0], r3[0], s3[0];
//+------------------------------------------------------------------+
//| Init function |
//+------------------------------------------------------------------+
void init()
{
RefreshRates();
if(LogToFile){startFile();}
Amount = 1.0;
Anchor = 250;
Delta = 5;
LastDay = 1;
PendingBuy = 0;
PendingSell = 0;
Buys = 0;
Sells = 0;
BuyLots = 0;
SellLots = 0;
PendingBuyLots = 0;
PendingSellLots = 0;
LastOrderTicket = -1;
UnlockingOrderTicket = -1;
string delim = \",\";
int size;
if(StringLen(Symbols)==0)
{
size = 1;
}
else
{
size = 1+StringFindCount(Symbols,delim);
}
MaxOpenOrders = MaxAllowedOrders/size;
ArrayResize(SymbolsArray,size);
if(StringLen(Symbols)>0){StrToStringArray(Symbols,SymbolsArray,delim);}
ArrayResize(canSell,size);
ArrayResize(canBuy,size);
ArrayResize(Inited,size);
ArrayResize(DayStart,size);
ArrayResize(blockConditionHit,size);
ArrayResize(Pivot,size);
ArrayResize(Resist1,size);
ArrayResize(Resist2,size);
ArrayResize(Support1,size);
ArrayResize(Support2,size);
ArrayResize(Support3,size);
ArrayResize(Resist3,size);
ArrayResize(pPoint,size);
ArrayResize(isCals,size);
ArrayResize(r1,size);
ArrayResize(s1,size);
ArrayResize(s2,size);
ArrayResize(r2,size);
ArrayResize(r3,size);
ArrayResize(s3,size);
ArrayResize(bullish,size);
ArrayResize(bearish,size);
for(i=0; i0)
{for(i=Total-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == TRUE)
{
Pos=OrderType();
if((Pos==OP_BUYSTOP)||(Pos==OP_SELLSTOP)||(Pos==OP_BUYLIMIT)||(Pos==OP_SELLLIMIT)){Result=OrderDelete(OrderTicket(), CLR_NONE);}
if(Result<=0){Error=GetLastError();}
else Error=0;
}
}
}
}
//+------------------------------------------------------------------+
//| Start function |
//+------------------------------------------------------------------+
void start()
{
bool pM5=false,pM15=false,pH1=false;
if((TimeCurrent()-lastpM5BarTime)/60>=PERIOD_M5)
{
pM5=true;
lastpM5BarTime=TimeCurrent();
}
if((TimeCurrent()-lastpM15BarTime)/60>=PERIOD_M15)
{
pM15=true;
lastpM15BarTime=TimeCurrent();
}
if((TimeCurrent()-lastpH1BarTime)/60>=PERIOD_H1)
{
pH1=true;
lastpH1BarTime=TimeCurrent();
}
int SystemPeriod=1;
tradingAllowed=false;
if((StartHour < EndHour && TimeHour(TimeCurrent()) >= StartHour && TimeHour(TimeCurrent()) < EndHour) || (StartHour > EndHour && TimeHour(TimeCurrent()) >= StartHour ||
TimeHour(TimeCurrent()) < EndHour))
{
if(DayOfWeek() != 5 || FridayCloseTime==0 || Hour()0 && Hour()>=FridayCloseTime) )
{
ForceCloseAllOpenOrders();
DeleteAllPendingOrders();
}
if( inited==false || (TimeCurrent() - lastBarTime)/60 >= SystemPeriod )
{
if(inited==false) inited=true;
int s;
for(s=0; s0)
{
CurrentSymbol = StringTrim(SymbolsArray[s]);
}
else
{
CurrentSymbol = Symbol();
}
if(Inited[s] == false)
{
if(InitResetOrders == true)
{
int Pos;
int Total=OrdersTotal();
if(Total>0)
{
for(i=Total-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == TRUE)
{
if(OrderSymbol()!=CurrentSymbol)
{
continue;
}//if
if(AllOrders==false && OrderMagicNumber()!=MagicNumber)
{
continue;
}//if
Pos=OrderType();
if((Pos==OP_BUYSTOP)||(Pos==OP_SELLSTOP)||(Pos==OP_BUYLIMIT)||(Pos==OP_SELLLIMIT)){Result=OrderDelete(OrderTicket(), CLR_NONE);}
//-----------------------
if(Result<0){Error=GetLastError();Log(\"LastError = \"+Error);}
else Error=0;
//-----------------------
}//if
}//for
}//if
}//if
Inited[s]=true;
}//if
Spread = MarketInfo(CurrentSymbol, MODE_SPREAD);
StopLevel = MarketInfo(CurrentSymbol, MODE_STOPLEVEL) + Spread;
if (MarketInfo(CurrentSymbol, MODE_DIGITS) == 3 || MarketInfo(CurrentSymbol, MODE_DIGITS) == 5) {
stopLoss = NormalizeDouble(StopLoss* DECIMAL_CONVERSION * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
delta = NormalizeDouble(Delta * DECIMAL_CONVERSION * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
trailStart = NormalizeDouble(TrailStart * DECIMAL_CONVERSION * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
trailAmount = NormalizeDouble(TrailingAmount * DECIMAL_CONVERSION * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
takeProfit = NormalizeDouble(TakeProfit * DECIMAL_CONVERSION * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
}
else
{
stopLoss = NormalizeDouble(StopLoss * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
delta = NormalizeDouble(Delta * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
trailStart = NormalizeDouble(TrailStart * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
trailAmount = NormalizeDouble(TrailingAmount * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
takeProfit = NormalizeDouble(TakeProfit * MarketInfo(CurrentSymbol, MODE_POINT),MarketInfo(CurrentSymbol, MODE_DIGITS));
}
if( stopLoss>0 && stopLossMaxPrice) MaxOpenPrice = MarketInfo(CurrentSymbol,MODE_ASK)+StopLevel*MarketInfo(CurrentSymbol, MODE_POINT);
if (MarketInfo(CurrentSymbol,MODE_BID)-StopLevel*MarketInfo(CurrentSymbol, MODE_POINT)=20)
{
//Alert(TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS) + \" -- \" + Volatility1 + \" / \" + Volatility2);
if( iClose(CurrentSymbol,PERIOD_M15,1)>iOpen(CurrentSymbol,PERIOD_M15,1) )
{
//SignalBufferSellLimit=iHigh(CurrentSymbol,PERIOD_M5,iHighest(CurrentSymbol,PERIOD_M5,MODE_HIGH,3,0));
SignalBufferSellStop=NormalizeDouble( iLow(CurrentSymbol,PERIOD_M15,1)-delta+((iHigh(CurrentSymbol,PERIOD_M15,1)-iLow(CurrentSymbol,PERIOD_M15,1))/2), MarketInfo(CurrentSymbol,MODE_DIGITS));
}
else
{
//SignalBufferBuyLimit=iLow(CurrentSymbol,PERIOD_M5,iLowest(CurrentSymbol,PERIOD_M5,MODE_LOW,3,0));
SignalBufferBuyStop=NormalizeDouble( iLow(CurrentSymbol,PERIOD_M15,1)+delta-((iLow(CurrentSymbol,PERIOD_M15,1)-iHigh(CurrentSymbol,PERIOD_M15,1))/2), MarketInfo(CurrentSymbol,MODE_DIGITS));
}
}
if(SignalBufferSellStop>0 && (Sells+Buys)<=MaxOpenOrders)
{
OpenOrder(CurrentSymbol,LotsValue,OP_SELLSTOP,SignalBufferSellLimit);
}
if(SignalBufferBuyStop>0 && (Sells+Buys)<=MaxOpenOrders)
{
OpenOrder(CurrentSymbol,LotsValue,OP_BUYSTOP,SignalBufferBuyLimit);
}
if(SignalBufferSellLimit>0 && (Sells+Buys)<=MaxOpenOrders)
{
OpenOrder(CurrentSymbol,LotsValue,OP_SELLLIMIT,SignalBufferSellLimit);
}
if(SignalBufferBuyLimit>0 && (Sells+Buys)<=MaxOpenOrders)
{
OpenOrder(CurrentSymbol,LotsValue,OP_BUYLIMIT,SignalBufferBuyLimit);
}
}
if(pM15==true)
{
// CHECK TREND CONDITION
bullish[s]=((RSI>55&&RSIM1>55&&RSIL1>55)&&(RSIL2<50&&RSIM2<50&&RSI2<50)&&EMAS1>EMAF1);
bearish[s]=((RSI<55&&RSIM1<55&&RSIL1<55)&&(RSIL2>50&&RSIM2>50&&RSI2>50)&&EMAS1 NormalizeDouble(MarketInfo(CurrentSymbol,MODE_BID)+delta+(Spread*MarketInfo(CurrentSymbol, MODE_POINT)),MarketInfo(CurrentSymbol, MODE_DIGITS)))
{
Up = Up1;
}
else if (Up4 > NormalizeDouble(MarketInfo(CurrentSymbol,MODE_BID)+delta+(Spread*MarketInfo(CurrentSymbol, MODE_POINT)),MarketInfo(CurrentSymbol, MODE_DIGITS)))
{
Up = Up4;
}
else
{
Up = UpA;
}
if((PendingSell==0 && PendingBuy==0) || (TimeStr(CurTime())==TimeSet))
{
RefreshRates();
if(TimeStr(CurTime())==TimeSet && DayStart[s]==false)
{
Log(\"[DAY RESET: \"+TimeToStr(TimeCurrent())+\"]\");
DeleteAllPendingOrders();
Dw=MinOpenPrice;
Up=MaxOpenPrice;
DayStart[s]=true;
}
else if(TimeStr(CurTime())!=TimeSet && DayStart[s]==true)
{
DayStart[s]=false;
}
SL=0;
TP=0;
if(PendingSell == 0)
{
if(canSell[s])
{
if(ECN == false && stopLoss > 0){SL=Dw+stopLoss;}
if(tradingAllowed==true && AccountFreeMarginCheck(CurrentSymbol,OP_SELL,LotsHedgeValue)>=(AccountEquity()*MarginPercent/100) && GetLastError()!=134)
{
//MaloMax: la chiusura di molti ordini puo dare problemi per la lentezza di esecuzione. Tra una chiusura e l\'altra potresti inserire questo codice
while (!IsTradeAllowed()) Sleep(100);
RefreshRates();
Result=OrderSend(CurrentSymbol,OP_SELLSTOP,LotsHedgeValue,Dw,Slippage,SL,TP,\"Charles_\"+VER,MagicNumber,0,Red);
//-----------------------
if(Result<0){Error=GetLastError();Log(\"LastError [CORE;OP_SELLSTOP]= \"+Error+\" - Dw# \"+Dw+\" - Ask#\"+MarketInfo(CurrentSymbol,MODE_ASK));}
else Error=0;
//-----------------------
}
}
}
if(PendingBuy == 0 && Error==0)
{
if(canBuy[s])
{
if(ECN == false && stopLoss > 0){SL=Up-stopLoss;}
if(tradingAllowed==true && AccountFreeMarginCheck(CurrentSymbol,OP_BUY,LotsHedgeValue)>=(AccountEquity()*MarginPercent/100) && GetLastError()!=134)
{
//MaloMax: la chiusura di molti ordini puo dare problemi per la lentezza di esecuzione. Tra una chiusura e l\'altra potresti inserire questo codice
while (!IsTradeAllowed()) Sleep(100);
RefreshRates();
Result=OrderSend(CurrentSymbol,OP_BUYSTOP,LotsHedgeValue,Up,Slippage,SL,TP,\"Charles_\"+VER,MagicNumber,0,Blue);
//-----------------------
if(Result<0){Error=GetLastError();Log(\"LastError [CORE;OP_BUYSTOP] = \"+Error+\" - Dw# \"+Up+\" - Bid#\"+MarketInfo(CurrentSymbol,MODE_BID));}
else Error=0;
//-----------------------
}
}
}
}
else
{
if((PendingSell == 0 && PendingBuy > 0) || (PendingSell > 0 && PendingBuy == 0))
{
RefreshRates();
SL=0;
TP=0;
if(PendingSell == 0 && PendingBuy > 0)
{
if(canSell[s])
{
if(ECN == false && stopLoss > 0){SL=Dw+stopLoss;}
if(tradingAllowed==true && AccountFreeMarginCheck(CurrentSymbol,OP_SELL,LotsHedgeValue)>=(AccountEquity()*MarginPercent/100) && GetLastError()!=134)
{
//MaloMax: la chiusura di molti ordini puo dare problemi per la lentezza di esecuzione. Tra una chiusura e l\'altra potresti inserire questo codice
while (!IsTradeAllowed()) Sleep(100);
RefreshRates();
Result=OrderSend(CurrentSymbol,OP_SELLSTOP,LotsHedgeValue,Dw,Slippage,SL,TP,\"Charles_\"+VER,MagicNumber,0,Red);
//-----------------------
if(Result<0){Error=GetLastError();Log(\"LastError [CORE - HEDGE;OP_SELLSTOP]= \"+Error);}
else if(Result!=0)
{
Error=0;
}
//-----------------------
}
}
}
if(PendingSell > 0 && PendingBuy == 0 && Error==0)
{
if(canBuy[s])
{
if(ECN == false && stopLoss > 0){SL=Up-stopLoss;}
if(tradingAllowed==true && AccountFreeMarginCheck(CurrentSymbol,OP_BUY,LotsHedgeValue)>=(AccountEquity()*MarginPercent/100) && GetLastError()!=134)
{
//MaloMax: la chiusura di molti ordini puo dare problemi per la lentezza di esecuzione. Tra una chiusura e l\'altra potresti inserire questo codice
while (!IsTradeAllowed()) Sleep(100);
RefreshRates();
Result=OrderSend(CurrentSymbol,OP_BUYSTOP,LotsHedgeValue,Up,Slippage,SL,TP,\"Charles_\"+VER,MagicNumber,0,Blue);
//-----------------------
if(Result<0){Error=GetLastError();Log(\"LastError [CORE - HEDGE;OP_BUYSTOP] = \"+Error);}
else if(Result!=0)
{
Error=0;
}
//-----------------------
}
}
}
}
}
}
[/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s][/s]
发表于:2015-08-06 07:01只看该作者
2楼
niu a ,通宝怎么增加
韬客社区www.talkfx.co
发表于:2015-09-02 12:02只看该作者
3楼
因为比较贵,所以没舍得买
韬客社区www.talkfx.co
发表于:2015-09-04 01:57只看该作者
4楼
这是EA还是指标呢?
韬客社区www.talkfx.co
发表于:2015-09-04 01:57只看该作者
5楼
楼主能不能说明一下!
韬客社区www.talkfx.co
发表于:2015-09-06 07:33只看该作者
7楼
好东西 !!!
韬客社区www.talkfx.co
发表于:2015-09-19 05:26只看该作者
8楼
好东西 !!!
文章转自于韬客外汇论坛www.talkfx.com:http://www.talkfx.com/thread-283233-1-3.html
韬客社区www.talkfx.co
发表于:2015-11-02 12:43只看该作者
9楼
謝謝分享。非常感謝樓主!
韬客社区www.talkfx.co
发表于:2015-11-09 05:09只看该作者
10楼
能稍微解释一下子吗
发表于:2015-11-09 10:41只看该作者
11楼
努力刷通宝吧
韬客社区www.talkfx.co
发表于:2015-11-10 10:36只看该作者
12楼
楼主能不能说明一下!
韬客社区www.talkfx.co
发表于:2015-12-30 12:05只看该作者
13楼
因为比较贵,所以没舍得买
韬客社区www.talkfx.co
发表于:2016-02-22 11:08只看该作者
14楼
谢谢分享
韬客社区www.talkfx.co
发表于:2016-12-07 10:15只看该作者
15楼
谢楼主的分享
韬客社区www.talkfx.co