EA AutoMarti

EA AutoMarti最新版

官方版无广告288

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

40 人已下载 手机查看

//+——————————————————————+
//| ELIOT WAVE |
//| http://algorithmic-trading-ea-mt4.000webhostapp.com/ |
//| AHARON TZADIK |
//+——————————————————————+
#property copyright “AHARON TZADIK”
#property link “http://algorithmic-trading-ea-mt4.000webhostapp.com/”
#property version “1.00”
#property strict

//——————————————————————–
extern int LEN_TREND=100; //Main TREND length (bars)
//——————————————————–

extern bool USEMOVETOBREAKEVEN=true;//Enable “no loss”
extern double WHENTOMOVETOBE=10; //When to move break even
extern double PIPSTOMOVESL=5; //How much pips to move sl
extern double Lots=0.01; //Lots size
input double MaximumRisk =0.02;
input double DecreaseFactor=0.001;
extern double TrailingStop=40; //TrailingStop
extern double Stop_Loss=400; //Stop Loss
extern int MagicNumber=1234; //MagicNumber
input double TakeProfit=400; //TakeProfit
extern int FastMA=1; //FastMA
extern int SlowMA=20; //SlowMA
extern double Mom_Sell=0.3; //Momentum_Sell
extern double Mom_Buy=0.3; //Momentum_Buy
extern int FractalNum=10; // Number Of High And Low

int err;
int total=0;
double
Lot,Dmax,Dmin,// Amount of lots in a selected order
Lts, // Amount of lots in an opened order
Min_Lot, // Minimal amount of lots
Step, // Step of lot size change
Free, // Current free margin
One_Lot, // Price of one lot
Price, // Price of a selected order,
pips,
MA_1,MA_2,MA_3,MACD_SIGNAL;
int Type,freeze_level,Spread;
//— price levels for orders and positions
double priceopen,stoploss,takeprofit;
datetime timeTag;
//— ticket of the current order
int orderticket;
double Linenow=0;
double Lineprev=0;
double Linenow1=0;
double Lineprev1=0;
double Linenow2=0;
double Lineprev2=0;
//————————————————————— 3 —
int
Period_MA_2, Period_MA_3, // Calculation periods of MA for other timefr.
Period_MA_02, Period_MA_03, // Calculation periods of supp. MAs
K2,K3,T;
//—
datetime dt=0;
datetime dt1=0;
datetime dt2=0;
datetime dt12=0;
datetime dt3=0;
datetime dt13=0;
int First_Low_Candel=0,Secund_Low_Candel=3,First_High_Candel=0,Secund_High_Candel=3,FractalHCandel[],FractalLCandel[];
double FractalHigh[],FractalLow[],LineValLow=0,LineValHigh=0;
int First_Low_Candel1=0,Secund_Low_Candel1=3,First_High_Candel1=0,Secund_High_Candel1=3,FractalHCandel1[],FractalLCandel1[];
double FractalHigh1[],FractalLow1[],LineValLow1=0,LineValHigh1=0;
//+——————————————————————+
//| Expert initialization function |
//+——————————————————————+
int OnInit()
{

//————————————————————— 5 —

double ticksize=MarketInfo(Symbol(),MODE_TICKSIZE);
if(ticksize==0.00001 || ticksize==0.001)
pips=ticksize*10;
else pips=ticksize;
return(INIT_SUCCEEDED);
//— distance from the activation price, within which it is not allowed to modify orders and positions
freeze_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL);
if(freeze_level!=0)
{
PrintFormat(“SYMBOL_TRADE_FREEZE_LEVEL=%d: order or position modification is not allowed,”+
” if there are %d points to the activation price”,freeze_level,freeze_level);
}

