<div class="blockcode"><div id="code_lVg"><ol> //+------------------------------------------------------------------+ //| Two Direction Order.mq4 | //| Copyright ?2010, metaQuotes Software Corp. | //| http://www.metaquotes.net| //+------------------------------------------------------------------+ #define Magic 020909 // extern int Slippage=3;//滑点 //extern double R=1.4200;//Zone 的阻力位 //extern double S=1.4100;//Zone 的支撑位 extern double 止损= 10; extern double 止盈=20; extern double 手数=0.01; extern double 与均线交叉点距离=10; extern int FasterMA = 5; //均线1的周期 extern int SlowerMA = 24; //均线2的周期 extern int Trade_Bar = 1; //下单的时机,如果为1,表示等待当前的K线完成,下一根K线刚出现的时候才下单;如果为0表示只要当前的价格 //满足条件了就马上下单 int last_t = 0; //这个是用来避免重复下单 //----全局变量=================== int OrderTotal;//持仓总单数 int TickLong;//突破多单挂单单号 int TickShort;//突破空单挂单单号 int TickOther; double LongOpenPrice; double ShortOpenPrice; double OtherOpenPrice; int TypeLong; //突破多单订单类型 int TypeShort;//突破空单订单类型 int TypeOther;//区间订单类型 double StopLost; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init()//初始化函数,负责程序变量及数据初始输入;只在程序调入时执行一次,一般不用重写内容。 { //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit()//反初始化函数,负责程序退出时,将数据从内存中清除;只在程序退出时,执行一次,一般不用重写内容。 { //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int Ticket; //自定义局部变量Ticket 用于记录每次下单后的状态,用于判断下单动作是否成功,如果不成功则做相应处理和提示 int Ticket1; int OrderTotal=GetOrderTypeHolding(); //---- /////////////////////////////////////////////////////////////////// ////////定义几个变量,从名字也可以很容易看出其代表的含义了: FasterMANow表示均线1当前的值、SlowerMANow表示均线2当前的值、 ///////FasterMAPrevious表示均线1的前值、SlowerMAPrevious表示均线2的前值;均线金叉,其实就是表示当均线1的前值小于均线2的前值, ///////且均线1的当前值大于均线2的当前值。) double FasterMANow, SlowerMANow, FasterMAPrevious, SlowerMAPrevious; //////////////////////////////////////////////////////////////////////////// //////////下面是给各个变量赋值,iMA就是均线函数 /////////////////////////////////////////////////////////////////////////// FasterMANow = iMA(NULL, 0, FasterMA, 0, MODE_EMA, PRICE_CLOSE, Trade_Bar); SlowerMANow = iMA(NULL, 0, SlowerMA, 0, MODE_EMA, PRICE_CLOSE, Trade_Bar); FasterMAPrevious = iMA(NULL, 0, FasterMA, 0, MODE_EMA, PRICE_CLOSE, Trade_Bar+1); SlowerMAPrevious = iMA(NULL, 0, SlowerMA, 0, MODE_EMA, PRICE_CLOSE, Trade_Bar+1); ////////////////////////////////////////////////////// ///////////下面开始判断是否发生金叉了 /////////////////////////////////////////////////////// if ((FasterMANow > SlowerMANow) && (FasterMAPrevious = SlowerMAPrevious)){ if ((OrderTotal==0)&& (TotalOrders(Magic)==0) && (Time[0]>last_t)) ///如果当前的EA还没有下单 {//1 RefreshRates(); ///刷新市场报价 // if(OrderTotal==0)//完全没有订单的情况 // Ticket=OrderSend( Symbol(), OP_BUYSTOP, 手数, R, Slippage,R-止损*Point, R+止盈*Point, "Long", 020909, 0, Lime) ; // Ticket1=OrderSend( Symbol(), OP_SELLSTOP, 手数, S, Slippage,S+止损*Point, S-止盈*Point, "Short", 020909, 0, Red) ; Ticket=OrderSend(Symbol(), OP_BUYSTOP, 手数, NormalizeDouble(Ask+与均线交叉点距离*Point,Digits), Slippage, NormalizeDouble(Ask-止损*Point+与均线交叉点距离*Point,Digits), NormalizeDouble(Ask+止盈*Point+与均线交叉点距离*Point,Digits), "Long", Magic, 0, Lime); Ticket1=OrderSend(Symbol(), OP_SELLSTOP, 手数, NormalizeDouble(Bid-与均线交叉点距离*Point,Digits), Slippage, NormalizeDouble(Bid+止损*Point+与均线交叉点距离*Point,Digits), NormalizeDouble(Bid-止盈*Point+与均线交叉点距离*Point,Digits), "Long", Magic, 0, Red); last_t = Time[0]; return (0); if(Ticket=R&&TypeShort==OP_SELL)//突破空单已经开仓情况 // {//2-1-2 // OrderDelete(TickLong, Yellow);//消突破多单挂单 // }//2-1 // }//2 {//2 OrderDelete(TickOther, Yellow);//消区间空单挂单 if(LongOpenPrice>=NormalizeDouble(Ask+与均线交叉点距离*Point,Digits)||ShortOpenPrice=NormalizeDouble(Ask+与均线交叉点距离*Point,Digits)&&TypeLong==OP_BUY)//突破多单已经开仓情况 {//2-1-1 OrderDelete(TickShort, Yellow);//消突破空单挂单 }//2-1-1 if(ShortOpenPrice>=NormalizeDouble(Bid-与均线交叉点距离*Point,Digits)&&TypeShort==OP_SELL)//突破空单已经开仓情况 {//2-1-2 OrderDelete(TickLong, Yellow);//消突破多单挂单 }//2-1-2 }//2-1 }//2 return(0); } //====================自定义函数部分================================================ //+------------------------------------------------------------------+ //|自定义判断持仓情况 | //+------------------------------------------------------------------+ int GetOrderTypeHolding()//从最近持仓单提取订单类型 {//1 OrderTotal=OrdersTotal(); for(int i=OrdersTotal()-1;i>=0;i--)//循环条件 {//1-1 OrderSelect(i, SELECT_BY_POS, MODE_TRADES);//查找订单函数 if(OrderSymbol()==Symbol())//如果仓单货币=目前的货币 {//1-2 StopLost=OrderStopLoss(); //自定义止损变量=返回的订单止损 if(OrderOpenPrice( )>=NormalizeDouble(Ask+与均线交叉点距离*Point,Digits)) {//1-2-1 TickLong=OrderTicket();//突破多单挂单单号 LongOpenPrice=OrderOpenPrice(); TypeLong=OrderType(); }//1-2-1 if(OrderOpenPrice( ) |
请高手修正:这个EA编译时提示\'(\'
回复:0 浏览:980
- 楼主admin 圈主
- 2019-05-05 16:11