DayTrading

DayTrading最新版

官方版无广告143

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

12 人已下载 手机查看

//+——————————————————————+
//| DayTrading.mq4 |
//| Copyright 2021, Christian Myven Bruhin |
//| Telegram: @Someone / t.me/investment_scene |
//| https://github.com/n0d4wn/MQLEA_YetAnotherDaytrader |
//+——————————————————————+
#property strict
#include <stdlib.mqh>

//———————– EA PARAMETER
extern string
Expert_Name = “———- Price Cross MA v0.3”;
extern double
StopLoss = 80,
TakeProfit = 105,
TrailingStop = 20;

extern string
MA_Setting = “———- Moving Average Setting”;
extern int
MAPeriod = 240,
MAMethod = 2, //0:SMA 1:EMA 2:SMMA 3:LWMA
MAPrice = 1; //0:CLOSE 1:OPEN

extern string
Order_Setting = “———- Order Setting”;
extern int
NumberOfTries = 5,
Slippage = 5;
extern bool
StopAndReverse = true; // if signal change, exit and reverse order

extern string
Time_Parameters = “———- EA Active Time”;
extern bool
UseHourTrade = false;
extern int
StartHour = 10,
EndHour = 11;

extern string
MM_Parameters = “———- MoneyManagement by L.Williams”;
extern double
Lots = 1;
extern bool
MM = true, //Use Money Management or not
AccountIsMicro = false; //Use Micro-Account or not
extern int
Risk = 20; //20%

extern bool
Show_Settings = true;

//———————– GLOBAL VARIABLE
static int
TimeFrame = 0;
string
TicketComment = “PriceCrossMA v0.3″;
int
MagicNumber = 20060410;
//+——————————————————————+
//| Expert initialization function |
//+——————————————————————+
int OnInit()
{
init_ea();
return(INIT_SUCCEEDED);
}

//———————– END PROGRAM
//—

//+——————————————————————+
//| Expert deinitialization function |
//+——————————————————————+
int OnDeinit(const int reason)
{
//—
//———————– PREVENT RE-COUNTING WHILE USER CHANGING TIME FRAME
//———————– SOURCE : CODERSGURU
TimeFrame=Period();
return(0);
}
//+——————————————————————+
//| Expert tick function |
//+——————————————————————+
void OnTick()
{
//—

}
//+——————————————————————+

 

// Function

 

//+——————————————————————+
//| FUNCTION DEFINITIONS
//+——————————————————————+

//———————– MONEY MANAGEMENT FUNCTION
//———————– SOURCE : CODERSGURU
double subLotSize()
{
double lotMM = MathCeil(AccountFreeMargin() * Risk / 1000) / 100;

if(AccountIsMicro==false) //normal account
{
if(lotMM < 0.1)
lotMM = Lots;
if((lotMM > 0.5) && (lotMM < 1))
lotMM=0.5;
if(lotMM > 1.0)
lotMM = MathCeil(lotMM);
if(lotMM > 100)
lotMM = 100;
}
else //micro account
{
if(lotMM < 0.01)
lotMM = Lots;
if(lotMM > 1.0)
lotMM = MathCeil(lotMM);
if(lotMM > 100)
lotMM = 100;
}

return (lotMM);
}

//———————– NUMBER OF ORDER BASE ON SYMBOL AND MAGICNUMBER FUNCTION
int subTotalTrade()
{
int
cnt,
total;
for(cnt=0; cnt<OrdersTotal(); cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
{
total++;
}
}
}
return(total);
}

//———————– OPEN ORDER FUNCTION
//———————– SOURCE : CODERSGURU
int subOpenOrder(int type)
{
int
ticket = 0,
err = 0,
c = 0;

double
aStopLoss = 0,
aTakeProfit = 0,
bStopLoss = 0,
bTakeProfit = 0;

if(StopLoss!=0)
{
double a_StopLoss = Ask-StopLoss*Point;
aStopLoss = NormalizeDouble(a_StopLoss,5);
bStopLoss = Bid+StopLoss*Point;
}

if(TakeProfit!=0)
{
aTakeProfit = Ask+TakeProfit*Point;
bTakeProfit = Bid-TakeProfit*Point;
}

if(type==OP_BUY)
{
for(c=0; c<NumberOfTries; c++)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,aStopLoss,0,TicketComment,MagicNumber,0,Green);
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
break;
}
}
}
}
if(type==OP_SELL)
{
for(c=0; c<NumberOfTries; c++)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,bStopLoss,0,TicketComment,MagicNumber,0,Red);
err=GetLastError();
if(err==0)
{
break;
}
else
{
if(err==4 || err==137 ||err==146 || err==136) //Busy errors
{
Sleep(5000);
continue;
}
else //normal error
{
break;
}
}
}
}
return(ticket);
}

