EA-Alligator_v1-0

EA-Alligator_v1-0最新版

官方版无广告163

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

21 人已下载 手机查看

#property copyright “EarnForex.com”
#property link “https://www.earnforex.com/metatrader-expert-advisors/bill-williams-alligator/”
#property version “1.00”
#property strict
#property description “This Expert Advisor open orders using the popular Alligator Indicator by Bill Williams”
#property description ” ”
#property description “DISCLAIMER: This code comes with no guarantee, you can use it at your own risk”
#property description “We recommend to test it first on a Demo Account”

/*
The Alligator Indicator is basically a combination of 3 MA with different periods and shifts
ENTRY BUY: The three MA are going up and the fast MA are above the slow
ENTRY SELL: The three MA are going down and the fast MA are below the slow
EXIT: Can be fixed pips (Stop Loss and Take Profit) or triggered by the next opposite order
Only 1 order at a time
*/

extern double LotSize=0.1; //Position size

extern bool UseEntryToExit=true; //Use next entry to close the trade (if false uses take profit)
extern double StopLoss=20; //Stop loss in pips
extern double TakeProfit=50; //Take profit in pips

extern int Slippage=2; //Slippage in pips

extern bool TradeEnabled=true; //Enable trade

//Functional variables
double ePoint; //Point normalized

bool CanOrder; //Check for risk management
bool CanOpenBuy; //Flag if there are buy orders open
bool CanOpenSell; //Flag if there are sell orders open

int OrderOpRetry=10; //Number of attempts to perform a trade operation
int SleepSecs=3; //Seconds to sleep if can’t order
int MinBars=60; //Minimum bars in the graph to enable trading

datetime LastOpenOrder; //Used to order only once per bar

//Functional variables to determine prices
double MinSL;
double MaxSL;
double TP;
double SL;
double Spread;
int Slip;

//Variable initialization function
void Initialize(){
RefreshRates();
ePoint=Point;
Slip=Slippage;
if (MathMod(Digits,2)==1){
ePoint*=10;
Slip*=10;
}
TP=TakeProfit*ePoint;
SL=StopLoss*ePoint;
CanOrder=TradeEnabled;
CanOpenBuy=true;
CanOpenSell=true;
}

//Check if orders can be submitted
void CheckCanOrder(){
if( Bars<MinBars ){
Print(“INFO – Not enough Bars to trade”);
CanOrder=false;
}
OrdersOpen();
return;
}

//Check if there are open orders and what type
void OrdersOpen(){
for( int i = 0 ; i < OrdersTotal() ; i++ ) {
if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false ) {
Print(“ERROR – Unable to select the order – “,GetLastError());
break;
}
if( OrderSymbol()==Symbol() && OrderType() == OP_BUY) CanOpenBuy=false;
if( OrderSymbol()==Symbol() && OrderType() == OP_SELL) CanOpenSell=false;
}
return;
}

//Close all the orders of a specific type and current symbol
void CloseAll(int Command){
double ClosePrice=0;
for( int i = 0 ; i < OrdersTotal() ; i++ ) {
if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false ) {
Print(“ERROR – Unable to select the order – “,GetLastError());
break;
}
if( OrderSymbol()==Symbol() && OrderType()==Command) {
if(Command==OP_BUY) ClosePrice=Bid;
if(Command==OP_SELL) ClosePrice=Ask;
double Lots=OrderLots();
int Ticket=OrderTicket();
for(int j=1; j<OrderOpRetry; j++){
bool res=OrderClose(Ticket,Lots,ClosePrice,Slip,Red);
if(res){
Print(“TRADE – CLOSE – Order “,Ticket,” closed at price “,ClosePrice);
break;
}
else Print(“ERROR – CLOSE – error closing order “,Ticket,” return error: “,GetLastError());
}
}
}
return;
}

