最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

MT4网格交易法

来源:动视网 责编:小OO 时间:2025-09-27 20:53:25
文档

MT4网格交易法

#propertycopyright""#propertylink""#propertyversion"1.00"#propertystrict//+------------------------------------------------------------------//|@重要:本程序本人已不使用,仅限用于帮助研究网格交易和MQL4代码,|//如果使用该程序,赢了是您的,亏了也是您的|//+--------------------------------------------
推荐度:
导读#propertycopyright""#propertylink""#propertyversion"1.00"#propertystrict//+------------------------------------------------------------------//|@重要:本程序本人已不使用,仅限用于帮助研究网格交易和MQL4代码,|//如果使用该程序,赢了是您的,亏了也是您的|//+--------------------------------------------
#property copyright ""

#property link " "

#property version "1.00"

#property strict

//+------------------------------------------------------------------

//| @重要:本程序本人已不使用,仅限用于帮助研究网格交易和MQL4代码, |

// 如果使用该程序,赢了是您的,亏了也是您的 |

//+------------------------------------------------------------------

extern float _volume;//网格仓位

extern float _step;//网格步长(格子密度)

extern float _limit_high;//网格上限

extern float _limit_low;//网格下限

extern int _interval=60;//自动化交易,每XX秒检查一次网格

struct TicketInfo

{

int op;

float price;

int ticketid;

};

//+------------------------------------------------------------------+

//| define variables |

//+------------------------------------------------------------------+

float InitPriceList[];

TicketInfo BuyOrders[],SellOrders[],OpenBuyNow[],OpenSellNow[];

static TicketInfo OpenBuyPre[],OpenSellPre[];

//+------------------------------------------------------------------+

//| Expert initialization function |

//+------------------------------------------------------------------+

int OnInit()

{

//--- create timer

EventSetTimer(_interval);

//---

return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

//| Expert deinitialization function |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

//--- destroy timer

EventKillTimer();

}

//+------------------------------------------------------------------+

//| Expert tick function |

//+------------------------------------------------------------------+

void OnTick()

{

//---

}

//+------------------------------------------------------------------+

//| Timer function |

//+------------------------------------------------------------------+

void OnTimer()

