设为首页 收藏本站 切换语言

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

| 发表于 2024-8-3 13:03:05 | 显示全部楼层 |复制链接


//+------------------------------------------------------------------+
//|                                                    M5EA 区间突破.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "宇桐工作室@大树My05613828"
#property link      "https://www.eahub.cn/space-uid-8564.html"
#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;
  }
//+------------------------------------------------------------------+

用到的包已开源 可到公众号下载



M5EA 区间突破.ex5

303.57 KB, 下载次数: 0, 下载积分: 活跃度 -5  [下载]

M5EA 区间突破.mq5

8.42 KB, 下载次数: 0, 下载积分: 活跃度 -5  [下载]

评分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分:NAN    参与人数:0    我的评分:未评 下载时遇到问题?
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论2

andyzhang0716
DD
| 发表于 2024-8-5 21:26:59 | 显示全部楼层
感谢分享源码
举报

点赞 评论 使用道具

My05613828
CCC
 楼主 | 发表于 2024-8-6 08:08:25 | 显示全部楼层

            好说
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)