您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 综合/其它 > (MT4自动交易系统实例四)
MT4自动交易系统实例四实际运行测试合格程序(可以在进行优化)externdoubleTakeProfit=950;//盈利50点就出场externdoubleLots=6;//每单手数0.1externdoubleTrailingStop=370;//移动止损30externdoubleMACDOpenLevel=3;//开仓指标之一externdoubleMACDCloseLevel=2;//平仓指标之一externdoubleMATrendPeriod=26;//取26指数平滑平均线intstart(){doubleMacdCurrent,MacdPrevious,SignalCurrent;//即当前MACD(红绿柱子),之前一根的MACD,和一般来说参数是9的对EMA移动平均线doubleSignalPrevious,MaCurrent,MaPrevious;//前一根K线的signal,现在的MA,前一根的MAintcnt,ticket,total;//cnt是,ticket是判断开平仓是否成功的,其实就是flag.total是持仓单数量.//initialdatachecks//itisimportanttomakesurethattheexpertworkswithanormal//chartandtheuserdidnotmakeanymistakessettingexternal//variables(Lots,StopLoss,TakeProfit,//TrailingStop)inourcase,wecheckTakeProfit//onachartoflessthan100barsif(Bars15){Print(barslessthan100);//如果K线小于100根,那么判断不能做.return(0);}if(TakeProfit400)//如果设定的利润小于10点,那么判断程序有问题(10点太少了){Print(TakeProfitlessthan10);return(0);//checkTakeProfit}//tosimplifythecodingandspeedupaccess//dataareputintointernalvariablesMacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);//初始化MACD/signal与MA.MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);//iMacd最后一个参数是往回移动值,即取上一根K线的数据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);total=OrdersTotal();//total定义为orders数量.(持仓单)if(total1)//如果total小于1,那么进入保证金充足判定.{//noopenedordersidentifiedif(AccountFreeMargin()(1000*Lots))//如果保证金足够(1手1000),那么进入下一个判定:开仓判定.{Print(Wehavenomoney.FreeMargin=,AccountFreeMargin());//证金不足return(0);}//checkforlongposition(BUY)possibility//开仓判定:if(MacdCurrent0&&MacdCurrentSignalCurrent&&MacdPreviousSignalPrevious&&//如果MACD小于0,并且MACD上穿signal,并且Macd的绝对值大于3*1点MathAbs(MacdCurrent)(MACDOpenLevel*Point)&&MaCurrentMaPrevious)//并且MA呈上升趋势,那么就尝试多单开仓.{ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,macdsample,16384,0,Green);//尝试多单开仓,盈利目标50点(TakeProfit)if(ticket0)//无固定止损.ticket是1时成功.{//if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print(BUYorderopened:,OrderOpenPrice());//表示多单已开仓.}//elsePrint(ErroropeningBUYorder:,GetLastError());//ticket=0时开仓失败,打印错误结果.return(0);}//checkforshortposition(SELL)possibilityif(MacdCurrent0&&MacdCurrentSignalCurrent&&MacdPreviousSignalPrevious&&//如果MACD大于0,并且MACD下破signal,并且Macd的绝对值大于3*1点MacdCurrent(MACDOpenLevel*Point)&&MaCurrentMaPrevious)//并且MA呈下降趋势,那么就尝试空单开仓.{ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,macdsample,16384,0,Red);//尝试空单开仓,盈利目标50点,无固定止损if(ticket0){if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))Print(SELLorderopened:,OrderOpenPrice());//表示空单已开仓.}elsePrint(ErroropeningSELLorder:,GetLastError());//否则开仓失败,打印错误结果.return(0);}return(0);}//itisimportanttoenterthemarketcorrectly,//butitismoreimportanttoexititcorrectly...for(cnt=0;cnttotal;cnt++)//平仓判定.{OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);//选择第cnt个单子.if(OrderType()=OP_SELL&&//checkforopenedposition//检验开仓类别OrderSymbol()==Symbol())//checkforsymbol//Symbol-交易系统称号{//if(OrderType()==OP_BUY)//longpositionisopened//进入多单检验.{//shoulditbeclosed?if(MacdCurrent0&&MacdCurrentSignalCurrent&&MacdPreviousSignalPrevious&&//如果Macd高位死叉,出场.MacdCurrent(MACDCloseLevel*Point)){OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);//closepositionreturn(0);//exit}//checkfortrailingstopif(TrailingStop0)//如果有移动止损,判定:{//if(Bid-OrderOpenPrice()Point*TrailingStop)//如果当前的卖价减去开仓价格大于移动止损{//那么判定:(现在已经上升了一段了)if(OrderStopLoss()Bid-Point*TrailingStop)//如果现止损值小于卖价减去移动止损{OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);//那么更改止损值到现在的卖价-移动止损return(0);}}}}else//gotoshortposition{//shoulditbeclosed?if(MacdCurrent0&&MacdCurrentSignalCurrent&&MacdPreviousSignalPrevious&&MathAbs(MacdCurrent)(MACDCloseLevel*Point))//同理,判断空单是否需要平仓.{OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);//closepositionreturn(0);//exit}//checkfortrailingstopif(TrailingStop0){if((OrderOpenPrice()-Ask)(Point*TrailingStop)){if((OrderStopLoss()(Ask+Point*TrailingStop))||(OrderStopLoss()==0)){OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);return(0);}}}}}}return(0);}//theend.
本文标题:(MT4自动交易系统实例四)
链接地址:https://www.777doc.com/doc-6317947 .html