//—
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| Expert deinitialization function |
//+——————————————————————+
void OnDeinit(const int reason)
{
}
//+——————————————————————+
//| |
//+——————————————————————+
void OnTick(void)
{
stop();
Create();
drow();
Create1();
drow1();
Create2();
drow2();
if(USEMOVETOBREAKEVEN) MOVETOBREAKEVEN();
Trail1();
if(timeTag<Time[0])
{
int ticket=0;
// Check for New Bar (Compatible with both MQL4 and MQL5)
static datetime dtBarCurrent=WRONG_VALUE;
datetime dtBarPrevious=dtBarCurrent;
dtBarCurrent=(datetime) SeriesInfoInteger(_Symbol,_Period,SERIES_LASTBAR_DATE);
bool NewBarFlag=(dtBarCurrent!=dtBarPrevious);
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external
// variables (Lots, StopLoss, TakeProfit,
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
//—
if(Bars<100)
{
Print(“bars less than 100”);
return;
}
if(TakeProfit<10)
{
Print(“TakeProfit less than 10”);
return;
}
//— to simplify the coding and speed up access data are put into internal variables
//—————————————————————————-
double MomLevel=MathAbs(100-iMomentum(NULL,0,14,PRICE_CLOSE,1));
double MomLevel1=MathAbs(100 – iMomentum(NULL,0,14,PRICE_CLOSE,2));
double MomLevel2=MathAbs(100 – iMomentum(NULL,0,14,PRICE_CLOSE,3));
//————————————————————————————————–
//—————————————————————————-
double MA_1_t=iMA(NULL,0,FastMA,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_1
double MA_2_t=iMA(NULL,0,SlowMA,0,MODE_LWMA,PRICE_TYPICAL,0); // МА_2
//————————————————————————————————-
Linenow=ObjectGet(“TREND”,OBJPROP_TIME2);//2nd time coord.
Lineprev=ObjectGet(“TREND”,OBJPROP_TIME1);//1st time coord.
dt=(datetime)Linenow;//convert double to datetime 2nd time coord.
dt1=(datetime)Lineprev;//convert double to datetime 1st time coord.
//————————————————————————————————–
Linenow1=ObjectGet(“TRENDLOW”,OBJPROP_TIME2);//2nd time coord.
Lineprev1=ObjectGet(“TRENDLOW”,OBJPROP_TIME1);//1st time coord.
dt2=(datetime)Linenow1;//convert double to datetime 2nd time coord.
dt12=(datetime)Lineprev1;//convert double to datetime 1st time coord.
//————————————————————————————————–
Linenow2=ObjectGet(“MAINTREND”,OBJPROP_TIME2);//2nd time coord.
Lineprev2=ObjectGet(“MAINTREND”,OBJPROP_TIME1);//1st time coord.
dt3=(datetime)Linenow2;//convert double to datetime 2nd time coord.
dt13=(datetime)Lineprev2;//convert double to datetime 1st time coord.
//————————————————————————————————–
if(getOpenOrders()==0)

{
//— no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print(“We have no money. Free Margin = “,AccountFreeMargin());
return;
}
// if(NewBarFlag)
// {
//— check for long position (BUY) possibility
//+——————————————————————+
//| BUY BUY BUY |
//+——————————————————————+
if(MA_1_t>MA_2_t)
if(MomLevel<Mom_Buy || MomLevel1<Mom_Buy || MomLevel2<Mom_Buy)
{
if(IsTesting()==true)
{
ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),ND(Ask),3,NDTP(Bid-Stop_Loss*pips),NDTP(Bid+TakeProfit*pips),”renko”,MagicNumber,0,PaleGreen);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print(“BUY order opened : “,OrderOpenPrice());
}
else
Print(“Error opening BUY order : “,GetLastError());
return;
}
if(IsTesting()==false)//only in live trading we use the TREND
{
if(High[iBarShift(NULL,0,dt)]>High[iBarShift(NULL,0,dt1)]
&& High[iBarShift(NULL,0,dt2)]>High[iBarShift(NULL,0,dt12)]
&& High[iBarShift(NULL,0,dt3)]>High[iBarShift(NULL,0,dt13)])
ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),ND(Ask),3,NDTP(Bid-Stop_Loss*pips),NDTP(Bid+TakeProfit*pips),”renko”,MagicNumber,0,PaleGreen);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print(“BUY order opened : “,OrderOpenPrice());
}
else
Print(“Error opening BUY order : “,GetLastError());
return;
}
}
//— check for short position (SELL) possibility
//+——————————————————————+
//| SELL SELL SELL |
//+——————————————————————+
if(MA_1_t<MA_2_t)
if(MomLevel<Mom_Sell || MomLevel1<Mom_Sell || MomLevel2<Mom_Sell)
{
if(IsTesting()==true)
{
ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),ND(Bid),3,NDTP(Ask+Stop_Loss*pips),NDTP(Ask-TakeProfit*pips),”Short 1”,MagicNumber,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print(“SELL order opened : “,OrderOpenPrice());
}
else
Print(“Error opening SELL order : “,GetLastError());
}
if(IsTesting()==false)//only in live trading we use the TREND
{
if(High[iBarShift(NULL,0,dt)]<High[iBarShift(NULL,0,dt1)]
&& High[iBarShift(NULL,0,dt2)]<High[iBarShift(NULL,0,dt12)]
&& High[iBarShift(NULL,0,dt3)]<High[iBarShift(NULL,0,dt13)])
ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),ND(Bid),3,NDTP(Ask+Stop_Loss*pips),NDTP(Ask-TakeProfit*pips),”Short 1”,MagicNumber,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print(“SELL order opened : “,OrderOpenPrice());
}
else
Print(“Error opening SELL order : “,GetLastError());
timeTag=TimeCurrent();
}
return;
}
//— exit from the “no opened orders” block
return;
}
}
}
//+——————————————————————+
//| stop |
//+——————————————————————+
//—————————————————————————–+
void stop()
{
int cnt;
//+——————————————————————+
double middleBB=iBands(Symbol(),0,20, 2,0,0,MODE_MAIN,1);//middle
double lowerBB=iBands(Symbol(),0,20, 2,0,0,MODE_LOWER,1);//lower
double upperBB=iBands(Symbol(),0,20, 2,0,0,MODE_UPPER,1);//upper
//+——————————————————————+
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
//— long position is opened
if(OrderType()==OP_BUY)
{
//— should it be closed?

if(Close[1]==lowerBB)
exitbuys();
//— check for trailing stop
}
else // go to short position
{
//— should it be closed?

if(Close[1]==lowerBB)

exitsells();
//— check for trailing stop
}
}
}
}
//+——————————————————————+
//| Trailing stop loss |
//+——————————————————————+
// ————— ———————————————————– ————————
void Trail1()
{
total=OrdersTotal();
//— it is important to enter the market correctly, but it is more important to exit it correctly…
for(int cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
//— long position is opened
if(OrderType()==OP_BUY)
{

//— check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>pips*TrailingStop)
{
if(OrderStopLoss()<Bid-pips*TrailingStop)
{

RefreshRates();
stoploss=Bid-(pips*TrailingStop);
takeprofit=OrderTakeProfit()+pips*TrailingStop;
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
if(stoploss<StopLevel*pips) stoploss=StopLevel*pips;
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(MathAbs(OrderStopLoss()-stoploss)>point)
if((pips*TrailingStop)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)

//— modify order and exit
if(CheckStopLoss_Takeprofit(OP_BUY,stoploss,takeprofit))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit,0,Green))
Print(“OrderModify error “,GetLastError());
return;
}
}
}
}
else // go to short position
{
//— check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(pips*TrailingStop))
{
if((OrderStopLoss()>(Ask+pips*TrailingStop)) || (OrderStopLoss()==0))
{

RefreshRates();
stoploss=Ask+(pips*TrailingStop);
takeprofit=OrderTakeProfit()-pips*TrailingStop;
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD);
if(stoploss<StopLevel*pips) stoploss=StopLevel*pips;
if(takeprofit<StopLevel*pips) takeprofit=StopLevel*pips;
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(MathAbs(OrderStopLoss()-stoploss)>point)
if((pips*TrailingStop)>(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_FREEZE_LEVEL)*pips)

//— modify order and exit
if(CheckStopLoss_Takeprofit(OP_SELL,stoploss,takeprofit))
if(OrderModifyCheck(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit))
if(!OrderModify(OrderTicket(),OrderOpenPrice(),stoploss,takeprofit,0,Red))
Print(“OrderModify error “,GetLastError());
return;
}
}
}
}
}
}
}
//+——————————————————————+
//+—————————————————————————+
//| MOVE TO BREAK EVEN |
//+—————————————————————————+
void MOVETOBREAKEVEN()

