#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);
}
//-------------------------------------------------------
发表评论