//+------------------------------------------------------------------+ //| 布林战法.mq4 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern double lots=0.1; extern int sln=100;//止损点数,非价位哦! extern int tpn=500;// int magic_b=12345; int magic_s=54321;
int glbOrderType=NULL; int glbOrderTicket=NULL; string glbOrderSymbol=NULL; double glbOrderOpenPrice=NULL; double glbOrderStopLoss=NULL; double glbOrderLots=NULL; double glbOrderTp=NULL; double glbOrderP=NULL; double glbOrderPoint=NULL; double p_sl=0; double glbOrderDigits=NULL; double glbMinlot=NULL; double glbOrderTime; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() {
//--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //---
//--- // iBands() // iBars() double a=iClose(NULL,0,0); double b=iOpen(NULL,0,0); double c=a-b; double h=iHigh(NULL,0,0); double l=iLow(NULL,0,0); double t_bar=iTime(NULL,0,0); // Print("收价:",a,"开价:",b,"收-开:",c); double a1=iClose(NULL,0,1); double b1=iOpen(NULL,0,1); double h1=iHigh(NULL,0,1); double l1=iLow(NULL,0,1); double c1=a1-b1; // Print("Bar1收价:",a1,"Bar1开价:",b1,"Bar1收-开:",c1);
double a2=iClose(NULL,0,2); double b2=iOpen(NULL,0,2); double h2=iHigh(NULL,0,2); double l2=iLow(NULL,0,2); double c2=a1-b1; // Print("Bar2收价:",a2,"Bar2开价:",b2,"Bar2收-开:",c2); double bh=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_UPPER,0); double bm=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_MAIN,0); double bl=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,0); // Print("BOLL上轨价:",bh,"BOLL中轨价:",bm,"BOLL下轨价:",bl); double bh1=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_UPPER,1); double bm1=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_MAIN,1); double bl1=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,1); // Print("BOLL1上轨价:",bh1,"BOLL1中轨价:",bm1,"BOLL1下轨价:",bl1); double bh2=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_UPPER,2); double bm2=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_MAIN,2); double bl2=iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_LOWER,2); // Print("BOLL2上轨价:",bh2,"BOLL1中轨价:",bm2,"BOLL1下轨价:",bl2); //================================================上轨下单 // Print("dddddddd",t_Order_his(magic_s,magic_b )); if (OrderFind(magic_s)==false && bh-bl>100*Point&& glbOrderTime!=t_bar &&isNewBar())//无单且上下轨距超50点&& t_Order_his(magic_s,magic_b )!=t_bar { // double hh; if (h1>h2) hh=h1; else hh=h2; if ((b2bh2 && a1bm1&&b1>bh1&& a1<(a2-c2*0.4)) { if (hh { double sl=h2+30*Point;//第二根bar的最高价以上3点做为止损位 if(OrderSend(NULL,OP_SELL,lots,Bid,3,sl,NormalizeDouble(Bid-tpn*Point,Digits),NULL,magic_s,0,clrNONE)==false) Print("error:",GetLastError()); } } } //------------------------卖单阶段止损(保平) if (OrderFind(magic_s)==true) { Print("glbt:",glbOrderTime,"t_bar:",t_bar); if( l<(bm+50*Point) && glbOrderStopLoss>glbOrderOpenPrice) OrderModify(glbOrderTicket,glbOrderOpenPrice,glbOrderOpenPrice,bm,0,clrNONE); //------------------------卖单阶段止损(目标1止损) if (OrderFind(magic_s)==true && l<(bm-5*Point)&&NormalizeDouble(glbOrderStopLoss,Digits-1)>NormalizeDouble(bm,Digits-1)) OrderModify(glbOrderTicket,glbOrderOpenPrice,bm,bl,0,clrNONE); //============================================下轨多单 }
} //+------------------------------------------------------------------+
//+------------------------------------------------------------------+ bool OrderFind(int Magic) { glbOrderType = -1; glbOrderTicket = -1; int total = OrdersTotal(); bool res = false; for(int cnt = 0 ; cnt < total ; cnt++) { if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==false) Print("ERR(",GetLastError(),")"); if(OrderMagicNumber() == Magic && OrderSymbol() == Symbol()) { glbOrderType = OrderType(); glbOrderTime=OrderOpenTime(); glbOrderSymbol=OrderSymbol(); glbOrderTicket = OrderTicket(); glbOrderOpenPrice=OrderOpenPrice(); glbOrderStopLoss=OrderStopLoss(); glbOrderLots=OrderLots(); glbOrderTp=OrderTakeProfit(); glbOrderP=OrderProfit(); glbOrderPoint=Point; glbOrderDigits=Digits; glbMinlot = MarketInfo(OrderSymbol(),MODE_MINLOT); // Print(Symbol(),"ggggggggggggggggg",glbMinlot,"点值",glbOrderPoint); res = true; } } return(res); } //------------------orderfind()----over-------------------------------+ //===================最是否新Bar bool isNewBar() { static datetime TimeBar=0; bool flag=false; if(TimeBar!=Time[0]) { TimeBar=Time[0]; flag=true; } return (flag); }