{
for(int b=OrdersTotal()-1;b>=0;b–)
{
if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()==Symbol())
if(OrderType()==OP_BUY)
if(Bid-OrderOpenPrice()>WHENTOMOVETOBE*pips)
if(OrderOpenPrice()>OrderStopLoss())
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+(PIPSTOMOVESL*pips),OrderTakeProfit(),0,CLR_NONE))
Print(“eror”);
}

for(int s=OrdersTotal()-1;s>=0;s–)
{
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()!=MagicNumber)continue;
if(OrderSymbol()==Symbol())
if(OrderType()==OP_SELL)
if(OrderOpenPrice()-Ask>WHENTOMOVETOBE*pips)
if(OrderOpenPrice()<OrderStopLoss())
if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-(PIPSTOMOVESL*pips),OrderTakeProfit(),0,CLR_NONE))
Print(“eror”);
}
}
//————————————————————————————–
//+——————————————————————+
//| Calculate optimal lot size |
//+——————————————————————+
double LotsOptimized()
{
double lot=Lots;
int orders=OrdersHistoryTotal(); // history orders total
int losses=0; // number of losses orders without a break
//— select lot size
if(MaximumRisk>0)
{
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
}
//— calcuulate number of losses orders without a break
if(DecreaseFactor>0)
{
for(int i=orders-1;i>=0;i–)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
{
Print(“Error in history!”);
break;
}
if(OrderSymbol()!=Symbol() /*|| OrderType()>OP_SELL*/)
continue;
//—
if(OrderProfit()>0) break;
if(OrderProfit()<0) losses++;
}
if(losses>1)
lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
}
//— minimal allowed volume for trade operations
double minlot=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
if(lot<minlot)
{ lot=minlot; }
// Print(“Volume is less than the minimal allowed ,we use”,minlot);}
// lot=minlot;

