找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 18|回复: 0

如何搞定区间突破EA 区间突破EA 如何编写 加单如何编写

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-26 01:27:00 | 显示全部楼层 |阅读模式
//+------------------------------------------------------------------+

//|                                                    M5EA 区间突破.mq5 |

//|                                  Copyright 2024, MetaQuotes Ltd. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "宇桐工作室@大树My05613828"

#property link      "

#property version   "1.0"


// --- 引入封装好的交易类

#include  <M5/交易类.mqh>

交易类 交易;  //---声明类对象


//--- 声明属性面板参数

input double order_lot = 0.01;

input double next_point = 100;

input long magic_number = 12365;

input double close_tp_point = 500;

input double close_sl_point = 500;

input int  cnts = 60;

double close_v[];

double ref_v[];

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int OnInit()

  {

//---


//--- 声明限定平台吗

  // 交易.授权服务器("Doo");

   ArraySetAsSeries(close_v,true);

//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

//---


  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

void OnTick()

  {

//---

//--- 统计持仓信息   多空持仓单的最高价最低价   多单数空单数

   int long_orders = 交易.持仓单数统计(Symbol(),magic_number,POSITION_TYPE_BUY);

   int short_orders = 交易.持仓单数统计(Symbol(),magic_number,POSITION_TYPE_SELL);

   double  position_high = 交易.持仓最高价(Symbol(),magic_number,POSITION_TYPE_BUY);

   double  position_low = 交易.持仓最低价(Symbol(),magic_number,POSITION_TYPE_SELL);


//--- 长时间跑出不出来 果断止损出局

   if(long_orders+short_orders>10)

      亏损净持仓均价平单(Symbol(),magic_number,close_sl_point);


//--- 持仓均价平单出厂

   交易.净持仓均价平单(Symbol(),magic_number,close_tp_point);

   int cnt = cnts;

   if(cnt<20)

      cnt = 20;

//---注意不能从0开始


///--- 统计设定根数 的区间收盘价

   CopyClose(Symbol(),PERIOD_CURRENT,1,cnts,close_v);

//--- 升序排序

   ArraySort(close_v);

//--- 去除毛刺 过滤 最低最高的8个

   ArrayCopy(ref_v,close_v,0,8,cnts-8);


//---获取数组最高价的下标

   int  high_shift =  ArrayMaximum(ref_v);

   int  low_shift =  ArrayMinimum(ref_v);

   double high = ref_v[high_shift];

   double low = ref_v[low_shift];

//---区间数组最高价 最低级突破下单

   bool open_long = long_orders==0 && 交易.K线穿越某值(Symbol(),PERIOD_CURRENT,1,3,0,high,high);

   bool open_short = short_orders==0 && 交易.K线穿越某值(Symbol(),PERIOD_CURRENT,2,3,0,low,low);


//--- 加单 方向检测 上下区间反复尝试 知道走出单边行情    顺势永远多一单

   bool next_long = long_orders>0 && long_orders<=short_orders&&交易.向上加单点值(Symbol(),position_high,交易.买价(),next_point);

   bool next_short = short_orders>0 && short_orders<=long_orders&&交易.向下加单点值(Symbol(),position_low,交易.卖价(),next_point);


   if(next_long&&交易.单位时间1(5))

      交易.做多(Symbol(),order_lot,0,0,magic_number,"buy_next");

   if(next_short&&交易.单位时间2(5))

      交易.做空(Symbol(),order_lot,0,0,magic_number,"sell_next");


   if(open_long)

      交易.做多(Symbol(),order_lot,0,0,magic_number,"buy_first");

   if(open_short)

      交易.做空(Symbol(),order_lot,0,0,magic_number,"sell_first");

   交易.持仓信息统计(Symbol(),magic_number,110);

   交易.左上角文字("区间high "+(string)high,"区间low "+(string)low,"多单high "+(string)position_high,"空单low "+(string)position_low);

  }

//+------------------------------------------------------------------+

bool 亏损净持仓均价平单(string symbol,long magic,double 设置平单点数)

  {

   bool chk=false;

   if(设置平单点数>0)

     {

      double 多均价=交易.持仓均价(symbol,magic,POSITION_TYPE_BUY);

      double 空均价=交易.持仓均价(symbol,magic,POSITION_TYPE_SELL);

      double 多总仓位=交易.持仓仓位统计(symbol,magic,POSITION_TYPE_BUY);

      double 空总仓位=交易.持仓仓位统计(symbol,magic,POSITION_TYPE_SELL);

      double 浮亏均价=0;

      if(多总仓位-空总仓位!=0)

         浮亏均价=(多均价*多总仓位-空均价*空总仓位)/(多总仓位-空总仓位);

      if(浮亏均价>0&&多总仓位>空总仓位&&交易.卖价(symbol)<浮亏均价-设置平单点数*交易.点值(symbol))

        {

         交易.平单(symbol,magic);

         chk=true;

        }

      if(浮亏均价>0&&空总仓位>多总仓位&&交易.买价(symbol)>浮亏均价+设置平单点数*交易.点值(symbol))

        {

         交易.平单(symbol,magic);

         chk=true;

        }

     }

   return chk;

  }

//+------------------------------------------------------------------+


用到的包已开源 可到公众号下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-11 13:04 , Processed in 0.100265 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表