步步为赢EA

#property strict
#include <WinUser32.mqh>
string 订单备注 = "步步为赢EA正式版";
string gs_bbb_84 = "http://www.15ea.com";
string gs_ccc_92 = "步步为赢EA正式版";
int gi_100 = 2;

extern string 本EA版权 = "山东陈老师陈老师步步为赢EA正式版";
string gs_unused_112 = "陈老师步步为赢EA正式版";
string gs_unused_120 = "=== 以下是按时间段汇总获利额 ===";
bool 统计累计盈利 = TRUE;
extern string 历史指定时间 = "2012.5.5";
double 达到累计金额 = 60000.0;
double gd_unused_148 = 0.0;
extern string 功能隔离线0 = "* =============================== *";
extern string 以下是基本参数设置 = "* 以下是基本参数设置 *";
extern string 按净值自动确定开仓起始手数 = "*以下按500倍杠杆和净值自定开仓手数*";
extern bool 按净值大小自动确定开仓起始手数 = TRUE;
extern double 净值小于1000的起始手数 = 0.01;
extern double 净值小于2000大于1000的起始手数 = 0.01;
extern double 净值小于3000大于2000的起始手数 = 0.02;
extern double 净值小于4000大于3000的起始手数 = 0.03;
extern double 净值小于5000大于4000的起始手数 = 0.04;
extern double 净值小于6000大于5000的起始手数 = 0.05;
extern double 净值小于7000大于6000的起始手数 = 0.06;
extern double 净值小于8000大于7000的起始手数 = 0.07;
extern double 净值小于9000大于8000的起始手数 = 0.08;
extern double 净值小于10000大于9000的起始手数 = 0.09;
extern double 净值小于12000大于10000起始手数 = 0.1;
extern double 净值小于14000大于12000起始手数 = 0.12;
extern double 净值小于16000大于14000起始手数 = 0.14;
extern double 净值小于18000大于16000起始手数 = 0.16;
extern double 净值小于20000大于18000起始手数 = 0.18;
extern double 净值小于25000大于20000起始手数 = 0.2;
extern double 净值小于30000大于25000起始手数 = 0.25;
extern double 净值小于5万大于3万的起始手数 = 0.3;
extern double 净值小于8万大于5万起始手数 = 0.5;
extern double 净值小于10万大于8万起始手数 = 0.8;
extern double 净值小于13万大于10万起始手数 = 1.0;
extern double 净值小于15万大于13万起始手数 = 1.3;
extern double 净值小于20万大于15万起始手数 = 1.5;
extern double 净值小于25万大于20万起始手数 = 2.0;
extern double 净值小于30万大于25万起始手数 = 2.5;
extern double 净值大于30万的起始手数 = 3.0;
extern string 关闭上述按净值自动确定开仓手数 = "*关闭按净值定手数时将使用下面的手数*";
extern double 起始手数 = 0.01;
extern double 起始手数调节器 = 1.0;
extern string 起始手数调节器说明1 = "默认的是1万净值开0.1手,按0.01为单位增减手数";
extern string 起始手数调节器说明2 = "起始手数=起始手数*起始手数调节器";
extern string 起始手数调节器说明3 = "比如设调节器=0.5,则起始手数=0.1*0.5=0.05";
extern string 起始手数调节器说明4 = "注意:很多平台不支持小数点后有3位的手数";
double gd_448 = 1.0;
extern int 最大持仓个数 = 6;
extern int 间隔点数 = 13;
extern bool 隐藏止盈止损 = TRUE;
extern string 上面的隐藏止盈止损开关说明 = "* 若设为false为显示止盈止损 *";
extern double 止赢 = 16.0;
extern double 止损 = 300.0;
extern bool 弹窗看看止盈止损的点位 = FALSE;
extern string 上面的看看止盈止损开关说明 = "*你看到后既满足了好奇心 心里也有底了*";
extern double 移动止损 = 16.0;
extern int 滑点 = 3;
extern int Bmagic = 888;
extern int Smagic = 999;
extern double 点差佣金利息加获利点数之和 = 10.0;
extern double 大手数时挂单间距调整点数 = 3.0;
extern int 汇金宝开多单时上挂空单的标示码 = 2929;
extern int 汇金宝开空单时下挂多单的标示码 = 2828;
bool 达标即出场 = TRUE;
double 分段金额 = 30.0;
bool 使用自动手数 = TRUE;
extern double 净值小于1000的平仓额 = 3.0;
extern double 净值小于2000大于1000的平仓额 = 3.0;
extern double 净值小于3000大于2000的平仓额 = 6.0;
extern double 净值小于4000大于3000的平仓额 = 9.0;
extern double 净值小于5000大于4000的平仓额 = 12.0;
extern double 净值小于6000大于5000的平仓额 = 15.0;
extern double 净值小于7000大于6000的平仓额 = 18.0;
extern double 净值小于8000大于7000的平仓额 = 21.0;
extern double 净值小于9000大于8000的平仓额 = 24.0;
extern double 净值小于10000大于9000的平仓额 = 27.0;
extern double 净值小于12000大于10000平仓额 = 30.0;
extern double 净值小于14000大于12000平仓额 = 36.0;
extern double 净值小于16000大于14000平仓额 = 42.0;
extern double 净值小于18000大于16000平仓额 = 48.0;
extern double 净值小于20000大于18000平仓额 = 60.0;
extern double 净值小于25000大于20000平仓额 = 75.0;
extern double 净值小于30000大于25000平仓额 = 90.0;
extern double 净值小于5万大于3万的平仓额 = 150.0;
extern double 净值小于8万大于5万平仓额 = 240.0;
extern double 净值小于10万大于8万平仓额 = 300.0;
extern double 净值小于13万大于10万平仓额 = 390.0;
extern double 净值小于15万大于13万平仓额 = 450.0;
extern double 净值小于20万大于15万平仓额 = 600.0;
extern double 净值小于25万大于20万平仓额 = 750.0;
extern double 净值小于30万大于25万平仓额 = 900.0;
extern double 净值大于30万的平仓额 = 1000.0;
extern double 佣金点数 = 3.0;
extern double 点差 = 3.0;
extern double 以平均持仓成本为基价的止赢点数 = 5.0;
extern string 功能隔离线1 = "* =============================== *";
string gs_unused_804 = "* 以下是CCI控制方向的设置 *";
extern bool CCIkongzhifangxiang = TRUE;
string gs_unused_816 = "*若设为false,则由EA自动或手动定方向*";
string gs_unused_824 = "*若设为true,shoudongkongzhifangxiang也将失效*";
extern string 下面的两个开关使用说明 = "!下面的两个方向开关不要同时打开!";
extern string 下面的两个开关不可同时打开1 = "建议:激进型打开CCIema,关闭CCImacd";
extern string 下面的两个开关不可同时打开2 = "建议:稳健型打开CCImacd,关闭CCIema";
extern bool CCIEMAkongzhifangxiang = TRUE;
extern bool CCIMACDkongzhifangxiang = FALSE;
extern string 功能隔离线2 = "* =============================== *";
extern bool shoudongkongzhifangxiang = FALSE;
extern bool shoudongzuoduo = TRUE;
extern string 上一项shoudongzuoduo说明 = "上一项若设为false则是开仓做空";
extern string 功能隔离线3 = "* =============================== *";
extern string 以下是对EA开仓的限制 = "* 以下是对EA开仓的限制 *";
extern bool K距临界价格一定点数时不开新仓 = TRUE;
extern double 请输入你认为的临界高点价格 = 1.98765;
extern double 请输入你认为的临界低点价格 = 1.12345;
extern double 距临界价格多少点数时不开新仓 = 30.0;
extern string 功能隔离线4 = "* =============================== *";
extern string 以下是为避开数据市对EA的限制 = "* 以下是为避开数据市对EA设定限制 *";
extern string 以下是一次性可多个时点限制开仓 = "*(一)以下是一次性设多个时点限制开仓*";
extern int MT4平台时间与北京时间的时差 = 5;
extern string 以下是按北京时间设置开关 = "=== 以下是按北京时间设置开关 ===";
extern string 设置多个时点开关的方法 = "默认false为开仓,若设为true则为不开仓";
extern string 多个时点限制开仓说明 = "只限制开新仓,不限制有持仓时的加仓";
extern bool 让EA在0-1点不开仓吗 = FALSE;
extern bool 让EA在1-2点不开仓吗 = FALSE;
extern bool 让EA在2-3点不开仓吗 = FALSE;
extern bool 让EA在3-4点不开仓吗 = FALSE;
extern bool 让EA在4-5点不开仓吗 = FALSE;
extern bool 让EA在5-6点不开仓吗 = FALSE;
extern bool 让EA在6-7点不开仓吗 = FALSE;
extern bool 让EA在7-8点不开仓吗 = FALSE;
extern bool 让EA在8-9点不开仓吗 = FALSE;
extern bool 让EA在9-10点不开仓吗 = FALSE;
extern bool 让EA在10-11点不开仓吗 = FALSE;
extern bool 让EA在11-12点不开仓吗 = FALSE;
extern bool 让EA在12-13点不开仓吗 = FALSE;
extern bool 让EA在13-14点不开仓吗 = FALSE;
extern bool 让EA在14-15点不开仓吗 = FALSE;
extern bool 让EA在15-16点不开仓吗 = FALSE;
extern bool 让EA在16-17点不开仓吗 = FALSE;
extern bool 让EA在17-18点不开仓吗 = FALSE;
extern bool 让EA在18-19点不开仓吗 = FALSE;
extern bool 让EA在19-20点不开仓吗 = FALSE;
extern bool 让EA在20-21点不开仓吗 = FALSE;
extern bool 让EA在21-22点不开仓吗 = FALSE;
extern bool 让EA在22-23点不开仓吗 = FALSE;
extern bool 让EA在23-24点不开仓吗 = FALSE;
extern string 功能隔离线5 = "* ------------------------------- *";
extern string 以下是设定日内时间段不让EA工作 = "*(二)以下设定日内时间段不让EA工作*";
extern string 设定时间段不让EA工作的用途 = "*适用于数据或消息发布时段*";
extern bool 是否限制时间段不让EA工作 = FALSE;
extern int MT4平台北京时间几点前运行 = 18;
extern int MT4平台北京时间几点后运行 = 22;
extern string 功能隔离线6 = "* ------------------------------- *";
extern string 以下设定两个日期之间不让EA工作 = "*(三)以下设定两日期之间不让EA工作*";
extern string 设定两日期之间不让EA工作的用途 = "*适用于上班、外出、旅游等无法盯盘时*";
extern bool 是否限制两个日期之间不让EA工作 = FALSE;
extern datetime 开始不让EA运行的MT4服务器日期 = D'16.04.2012 08:00';
extern datetime 结束不让EA运行的MT4服务器日期 = D'21.04.2012 10:00';
extern string 功能隔离线7 = "* ------------------------------- *";
extern string 以下是设定星期几不让EA工作 = "*(四)以下设定星期几不让EA工作*";
extern string 设定星期几不让EA工作的用途 = "*能够避免行情无规律的周一或周五*";
extern bool 是否限制星期几不让EA工作 = FALSE;
extern int 准备在星期几不让EA工作? = 6;
extern string 在星期几不让EA工作的填法说明 = "* 填 1 2 3 4 5 6 0 对应周一到周日 *";
double gd_1192;
int gi_unused_1200 = 0;
int gi_1204 = 10;
int gi_1208 = 1;
int gi_1212 = 3;
double gd_1216 = 10.0;
double gd_1224 = 10.0;
double gd_1232 = 10.0;
double gd_1240 = 9.715;
int gi_unused_1248 = 2005;
int gi_unused_1252 = 1;
int gi_unused_1256 = 2050;
int gi_unused_1260 = 12;
int gi_1264 = 0;
int gi_1268 = 12;
int gi_1272 = 0;
//int i = 0;
double g_ask_1280 = 0.0;
double g_bid_1288 = 0.0;
double g_lots_1296 = 0.0;
int g_cmd_1304 = OP_BUY;
int 方向码 = 0;
double 保证金手数;
string gs_unused_1320 = "";
string gs_1328 = "";
double 当前净值;
//-----------------
int  alert=0;
datetime  t=0;
double AutoMM() 
{
   if (按净值大小自动确定开仓起始手数 == TRUE) 
   {
      当前净值 = AccountEquity() * 起始手数调节器;
      if (当前净值 < 1000.0) 起始手数 = 净值小于1000的起始手数;
      if (当前净值 >= 1000.0 && 当前净值 < 2000.0) 起始手数 = 净值小于2000大于1000的起始手数;
      if (当前净值 >= 2000.0 && 当前净值 < 3000.0) 起始手数 = 净值小于3000大于2000的起始手数;
      if (当前净值 >= 3000.0 && 当前净值 < 4000.0) 起始手数 = 净值小于4000大于3000的起始手数;
      if (当前净值 >= 4000.0 && 当前净值 < 5000.0) 起始手数 = 净值小于5000大于4000的起始手数;
      if (当前净值 >= 5000.0 && 当前净值 < 6000.0) 起始手数 = 净值小于6000大于5000的起始手数;
      if (当前净值 >= 6000.0 && 当前净值 < 7000.0) 起始手数 = 净值小于7000大于6000的起始手数;
      if (当前净值 >= 7000.0 && 当前净值 < 8000.0) 起始手数 = 净值小于8000大于7000的起始手数;
      if (当前净值 >= 8000.0 && 当前净值 < 9000.0) 起始手数 = 净值小于9000大于8000的起始手数;
      if (当前净值 >= 9000.0 && 当前净值 < 10000.0) 起始手数 = 净值小于10000大于9000的起始手数;
      if (当前净值 >= 10000.0 && 当前净值 < 12000.0) 起始手数 = 净值小于12000大于10000起始手数;
      if (当前净值 >= 12000.0 && 当前净值 < 14000.0) 起始手数 = 净值小于14000大于12000起始手数;
      if (当前净值 >= 14000.0 && 当前净值 < 16000.0) 起始手数 = 净值小于16000大于14000起始手数;
      if (当前净值 >= 16000.0 && 当前净值 < 18000.0) 起始手数 = 净值小于18000大于16000起始手数;
      if (当前净值 >= 18000.0 && 当前净值 < 20000.0) 起始手数 = 净值小于20000大于18000起始手数;
      if (当前净值 >= 20000.0 && 当前净值 < 25000.0) 起始手数 = 净值小于25000大于20000起始手数;
      if (当前净值 >= 25000.0 && 当前净值 < 30000.0) 起始手数 = 净值小于30000大于25000起始手数;
      if (当前净值 >= 30000.0 && 当前净值 < 50000.0) 起始手数 = 净值小于5万大于3万的起始手数;
      if (当前净值 >= 50000.0 && 当前净值 < 80000.0) 起始手数 = 净值小于8万大于5万起始手数;
      if (当前净值 >= 80000.0 && 当前净值 < 100000.0) 起始手数 = 净值小于10万大于8万起始手数;
      if (当前净值 >= 100000.0 && 当前净值 < 130000.0) 起始手数 = 净值小于13万大于10万起始手数;
      if (当前净值 >= 130000.0 && 当前净值 < 150000.0) 起始手数 = 净值小于15万大于13万起始手数;
      if (当前净值 >= 150000.0 && 当前净值 < 200000.0) 起始手数 = 净值小于20万大于15万起始手数;
      if (当前净值 >= 200000.0 && 当前净值 < 250000.0) 起始手数 = 净值小于25万大于20万起始手数;
      if (当前净值 >= 250000.0 && 当前净值 < 300000.0) 起始手数 = 净值小于30万大于25万起始手数;
      if (当前净值 >= 300000.0) 起始手数 = 净值大于30万的起始手数;
   }
   if (按净值大小自动确定开仓起始手数 == FALSE) {
   }
   保证金手数 = NormalizeDouble(0.2 * AccountFreeMargin() / 100000.0, 2);
   if (保证金手数 < 0.1) 保证金手数 = 起始手数 * gd_448;
   if (保证金手数 > 100.0) 保证金手数 = 100.0;
   return (保证金手数);
}

