一个完整的EA基础构架【源码】.doc_第1页
一个完整的EA基础构架【源码】.doc_第2页
一个完整的EA基础构架【源码】.doc_第3页
一个完整的EA基础构架【源码】.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

希望学习EA编程的朋友,可以参考如下我们提供的源码【带注释】这个EA例子的交易逻辑是:N日高点 N日低点,超过高点做空,低过低点做多。带止损 止盈 及移动止损的处理部分。如果你能细心研究掌握此EA的设计逻辑 基本可以入门MQL的实战编程了。还是那句老话:自己多动脑,多做实验!源码如下:#property copyright Copyright ?2007, 520FX Corp. /指标版权信息#property link /指标联系的网站链接/=可调参数部分=#define Magic 20090101 /预定义的常量 Magic用于后面程序里的开仓动作时标记在订单里面的一个符号,用于区别其他EA程序下的单 防止混乱extern int N=50; /参数 后面程序里用它作为N根K线的数量extern int SL=100;/参数 后面程序里下单的时候用这个设置的点数作为入场时订单的止损价格。extern int TrailingStop=30;/参数 后面程序里用这个作为移动止损的点数设置extern double 每单手数=0.1;/参数 表示后面下单的仓位的大小extern int 滑点偏移点数=3;/参数 表示下单时 服务器端的价格与当前看到的价格相差的范围,如果在此范围内,则允许以服务器端的价格成交/-全局变量=int Tick;/用于记录订单的唯一编号double StopLost;/用于记录止损/=主函数部分开始=int start()/主函数 没来一个价格这个函数就运行一次int Ticket; /局部变量 用于记录每次下单后的状态,用于判断下单动作是否成功,如果不成功则做相应处理和提示 int OrderTypeNow=GetOrderTypeHolding();/通过自定义函数得到当前持仓单的交易类型 买 卖/自定义函数中做了处理,如果没有发现当前有持仓 则返回-1if (OrderTypeNow=-1)/空仓阶段 -1表示没有持仓的状态 if (TradeOrNo(1)/多单入场条件 自定义函数TradeOrNo(1)参数1 表示针对多单的方向进行判断是否满足入场条件 Ticket=OrderSend(Symbol(),OP_BUY,每单手数,Ask,滑点偏移点数,Ask-SL*Point,0,Magic,0,0);/多单入场/Ticket表示入场动作的执行结果,如果小于0表示入场动作失败 if(Ticket0)Print(多单入场失败+GetLastError(); return(0); /推出本次start函数的执行 elseif (TradeOrNo(2)/空单入场条件 Ticket=OrderSend(Symbol(),OP_SELL,每单手数,Bid,滑点偏移点数,Bid+SL*Point,0,Magic,0,0); if(Ticket0)Print(空单入场失败+GetLastError(); return(0); return;else/=持仓阶段= switch(OrderTypeNow)case OP_BUY:/多单持仓情况下,满足空单入场条件if (TradeOrNo(2)if(OrderClose(Tick,OrderLots(),Bid,滑点偏移点数)=false)/平掉多单持仓单 Print(翻转发生 多头平仓失败+GetLastError();return;else/平仓后,反手建立空单 Ticket=OrderSend(Symbol(),OP_SELL,每单手数,Bid,滑点偏移点数,Bid+SL*Point,0,Magic,0,0); if(TicketStopLost+2*TrailingStop*Point)OrderModify(Tick,OrderOpenPrice(),StopLost+TrailingStop*Point,0,0,CLR_NONE); return;break;case OP_SELL:if (TradeOrNo(1)if(OrderClose(Tick,OrderLots(),Ask,滑点偏移点数)=false)/平掉空单持仓单 Print(翻转发生 空头平仓失败+GetLastError();return;else/平仓后,反手建立多单 Ticket=OrderSend(Symbol(),OP_BUY,每单手数,Ask,滑点偏移点数,Ask-SL*Point,0,Magic,0,0); if(Ticket0)Print(多单反手建仓失败+GetLastError(); return(0); else /判断移动止损if (Bid=0;i-)OrderSelect(i, SELECT_BY_POS, MODE_TRADES);if(OrderSymbol()=Symbol() & OrderMagicNumber()=Magic ) Type=OrderType(); Tick=OrderTicket(); StopLost=OrderStopLoss(); return(Type);/=bool TradeOrNo(int Type)/判断当前指定方向的入场条件是否成立double NHigh=HighiHighest(Symbol(),0,MODE_HIGH,N,2);double NLow=LowiLowest(Symbol(),0,MODE_LOW,N,2);switch(Type)case 1:/判断多单入场条件是否成立if (Close1NHigh)/做多条件成立 return(true);break;case 2:if (Close1NLow)/做空条件成立retu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论