//Open new order of a given type
void OpenNew(int Command){
RefreshRates();
double OpenPrice=0;
double SLPrice = 0;
double TPPrice = 0;
if(Command==OP_BUY){
OpenPrice=Ask;
SLPrice=OpenPrice-SL;
if(UseEntryToExit==false) TPPrice=OpenPrice+TP;
}
if(Command==OP_SELL){
OpenPrice=Bid;
SLPrice=OpenPrice+SL;
if(UseEntryToExit==false) TPPrice=OpenPrice-TP;
}
for(int i=1; i<OrderOpRetry; i++){
int res=OrderSend(Symbol(),Command,LotSize,OpenPrice,Slip,NormalizeDouble(SLPrice,Digits),NormalizeDouble(TPPrice,Digits),””,0,0,Green);
if(res){
Print(“TRADE – NEW – Order “,res,” submitted: Command “,Command,” Volume “,LotSize,” Open “,OpenPrice,” Slippage “,Slip,” Stop “,SLPrice,” Take “,TPPrice);
break;
}
else Print(“ERROR – NEW – error sending order, return error: “,GetLastError());
}
return;
}

//Technical analysis of the indicators
extern int JawPeriod=13; //Period of the Alligator Jaw
extern int JawShift=8; //Shift of the Alligator Jaw
extern int TeethPeriod=8; //Period of the Alligator Teeth
extern int TeethShift=5; //Shift of the Alligator Teeth
extern int LipsPeriod=5; //Period of the Alligator Lips
extern int LipsShift=3; //Shift of the Alligator Lips
double JawCurr;
double TeethCurr;
double LipsCurr;
double JawPrev;
double TeethPrev;
double LipsPrev;
bool AlligatorTrendDown=false;
bool AlligatorTrendUp=false;

void FindAlligatorTrend(){
AlligatorTrendDown=false;
AlligatorTrendUp=false;
JawCurr=iAlligator(Symbol(),0,JawPeriod,JawShift,TeethPeriod,TeethShift,LipsPeriod,LipsShift,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
TeethCurr=iAlligator(Symbol(),0,JawPeriod,JawShift,TeethPeriod,TeethShift,LipsPeriod,LipsShift,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0);
LipsCurr=iAlligator(Symbol(),0,JawPeriod,JawShift,TeethPeriod,TeethShift,LipsPeriod,LipsShift,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0);
JawPrev=iAlligator(Symbol(),0,JawPeriod,JawShift,TeethPeriod,TeethShift,LipsPeriod,LipsShift,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,1);
TeethPrev=iAlligator(Symbol(),0,JawPeriod,JawShift,TeethPeriod,TeethShift,LipsPeriod,LipsShift,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,1);
LipsPrev=iAlligator(Symbol(),0,JawPeriod,JawShift,TeethPeriod,TeethShift,LipsPeriod,LipsShift,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,1);
if(JawCurr<TeethCurr && TeethCurr<LipsCurr && JawCurr>JawPrev && TeethCurr>TeethPrev && LipsCurr>LipsPrev) AlligatorTrendUp=true;
if(JawCurr>TeethCurr && TeethCurr>LipsCurr && JawCurr<JawPrev && TeethCurr<TeethPrev && LipsCurr<LipsPrev) AlligatorTrendDown=true;
}

 

//+——————————————————————+
//| Expert initialization function |
//+——————————————————————+
int OnInit()
{
//—

//—
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| Expert deinitialization function |
//+——————————————————————+
void OnDeinit(const int reason)
{
//—

}
//+——————————————————————+
//| Expert tick function |
//+——————————————————————+
void OnTick()
{
//—
//Calling initialization, checks and technical analysis
Initialize();
CheckCanOrder();
FindAlligatorTrend();
//Check of Entry/Exit signal with operations to perform
if(AlligatorTrendUp){
if(UseEntryToExit) CloseAll(OP_SELL);
if(CanOpenBuy && CanOpenSell && CanOrder && LastOpenOrder!=Time[0]){
OpenNew(OP_BUY);
LastOpenOrder=Time[0];
}
}
if(AlligatorTrendDown){
if(UseEntryToExit) CloseAll(OP_BUY);
if(CanOpenSell && CanOpenBuy && CanOrder && LastOpenOrder!=Time[0]){
OpenNew(OP_SELL);
LastOpenOrder=Time[0];
}
}
}
//+——————————————————————+

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

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

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

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

相关资源

暂无评论

暂无评论...
Ads Blocker Image Powered by Code Help Pro

检测到广告拦截程序!!!Ads Blocker Detected!!!

我们检测到您正在使用扩展来屏蔽广告。请通过禁用这些广告屏蔽程序或者把网站加入白名单来支持我们。

We have detected that you are using an extension to block advertisements. Please support us by disabling these advertising blocking programs or adding the website to the whitelist.