- //+------------------------------------------------------------------+
- //| 19.mq4 |
- //| bz. |
- //| http://blog.163.com|
- //+------------------------------------------------------------------+
- #property copyright "下载更多外汇EA,外汇指标,交易系统,就到【外汇EA之家】"
- #property link "http://www.eazhijia.com"
- #property description "①小数位置即对应整数网格取值位置,如;黄金正数个位取0,EUR小数0.00X取3 ②价格超过上阻力值不在开买单,超过下阻力不在开卖单,等于0无限制"
- #define BLWGZMA1 20050710
- //宏定义命令#define用法,定义本EA操作的订单的唯一标识号码,
- #define NL "\n"
-
- extern double 基础单量 = 0.1; //直接用交易量,
- extern double 止赢 = 100; //直接出场点数,等于0此数无计算,无止赢
- extern double 止损 =1000; //直接出场点数,等于0此数无计算,无止损
- extern int 小数位置 = 0; //小数位置即对应取值位置,如;黄金正数个位取0,EUR小数0.00X取3
- extern double 上阻力 = 0; //价格超过上阻力值不在开买单,超过下阻力不在开卖单,等于0无限制
- extern double 下阻力 = 0;
- //+------------------------------------------------------------------+
- //全局变量
- int wgb1=0,wgb2=0,wgb3=0,wgb4=0,wgb5=0,wgb6=0,wgb7=0,wgb8=0,wgb9=0,wgb0=0;
- int wgs1=0,wgs2=0,wgs3=0,wgs4=0,wgs5=0,wgs6=0,wgs7=0,wgs8=0,wgs9=0,wgs0=0;
- double wgd1,wgd2,wgd3,wgd4,wgd5,wgd6,wgd7,wgd8,wgd9,wgd0;
- int OMb=0,OMp=0;
- //+------------------------------------------------------------------+
- //| expert initialization function
- // 初始化 |
- //+------------------------------------------------------------------+
- int init()
- {
- if(基础单量<MarketInfo(Symbol(), MODE_MINLOT))
- Alert("亲,基础单量 < 最小允许标准手数!");
-
- return(0);
- }
- //+------------------------------------------------------------------+
- //| expert deinitialization function
- //反初始化 |
- //+------------------------------------------------------------------+
- int deinit()
- {
-
- return(0);
- }
- //+------------------------------------------------------------------+
-
- //+------------------------------------------------------------------+
- //| Start function |
- //主程序
- //+------------------------------------------------------------------+
- void start()//主程序—-每次成交价所驱动的运算过程
- {
- //---- check for history and trading—对交易历史进行检查
- if(Bars<200 || IsTradeAllowed()==false)
- return;
- //如果K线数少于200根,或者如果允许智能交易交易=假时,返回
- //+------------------------------------------------------------------+
- //图表左上角显示相关信息
- string str;
- str = "当前订单数目=" + OrdersTotal() + NL +
- "...................." + NL +
- "区间市值上限" + 上阻力 + NL +
- "区间设置下限" + 下阻力 + NL +
- "...................." + NL ;
-
-
- Comment( str );
- /*
- ObjectCreate("label_object", OBJ_LABEL, 0, 0, 0);//物件建立(标签物件)
- ObjectSetText("label_object",str,18,"Arial",Red);//设定标签物件文字,大小,字型,颜色
- ObjectSet("label_object", OBJPROP_XDISTANCE, 100);//设定X轴距
- ObjectSet("label_object", OBJPROP_YDISTANCE, 50);//设定Y轴距*/
- //+------------------------------------------------------------------+
- //定义局部变
- double wg,jg1,jg2;
- jg1=NormalizeDouble(Bid/1000,3+小数位置-1);
- //计算 ,当前价格除以100,并将结果保留小数点1位
- jg2=jg1*1000;
- if(小数位置==-2)
- wg=100;
- if(小数位置==-1)
- wg=10;
- if(小数位置==0)
- wg=1;
- if(小数位置==1)
- wg=0.1;
- if(小数位置==2)
- wg=0.01;
- if(小数位置==3)
- wg=0.001;
- if(小数位置==4)
- wg=0.0001;
- if(小数位置==5)
- wg=0.00001;
- if(小数位置==6)
- wg=0.00001;
-
- wgd0 = jg2;
- wgd1 = wg*1+jg2;
- wgd2 = wg*2+jg2;
- wgd3 = wg*3+jg2;
- wgd4 = wg*4+jg2;
- wgd4 = wg*5+jg2;
- wgd6 = wg*6+jg2;
- wgd7 = wg*7+jg2;
- wgd8 = wg*8+jg2;
- wgd9 = wg*9+jg2;
-
- //+------------------------------------------------------------------+
-
- //+------------------------------------------------------------------+
- CalculateCurrentOrders();
- //当前持仓单的数量
- CheckForOpen();
- //则进行开仓检查。
- //if(OrdersTotal()>0)
- //CheckForClose();
- //则进行平仓检查。
- //----
- }
- //+------------------------------------------------------------------+
- //+------------------------------------------------------------------+
- //| Check for open order conditions
- //自定义函数(无返回值) 开仓策略 |
- //+------------------------------------------------------------------+
- void CheckForOpen()//开仓检查(判断开仓条件及其处理)
- {
- int res; //定义局部变量res为整数型
- //+-----------
- //止损止赢计算,
- double bzs,bzy,szs,szy;
- if(止损==0)
- {
- bzs=0;
- szs=0;
- }
- else
- {
- szs=Bid+止损*Point;
- bzs=Ask-止损*Point;
- }
- if(止赢==0)
- {
- bzy=0;
- szy=0;
- }
- else
- {
- szy=Bid-止赢*Point;
- bzy=Ask+止赢*Point;
- }
- //+-----------
- int sss=0,bbb=0;
- if(下阻力==0)
- sss=1;
- if(下阻力!=0)
- {
- if(Bid>下阻力)
- sss=1;
- else
- sss=0;
- }
- if(上阻力==0)
- bbb=1;
- if(上阻力!=0)
- {
- if(Ask<上阻力)
- bbb=1;
- else
- bbb=0;
- }
-
- //---- sell conditions-卖出条件
- if(OMp==1)
- {
- if(wgs1==0)
- {
- if( Bid==wgd1 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs1",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs1=1;
- }
- }
- if(wgs2==0)
- {
- if( Bid==wgd2 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs2",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs2=1;
- }
- }
- if(wgs3==0)
- {
- if( Bid==wgd3 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs3",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs3=1;
- }
- }
- if(wgs4==0)
- {
- if( Bid==wgd4 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs4",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs4=1;
- }
- }
- if(wgs5==0)
- {
- if( Bid==wgd5 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs5",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs5=1;
- }
- }
- if(wgs6==0)
- {
- if( Bid==wgd6 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs6",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs6=1;
- }
- }
- if(wgs7==0)
- {
- if( Bid==wgd7 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs7",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs7=1;
- }
- }
- if(wgs8==0)
- {
- if( Bid==wgd8 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs8",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs8=1;
- }
- }
- if(wgs9==0)
- {
- if( Bid==wgd9 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs9",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs9=1;
- }
- }
- if(wgs0==0)
- {
- if( Bid==wgd0 )
- {
- res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs0",BLWGZMA1,0,Red);
- //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
- wgs0=1;
- }
- }
- }
- //---- buy conditions-买入条件
- if(OMb==1)
- {
- if(wgb1==0)
- {
- if ( Ask==wgd1 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb1",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb1=1;
- }
- }
- if(wgb2==0)
- {
- if (Ask==wgd2 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb2",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb2=1;
- }
- }
- if(wgb3==0)
- {
- if ( Ask==wgd3 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb3",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb3=1;
- }
- }
- if(wgb4==0)
- {
- if (Ask==wgd4 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb4",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb4=1;
- }
- }
- if(wgb5==0)
- {
- if (Ask==wgd5 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb5",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb5=1;
- }
- }
- if(wgb6==0)
- {
- if (Ask==wgd6 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb6",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb6=1;
- }
- }
- if(wgb7==0)
- {
- if (Ask==wgd7 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb7",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb7=1;
- }
- }
- if(wgb8==0)
- {
- if (Ask==wgd8 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb8",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb8=1;
- }
- }
- if(wgb9==0)
- {
- if (Ask==wgd9 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb9",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb9=1;
- }
- }
- if(wgb0==0)
- {
- if (Ask==wgd0 )
- {
- res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb0",BLWGZMA1,0,Blue);
- //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
- wgb0=1;
- }
- }
- }
- //----
- }
- //+------------------------------------------------------------------+
- //| Check for close order conditions
- //自定义函数(无返回值) 平仓策略 |
- //+------------------------------------------------------------------+
- /*
- void CheckForClose()//平仓检查(判断平仓条件及其处理)
- {
- //----
- }
- */
- //+------------------------------------------------------------------+
- //| Calculate open positions
- //自定义函数(返回-整数型数据) 仓单查询与统计 |
- //+------------------------------------------------------------------+
- int CalculateCurrentOrders()//函数作用,计算当前持仓单的数量
- {
- //----
- wgb1=0;wgb2=0;wgb3=0;wgb4=0;wgd5=0;wgb6=0;wgb7=0;wgb8=0;wgb9=0;wgb0=0;
- wgs1=0;wgs2=0;wgs3=0;wgs4=0;wgs5=0;wgs6=0;wgs7=0;wgs8=0;wgs9=0;wgs0=0;
- for(int i=0;i<OrdersTotal();i++)
- //计次循环(i=0至订单数目,i=i+1)-循环检测当前的订单队列
- {
- if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
- //如果 没有本系统交易的仓单类型,则跳出循环
- if(OrderSymbol()==Symbol() && OrderMagicNumber()==BLWGZMA1)
- //如果 仓单货币对是当前货币对 且 仓单编号是本系统编号 时
- //(判断这个订单是不是当前EA操作的,避免EA误操作其他程序控制的持仓单)
- {
- if(OrderType()==OP_BUY && OrderComment()=="wgb1")
- wgb1=1;
- if(OrderType()==OP_BUY && OrderComment()=="wgb2")
- wgb2=1;
- if(OrderType()==OP_BUY && OrderComment()=="wgb3")
- wgb3=1;
- if(OrderType()==OP_BUY && OrderComment()=="wgb4")
- wgb4=1;
- if(OrderType()==OP_BUY && OrderComment()=="wgb5")
- wgb5=1;
- if(OrderType()==OP_BUY && OrderComment()=="wgb6")
- wgb6=1;
- if(OrderType()==OP_BUY && OrderComment()=="wgb7")
- wgb7=1;
- if(OrderType()==OP_BUY && OrderComment()=="wgb8")
- wgb8=1;
- if(OrderType()==OP_BUY && OrderComment()=="wgb9")
- wgb9=1;
- if(OrderType()==OP_BUY && OrderComment()=="wgb0")
- wgb0=1;
-
- if(OrderType()==OP_SELL && OrderComment()=="wgs1")
- wgs1=1;
- if(OrderType()==OP_SELL && OrderComment()=="wgs2")
- wgs2=1;
- if(OrderType()==OP_SELL && OrderComment()=="wgs3")
- wgs3=1;
- if(OrderType()==OP_SELL && OrderComment()=="wgs4")
- wgs4=1;
- if(OrderType()==OP_SELL && OrderComment()=="wgs5")
- wgs5=1;
- if(OrderType()==OP_SELL && OrderComment()=="wgs6")
- wgs6=1;
- if(OrderType()==OP_SELL && OrderComment()=="wgs7")
- wgs7=1;
- if(OrderType()==OP_SELL && OrderComment()=="wgs8")
- wgs8=1;
- if(OrderType()==OP_SELL && OrderComment()=="wgs9")
- wgs9=1;
- if(OrderType()==OP_SELL && OrderComment()=="wgs0")
- wgs0=1;
-
- }
- }
- return(0);
- }
- //+------------------------------------------------------------------+
- //+------------------------------------------------------------------+
复制代码
|