DayTrading

DayTrading 最新版

官方版 无广告 64

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

10 人已下载 手机查看

//+------------------------------------------------------------------+
//| 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

相关资源

暂无评论

暂无评论...