//— maximal allowed volume of trade operations
double maxlot=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
if(lot>maxlot)
{ lot=maxlot; }
// Print(“Volume is greater than the maximal allowed,we use”,maxlot);}
// lot=maxlot;

//— get minimal step of volume changing
double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
int ratio=(int)MathRound(lot/volume_step);
if(MathAbs(ratio*volume_step-lot)>0.0000001)
{ lot=ratio*volume_step;}
return(lot);
/* else Print(“StopOut level Not enough money for “,OP_SELL,” “,lot,” “,Symbol());
return(0);*/
}
//+——————————————————————+
double NDTP(double val)
{
RefreshRates();
double SPREAD=MarketInfo(Symbol(),MODE_SPREAD);
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(val<StopLevel*pips+SPREAD*pips) val=StopLevel*pips+SPREAD*pips;
// double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
//int Stops_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);

//if (Stops_level*pips<val-Bid)
//val=Ask+Stops_level*pips;
return(NormalizeDouble(val, Digits));
// return(val);
}
//+——————————————————————+
//+——————————————————————+
double ND(double val)
{
return(NormalizeDouble(val, Digits));
}
//+——————————————————————+
int IfOrderDoesNotExistBuy()
{
bool exists=false;
for(int i=OrdersTotal(); i>=0; i–)
{

if(OrderSelect(i,SELECT_BY_POS)==true && OrderSymbol()==Symbol())
{
exists = true; return(exists);
}else{
Print(“OrderSelect() error – “,(GetLastError()));
}
}

if(exists==false)
{
//BuyOrderType();
// return(exists);
}
return(0);
}
////////////////////////////////////////////////////////////////////////////////////
int getOpenOrders()
{

int Orders=0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
{
continue;
}
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber)
{
continue;
}
Orders++;
}
return(Orders);
}
//+——————————————————————+
//+——————————————————————+
//| Checking the new values of levels before order modification |
//+——————————————————————+
bool OrderModifyCheck(int ticket,double price,double sl,double tp)
{
//— select order by ticket
if(OrderSelect(ticket,SELECT_BY_TICKET))
{
//— point size and name of the symbol, for which a pending order was placed
string symbol=OrderSymbol();
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
//— check if there are changes in the Open price
bool PriceOpenChanged=true;
int type=OrderType();
if(!(type==OP_BUY || type==OP_SELL))
{
PriceOpenChanged=(MathAbs(OrderOpenPrice()-price)>point);
}
//— check if there are changes in the StopLoss level
bool StopLossChanged=(MathAbs(OrderStopLoss()-sl)>point);
//— check if there are changes in the Takeprofit level
bool TakeProfitChanged=(MathAbs(OrderTakeProfit()-tp)>point);
//— if there are any changes in levels
if(PriceOpenChanged || StopLossChanged || TakeProfitChanged)
return(true); // order can be modified
//— there are no changes in the Open, StopLoss and Takeprofit levels
else
//— notify about the error
PrintFormat(“Order #%d already has levels of Open=%.5f SL=%.5f TP=%.5f”,
ticket,OrderOpenPrice(),OrderStopLoss(),OrderTakeProfit());
}
//— came to the end, no changes for the order
return(false); // no point in modifying
}
//+——————————————————————+
//+——————————————————————+
bool CheckStopLoss_Takeprofit(ENUM_ORDER_TYPE type,double SL,double TP)
{
//— get the SYMBOL_TRADE_STOPS_LEVEL level
int stops_level=(int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);
if(stops_level!=0)
{
PrintFormat(“SYMBOL_TRADE_STOPS_LEVEL=%d: StopLoss and TakeProfit must”+
” not be nearer than %d points from the closing price”,stops_level,stops_level);
}
//—
bool SL_check=false,TP_check=false;
//— check only two order types
switch(type)
{
//— Buy operation
case ORDER_TYPE_BUY:
{
//— check the StopLoss
SL_check=(Bid-SL>stops_level*_Point);
if(!SL_check)
PrintFormat(“For order %s StopLoss=%.5f must be less than %.5f”+
” (Bid=%.5f – SYMBOL_TRADE_STOPS_LEVEL=%d points)”,
EnumToString(type),SL,Bid-stops_level*_Point,Bid,stops_level);
//— check the TakeProfit
TP_check=(TP-Bid>stops_level*_Point);
if(!TP_check)
PrintFormat(“For order %s TakeProfit=%.5f must be greater than %.5f”+
” (Bid=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)”,
EnumToString(type),TP,Bid+stops_level*_Point,Bid,stops_level);
//— return the result of checking
return(SL_check&&TP_check);
}
//— Sell operation
case ORDER_TYPE_SELL:
{
//— check the StopLoss
SL_check=(SL-Ask>stops_level*_Point);
if(!SL_check)
PrintFormat(“For order %s StopLoss=%.5f must be greater than %.5f “+
” (Ask=%.5f + SYMBOL_TRADE_STOPS_LEVEL=%d points)”,
EnumToString(type),SL,Ask+stops_level*_Point,Ask,stops_level);
//— check the TakeProfit
TP_check=(Ask-TP>stops_level*_Point);
if(!TP_check)
PrintFormat(“For order %s TakeProfit=%.5f must be less than %.5f “+
” (Ask=%.5f – SYMBOL_TRADE_STOPS_LEVEL=%d points)”,
EnumToString(type),TP,Ask-stops_level*_Point,Ask,stops_level);
//— return the result of checking
return(TP_check&&SL_check);
}
break;
}
//— a slightly different function is required for pending orders
return false;
}
//+——————————————————————+

