外汇EA
整数网格EA源码
回复:0  浏览:337
  • 楼主admin 圈主
  • 2019-05-05 09:17
  1. //+------------------------------------------------------------------+
  2. //|                                                           19.mq4 |
  3. //| bz. |
  4. //|                                      http://blog.163.com|
  5. //+------------------------------------------------------------------+
  6. #property copyright "下载更多外汇EA,外汇指标,交易系统,就到【外汇EA之家】"
  7. #property link      "http://www.eazhijia.com"
  8. #property description "①小数位置即对应整数网格取值位置,如;黄金正数个位取0,EUR小数0.00X取3  ②价格超过上阻力值不在开买单,超过下阻力不在开卖单,等于0无限制"

  9. #define BLWGZMA1 20050710
  10. //宏定义命令#define用法,定义本EA操作的订单的唯一标识号码,
  11. #define  NL    "n"
  12.   

  13. extern double 基础单量 = 0.1;  //直接用交易量,

  14. extern double   止赢 = 100;  //直接出场点数,等于0此数无计算,无止赢
  15. extern double   止损 =1000;  //直接出场点数,等于0此数无计算,无止损

  16. extern int 小数位置 = 0; //小数位置即对应取值位置,如;黄金正数个位取0,EUR小数0.00X取3
  17. extern double   上阻力 = 0; //价格超过上阻力值不在开买单,超过下阻力不在开卖单,等于0无限制
  18. extern double   下阻力 = 0;

  19. //+------------------------------------------------------------------+
  20. //全局变量

  21.        int   wgb1=0,wgb2=0,wgb3=0,wgb4=0,wgb5=0,wgb6=0,wgb7=0,wgb8=0,wgb9=0,wgb0=0;
  22.        int   wgs1=0,wgs2=0,wgs3=0,wgs4=0,wgs5=0,wgs6=0,wgs7=0,wgs8=0,wgs9=0,wgs0=0;
  23.        double wgd1,wgd2,wgd3,wgd4,wgd5,wgd6,wgd7,wgd8,wgd9,wgd0;
  24.        int  OMb=0,OMp=0;
  25. //+------------------------------------------------------------------+
  26. //| expert initialization function  
  27. //   初始化                              |
  28. //+------------------------------------------------------------------+

  29. int init()
  30. {
  31. if(基础单量<MarketInfo(Symbol(), MODE_MINLOT))
  32. alert("亲,基础单量 < 最小允许标准手数!");
  33.   
  34.   return(0);
  35. }

  36. //+------------------------------------------------------------------+
  37. //| expert deinitialization function  
  38. //反初始化                               |
  39. //+------------------------------------------------------------------+
  40. int deinit()
  41. {
  42.   
  43.   return(0);
  44. }

  45. //+------------------------------------------------------------------+

  46. //+------------------------------------------------------------------+
  47. //| Start function |
  48. //主程序
  49. //+------------------------------------------------------------------+
  50. void start()//主程序—-每次成交价所驱动的运算过程
  51. {
  52. //---- check for history and trading—对交易历史进行检查
  53. if(Bars<200 || IsTradeAllowed()==false)
  54. return;
  55. //如果K线数少于200根,或者如果允许智能交易交易=假时,返回

  56. //+------------------------------------------------------------------+

  57. //图表左上角显示相关信息
  58. string        str;
  59. str =  "当前订单数目=" + OrdersTotal() + NL +
  60.        "...................." + NL +
  61.        "区间市值上限" + 上阻力 + NL +
  62.        "区间设置下限" + 下阻力 + NL +
  63.        "...................." + NL ;
  64.       
  65.       
  66. Comment( str );

  67. //+------------------------------------------------------------------+

  68. //定义局部变
  69. double wg,jg1,jg2;

  70. jg1=NormalizeDouble(Bid/1000,3+小数位置-1);
  71. //计算 ,当前价格除以100,并将结果保留小数点1位  

  72. jg2=jg1*1000;


  73. if(小数位置==-2)
  74. wg=100;
  75. if(小数位置==-1)
  76. wg=10;
  77. if(小数位置==0)
  78. wg=1;
  79. if(小数位置==1)
  80. wg=0.1;
  81. if(小数位置==2)
  82. wg=0.01;
  83. if(小数位置==3)
  84. wg=0.001;
  85. if(小数位置==4)
  86. wg=0.0001;
  87. if(小数位置==5)
  88. wg=0.00001;
  89. if(小数位置==6)
  90. wg=0.00001;

  91.     wgd0 = jg2;
  92.     wgd1 = wg*1+jg2;
  93.     wgd2 = wg*2+jg2;
  94.     wgd3 = wg*3+jg2;
  95.     wgd4 = wg*4+jg2;
  96.     wgd4 = wg*5+jg2;
  97.     wgd6 = wg*6+jg2;
  98.     wgd7 = wg*7+jg2;
  99.     wgd8 = wg*8+jg2;
  100.     wgd9 = wg*9+jg2;
  101.       
  102. //+------------------------------------------------------------------+
  103.    
  104. //+------------------------------------------------------------------+
  105. CalculateCurrentOrders();
  106. //当前持仓单的数量

  107. CheckForOpen();
  108. //则进行开仓检查。

  109. //if(OrdersTotal()>0)
  110. //CheckForClose();
  111. //则进行平仓检查。

  112. //----
  113. }

  114. //+------------------------------------------------------------------+
  115. //+------------------------------------------------------------------+
  116. //| Check for open order conditions
  117. //自定义函数(无返回值) 开仓策略 |
  118. //+------------------------------------------------------------------+
  119. void CheckForOpen()//开仓检查(判断开仓条件及其处理)
  120. {
  121. int res; //定义局部变量res为整数型

  122. //+-----------
  123. //止损止赢计算,
  124. double  bzs,bzy,szs,szy;
  125. if(止损==0)
  126. {
  127. bzs=0;
  128. szs=0;
  129. }
  130. else
  131. {
  132. szs=Bid+止损*Point;
  133. bzs=Ask-止损*Point;
  134. }
  135. if(止赢==0)
  136. {
  137. bzy=0;
  138. szy=0;
  139. }
  140. else
  141. {
  142. szy=Bid-止赢*Point;
  143. bzy=Ask+止赢*Point;
  144. }
  145. //+-----------
  146. int sss=0,bbb=0;
  147. if(下阻力==0)
  148. sss=1;
  149. if(下阻力!=0)
  150. {
  151. if(Bid>下阻力)
  152. sss=1;
  153. else
  154. sss=0;
  155. }
  156. if(上阻力==0)
  157. bbb=1;
  158. if(上阻力!=0)
  159. {
  160. if(Ask<上阻力)
  161. bbb=1;
  162. else
  163. bbb=0;
  164. }


  165. //---- sell conditions-卖出条件
  166. if(OMp==1)
  167. {
  168. if(wgs1==0)
  169. {
  170. if( Bid==wgd1 )   
  171. {
  172. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs1",BLWGZMA1,0,Red);
  173. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  174. wgs1=1;
  175. }
  176. }

  177. if(wgs2==0)
  178. {
  179. if( Bid==wgd2 )   
  180. {
  181. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs2",BLWGZMA1,0,Red);
  182. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  183. wgs2=1;
  184. }
  185. }

  186. if(wgs3==0)
  187. {
  188. if( Bid==wgd3 )   
  189. {
  190. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs3",BLWGZMA1,0,Red);
  191. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  192. wgs3=1;
  193. }
  194. }

  195. if(wgs4==0)
  196. {
  197. if( Bid==wgd4  )   
  198. {
  199. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs4",BLWGZMA1,0,Red);
  200. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  201. wgs4=1;
  202. }
  203. }

  204. if(wgs5==0)
  205. {
  206. if( Bid==wgd5  )   
  207. {
  208. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs5",BLWGZMA1,0,Red);
  209. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  210. wgs5=1;
  211. }
  212. }

  213. if(wgs6==0)
  214. {
  215. if( Bid==wgd6  )   
  216. {
  217. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs6",BLWGZMA1,0,Red);
  218. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  219. wgs6=1;
  220. }
  221. }

  222. if(wgs7==0)
  223. {
  224. if( Bid==wgd7  )   
  225. {
  226. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs7",BLWGZMA1,0,Red);
  227. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  228. wgs7=1;
  229. }
  230. }

  231. if(wgs8==0)
  232. {
  233. if( Bid==wgd8  )   
  234. {
  235. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs8",BLWGZMA1,0,Red);
  236. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  237. wgs8=1;
  238. }
  239. }

  240. if(wgs9==0)
  241. {
  242. if( Bid==wgd9  )   
  243. {
  244. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs9",BLWGZMA1,0,Red);
  245. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  246. wgs9=1;
  247. }
  248. }

  249. if(wgs0==0)
  250. {
  251. if( Bid==wgd0  )   
  252. {
  253. res=OrderSend(Symbol(),OP_SELL,基础单量,Bid,3,szs,szy,"wgs0",BLWGZMA1,0,Red);
  254. //发送仓单(当前货币对,卖出方向,开仓量计算(),买价,滑点=3,无止损,无止赢,订单编号,标上红色箭头)
  255. wgs0=1;
  256. }
  257. }

  258. }

  259. //---- buy conditions-买入条件
  260. if(OMb==1)
  261. {
  262. if(wgb1==0)
  263. {
  264.   if ( Ask==wgd1 )     
  265. {
  266. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb1",BLWGZMA1,0,Blue);
  267. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  268. wgb1=1;
  269. }
  270. }

  271. if(wgb2==0)
  272. {
  273.   if (Ask==wgd2 )     
  274. {
  275. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb2",BLWGZMA1,0,Blue);
  276. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  277. wgb2=1;
  278. }
  279. }

  280. if(wgb3==0)
  281. {
  282.   if ( Ask==wgd3 )     
  283. {
  284. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb3",BLWGZMA1,0,Blue);
  285. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  286. wgb3=1;
  287. }
  288. }

  289. if(wgb4==0)
  290. {
  291.   if (Ask==wgd4 )     
  292. {
  293. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb4",BLWGZMA1,0,Blue);
  294. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  295. wgb4=1;
  296. }
  297. }

  298. if(wgb5==0)
  299. {
  300.   if (Ask==wgd5 )     
  301. {
  302. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb5",BLWGZMA1,0,Blue);
  303. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  304. wgb5=1;
  305. }
  306. }

  307. if(wgb6==0)
  308. {
  309.   if (Ask==wgd6 )     
  310. {
  311. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb6",BLWGZMA1,0,Blue);
  312. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  313. wgb6=1;
  314. }
  315. }

  316. if(wgb7==0)
  317. {
  318.   if (Ask==wgd7 )     
  319. {
  320. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb7",BLWGZMA1,0,Blue);
  321. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  322. wgb7=1;
  323. }
  324. }

  325. if(wgb8==0)
  326. {
  327.   if (Ask==wgd8 )     
  328. {
  329. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb8",BLWGZMA1,0,Blue);
  330. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  331. wgb8=1;
  332. }
  333. }

  334. if(wgb9==0)
  335. {
  336.   if (Ask==wgd9 )     
  337. {
  338. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb9",BLWGZMA1,0,Blue);
  339. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  340. wgb9=1;
  341. }
  342. }

  343. if(wgb0==0)
  344. {
  345.   if (Ask==wgd0 )     
  346. {
  347. res=OrderSend(Symbol(),OP_BUY,基础单量,Ask,3,bzs,bzy,"wgb0",BLWGZMA1,0,Blue);
  348. //发送仓单(当前货币对,买入方向,开仓量计算(),卖价,滑点=3,无止损,无止赢,订单编号,标上蓝色箭头)
  349. wgb0=1;
  350. }
  351. }

  352. }

  353. //----
  354. }
  355. //+------------------------------------------------------------------+
  356. //| Check for close order conditions
  357. //自定义函数(无返回值) 平仓策略 |
  358. //+------------------------------------------------------------------+


  359. //+------------------------------------------------------------------+
  360. //| Calculate open positions
  361. //自定义函数(返回-整数型数据) 仓单查询与统计 |
  362. //+------------------------------------------------------------------+
  363. int CalculateCurrentOrders()//函数作用,计算当前持仓单的数量
  364. {
  365. //----
  366. wgb1=0;wgb2=0;wgb3=0;wgb4=0;wgd5=0;wgb6=0;wgb7=0;wgb8=0;wgb9=0;wgb0=0;
  367. wgs1=0;wgs2=0;wgs3=0;wgs4=0;wgs5=0;wgs6=0;wgs7=0;wgs8=0;wgs9=0;wgs0=0;
  368. for(int i=0;i<OrdersTotal();i++)
  369. //计次循环(i=0至订单数目,i=i+1)-循环检测当前的订单队列
  370. {
  371. if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
  372. //如果 没有本系统交易的仓单类型,则跳出循环
  373. if(OrderSymbol()==Symbol() && OrderMagicNumber()==BLWGZMA1)
  374. //如果 仓单货币对是当前货币对 且 仓单编号是本系统编号 时
  375. //(判断这个订单是不是当前EA操作的,避免EA误操作其他程序控制的持仓单)
  376. {
  377. if(OrderType()==OP_BUY && OrderComment()=="wgb1")
  378. wgb1=1;
  379. if(OrderType()==OP_BUY && OrderComment()=="wgb2")
  380. wgb2=1;
  381. if(OrderType()==OP_BUY && OrderComment()=="wgb3")
  382. wgb3=1;
  383. if(OrderType()==OP_BUY && OrderComment()=="wgb4")
  384. wgb4=1;
  385. if(OrderType()==OP_BUY && OrderComment()=="wgb5")
  386. wgb5=1;
  387. if(OrderType()==OP_BUY && OrderComment()=="wgb6")
  388. wgb6=1;
  389. if(OrderType()==OP_BUY && OrderComment()=="wgb7")
  390. wgb7=1;
  391. if(OrderType()==OP_BUY && OrderComment()=="wgb8")
  392. wgb8=1;
  393. if(OrderType()==OP_BUY && OrderComment()=="wgb9")
  394. wgb9=1;
  395. if(OrderType()==OP_BUY && OrderComment()=="wgb0")
  396. wgb0=1;



  397. if(OrderType()==OP_SELL && OrderComment()=="wgs1")
  398. wgs1=1;
  399. if(OrderType()==OP_SELL && OrderComment()=="wgs2")
  400. wgs2=1;
  401. if(OrderType()==OP_SELL && OrderComment()=="wgs3")
  402. wgs3=1;
  403. if(OrderType()==OP_SELL && OrderComment()=="wgs4")
  404. wgs4=1;
  405. if(OrderType()==OP_SELL && OrderComment()=="wgs5")
  406. wgs5=1;
  407. if(OrderType()==OP_SELL && OrderComment()=="wgs6")
  408. wgs6=1;
  409. if(OrderType()==OP_SELL && OrderComment()=="wgs7")
  410. wgs7=1;
  411. if(OrderType()==OP_SELL && OrderComment()=="wgs8")
  412. wgs8=1;
  413. if(OrderType()==OP_SELL && OrderComment()=="wgs9")
  414. wgs9=1;
  415. if(OrderType()==OP_SELL && OrderComment()=="wgs0")
  416. wgs0=1;

  417. }
  418. }
  419. return(0);
  420. }
  421. //+------------------------------------------------------------------+
  422. //+------------------------------------------------------------------+