整数网格EA源码
//+------------------------------------------------------------------+//| 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操作的订单的唯一标识号码,
#defineNL "\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;
intOMb=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为整数型
//+-----------
//止损止赢计算,
doublebzs,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);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
谢谢 学习下 谢谢,多多学习!! 有竞争才有进步嘛 不错,支持下楼主 我是来刷分的,嘿嘿 谢谢楼主分享 学习了,不错 帮你顶下哈!! 谢谢楼主分享