这是我做的第一个均线交易,希望大家能使用、修改,大家一起共同打造一个完美的自动交易系统。系统可以支持自动追踪止损,相应代码被注释,需要时可以打开。
//+------------------------------------------------------------------+ //| My MA System.mq4 | //| Copyright 2008.fangruifeng | //| http://fangruifeng.zhan.cn.yahoo.com/index.html //+------------------------------------------------------------------+ //#define MAGICMA extern double Lots = 1; extern double TrailingStop = 150; extern double TakeProfit = 0; extern double StopLoss = 80; extern double Short_MA_value = 10; extern double Long_MA_value = 20; //+------------------------------------------------------------------+ //| Calculate open positions | //+------------------------------------------------------------------+ int CalculateCurrentOrders(string symbol) { int buys=0,sells=0; //---- for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; if(OrderSymbol()==Symbol()) //&& OrderMagicNumber()==MAGICMA) { if(OrderType()==OP_BUY) buys++; if(OrderType()==OP_SELL) sells++; } } //---- return orders volume if(buys>0) return(buys); else return(-sells); } //+------------------------------------------------------------------+ //| Check for open order conditions | //+------------------------------------------------------------------+ void CheckForOpen() { int ticket; double shortEma12,longEma22,shortEma11,longEma21; if(Bars<100) { Print("bars less than 100"); return(0); } shortEma12=iMA(NULL,0,Short_MA_value,0,MODE_EMA,PRICE_CLOSE,2); longEma22=iMA(NULL,0,Long_MA_value ,0,MODE_EMA,PRICE_CLOSE,2); shortEma11=iMA(NULL,0,Short_MA_value,0,MODE_EMA,PRICE_CLOSE,1); longEma21=iMA(NULL,0,Long_MA_value ,0,MODE_EMA,PRICE_CLOSE,1); if(shortEma12<longEma22&&shortEma11>longEma21) { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,0,"My EA",12345,0,Blue); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Alert("BUY order ",Symbol()," opened : ",OrderOpenPrice()); PlaySound("alert.wav"); } } else Print("Error opening BUY order : ",GetLastError()); return; } if(shortEma12>longEma22&&shortEma11<longEma21) { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,0,"My EA",12345,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) { Alert("SELL order ",Symbol()," opened : ",OrderOpenPrice()); PlaySound("alert.wav"); } } else Print("Error opening SELL order : ",GetLastError()); return; } } //+------------------------------------------------------------------+ //| Check for close order conditions | //+------------------------------------------------------------------+ void CheckForClose() { double shortEma12,longEma22,shortEma11,longEma21; shortEma12=iMA(NULL,0,Short_MA_value,0,MODE_EMA,PRICE_CLOSE,2); longEma22=iMA(NULL,0,Long_MA_value ,0,MODE_EMA,PRICE_CLOSE,2); shortEma11=iMA(NULL,0,Short_MA_value,0,MODE_EMA,PRICE_CLOSE,1); longEma21=iMA(NULL,0,Long_MA_value ,0,MODE_EMA,PRICE_CLOSE,1); for(int i=0;i<OrdersTotal();i++) { //if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES); //==false) break; if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { //---- check order type if(OrderType()==OP_BUY) { if(shortEma12>longEma22 && shortEma11<longEma21) { OrderClose(OrderTicket(),OrderLots(),Bid,3,White); return(0); } // if(TrailingStop>0) // { // if(Bid-OrderOpenPrice()>Point*TrailingStop) //{ //if(OrderStopLoss()<Bid-Point*TrailingStop) //{ //OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green); //return(0); //} //} //} } else { if(OrderType()==OP_SELL) { if(shortEma12<longEma22 && shortEma11>longEma21) { OrderClose(OrderTicket(),OrderLots(),Ask,3,White); return(0); } //if(TrailingStop>0) // { // if((OrderOpenPrice()-Ask)>(Point*TrailingStop)) // { // if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0)) // { //OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red); //return(0); //} //} //} } } } } } //+------------------------------------------------------------------+ //| Start function | //+------------------------------------------------------------------+ void start() { //---- check for history and trading if(Bars<100 || IsTradeAllowed()==false) return; //---- calculate open orders by current symbol if(CalculateCurrentOrders(Symbol())==0) CheckForOpen(); else CheckForClose(); //---- } //+------------------------------------------------------------------+
写的好,谢谢,在初始变量中如果增加5日均线怎样写
fruif:
这是我做的第一个均线交易,希望大家能使用、修改,大家一起共同打造一个完美的自动交易系统。系统可以支持自动追踪止损,相应代码被注释,需要时可以打开。
具体performance怎样?
这是我做的第一个均线交易,希望大家能使用、修改,大家一起共同打造一个完美的自动交易系统。系统可以支持自动追踪止损,相应代码被注释,需要时可以打开。
wucz:
写的好,谢谢,在初始变量中如果增加5日均线怎样写
在系统中设计的是两条移动平均线的交叉信号,默认的用10日和20日均线,如果你想用5日均线或其他均线,那么直接把初始变量中的10或20改成你要的就可以了,其他代码不用改。
写的好,谢谢,在初始变量中如果增加5日均线怎样写
我也覺得不錯,方才用來作測式,賺多,賠少。
抓得到方向。
可是,若一年的作得不錯,但要改成三年的成效就有問題了。
均线系统就是趋势系统,所以在有趋势的时候工作应该很好,但对于震荡市就不好说了。
如果再增加均线怎么写,如5日,10日,20日,这个地方怎样写,谢谢
double shortEma12,longEma22,shortEma11,longEma21;
谢谢分享,我有一个问题想请教一下。
代码:
shortEma12=iMA(NULL,0,Short_MA_value,0,MODE_EMA,PRICE_CLOSE,2); longEma22=iMA(NULL,0,Long_MA_value ,0,MODE_EMA,PRICE_CLOSE,2); shortEma11=iMA(NULL,0,Short_MA_value,0,MODE_EMA,PRICE_CLOSE,1); longEma21=iMA(NULL,0,Long_MA_value ,0,MODE_EMA,PRICE_CLOSE,1); if(shortEma12<longEma22&&shortEma11>longEma21) 这里为什么要比较两次?我不明白是什么意思。谢谢