//+——————————————————————+
//| exitbuys() |
//+——————————————————————+
void exitbuys()
{
double result;
for(int i=OrdersTotal()-1; i>=0; i–)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
result=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,clrNONE);
if(result!=true)//if it did not close
{
err=GetLastError(); Print(“LastError = “,err);//get the reason why it didn’t close
}

}
}

}
}
//+——————————————————————+
//+——————————————————————+
//| exitsells() |
//+——————————————————————+
void exitsells()
{
double result;
for(int i=OrdersTotal()-1; i>=0; i–)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{

if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
result=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3,clrNONE);
if(result!=true)//if it did not close
{
err=GetLastError(); Print(“LastError = “,err);//get the reason why it didn’t close
}

}
}

}
}
//+——————————————————————+
//+——————————————————————+
//| Fractal High TrendLine Show |
//+——————————————————————+
int drow()
{

datetime T2=0; // Second time coordinate
double t2=0;
int Error; // Error code
//————————————————————— 3 —
ArrayResize(FractalHigh,FractalNum,1);
ArrayResize(FractalLow,FractalNum,1);
ArrayResize(FractalHCandel,FractalNum,1);
ArrayResize(FractalLCandel,FractalNum,1);
double high= -1,low = -1;
double data=0;
int lowcount=0,highcount=0;

for(int i=0; i<Bars; i++)
{
high=iFractals(NULL,0,MODE_UPPER,i);
if(high>0)
{
FractalHigh[highcount]=high; FractalHCandel[highcount]=i; highcount++;
}
high=-1;
if(highcount==FractalNum) break;
}

for(int i=0; i<Bars; i++)
{
low=iFractals(NULL,0,MODE_LOWER,i);
if(low>0)
{
FractalLow[lowcount]=low; FractalLCandel[lowcount]=i; lowcount++;
}
low=-1;
if(lowcount==FractalNum) break;
}
for(int j=0; j<=FractalNum-1; j++)
{
if(ObjectFind(0,”FractalHigh”)<0)
{
ObjectDelete(“FractalHigh.”+IntegerToString(j));
ObjectCreate(0,”FractalHigh.”+IntegerToString(j),OBJ_ARROW,0,0,0,0,0); // Create THUMB_UP
ObjectSetInteger(0,”FractalHigh.”+IntegerToString(j),OBJPROP_COLOR,clrNavy);
}
ObjectSetInteger(0,”FractalHigh.”+IntegerToString(j),OBJPROP_TIME,Time[FractalHCandel[j]]); // Set time
ObjectSetDouble(0,”FractalHigh.”+IntegerToString(j),OBJPROP_PRICE,FractalHigh[j]+(10+(Period()/100))*pips);// Set price
}

for(int j=0; j<=FractalNum-1; j++)
{
if(ObjectFind(0,”FractalLow”)<0)
{
ObjectDelete(“FractalLow.”+IntegerToString(j));
ObjectCreate(0,”FractalLow.”+IntegerToString(j),OBJ_ARROW,0,0,0,0,0);// Create THUMB_DOWN
ObjectSetInteger(0,”FractalLow.”+IntegerToString(j),OBJPROP_COLOR,clrOrangeRed);
}
ObjectSetInteger(0,”FractalLow.”+IntegerToString(j),OBJPROP_TIME,Time[FractalLCandel[j]]);// Set time
ObjectSetDouble(0,”FractalLow.”+IntegerToString(j),OBJPROP_PRICE,FractalLow[j]-(10+(Period()/250))*pips);// Set price
}

First_Low_Candel=0; Secund_Low_Candel=2;
First_High_Candel=0; Secund_High_Candel=2;

t2=ObjectGet(“TREND”,OBJPROP_TIME2);// Requesting t2 coord.
//T2=t2;
Error=GetLastError(); // Getting an error code
if(Error==4202) // If no object 🙁
{
Create();
T2=Time[FractalHCandel[First_High_Candel]]; // Current value of t2 coordinate
}

//————————————————————— 4 —
if(T2!=Time[FractalHCandel[First_High_Candel]]) // If object is not in its place
{
ObjectMove(“TREND”,0,Time[FractalHCandel[Secund_High_Candel]],FractalHigh[Secund_High_Candel]); //New t1 coord.
ObjectMove(“TREND”,1,Time[FractalHCandel[First_High_Candel]],FractalHigh[First_High_Candel]); //New t2 coord.
WindowRedraw(); // Redrawing the image
//Create();
}
return (0);
}
//————————————————————— 7 —
int Create() // User-defined function..
{ // ..of object creation
datetime T2=0; // Second time coordinate
double t2=0;
// int Error; // Error code
//————————————————————— 3 —
ArrayResize(FractalHigh,FractalNum,1);
ArrayResize(FractalLow,FractalNum,1);
ArrayResize(FractalHCandel,FractalNum,1);
ArrayResize(FractalLCandel,FractalNum,1);
double high= -1,low = -1;
double data=0;
int lowcount=0,highcount=0;

for(int i=0; i<Bars; i++)
{
high=iFractals(NULL,0,MODE_UPPER,i);
if(high>0)
{
FractalHigh[highcount]=high; FractalHCandel[highcount]=i; highcount++;
}
high=-1;
if(highcount==FractalNum) break;
}

for(int i=0; i<Bars; i++)
{
low=iFractals(NULL,0,MODE_LOWER,i);
if(low>0)
{
FractalLow[lowcount]=low; FractalLCandel[lowcount]=i; lowcount++;
}
low=-1;
if(lowcount==FractalNum) break;
}
datetime T1=Time[FractalHCandel[Secund_High_Candel]]; // Defining 1st time coord.
T2=Time[FractalHCandel[First_High_Candel]]; // Defining 2nd time coord.
ObjectCreate(“TREND”,OBJ_TREND,0,T1,FractalHigh[Secund_High_Candel],T2,FractalHigh[First_High_Candel]);// Creation
//— set line color
ObjectSet(“TREND”,OBJPROP_COLOR,clrYellow); // Color
//— set line width
ObjectSet(“TREND”,OBJPROP_WIDTH,1);
//— enable (true) or disable (false) the mode of continuation of the line’s display to the right
ObjectSet(“TREND”,OBJPROP_RAY,true); // Ray
ObjectSet(“TREND”,OBJPROP_STYLE,STYLE_DASH);// Style
ObjectSet(“TREND”,OBJPROP_BACK,true);
WindowRedraw(); // Image redrawing
return(0);
}
//————————————————————— 7 —