int init() 
{
   //if (MessageBox("点击确定表示你理解并承担使用EA的风险,否则,请删除本EA。", "15ea.taobao.com 步步为赢EA友情提醒:" + AccountName() + ",账号:" + AccountNumber(),
      //MB_OKCANCEL|MB_ICONEXCLAMATION) != IDOK) return (0);
   
   if (Digits == 3 || Digits == 5) 
   {
      滑点 = 10 * 滑点;
      间隔点数 = 10 * 间隔点数;
      止赢 = 10.0 * 止赢;
      止损 = 10.0 * 止损;
      移动止损 = 10.0 * 移动止损;
      gi_1204 = 10 * gi_1204;
      距临界价格多少点数时不开新仓 = 10.0 * 距临界价格多少点数时不开新仓;
      点差佣金利息加获利点数之和 = 10.0 * 点差佣金利息加获利点数之和;
      佣金点数 = 10.0 * 佣金点数;
      点差 = 10.0 * 点差;
      以平均持仓成本为基价的止赢点数 = 10.0 * 以平均持仓成本为基价的止赢点数;
      大手数时挂单间距调整点数 = 10.0 * 大手数时挂单间距调整点数;
   }
   return (0);
}

int deinit() {
   return (0);
}

int start() 
{
   int li_0=0;
   int li_4 = 0;
   int 锁死买方订单号=0;
   int 锁死卖方订单号=0;
   double 买方最大手数=0.;
   double 卖方最大手数=0.;
   int 最大买单订单号=0;
   int 最大卖单订单号=0;
   double 最大买单开盘价=0;
   double 最大卖单开盘价=0;
   double 最大买单止损=0;
   double 最大买单止盈=0;
   double 最大卖单止损=0;
   double 最大卖单止盈=0;
   datetime str2time_96;
   //int lia_unused_200[1];
   int ticket_204;
   int ticket_208;
   double imacd_376;
   double imacd_384;
   if (使用自动手数 == TRUE) 
   {
      if (当前净值 < 1000.0) 分段金额 = 净值小于1000的平仓额;
      if (当前净值 >= 1000.0 && 当前净值 < 2000.0) 分段金额 = 净值小于2000大于1000的平仓额;
      if (当前净值 >= 2000.0 && 当前净值 < 3000.0) 分段金额 = 净值小于3000大于2000的平仓额;
      if (当前净值 >= 3000.0 && 当前净值 < 4000.0) 分段金额 = 净值小于4000大于3000的平仓额;
      if (当前净值 >= 4000.0 && 当前净值 < 5000.0) 分段金额 = 净值小于5000大于4000的平仓额;
      if (当前净值 >= 5000.0 && 当前净值 < 6000.0) 分段金额 = 净值小于6000大于5000的平仓额;
      if (当前净值 >= 6000.0 && 当前净值 < 7000.0) 分段金额 = 净值小于7000大于6000的平仓额;
      if (当前净值 >= 7000.0 && 当前净值 < 8000.0) 分段金额 = 净值小于8000大于7000的平仓额;
      if (当前净值 >= 8000.0 && 当前净值 < 9000.0) 分段金额 = 净值小于9000大于8000的平仓额;
      if (当前净值 >= 9000.0 && 当前净值 < 10000.0) 分段金额 = 净值小于10000大于9000的平仓额;
      if (当前净值 >= 10000.0 && 当前净值 < 12000.0) 分段金额 = 净值小于12000大于10000平仓额;
      if (当前净值 >= 12000.0 && 当前净值 < 14000.0) 分段金额 = 净值小于14000大于12000平仓额;
      if (当前净值 >= 14000.0 && 当前净值 < 16000.0) 分段金额 = 净值小于16000大于14000平仓额;
      if (当前净值 >= 16000.0 && 当前净值 < 18000.0) 分段金额 = 净值小于18000大于16000平仓额;
      if (当前净值 >= 18000.0 && 当前净值 < 20000.0) 分段金额 = 净值小于20000大于18000平仓额;
      if (当前净值 >= 20000.0 && 当前净值 < 25000.0) 分段金额 = 净值小于25000大于20000平仓额;
      if (当前净值 >= 25000.0 && 当前净值 < 30000.0) 分段金额 = 净值小于30000大于25000平仓额;
      if (当前净值 >= 30000.0 && 当前净值 < 50000.0) 分段金额 = 净值小于5万大于3万的平仓额;
      if (当前净值 >= 50000.0 && 当前净值 < 80000.0) 分段金额 = 净值小于8万大于5万平仓额;
      if (当前净值 >= 80000.0 && 当前净值 < 100000.0) 分段金额 = 净值小于10万大于8万平仓额;
      if (当前净值 >= 100000.0 && 当前净值 < 130000.0) 分段金额 = 净值小于13万大于10万平仓额;
      if (当前净值 >= 130000.0 && 当前净值 < 150000.0) 分段金额 = 净值小于15万大于13万平仓额;
      if (当前净值 >= 150000.0 && 当前净值 < 200000.0) 分段金额 = 净值小于20万大于15万平仓额;
      if (当前净值 >= 200000.0 && 当前净值 < 250000.0) 分段金额 = 净值小于25万大于20万平仓额;
      if (当前净值 >= 250000.0 && 当前净值 < 300000.0) 分段金额 = 净值小于30万大于25万平仓额;
      if (当前净值 >= 300000.0) 分段金额 = 净值大于30万的平仓额;
   }
   if (使用自动手数 == FALSE) {
   }
   bool ans;
   if (达标即出场 == TRUE && AccountProfit() >= 分段金额) //不能与其它ea混跑
   {
      for (int i = OrdersTotal() - 1; i >= 0; i--) 
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         if (OrderType() < OP_BUYLIMIT) ans=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 5, CLR_NONE);
         if (OrderType() > OP_SELL) ans=OrderDelete(OrderTicket());
      }
      return (0);
   }
   int 买单个数 = 0;
   int 卖单个数 = 0;
   for (int i = OrdersTotal() - 1; i >= 0; i--) 
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if (OrderSymbol() == Symbol() && OrderType() == OP_BUY) 买单个数++;
      if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) 卖单个数++;
   }
   //双方锁死(个数相同,手数有可能不同)
   if (买单个数 == 卖单个数 && 买单个数 > 0 && 卖单个数 > 0 && AccountProfit() > 0.0) //不能混跑其它ea
   {
      Sleep(1000);
      for (int i = OrdersTotal() - 1; i >= 0; i--) 
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         if (OrderType() < OP_BUYLIMIT) 
         {
            if(!OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 5, CLR_NONE))continue;
            Alert("duodangeshu=kongdangeshu,全部平仓");
         }
         if (OrderType() > OP_SELL) 
         {
            ans=OrderDelete(OrderTicket());
            Alert("duodangeshu=kongdangeshu,删除全部挂单");
         }
      }
      for (int i = OrdersTotal() - 1; i >= 0; i--) 
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         if (OrderType() == OP_BUY && OrderSymbol() == Symbol()) 
         {
            ans=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 5, CLR_NONE);
            Alert("duodangeshu=kongdangeshu,多单平仓");
         }
         if (OrderType() == OP_SELL && OrderSymbol() == Symbol()) 
         {
            ans=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 5, CLR_NONE);
            Alert("duodangeshu=kongdangeshu,空单平仓");
         }
         if (OrderType() > OP_SELL) 
         {
            ans=OrderDelete(OrderTicket());
            Alert("duodangeshu=kongdangeshu,删除全部挂单");
         }
      }
      return (0);
   }
   //------------------------------------------------------------------------------------------
   double mv = 0;
   double 卖方MV = 0;
   double 买方手数之和 = 0;
   double 卖方手数之和 = 0;
   double 买方手数 = 0;
   double 卖方手数 = 0;
   double 买方均价 = 0;
   double 卖方均价 = 0;
   //double ld_unused_300 = 0;
   //double ld_unused_308 = 0;
   for (int i = OrdersTotal() - 1; i >= 0; i--) 
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if (OrderSymbol() == Symbol()) 
      {
         if (OrderSymbol() == Symbol()) 
         {
            if (OrderType() == OP_BUY) 
            {
               mv += OrderOpenPrice() * OrderLots();
               买方手数之和 += OrderLots();
               买方手数 = OrderLots();
            }
            if (OrderType() == OP_SELL) 
            {
               卖方MV += OrderOpenPrice() * OrderLots();
               卖方手数之和 += OrderLots();
               卖方手数 = OrderLots();
            }
            if (OrderType() == OP_BUY && 买方手数 == 卖方手数 && 买方手数 > 0.0 && 卖方手数 > 0.0) 锁死买方订单号 = OrderTicket();
            if (OrderType() == OP_SELL && 买方手数 == 卖方手数 && 买方手数 > 0.0 && 卖方手数 > 0.0) 锁死卖方订单号 = OrderTicket();
         }
      }
   }
   for (int i = 0; i < OrdersTotal(); i++) 
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if (OrderSymbol() == Symbol() && OrderType() == OP_BUY) 买方手数 = OrderLots();//最后一单
      if (OrderSymbol() == Symbol() && OrderType() == OP_SELL) 卖方手数 = OrderLots();
      if (OrderType() == OP_BUY && 买方手数 == 卖方手数 && 买方手数 > 0.0 && 卖方手数 > 0.0) 锁死买方订单号 = OrderTicket();//基本上也是最后一单
      if (OrderType() == OP_SELL && 买方手数 == 卖方手数 && 买方手数 > 0.0 && 卖方手数 > 0.0) 锁死卖方订单号 = OrderTicket();
   }
   if (买方手数 == 卖方手数 && 买方手数 > 0.0 && 卖方手数 > 0.0) 
   {
      Sleep(2000);
      for (int i = OrdersTotal() - 1; i >= 0; i--) 
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && 锁死买方订单号 != 0) ans=OrderClose(锁死买方订单号, OrderLots(), OrderClosePrice(), 5, CLR_NONE);
         if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && 锁死卖方订单号 != 0) ans=OrderClose(锁死卖方订单号, OrderLots(), OrderClosePrice(), 5, CLR_NONE);
         //愚蠢啊,用OrderCloseBy()更爽
      }
      for (int i = OrdersTotal() - 1; i >= 0; i--)//再搞一次,生怕平仓不干净
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         if (OrderType() == OP_BUY && OrderSymbol() == Symbol() && 锁死买方订单号 != 0)ans= OrderClose(锁死买方订单号, OrderLots(), OrderClosePrice(), 5, CLR_NONE);
         if (OrderType() == OP_SELL && OrderSymbol() == Symbol() && 锁死卖方订单号 != 0) ans=OrderClose(锁死卖方订单号, OrderLots(), OrderClosePrice(), 5, CLR_NONE);
      }
      return (0);
   }
   //-----------------------------------------------------------------------------------------------------------------------
   if (mv != 0.0 && 买方手数之和 != 0.0) 买方均价 = NormalizeDouble(mv / 买方手数之和, Digits);
   if (卖方MV != 0.0 && 卖方手数之和 != 0.0) 卖方均价 = NormalizeDouble(卖方MV / 卖方手数之和, Digits);
   double 买方止盈目标 = 买方均价 + 佣金点数 * Point + 点差 * Point + 以平均持仓成本为基价的止赢点数 * Point;
   double 卖方止盈目标 = 卖方均价 - 佣金点数 * Point - 点差 * Point - 以平均持仓成本为基价的止赢点数 * Point;
   if (Bid > 买方止盈目标 && Ask < 卖方止盈目标 && 买方止盈目标 != 0.0 && 卖方止盈目标 != 0.0) 
   {
      for (int i = OrdersTotal() - 1; i >= 0; i--) 
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         if (OrderType() < OP_BUYLIMIT) ans=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 5, CLR_NONE);
         if (OrderType() > OP_SELL) ans=OrderDelete(OrderTicket());
      }
   }
   if (买方手数之和 > 卖方手数之和)
      if (买方手数之和 > 1.0 && 买方手数之和 - 卖方手数之和 <= 0.5) 最大持仓个数++;//6
   if (买方手数之和 < 卖方手数之和)
      if (卖方手数之和 > 1.0 && 卖方手数之和 - 买方手数之和 <= 0.5) 最大持仓个数++;
   if (隐藏止盈止损 == FALSE) 
   {
      for (int i = 0; i < OrdersTotal(); i++) 
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == Smagic && OrderStopLoss() == 0.0) 
         ans=OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + 止损 * Point, OrderOpenPrice() - 止赢 * Point, 0, Purple);
         if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == Bmagic && OrderStopLoss() == 0.0) 
         ans=OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() - 止损 * Point, OrderOpenPrice() + 止赢 * Point, 0, Purple);
      }
   }
   for (int i = 0; i < OrdersTotal(); i++) 
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && 买方最大手数 < OrderLots() && OrderMagicNumber() == Bmagic) 买方最大手数 = OrderLots();
      if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && 卖方最大手数 < OrderLots() && OrderMagicNumber() == Smagic) 卖方最大手数 = OrderLots();
      if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == Bmagic && OrderLots() == 买方最大手数) 
      {
         最大买单订单号 = OrderTicket();
         最大买单开盘价 = OrderOpenPrice();
         最大买单止损 = OrderOpenPrice() - 止损 * Point;
         最大买单止盈 = OrderOpenPrice() + 止赢 * Point;
      }
      if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == Smagic && OrderLots() == 卖方最大手数) 
      {
         最大卖单订单号 = OrderTicket();
         最大卖单开盘价 = OrderOpenPrice();
         最大卖单止损 = OrderOpenPrice() + 止损 * Point;
         最大卖单止盈 = OrderOpenPrice() - 止赢 * Point;
      }
   }
   if (弹窗看看止盈止损的点位 == TRUE) 
   {
      Alert(Symbol(), ":多单个数= ", 买单个数, ",空单个数 =", 卖单个数,
       " ,多单总手数= ", 买方手数之和, ",空单总手数 =", 卖方手数之和, 
       ",多单总手数-空单总手数 =", 买方手数之和 - 卖方手数之和, 
       ",最大持仓个数 =", 最大持仓个数, 
         "\n\n多单均价= ", DoubleToStr(买方均价, Digits), 
         ",多单理想止盈= ", DoubleToStr(买方止盈目标, Digits), 
         ",空单均价= ", DoubleToStr(卖方均价, Digits), 
         ",空单理想止盈= ", DoubleToStr(卖方止盈目标, Digits), 
         "\n\n主多单最大手数= ", 买方最大手数, 
         ",主多单最大手数的单号= ", 最大买单订单号, 
         ",主多单最大手数的开仓价= ", DoubleToStr(最大买单开盘价, Digits), 
         ",主多单最大手数的止损价 <= ", DoubleToStr(最大买单止损, Digits), 
         ",主多单最大手数的止盈价Bid >= ", DoubleToStr(最大买单止盈, Digits), 
      "\n\n主空单最大手数= ", 卖方最大手数, 
      ",主空单最大手数的单号= ", 最大卖单订单号, 
      ",主空单最大手数的开仓价= ", DoubleToStr(最大卖单开盘价,Digits), 
      ",主空单最大手数的止损价 >= ", DoubleToStr(最大卖单止损, Digits), 
      ",主空单最大手数的止盈价Ask <= ", DoubleToStr(最大卖单止盈, Digits));
   }
   if (隐藏止盈止损 == TRUE) 
   {
      for (int i = OrdersTotal() - 1; i >= 0; i--) 
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         ans = FALSE;
         if (OrderSymbol() == Symbol()) 
         {
            if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == Bmagic 
            && (最大买单开盘价 + 止赢 * Point <= Bid || 最大买单开盘价 - 止损 * Point >= Bid) 
            && AccountProfit() > 0.0) 
            {
               ans = OrderClose(最大买单订单号, OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red);
               if (OrderType() > OP_SELL) ans=OrderDelete(OrderTicket());
            }
            if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == Smagic 
            && (最大卖单开盘价 - 止赢 * Point >= Ask || 最大卖单开盘价 + 止损 * Point <= Ask) 
            && AccountProfit() > 0.0) 
            {
               ans = OrderClose(最大卖单订单号, OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red);
               if (OrderType() > OP_SELL) ans=OrderDelete(OrderTicket());
            }
         }
      }
   }
   //-------------------------------------------------------------------------
   double 当前盈利 = 0;
   if (统计累计盈利 == TRUE) 
   {
      str2time_96 = StrToTime(历史指定时间);
      for (int i = 0; i < OrdersHistoryTotal(); i++) 
      {
         if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) 
         {
            if (OrderType() != OP_BUY && OrderType() != OP_SELL) continue;
            if (OrderCloseTime() >= str2time_96)
               if (OrderLots() >= 0.01 && (OrderMagicNumber() == Bmagic || OrderMagicNumber() == Smagic)) 
               当前盈利 += OrderProfit()+OrderSwap()+OrderCommission();
         }
      }
   }
   /*
   if (当前盈利 >= 达到累计金额) 
   {
      Alert("恭喜你 ", AccountName(), ":你的账户 ", AccountNumber(), " 自结算日 ", 历史指定时间, 
      " 起使用汇金宝EA已经获利", 当前盈利, " 美元(只汇总汇金宝EA开仓的已平仓交易单),软件检测到升级信息。\n\n 程序原创:陈老师,QQ:810846112,升级后EA将立即正常运行");
      return (0);
   }
   */
   if (是否限制两个日期之间不让EA工作 == TRUE) 
   {
      if (TimeCurrent() >= 开始不让EA运行的MT4服务器日期 && TimeCurrent() <= 结束不让EA运行的MT4服务器日期) 
      {
         ObjectDelete("text_object");
         ObjectDelete("text_object1");
         ObjectDelete("text_object2");
         ObjectCreate("text_object3", OBJ_LABEL, 0, 0, 0);
         ObjectSet("text_object3", OBJPROP_XDISTANCE, 1);
         ObjectSet("text_object3", OBJPROP_YDISTANCE, 1);
         ObjectSetText("text_object3", "当前的MT4服务器时间是:" + TimeToStr(TimeCurrent(), TIME_DATE) + " " 
         + (string)TimeHour(TimeCurrent()) + ":" + (string)TimeMinute(TimeCurrent()) + ",已设定为不让EA运行时段",
            10, "Verdana", Gold);
         return (0);
      }
   }
   if (是否限制星期几不让EA工作 == TRUE) 
   {
      if (TimeDayOfWeek(TimeCurrent()) == 准备在星期几不让EA工作?) 
      {
         ObjectDelete("text_object1");
         ObjectDelete("text_object2");
         ObjectDelete("text_object3");
         ObjectCreate("text_object", OBJ_LABEL, 0, 0, 0);
         ObjectSet("text_object", OBJPROP_XDISTANCE, 1);
         ObjectSet("text_object", OBJPROP_YDISTANCE, 1);
         ObjectSetText("text_object", "今天是星期" + (string)准备在星期几不让EA工作? + ",设定EA不工作", 10, "Verdana", Gold);
         return (0);
      }
   }
   if (是否限制时间段不让EA工作 == TRUE) 
   {
      gd_1192 = TimeHour(Time[0]) + MT4平台时间与北京时间的时差;
      if (gd_1192 >= 24.0) gd_1192 -= 24.0;
      if (gd_1192 > MT4平台北京时间几点前运行 && gd_1192 < MT4平台北京时间几点后运行) 
      {
         ObjectDelete("text_object");
         ObjectDelete("text_object2");
         ObjectDelete("text_object3");
         ObjectCreate("text_object1", OBJ_LABEL, 0, 0, 0);
         ObjectSet("text_object1", OBJPROP_XDISTANCE, 1);
         ObjectSet("text_object1", OBJPROP_YDISTANCE, 1);
         if (TimeMinute(TimeCurrent()) < 10) {
            ObjectSetText("text_object1", "当前北京时间:" + TimeToStr(TimeCurrent(), TIME_DATE) + "日[" + (string)TimeDayOfWeek(TimeCurrent()) + "] " + DoubleToStr(gd_1192, 0) + ":0" +
               (string)TimeMinute(TimeCurrent()) + "," + DoubleToStr(MT4平台北京时间几点前运行, 0) + "点后、" + DoubleToStr(MT4平台北京时间几点后运行, 0) + "点前EA暂停", 10, "Verdana",
               Gold);
         }
         if (TimeMinute(TimeCurrent()) < 10) return (0);
         ObjectSetText("text_object1", "当前北京时间:" + TimeToStr(TimeCurrent(), TIME_DATE) + "日[" + (string)TimeDayOfWeek(TimeCurrent()) + "] " + DoubleToStr(gd_1192, 0) + ":" +
            (string)TimeMinute(TimeCurrent()) + "," + DoubleToStr(MT4平台北京时间几点前运行, 0) + "点后、" + DoubleToStr(MT4平台北京时间几点后运行, 0) + "点前EA暂停", 10, "Verdana",
            Gold);
         return (0);
      }
   }
   if (是否限制时间段不让EA工作 == TRUE) 
   {
      if (gd_1192 <= MT4平台北京时间几点前运行 || gd_1192 >= MT4平台北京时间几点后运行) 
      {
         ObjectDelete("text_object");
         ObjectDelete("text_object1");
         ObjectDelete("text_object3");
         ObjectCreate("text_object2", OBJ_LABEL, 0, 0, 0);
         ObjectSet("text_object2", OBJPROP_XDISTANCE, 1);
         ObjectSet("text_object2", OBJPROP_YDISTANCE, 1);
         if (TimeMinute(TimeCurrent()) < 10) 
         {
            ObjectSetText("text_object2", "当前北京时间:" + TimeToStr(TimeCurrent(), TIME_DATE) + "日[" + (string)TimeDayOfWeek(TimeCurrent()) + "] " + DoubleToStr(gd_1192, 0) + ":0" +
               (string)TimeMinute(TimeCurrent()) + "," + DoubleToStr(MT4平台北京时间几点前运行, 0) + "点前、" + DoubleToStr(MT4平台北京时间几点后运行, 0) + "点后EA运行", 10, "Verdana",
               Gold);
         }
         if (TimeMinute(TimeCurrent()) >= 10) 
         {
            ObjectSetText("text_object2", "当前北京时间:" + TimeToStr(TimeCurrent(), TIME_DATE) + "日[" + (string)TimeDayOfWeek(TimeCurrent()) + "] " + DoubleToStr(gd_1192, 0) + ":" +
               (string)TimeMinute(TimeCurrent()) + "," + DoubleToStr(MT4平台北京时间几点前运行, 0) + "点前、" + DoubleToStr(MT4平台北京时间几点后运行, 0) + "点后EA运行", 10, "Verdana",
               Gold);
         }
      }
   }
   if (K距临界价格一定点数时不开新仓 == TRUE && OrdersTotal() < 1 && MathAbs(Bid - 请输入你认为的临界高点价格) <= 距临界价格多少点数时不开新仓 * Point) 
   {
      Alert(Symbol(), "【", Period(), "】  ", TimeToStr(TimeCurrent(), TIME_DATE), 
      " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()), 
      "  K线现价=", Bid, ",距设定的临界高点价格 ",
         请输入你认为的临界高点价格, " 只有 ", MathAbs(Bid - 请输入你认为的临界高点价格) / Point, "点,当前处于限制开新仓的价格区域");
      return (0);
   }
   if (K距临界价格一定点数时不开新仓 == TRUE && OrdersTotal() < 1 && MathAbs(Bid - 请输入你认为的临界低点价格) <= 距临界价格多少点数时不开新仓 * Point) 
   {
      Alert(Symbol(), "【", Period(), "】  ", TimeToStr(TimeCurrent(), TIME_DATE), " ", TimeHour(TimeCurrent()), ":", TimeMinute(TimeCurrent()), "  K线现价=", Bid, ",距设定的临界低点价格 ",
         请输入你认为的临界低点价格, " 只有 ", MathAbs(Bid - 请输入你认为的临界低点价格) / Point, "点,当前处于限制开新仓的价格区域");
      return (0);
   }
   int 订单总数 = 0;
   bool 订单不多 = TRUE;
   double order_open_price_108 = 0.0;
   double 最后手数 = 0.0;
   int li_124 = 0;
   double ld_128 = 0.0;
   int ticket_136 = 0;
   bool 有空单 = FALSE;
   double price_144 = 0.0;
   double order_lots_152 = 0.0;
   double ld_unused_160 = 0.0;
   double ld_168 = 0.0;
   double icci_176 = iCCI(NULL, 0, 13, PRICE_TYPICAL, 0);
   double ima_184 = iMA(NULL, PERIOD_M1, 3, 0, MODE_EMA, PRICE_CLOSE, 0);
   double ima_192 = iMA(NULL, PERIOD_M1, 3, 0, MODE_EMA, PRICE_CLOSE, 1);
   if (gi_1272 == 1) 
   {
      if (gi_1264 != 0) 最后手数 = MathCeil(AccountBalance() * gi_1268 / 100000.0);
      else 最后手数 = AutoMM();
   }
   else 
   {
      if (gi_1264 != 0) 最后手数 = MathCeil(AccountBalance() * gi_1268 / 100000.0) / 10.0;
      else 最后手数 = AutoMM();
   }
   if (最后手数 > 100.0) 最后手数 = 100;
   订单总数 = 0;
   for (int i = 0; i < OrdersTotal(); i++) 
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if (OrderSymbol() == Symbol() && (OrderMagicNumber() == Bmagic || OrderMagicNumber() == Smagic)) 
      订单总数++;
   }
   if (Symbol() == "EURUSD") ld_168 = gd_1216;
   if (Symbol() == "GBPUSD") ld_168 = gd_1224;
   if (Symbol() == "USDJPY") ld_168 = gd_1240;
   if (Symbol() == "USDCHF") ld_168 = gd_1232;
   if (ld_168 == 0.0) ld_168 = 5;
   if (li_124 > 订单总数) //比如出场了一个订单,那么全部订单平仓出场
   {
      for (int i = OrdersTotal(); i >= 0; i--) 
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         g_cmd_1304 = OrderType();
         if (OrderSymbol() == Symbol()) 
         {
            if (g_cmd_1304 == OP_BUY && OrderMagicNumber() == Bmagic) 
            {
               ans=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 滑点, Blue);
               if (OrderType() > OP_SELL) ans=OrderDelete(OrderTicket());
            }
            if (!(g_cmd_1304 == OP_SELL && OrderMagicNumber() == Smagic)) return (0);
            ans=OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 滑点, Red);
            if (OrderType() <= OP_SELL) return (0);
            ans=OrderDelete(OrderTicket());
            return (0);
         }
      }
   }
   li_124 = 订单总数;
   if (订单总数 >= 最大持仓个数) 订单不多 = FALSE;
   else 订单不多 = TRUE;
   if (order_open_price_108 == 0.0) 
   {
      for (int i = 0; i < OrdersTotal(); i++) 
      {
         if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
         g_cmd_1304 = OrderType();
         if (OrderSymbol() == Symbol() && (OrderMagicNumber() == Bmagic || OrderMagicNumber() == Smagic))
         {
            order_open_price_108 = OrderOpenPrice();
            if (g_cmd_1304 == OP_BUY && OrderMagicNumber() == Bmagic) 方向码 = 2;
            if (g_cmd_1304 == OP_SELL && OrderMagicNumber() == Smagic) 方向码 = 1;
         }
      }
   }
   if (订单总数 < 1) 
   {
      方向码 = 3;
      gd_1192 = TimeHour(Time[0]) + MT4平台时间与北京时间的时差;
      if (gd_1192 >= 24.0) gd_1192 -= 24.0;
      if (让EA在0-1点不开仓吗 == TRUE && gd_1192 == 0.0) return (0);
      if (让EA在1-2点不开仓吗 == TRUE && gd_1192 == 1.0) return (0);
      if (让EA在2-3点不开仓吗 == TRUE && gd_1192 == 2.0) return (0);
      if (让EA在3-4点不开仓吗 == TRUE && gd_1192 == 3.0) return (0);
      if (让EA在4-5点不开仓吗 == TRUE && gd_1192 == 4.0) return (0);
      if (让EA在5-6点不开仓吗 == TRUE && gd_1192 == 5.0) return (0);
      if (让EA在6-7点不开仓吗 == TRUE && gd_1192 == 6.0) return (0);
      if (让EA在7-8点不开仓吗 == TRUE && gd_1192 == 7.0) return (0);
      if (让EA在8-9点不开仓吗 == TRUE && gd_1192 == 8.0) return (0);
      if (让EA在9-10点不开仓吗 == TRUE && gd_1192 == 9.0) return (0);
      if (让EA在10-11点不开仓吗 == TRUE && gd_1192 == 10.0) return (0);
      if (让EA在11-12点不开仓吗 == TRUE && gd_1192 == 11.0) return (0);
      if (让EA在12-13点不开仓吗 == TRUE && gd_1192 == 12.0) return (0);
      if (让EA在13-14点不开仓吗 == TRUE && gd_1192 == 13.0) return (0);
      if (让EA在14-15点不开仓吗 == TRUE && gd_1192 == 14.0) return (0);
      if (让EA在15-16点不开仓吗 == TRUE && gd_1192 == 15.0) return (0);
      if (让EA在16-17点不开仓吗 == TRUE && gd_1192 == 16.0) return (0);
      if (让EA在17-18点不开仓吗 == TRUE && gd_1192 == 17.0) return (0);
      if (让EA在18-19点不开仓吗 == TRUE && gd_1192 == 18.0) return (0);
      if (让EA在19-20点不开仓吗 == TRUE && gd_1192 == 19.0) return (0);
      if (让EA在20-21点不开仓吗 == TRUE && gd_1192 == 20.0) return (0);
      if (让EA在21-22点不开仓吗 == TRUE && gd_1192 == 21.0) return (0);
      if (让EA在22-23点不开仓吗 == TRUE && gd_1192 == 22.0) return (0);
      if (让EA在23-24点不开仓吗 == TRUE && gd_1192 == 23.0) return (0);
      imacd_376 = iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 0);
      imacd_384 = iMACD(NULL, 0, 14, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
      if (imacd_376 > imacd_384) 方向码 = 2;
      if (imacd_376 < imacd_384) 方向码 = 1;
   }
   for (int i = OrdersTotal(); i >= 0; i--) 
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if (OrderSymbol() == Symbol()) 
      {
         if (OrderType() == OP_SELL && OrderMagicNumber() == Smagic) 
         {
            if (移动止损 > 0.0) 
            {
               if (OrderOpenPrice() - Ask >= (移动止损 + 间隔点数) * Point) 
               {
                  if (OrderStopLoss() > Ask + Point * 移动止损) 
                  {
                     ans=OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * 移动止损, OrderClosePrice() - 止赢 * Point - 移动止损 * Point, 800, Purple);
                     return (0);
                  }
               }
            }
         }
         if (OrderType() == OP_BUY && OrderMagicNumber() == Bmagic) 
         {
            if (移动止损 > 0.0) 
            {
               if (Bid - OrderOpenPrice() >= (移动止损 + 间隔点数) * Point) 
               {
                  if (OrderStopLoss() < Bid - Point * 移动止损) 
                  {
                     ans=OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * 移动止损, OrderClosePrice() + 止赢 * Point + 移动止损 * Point, 800, Yellow);
                     return (0);
                  }
               }
            }
         }
      }
   }
   //------------------------------------------------------------------------------
   ld_128 = 0;
   ticket_136 = 0;
   有空单 = FALSE;
   price_144 = 0;
   order_lots_152 = 0;
   for (int i = 0; i < OrdersTotal(); i++) 
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
      if (OrderSymbol() == Symbol()) 
      {
         ticket_136 = OrderTicket();
         if (OrderType() == OP_BUY && OrderMagicNumber() == Bmagic) 有空单 = FALSE;
         if (OrderType() == OP_SELL && OrderMagicNumber() == Smagic) 有空单 = TRUE;
         price_144 = OrderClosePrice();
         order_lots_152 = OrderLots();
         if (有空单 == FALSE) 
         {
            if (OrderClosePrice() < OrderOpenPrice()) ld_128 -= (OrderOpenPrice() - OrderClosePrice()) * OrderLots() / Point;
            if (OrderClosePrice() > OrderOpenPrice()) ld_128 += (OrderClosePrice() - OrderOpenPrice()) * OrderLots() / Point;
         }
         if (有空单 == TRUE) {
            if (OrderClosePrice() > OrderOpenPrice()) ld_128 -= (OrderClosePrice() - OrderOpenPrice()) * OrderLots() / Point;
            if (OrderClosePrice() < OrderOpenPrice()) ld_128 += (OrderOpenPrice() - OrderClosePrice()) * OrderLots() / Point;
         }
      }
   }
   int ticket;
   ld_128 *= ld_168;
   gs_1328 = "Profit: $" + DoubleToStr(ld_128, 2) + " +/-";
   if (订单总数 >= 最大持仓个数 - gi_1212 && gi_1208 == 1 && (OrderMagicNumber() == Bmagic || OrderMagicNumber() == Smagic))
   {
      if (ld_128 >= gi_1204) //盈利点数达标
      {
         ans=OrderClose(ticket_136, order_lots_152, price_144, 滑点, Yellow);
         if (OrderType() > OP_SELL) ans=OrderDelete(OrderTicket());
         订单不多 = FALSE;
         return (0);
      }
   }
   if (!IsTesting()) 
   {
      if (方向码 == 3) gs_unused_1320 = "No conditions to open trades";
      else gs_unused_1320 = "                         ";
   }
   if (方向码 == 1 && 订单不多) 
   {
      ticket_204 = 0;
      if (Bid - order_open_price_108 >= 间隔点数 * Point || 订单总数 < 1) 
      {
         g_bid_1288 = Bid;
         order_open_price_108 = 0;
         if (订单总数 != 0) 
         {
            g_lots_1296 = 最后手数;
            for (int i = 1; i <= 订单总数; i++) 
            {
               if (最大持仓个数 > 12) g_lots_1296 = NormalizeDouble(1.5 * g_lots_1296, 2);
               else g_lots_1296 = NormalizeDouble(gi_100 * g_lots_1296, 2);
            }
         } 
         else g_lots_1296 = 最后手数;
         if (g_lots_1296 > 100.0) g_lots_1296 = 100;
         g_lots_1296 *= 起始手数调节器;
         ticket_204 = OrderSend(Symbol(), OP_SELL, g_lots_1296, g_bid_1288, 滑点, 0, 0, 订单备注, Smagic, 0, Red);
         for (int i = OrdersTotal() - 1; i >= 0; i--) 
         {
            if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
            if (OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == Smagic) li_4++;
         }
         if (li_4 <= 3) 
         {
            ticket=OrderSend(Symbol(), OP_BUYLIMIT, g_lots_1296, g_bid_1288 - 止赢 * Point, 滑点, 0, 0, gs_ccc_92, 汇金宝开空单时下挂多单的标示码, 0, Red);
            if(alert<1){Alert("符合挂多单条件1,MT4时间:", TimeToStr(TimeCurrent()));alert++;t=Time[0];}
         }
         if (li_4 > 3 && 卖方最大手数 < 1.0) 
         {
            ticket=OrderSend(Symbol(), OP_BUYLIMIT, g_lots_1296, g_bid_1288 - 点差佣金利息加获利点数之和 * Point, 滑点, 0, 0, gs_ccc_92, 汇金宝开空单时下挂多单的标示码, 0, Red);
            if(alert<1){Alert("符合挂多单条件2,MT4时间:", TimeToStr(TimeCurrent()));alert++;t=Time[0];}
         }
         if (卖方最大手数 < 1.0) return (0);
        ticket= OrderSend(Symbol(), OP_BUYLIMIT, g_lots_1296, g_bid_1288 - 点差佣金利息加获利点数之和 * Point + 大手数时挂单间距调整点数 * Point, 滑点, 0, 0, gs_ccc_92, 汇金宝开空单时下挂多单的标示码,
            0, Red);
         if(alert<1){Alert("符合挂多单条件3, MT4时间:", TimeToStr(TimeCurrent()));alert++;t=Time[0];}
         return (0);
      }
   }
   //---
   if (方向码 == 2 && 订单不多) 
   {
      ticket_208 = 0;
      if (order_open_price_108 - Ask >= 间隔点数 * Point || 订单总数 < 1) 
      {
         g_ask_1280 = Ask;
         order_open_price_108 = 0;
         if (订单总数 != 0) 
         {
            g_lots_1296 = 最后手数;
            for (int i = 1; i <= 订单总数; i++) 
            {
               if (最大持仓个数 > 12) g_lots_1296 = NormalizeDouble(1.5 * g_lots_1296, 2);
               else g_lots_1296 = NormalizeDouble(gi_100 * g_lots_1296, 2);
            }
         } 
         else g_lots_1296 = 最后手数;
         if (g_lots_1296 > 100.0) g_lots_1296 = 100;
         g_lots_1296 *= 起始手数调节器;
         ticket_208 = OrderSend(Symbol(), OP_BUY, g_lots_1296, g_ask_1280, 滑点, 0, 0, 订单备注, Bmagic, 0, Blue);
         for (int i = OrdersTotal() - 1; i >= 0; i--) 
         {
            if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))continue;
            if (OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == Bmagic) li_0++;
         }
         if (li_0 <= 3) 
         {
            ticket=OrderSend(Symbol(), OP_SELLLIMIT, g_lots_1296, g_ask_1280 + 止赢 * Point, 滑点, 0, 0, gs_bbb_84, 汇金宝开多单时上挂空单的标示码, 0, Blue);
            if(alert<1){Alert("符合挂空单条件1,MT4时间:", TimeToStr(TimeCurrent()));alert++;t=Time[0];}
         }
         if (li_0 > 3 && 买方最大手数 < 1.0) 
         {
            ticket=OrderSend(Symbol(), OP_SELLLIMIT, g_lots_1296, g_ask_1280 + 点差佣金利息加获利点数之和 * Point, 滑点, 0, 0, gs_bbb_84, 汇金宝开多单时上挂空单的标示码, 0, Blue);
            if(alert<1){Alert("符合挂空单条件2,MT4时间:", TimeToStr(TimeCurrent()));alert++;t=Time[0];}
         }
         if (买方最大手数 < 1.0) return (0);
         ticket=OrderSend(Symbol(), OP_SELLLIMIT, g_lots_1296, g_ask_1280 + 点差佣金利息加获利点数之和 * Point - 大手数时挂单间距调整点数 * Point, 滑点, 0, 0, gs_bbb_84, 汇金宝开多单时上挂空单的标示码,
            0, Blue);
         if(alert<1){Alert("符合挂空单条件3,MT4时间:", TimeToStr(TimeCurrent()));alert++;t=Time[0];}
         return (0);
      }
   }
   return (0);
}
//-------------------------------------------------------
本博客所有文章如无特别注明均为原创。作者:天泓评测
分享到:更多

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)