基于两个移动平均线交叉的EA

extern double     Lots=0.1;
extern double     Pip=5;
extern double     MoveBack=3;
extern int        chk=0;
extern double     SL=20;

int start()
    {
        double hi=High[1];
        double lo=Low[1];
        double EMA, EMA1, EMA2, EMA3;
        int cnt=0, ticket, total;
        EMA=iMA(0,0,5,0,MODE_EMA,PRICE_MEDIAN,1);
        EMA1=iMA(0,0,10,0,MODE_EMA,PRICE_MEDIAN,1);
        EMA2=iMA(0,0,5,0,MODE_EMA,PRICE_MEDIAN,0);
        EMA3=iMA(0,0,10,0,MODE_EMA,PRICE_MEDIAN,0);
        total=OrdersTotal();    #获取订单总数
        
        if(total<1)
            {
                if(AccountFreeMargin()<(1000*Lots)) 
                    {
                        Print("帐户余额 = ", AccountFreeMargin());
                        return(0);
                    }
                
                 if(((EMA>EMA1) && (EMA2<EMA3)) || ((EMA<EMA1) && (EMA2>EMA3)))
                    {
                        chk=1;
                        Print("可入场!");
                    }
               
                 if(chk==1)
                    {
                        if(EMA3-EMA2>2*Point && Bid>=(lo+MoveBack*Point))
                            {
                                ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"EMA position:",16385,0,Red);
                                if(ticket>0)
                                    {
                                        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                                            {
                                                Print("未结订单 SELL : ",OrderOpenPrice());
                                                chk=0;
                                            }
                                        else
                                            {
                                                Print("错误打开卖单 : ",GetLastError()); 
                                                return(0); 
                                            }
                                    }
                            }
                        if(EMA2-EMA3>2*Point && Ask<=(hi-MoveBack*Point))
                            {
                                ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"EMA position:",16385,0,Green);
                                if(ticket>0)
                                    {
                                        if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                                            {
                                                Print("未结订单 BUY : ",OrderOpenPrice());
                                                chk=0;
                                            }
                                        else
                                            {
                                                Print("打开错误买单: ",GetLastError()); 
                                                return(0); 
                                            }
                                    }
                            }
                     return(0);    
                    }
            
            for(cnt=0;cnt<total;cnt++)
                {
                    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
                    if(OrderType()<=OP_SELL &&OrderSymbol()==Symbol()) 
                        {
                            if(OrderType()==OP_BUY)
                                {
                                    if(Bid>=(OrderOpenPrice()+Pip*Point))
                                        {
                                            chk=0;
                                            OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                                            return(0);
                                        }
                                    if(Bid<=(OrderOpenPrice()-SL*Point))
                                        {
                                            chk=0;
                                            OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                                            return(0);
                                        }
                                }
                            else
                                {
                                    if(Ask<=(OrderOpenPrice()-Pip*Point))
                                        {
                                            chk=0;
                                            OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                                            return(0);
                                        }
                                    if(Ask>=(OrderOpenPrice()+SL*Point))
                                        {
                                            chk=0;
                                            OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                                            return(0);
                                        }
                                }
                        }
                }
            return(0);        
        }
    }

转载于:https://my.oschina.net/u/3093769/blog/901842

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序运用在外汇MT4交易系统 /+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| Copyright ?2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ extern double TakeProfit = 50; extern double Lots = 0.1; extern double TrailingStop = 30; extern double MACDOpenLevel=3; extern double MACDCloseLevel=2; extern double MATrendPeriod=26; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; int cnt, ticket, total; // initial data checks // it is important to make sure that the expert works with a normal // chart and the user did not make any mistakes setting external // variables (Lots, StopLoss, TakeProfit, // TrailingStop) in our case, we check TakeProfit // on a chart of less than 100 bars if(Bars<100) { Print("bars less than 100"); return(0); } if(TakeProfit<10) { Print("TakeProfit less than 10"); return(0); // check TakeProfit } // to simplify the coding and speed up access // data are put into internal variables MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值