//+——————————————————————+
//| Fractal Low TrendLine Show |
//+——————————————————————+
int drow1()
{
datetime T2=0; // Second time coordinate
double t2=0;
int Error; // Error code
//————————————————————— 3 —
ArrayResize(FractalHigh1,FractalNum,1);
ArrayResize(FractalLow1,FractalNum,1);
ArrayResize(FractalHCandel1,FractalNum,1);
ArrayResize(FractalLCandel1,FractalNum,1);
double high1= -1,low1 = -1;
double data1=0;
int lowcount1=0,highcount1=0;

for(int i=0; i<Bars; i++)
{
low1=iFractals(NULL,0,MODE_LOWER,i);
if(low1>0)
{
FractalLow1[lowcount1]=low1; FractalLCandel1[lowcount1]=i; lowcount1++;
}
low1=-1;
if(lowcount1==FractalNum) break;
}
t2=ObjectGet(“TRENDLOW”,OBJPROP_TIME2);// Requesting t2 coord.
Error=GetLastError(); // Getting an error code
if(Error==4202) // If no object 🙁
{
Create();
T2=Time[FractalLCandel1[First_Low_Candel1]]; // Current value of t2 coordinate
}
//————————————————————— 4 —
if(T2!=Time[FractalLCandel1[First_Low_Candel1]]) // If object is not in its place
{
ObjectMove(“TRENDLOW”,0,Time[FractalLCandel1[Secund_Low_Candel1]],FractalLow1[Secund_Low_Candel1]); //New t1 coord.
ObjectMove(“TRENDLOW”,1,Time[FractalLCandel1[First_Low_Candel1]],FractalLow1[First_Low_Candel1]); //New t2 coord.
WindowRedraw(); // Redrawing the image //Create();
}
return (0);
}
//————————————————————— 6 —
int Create1() // User-defined function..
{ // ..of object creation
ArrayResize(FractalHigh1,FractalNum,1);
ArrayResize(FractalLow1,FractalNum,1);
ArrayResize(FractalHCandel1,FractalNum,1);
ArrayResize(FractalLCandel1,FractalNum,1);
double high1= -1,low1 = -1;
double data1=0;
int lowcount1=0,highcount1=0;

for(int i=0; i<Bars; i++)
{
low1=iFractals(NULL,0,MODE_LOWER,i);
if(low1>0)
{
FractalLow1[lowcount1]=low1; FractalLCandel1[lowcount1]=i; lowcount1++;
}
low1=-1;
if(lowcount1==FractalNum) break;
}
First_Low_Candel1=0; Secund_Low_Candel1=2;
First_High_Candel1=0; Secund_High_Candel1=2;

datetime T1=Time[FractalLCandel1[Secund_Low_Candel1]]; // Defining 1st time coord.
datetime T2=Time[FractalLCandel1[First_Low_Candel1]]; // Defining 2nd time coord.
ObjectCreate(“TRENDLOW”,OBJ_TREND,0,T1,FractalLow1[Secund_Low_Candel1],T2,FractalLow1[First_Low_Candel1]);// Creation
//— set line color
ObjectSet(“TRENDLOW”,OBJPROP_COLOR,clrYellow); // Color
//— set line width
ObjectSet(“TRENDLOW”,OBJPROP_WIDTH,1);
//— enable (true) or disable (false) the mode of continuation of the line’s display to the right
ObjectSet(“TRENDLOW”,OBJPROP_RAY,true); // Ray
ObjectSet(“TRENDLOW”,OBJPROP_STYLE,STYLE_DASH);// Style
ObjectSet(“TRENDLOW”,OBJPROP_BACK,true);
WindowRedraw(); // Image redrawing
return(0);
}
//————————————————————— 7 —
//+——————————————————————+
int drow2()
{
datetime T2=0; // Second time coordinate
double t2=0;
int Error; // Error code
//————————————————————— 3 —
t2=ObjectGet(“MAIN_TREND”,OBJPROP_TIME2);// Requesting t2 coord.
//T2=t2;
Error=GetLastError(); // Getting an error code
if(Error==4202) // If no object 🙁
{
Create();
T2=Time[1]; // Current value of t2 coordinate
}

//————————————————————— 4 —
if(T2!=Time[1]) // If object is not in its place
{
ObjectMove(“MAIN_TREND”,0,Time[LEN_TREND-1],Open[LEN_TREND-1]); //New t1 coord.
ObjectMove(“MAIN_TREND”,1,Time[1],Open[1]); //New t2 coord.
WindowRedraw(); // Redrawing the image
//Create();
}
return (0);
}
//————————————————————— 6 —
int Create2() // User-defined function..
{ // ..of object creation
datetime T1=Time[LEN_TREND-1]; // Defining 1st time coord.
datetime T2=Time[1]; // Defining 2nd time coord.
ObjectCreate(“MAIN_TREND”,OBJ_TREND,0,T1,Open[LEN_TREND-1],T2,Open[1]);// Creation
//— set line color
ObjectSet(“MAIN_TREND”,OBJPROP_COLOR,clrDarkBlue); // Color
//— set line width
ObjectSet(“MAIN_TREND”,OBJPROP_WIDTH,1);
//— enable (true) or disable (false) the mode of continuation of the line’s display to the right
ObjectSet(“MAIN_TREND”,OBJPROP_RAY,true); // Ray
ObjectSet(“MAIN_TREND”,OBJPROP_STYLE,STYLE_DASH);// Style
ObjectSet(“MAIN_TREND”,OBJPROP_BACK,true);
WindowRedraw(); // Image redrawing
return(0);
}
//————————————————————— 7 —

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

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.