//———————– CHECK ERROR CODE FUNCTION
//———————– SOURCE : CODERSGURU
void subCheckError(int ticket, string Type)
{
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print(Type + ” order opened : “,OrderOpenPrice());
}
else
Print(“Error opening ” + Type + ” order : “, ErrorDescription(GetLastError()));
}

//+——————————————————————+
//| |
//+——————————————————————+
int init_ea()
{
//— Variable Namespace
double
OpenPricePrevious,
ClosePricePrevious,
OpenPriceCurrent,
MAValuePrevious,
MAValueCurrent;
int
cnt,
e,
ticket,
total;
//———————– TIME FILTER
if(UseHourTrade)
{
if(!(Hour()>=StartHour && Hour()<=EndHour))
{
Comment(“Non-Trading Hours!”);
return(0);
}
}

//———————– CHECK CHART NEED MORE THAN 100 BARS
if(Bars<100)
{
Print(“bars less than 100″);
return(0);
}

//———————– ADJUST LOTS IF USING MONEY MANAGEMENT
if(MM==true)
Lots = subLotSize();
//———————– ENTRY
//———————– TOTAL ORDER BASE ON MAGICNUMBER AND SYMBOL
total = subTotalTrade();
//———————– SET VALUE FOR VARIABLE
OpenPricePrevious = iOpen(NULL,TimeFrame,120);
ClosePricePrevious = iClose(NULL,TimeFrame,120);
OpenPriceCurrent = iOpen(NULL,TimeFrame,0);
MAValuePrevious = iMA(NULL,TimeFrame,MAPeriod,0,MAMethod,MAPrice,120);
MAValueCurrent = iMA(NULL,TimeFrame,MAPeriod,0,MAMethod,MAPrice,0);
//———————– IF NO TRADE
if(total < 1)
{
//———————– BUY CONDITION
if(OpenPricePrevious<MAValuePrevious &&
OpenPriceCurrent <= MAValueCurrent)
{
ticket = subOpenOrder(OP_BUY); // open BUY order
subCheckError(ticket,”BUY”);
return(0);
}

//———————– SELL CONDITION
if(OpenPricePrevious >MAValuePrevious &&
OpenPriceCurrent <= MAValueCurrent)
{
ticket = subOpenOrder(OP_SELL); // open SELL order
subCheckError(ticket,”SELL”);
return(0);
}
return(0);
}

//———————– CHECK OPEN ORDER
//———————– FOR SIGNAL CHANGE – STOP AND REVERSE
//———————– AND TRAILING STOP
total = OrdersTotal();

if(TrailingStop>0 ||
StopAndReverse)
{
for(cnt=0; cnt<total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL &&
OrderSymbol()==Symbol() &&
OrderMagicNumber()==MagicNumber)
{
if(OrderType()==OP_BUY) // buy position is opened
{
if(StopAndReverse) // signal change, close order and open new one
{
if(OpenPricePrevious>MAValuePrevious &&
OpenPriceCurrent <MAValueCurrent)
{
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Violet); // close buy order
ticket = subOpenOrder(OP_SELL); // open sell order
subCheckError(ticket,”SELL”);
return(0);
}
}
if(TrailingStop>0) // trailing stop
{
if(Bid-OrderOpenPrice()>Point*TrailingStop &&
OrderStopLoss()<Bid-Point*TrailingStop)
{
e = OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
if(OrderType()==OP_SELL) // sell position is opened
{
if(StopAndReverse) // signal change, close order and open new one
{
if(OpenPricePrevious<MAValuePrevious &&
OpenPriceCurrent >MAValueCurrent)
{
e = OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Violet); // close sell order
ticket = subOpenOrder(OP_BUY); // open buy order
subCheckError(ticket,”BUY”);
return(0);
}
}
if(TrailingStop>0) // trailing stop
{
if(OrderOpenPrice()-Ask>Point*TrailingStop)
{
if(OrderStopLoss()>Ask+Point*TrailingStop || OrderStopLoss()==0)
{
e = OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
}
}
return(0);
}
//———————– END FUNCTION

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

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.