{

datetime begin,end;

begin=TimeCurrent();

//+------------------------------------------------------------------+

//| (1)根据输入的价格区间和密度,生成要下单的价格 |

//+------------------------------------------------------------------+

GetInitPriceList(InitPriceList,_limit_high,_limit_low,_step);

//+------------------------------------------------------------------+

//| (2)获取当前已下单的价格 |

//+------------------------------------------------------------------+

GetOrders(BuyOrders,SellOrders);

Alert("init price begin");

for(int i=0;i{

Alert(InitPriceList[i]);

}

Alert("buy begin");

for(int i=0;i{

Alert(BuyOrders[i].price);

}

Alert("sell begin");

for(int i=0;i{

Alert(SellOrders[i].price);

}

//+------------------------------------------------------------------+

//| (3)根据(1),检查(2)中应下单但没下单的,下单 |

//+------------------------------------------------------------------+

CheckSendOrder(InitPriceList,BuyOrders,SellOrders);

//+------------------------------------------------------------------+

//| 附1:该部分不属于网格,是为了每次开仓、平仓能收到邮件提醒,设置成|

//qq邮件,短信也能收到提醒q邮件,微信也能收到提醒 |

//+------------------------------------------------------------------+

GetPureOrders(OpenBuyNow,BuyOrders,OP_BUY);

GetPureOrders(OpenSellNow,SellOrders,OP_SELL);

//+------------------------------------------------------------------+

//| get the difference and send mail |

//+------------------------------------------------------------------+

CheckSendMail(OpenBuyPre,OpenBuyNow);

CheckSendMail(OpenSellPre,OpenSellNow);

end=TimeCurrent();

Alert("time1:"+begin+"end:"+end);

}

//+------------------------------------------------------------------+

void GetOrders(TicketInfo &_BuyOrders[],TicketInfo &_SellOrders[])

{

ArrayFree(_BuyOrders);

ArrayFree(_SellOrders);

for(int i=0;i{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderSymbol()==Symbol() &&(OrderType()==OP_BUY || OrderType()==OP_BUYLIMIT || OrderType()==OP_BUYSTOP))//

{

ArrayResize(_BuyOrders,ArraySize(_BuyOrders)+1,ArraySize(_BuyOrders));

_BuyOrders[ArraySize(_BuyOrders)-1].op=OrderType();

_BuyOrders[ArraySize(_BuyOrders)-1].ticketid=OrderTicket();

_BuyOrders[ArraySize(_BuyOrders)-1].price=OrderComment();

}

if(OrderSymbol()==Symbol() && (OrderType()==OP_SELL || OrderType()==OP_SELLLIMIT || OrderType()==OP_SELLSTOP))//

{

ArrayResize(_SellOrders,ArraySize(_SellOrders)+1,ArraySize(_SellOrders));

_SellOrders[ArraySize(_SellOrders)-1].op=OrderType();

_SellOrders[ArraySize(_SellOrders)-1].ticketid=OrderTicket();

_SellOrders[ArraySize(_SellOrders)-1].price=OrderComment();

}

}

}

}

//+------------------------------------------------------------------+

void GetInitPriceList(float &_InitPriceList[],float _fHigh,float _fLow,float _fStep)

{

ArrayFree(_InitPriceList);

if(_fHigh<0 || _fLow<0 || _fStep <0)

{

Alert("input para error");

}else

{

int iCount=(int)((_fHigh-_fLow)/_fStep) +1;

//Alert("high:"+_fHigh);

//Alert("low:"+_fLow);

//Alert("step:"+_fStep);

ArrayResize(_InitPriceList,iCount);

for(int i=0;i{

_InitPriceList[i]=_fLow+i*_fStep;

}

}

}

void CheckSendOrder(float &_InitPriceList[],TicketInfo &_BuyOrders[],TicketInfo &_SellOrders[])

{

for(int i=0;i{

if(!FindPrice(_InitPriceList[i],_BuyOrders))

{

int ticket1=OrderSend(Symbol(),OP_BUYLIMIT,_volume,_InitPriceList[i],0,0,_InitPriceList[i]+_step,_InitPriceList[i],0,0,clrNONE);

int ticket2=OrderSend(Symbol(),OP_BUYSTOP,_volume,_InitPriceList[i],0,0,_InitPriceList[i]+_step,_InitPriceList[i],0,0,clrNONE);

}

if(!FindPrice(_InitPriceList[i],_SellOrders))

{

int ticket3=OrderSend(Symbol(),OP_SELLLIMIT,_volume,_InitPriceList[i],0,0,_InitPriceList[i]-_step,_InitPriceList[i],0,0,clrNONE);

int ticket4=OrderSend(Symbol(),OP_SELLSTOP,_volume,_InitPriceList[i],0,0,_InitPriceList[i]-_step,_InitPriceList[i],0,0,clrNONE);

}

}

Alert("Error:"+GetLastError());

}

bool FindPrice(float _Price,TicketInfo &_Orders[])

{

bool bFound=false;

for(int i=0;i{

if(_Orders[i].price==_Price)

{

bFound=true;

break;

}

}

Alert("found:"+bFound);

return bFound;

}

bool FindTicket(int _Ticket,TicketInfo &_Orders[])

{

bool bFound=false;

for(int i=0;i{

if(_Orders[i].ticketid==_Ticket)

{

bFound=true;

break;

}

}

return bFound;

}

void GetPureOrders(TicketInfo &_PureOrders[],TicketInfo &_MixOrders[],int _OP)

{

ArrayFree(_PureOrders);

for(int i=0;i{

if(_MixOrders[i].op==_OP)

{

ArrayResize(_PureOrders,ArraySize(_PureOrders)+1,ArraySize(_PureOrders));

_PureOrders[ArraySize(_PureOrders)-1].price=_MixOrders[i].price;//price

_PureOrders[ArraySize(_PureOrde

rs)-1].ticketid=_MixOrders[i].ticketid;//price

}

}

}

void CheckSendMail(TicketInfo &_OrdersPre[],TicketInfo &_OrdersNow[])

{

for(int i=0;i{

if(!FindTicket(_OrdersPre[i].ticketid ,_OrdersNow))//原有,新没有,close

{

if(OrderSelect(_OrdersPre[i].ticketid,SELECT_BY_TICKET,MODE_HISTORY))

{

string sSubject=StringConcatenate(Symbol()," Closed

文档

MT4网格交易法

#propertycopyright""#propertylink""#propertyversion"1.00"#propertystrict//+------------------------------------------------------------------//|@重要:本程序本人已不使用,仅限用于帮助研究网格交易和MQL4代码,|//如果使用该程序,赢了是您的,亏了也是您的|//+--------------------------------------------
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top