基於兩個移動平均線交叉的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);        
        }
    }
相關文章
相關標籤/搜索