外汇EA交易代码解析:限价单交易策略
extern double TakeProfit = 10;
extern double Lots = 0.1;
extern double TrailingStop = 0;
extern double StopLoss = 15;
extern double MM = 0;
extern double Risk = 30;
extern double LotLimit = 50;
extern double Per = 3;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
double s=GlobalVariableGet('SELLLIMIT');//全局范围内获取SELLLIMIT
double b=GlobalVariableGet('BUYLIMIT');
double ds=GlobalVariableGet('DateS');
double db=GlobalVariableGet('DateB');
if (ds != DayOfWeek())//如果DS当天的星期几不相同为了避免在下一个交易日使用旧的限价单值而编写的
{
GlobalVariableDel('SELLLIMIT');
GlobalVariableDel('BUYLIMIT');
GlobalVariableDel('DatesS');
GlobalVariableDel('DatesB');
}
double H3,H4,L3,L4,SH4,SH3,BL3,BL4;
//当订单总数小于1且当前时间是23:59时,该代码段会执行后续操作
if ( OrdersTotal() < 1 && Hour() == 23 && Minute() == 59 ) return(0);
//到当前时间时,有订单的话
if ( OrdersTotal() > 0 && Hour() == 23 && Minute() == 59 )
{
//以下可以覆盖全部各类型订单
int total = OrdersTotal();
for(int i=total-1;i>=0;i--)
{
OrderSelect(i, SELECT_BY_POS);
int type = OrderType();
bool result = false;
switch(type)
{
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
break;
//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
break;
//Close pending orders
case OP_BUYLIMIT :
case OP_BUYSTOP :
case OP_SELLLIMIT :
case OP_SELLSTOP : result = OrderDelete( OrderTicket() );
}
if(result == false)
{
Alert('Order ' , OrderTicket() , ' failed to close. Error:' , GetLastError() );
Sleep(3000);
}
}
}
H4= ((((High[1]-Low[1])*1.1)/2)+Close[1]);
H3= ((((High[1]-Low[1])*1.1)/4)+Close[1]);
L3= (Close[1]-((High[1]-Low[1])*1.1)/4);
L4= (Close[1]-((High[1]-Low[1])*1.1)/2);
if (db != DayOfWeek() && s == 0)
{
SH3 = OrderSend(Symbol(),OP_SELLLIMIT,Lots,NormalizeDouble(H4,4),3,NormalizeDouble(H4,4)+StopLoss*Point,NormalizeDouble(H4,4)-TakeProfit*Point,'H3',0,0,Red);
if (SH3 < 0){
GlobalVariableSet('SELLLIMIT',0);
}
else
{
GlobalVariableSet('SELLLIMIT',1);
GlobalVariableSet('DateS',DayOfWeek());
}
}
//SH4 = OrderSend(Symbol(),OP_SELLLIMIT,Lots,H4,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,'H4',0,0,Red);
if (db != DayOfWeek() && b == 0) {
BL3 = OrderSend(Symbol(),OP_BUYLIMIT,Lots,NormalizeDouble(L4,4),3,NormalizeDouble(L4,4)-StopLoss*Point,NormalizeDouble(L4,4)+TakeProfit*Point,'L3',0,0,Green);
if (BL3 < 0){
GlobalVariableSet('BUYLIMIT',0);
}
else
{
GlobalVariableSet('BUYLIMIT',1);
GlobalVariableSet('DateB',DayOfWeek());
}
}
//BL4 = OrderSend(Symbol(),OP_BUYLIMIT,Lots,L4,3,Ask+StopLoss*Point,Bid-TakeProfit*Point,'L4',0,0,Green);
}
代码解析:
上述代码是一段外汇交易的EA(Expert Advisor)代码,主要功能是基于价格波动计算出买入和卖出的限价单,并在合适的时机进行交易。下面是对代码中关键部分的解释:
- TakeProfit:止盈点,即预设的价格上限,如果价格达到该点,则会自动平仓获利。
- Lots:交易手数,即交易量的大小。
- TrailingStop:移动止损,即当价格变动时,将止损点随之移动,以保护获利。
- StopLoss:止损点,即预设的价格下限,如果价格跌破该点,则会自动平仓止损。
- MM:资金管理,即根据账户余额和交易量自动计算每次交易的风险和盈利。
- Risk:风险系数,即资金管理中的风险比例。
- LotLimit:交易手数上限,即限制每次交易的最大手数。
- Per:资金管理中的固定比例,即每次交易中使用的资金比例。
代码中还包含了一些全局变量的设定和获取,以及对订单的处理和删除。在主程序中,根据当前时间和前一天的限价单情况,计算出新的买入和卖出的限价单,并进行交易。
原文地址: https://www.cveoy.top/t/topic/nVns 著作权归作者所有。请勿转载和采集!