//EA交易 => ...\MT4\MQL4\Experts #property copyright "Copyright aotarou" #property link "http://aotarou.blog.jp/" enum Account {Balance = 0,FreeMargin = 1 }; //------------------ extern bool 是否排除普通订单=false ; //功能: 用于决定是否排除普通订单(非标准订单)。 //默认值: false(不排除普通订单)。 //用途: 这个参数如果设置为 true,则 EA 会排除标准订单,只执行某些特定类型的订单。 extern bool 允许普通订单=true ; //功能: 指定是否允许执行普通订单。 //默认值: true(允许普通订单)。 //用途: 如果设置为 true,EA 会正常执行标准买卖订单。 extern uint 等待时间=12 ; //等待时间(秒) //功能: 指定交易操作的等待时间,以秒为单位。 //默认值: 12秒。 //用途: 这个参数用于设置在某些操作(如订单修改、关闭)之间的等待时间。如果执行超时,会触发错误处理。 extern bool 邮件通知=false ; //功能: 控制是否发送电子邮件通知。 //默认值: false(不发送邮件)。 //用途: 设置为 true 后,EA 在关键事件(如订单成功执行或出错)时,会发送通知邮件给指定邮箱。 extern int 最大持仓量=1 ; //功能: 控制 EA 允许同时持有的最大订单数量。 //默认值: 1(最多允许 1 笔持仓)。 //用途: 用于风险管理,限制交易中同时持有的仓位数量,避免过度交易。 extern int 魔术号=20191214 ; //功能: EA 使用的魔术号(Magic Number),用于区分不同的 EA 策略。 //默认值: 20191214。 //用途: MT4 平台通过魔术号将不同的策略区分开,以防止混淆。每个 EA 都会有独特的魔术号,确保它们管理各自的订单。 extern int 滑点=10 ; //功能: 设置允许的最大滑点,单位是点(pips)。 //默认值: 10 点。 //用途: 滑点表示订单执行时允许的最大价格偏差,设置这个值可以避免由于市场波动导致订单执行价格与预期价格的差距过大。 extern string 工作日退出时间="15:00" ; //功能: 设置平日(非周末)交易退出的时间点。 //默认值: 15:00。 //用途: 在这个时间点之后,EA 会尝试关闭所有平日的交易订单。 extern string 周末交易停止时间="22:00" ; //功能: 设置周末交易停止的时间点。 //默认值: 22:00。 //用途: 表示周末之前,EA 会在这个时间停止新的交易,并准备关闭所有现有订单。 extern string 周末退出交易的时间="22:30" ; //功能: 设置周末退出交易的时间点。 //默认值: 22:30。 //用途: 表示在这个时间之后,EA 会关闭所有的持仓订单,避免周末持仓的风险。 extern double 手数=0.1 ; //功能: 设置每笔交易的标准手数。 //默认值: 0.1 手。 //用途: 表示每笔交易的规模,0.1手意味着交易的是 10,000 个货币单位(在外汇市场中)。 extern double 资金管理=0 ; //功能: 设置资金管理参数,以百分比形式表示。 //默认值: 0(禁用资金管理)。 //用途: 如果设置大于 0 的值,EA 会根据账户余额和资金管理规则调整交易手数,确保风险与账户资金比例适当。 extern Account 账户模式=0 ; //功能: 选择账户模式。值可以是 Balance 或 FreeMargin,用于选择资金管理基于账户余额或可用保证金。 //默认值: Balance。 //用途: 如果设置为 Balance,资金管理会根据账户余额进行;如果设置为 FreeMargin,则根据可用保证金进行。 extern int 最大点差=50 ; //功能: 设置允许的最大点差,单位是点(pips)。 //默认值: 50 点。 //用途: 点差过大可能导致交易成本增加,因此这个参数用于限制订单执行时的最大点差。如果点差超过这个值,EA 会停止下单。 extern string 订单注释="AssyeGBP" ; //功能: 设置每笔订单的备注信息。 //默认值: "AssyeGBP"。 //用途: 这个注释信息会附加在每笔订单上,方便用户识别每笔交易的来源或策略。 extern int 布林线周期参数=100 ; //功能: 设置用于技术指标布林带(Bollinger Bands)的周期。 //默认值: 100。 //用途: 控制布林带指标的时间周期,影响 EA 的买卖信号生成。 extern int 布林线时间周期=1 ; //功能: 设置布林带指标使用的时间框架。 //默认值: 1 分钟。 //用途: 决定布林带信号使用哪个时间周期进行计算,例如1分钟、5分钟、15分钟等不同时间框架。 extern double 买单止损点数=55 ; //功能: 设置买单的止损点数。 //默认值: 55 点。 //用途: 当价格向不利方向移动达到55点时,EA 会自动关闭买单以止损。 extern double 买单止盈点数=180 ; //功能: 设置买单的目标点数(止盈点)。 //默认值: 180 点。 //用途: 当价格达到盈利目标180点时,EA 会自动平仓获利。 extern double 卖单止损点数=50 ; //功能: 设置卖单的止损点数。 //默认值: 50 点。 //用途: 用于卖单的风险控制,表示价格逆势移动50点时自动止损。 extern double 卖单止盈点数=175 ; //功能: 设置卖单的目标点数(止盈点)。 //默认值: 175 点。 //用途: 当价格达到预定目标175点时,EA 会自动关闭卖单获利。 extern string 交易开始时间1="07:00" ; //功能: 设置交易开始时间1。 //默认值: 07:00。 //用途: 控制EA在这段时间内开始执行交易。 extern string 交易结束时间1="14:59" ; //功能: 设置交易结束时间1。 //默认值: 14:59。 //用途: 控制EA在这段时间结束后停止下单。 extern string 交易开始时间2="15:04" ; //功能: 设置交易开始时间2。 //默认值: 15:04。 //用途: 设置第二段交易时间的开始时间,EA将在这个时间后重新开始下单。 extern string 交易结束时间2="02:00" ; //功能: 设置交易结束时间2。 //默认值: 02:00。 //用途: 控制EA在第二段时间结束后停止下单。 extern bool 星期一交易开关=true ; //功能: 是否在星期一进行交易。 //默认值: true。 //用途: 如果设置为 true,EA将在星期一允许交易。 extern bool 星期二交易开关=true ; //功能: 是否在星期二进行交易。 //默认值: true //用途: 如果设置为 true,EA将在星期二允许交易。 extern bool 星期三交易开关=true ; //功能: 是否在星期三进行交易。 //默认值: true。 //用途: 如果设置为 true,EA将在星期三允许交易。 extern bool 星期四交易开关=true ; //功能: 是否在星期四进行交易。 //默认值: true。 //用途: 如果设置为 true,EA将在星期四允许交易。 extern bool 星期五交易开关=true ; //功能: 是否在星期五进行交易。 //默认值: true。 //用途: 如果设置为 true,EA将在星期五允许交易。 string zong_1_st_0 = "41474539af98795c4b3068f43c2c07e9"; string zong_2_st_10 = "ERROR: Account number is invalid."; char zong_3_ch_1C_ko[]; char zong_4_ch_50_ko[]; char zong_5_ch_84_ko[]; char zong_6_ch_B8_ko[]; char zong_7_ch_EC_ko[]; char zong_8_ch_120_ko[]; char zong_9_ch_154_ko[]; char zong_10_ch_188_ko[]; bool zong_11_bo_1BC = false; datetime zong_12_da_1C0 = 0; bool zong_13_bo_1C8 = false; int zong_14_in_200_si30[30]; int zong_15_in_278 = 1; bool zong_16_bo_27C = false; bool zong_17_bo_27D = false; /* #import "certmod.dll" void 设置认证服务器( char & mu_0_ch_ko[],char & mu_1_ch_ko[],ushort mu_2_us,int mu_3_in); void SetTimeout( uint mu_0_ui,uint mu_1_ui,uint mu_2_ui); int 初始化认证过程( char & mu_0_ch_ko[],char & mu_1_ch_ko[],char & mu_2_ch_ko[],char & mu_3_ch_ko[],char & mu_4_ch_ko[]); int CertQuote( char & mu_0_ch_ko[],char & mu_1_ch_ko[]); int Cert( char & mu_0_ch_ko[],char & mu_1_ch_ko[],char & mu_2_ch_ko[],char & mu_3_ch_ko[],char & mu_4_ch_ko[],int mu_5_in); void CertDebug( char & mu_0_ch_ko[]); #import */ int OnInit() { EA_BANK_InitEAMagicNumber ( ); zong_14_in_200_si30[0] = 魔术号; //if ( !(EA_BANK_CheckMagicSetting ( )) ) { // Alert("EA_BANK_StopMagicNumbers にマジックナンバーを追加してください。"); // return(1); } EventSetTimer(60); 初始化认证过程(); StringToCharArray("eamaker.sakura.ne.jp",zong_3_ch_1C_ko,0,-1,0); StringToCharArray("/cert",zong_4_ch_50_ko,0,-1,0); //设置认证服务器(zong_3_ch_1C_ko,zong_4_ch_50_ko,80,0); //SetTimeout(0xEA60,0x1B7740,0xA4CB800); //if ( !(CertCheck ( )) ) { return(0); } return(0); } //OnInit <<==-------- -------- void OnTick() { double zi_1_do = 0.0; datetime zi_2_da = 0; string zi_3_st; string zi_4_st; double zi_5_do = 0.0; //----- ----- long lin_lo_1; double lin_do_2; double lin_do_3; double lin_do_4; double lin_do_5; double lin_do_6; string lin_st_7; int lin_in_8; string lin_st_9; int lin_in_10; double lin_do_11; /* lin_lo_1=zong_12_da_1C0 + 3600; if ( TimeCurrent() > lin_lo_1 ) { zong_12_da_1C0 = TimeCurrent() ; if ( IsTesting() ) { zong_11_bo_1BC = true ; } else { if ( !(CertCheck ( )) ) { 订单注释("【EA-BANK】認証エラー。登録口座以外ではご利用できません。"); zong_11_bo_1BC = false ; } else { 订单注释("【EA-BANK】認証OK"); zong_11_bo_1BC = true ; } } } if ( zong_11_bo_1BC == false ) return; */ if ( zong_13_bo_1C8 ) { Print("暴走の危険性があるため強制停止"); return; } if ( Volume[0] > 1 || IsTradeAllowed() == false ) return; zi_1_do = (Ask - Bid) / Point / 10.0 ; zi_2_da = TimeLocal() ; zi_3_st = string(TimeYear(zi_2_da)) + "/" + string(TimeMonth(zi_2_da)) + "/" + string(TimeDay(zi_2_da)) + "<" + string(TimeHour(zi_2_da)) + ":" + string(TimeMinute(zi_2_da)) + ":" + string(TimeSeconds(zi_2_da)) + ">" ; zi_4_st = string(Year()) + "/" + string(Month()) + "/" + string(Day()) + "<" + string(Hour()) + ":" + string(Minute()) + ":" + string(Seconds()) + ">" ; Comment("【EA-BANK】認証OK AssyeGBP( )ver1.07","\n",Symbol(),"\n","FX Server Time : ",zi_4_st,"\n","PC Local Time : ",zi_3_st,"\n","SPREAD: ",zi_1_do," Pips"); if ( 资金管理!=0.0 ) { lin_do_2 = 0.0; if ( 账户模式 == 0 ) { lin_do_2 = AccountBalance(); } else { if ( 账户模式 == 1 ) { lin_do_2 = AccountFreeMargin(); } } lin_do_3 = iClose(StringSubstr(Symbol(),0,3) + AccountCurrency(),0,0); if ( lin_do_3==0.0 ) { lin_do_3 = 1.0; } lin_do_4 = 资金管理 * lin_do_2 / 1000000.0 / lin_do_3; MarketInfo(Symbol(),MODE_LOTSTEP); lin_do_5 = MarketInfo(Symbol(),MODE_MAXLOT); if ( lin_do_4lin_do_4 ) { lin_do_4 = 资金管理 * lin_do_2 / 1000000.0 / lin_do_3; } MarketInfo(Symbol(),MODE_LOTSTEP); if ( lin_do_4>lin_do_5 ) { lin_do_4 = lin_do_5; } } else { if ( 资金管理==0.0 ) { lin_do_4 = 手数; } } zi_5_do = lin_do_4 ; if ( TradeTimeCheck2 ( true,交易开始时间1,交易结束时间1) && TradeWeekCheck ( ) ) { StrategyMagicNum_1(Symbol(),zi_5_do,滑点,魔术号); } if ( TradeTimeCheck2 ( true,交易开始时间2,交易结束时间2) && 交易开始时间2 != "" && 交易结束时间2 != "" && TradeWeekCheck ( ) ) { StrategyMagicNum_1(Symbol(),zi_5_do,滑点,魔术号); } lin_do_6 = 0.0; if ( TimeCurrent() >= StringToTime(TimeToString(TimeCurrent(),1) + " " + 周末退出交易的时间) ) { for (lin_in_8 = OrdersTotal() - 1 ; lin_in_8 >= 0 ; lin_in_8=lin_in_8 - 1) { if ( OrderSelect(lin_in_8,0,0) == false ) break; if ( DayOfWeek() != 5 || 周末退出交易的时间 == "" || 周末交易停止时间 >= 周末退出交易的时间 || OrderMagicNumber() != 魔术号 || OrderSymbol() != Symbol() ) continue; if ( ( OrderType() != 0 && OrderType() != 1 ) ) continue; RefreshRates(); if ( OrderType() == 0 ) { lin_do_6 = Bid; } else { if ( OrderType() == 1 ) { lin_do_6 = Ask; } } if ( OrderClose(OrderTicket(),OrderLots(),lin_do_6,滑点,0xFFFFFFFF) != false ) continue; Print("TimeExit"," OrderClose Error : ErrorCode=",GetLastError()); break; } } if ( TimeCurrent() >= StringToTime(TimeToString(TimeCurrent(),1) + " " + 工作日退出时间) && TimeCurrent() < StringToTime(TimeToString(TimeCurrent(),1) + " " + 工作日退出时间) + 180 ) { for (lin_in_10 = OrdersTotal() - 1 ; lin_in_10 >= 0 ; lin_in_10=lin_in_10 - 1) { if ( OrderSelect(lin_in_10,0,0) == false ) break; if ( DayOfWeek() == 5 || 工作日退出时间 == "" || OrderMagicNumber() != 魔术号 || OrderSymbol() != Symbol() ) continue; if ( ( OrderType() != 0 && OrderType() != 1 ) ) continue; RefreshRates(); if ( OrderType() == 0 ) { lin_do_11 = Bid; } else { if ( OrderType() == 1 ) { lin_do_11 = Ask; } } if ( OrderClose(OrderTicket(),OrderLots(),lin_do_11,滑点,0xFFFFFFFF) != false ) continue; Print("TimeExit2"," OrderClose Error : ErrorCode=",GetLastError()); break; } } OrderMagicNum1Exit(Symbol(),魔术号,zi_5_do,滑点,Bid,Ask); } //OnTick <<==-------- -------- void OnTimer() { int zi_1_in = 0; int zi_2_in = 0; //----- ----- bool lin_bo_1; int lin_in_2; int lin_in_3; long lin_lo_4; long lin_lo_5; long lin_lo_6; zi_2_in = 0 ; for (zi_1_in = 0 ; zi_1_in < HistoryTotal() ; zi_1_in ++) { if ( OrderSelect(zi_1_in,0,1) == false ) return; if ( ( OrderType() != 0 && OrderType() != 1 ) ) continue; lin_in_2 = OrderMagicNumber(); lin_in_3 = 0; if ( !(EA_BANK_CheckEAMagicNumber ( lin_in_2)) ) continue; lin_lo_4 = OrderOpenTime(); lin_lo_5=TimeCurrent() - 60; if ( lin_lo_4 < lin_lo_5 ) continue; lin_lo_5 = OrderCloseTime(); lin_lo_6=TimeCurrent() - 60; if ( lin_lo_5 <= lin_lo_6 ) continue; zi_2_in ++; } if ( zi_2_in < 5 ) return; zong_13_bo_1C8 = true ; } //OnTimer <<==-------- -------- void OnDeinit( const int mu_0_in) { EventKillTimer(); } //OnDeinit <<==-------- -------- //功能: 设置认证服务器。 //用途: 将输入的服务器地址和端口信息存储到字符数组,之后可能用于认证。 void 设置认证服务器( string mu_0_st,string mu_1_st,ushort mu_2_us,int mu_3_in) { StringToCharArray(mu_0_st,zong_3_ch_1C_ko,0,-1,0); StringToCharArray(mu_1_st,zong_4_ch_50_ko,0,-1,0); //设置认证服务器(zong_3_ch_1C_ko,zong_4_ch_50_ko,mu_2_us,mu_3_in); } //功能: 初始化认证过程。 //用途: 配置认证所需的参数,比如账户名称、公司、服务器地址等,确保EA只有在授权账户上运行。 int 初始化认证过程( string mu_0_st,int mu_1_in,string mu_2_st,string mu_3_st,string mu_4_st) { StringToCharArray(mu_0_st,zong_5_ch_84_ko,0,-1,0); StringToCharArray(IntegerToString(mu_1_in,0,32),zong_6_ch_B8_ko,0,-1,0); StringToCharArray(mu_2_st,zong_7_ch_EC_ko,0,-1,0); StringToCharArray(mu_3_st,zong_8_ch_120_ko,0,-1,0); StringToCharArray(mu_4_st,zong_9_ch_154_ko,0,-1,0); //return(初始化认证过程(zong_5_ch_84_ko,zong_6_ch_B8_ko,zong_7_ch_EC_ko,zong_8_ch_120_ko,zong_9_ch_154_ko)); } //初始化认证过程 <<==-------- -------- int CertQuote( string mu_0_st,int mu_1_in) { StringToCharArray(mu_0_st,zong_5_ch_84_ko,0,-1,0); StringToCharArray(IntegerToString(mu_1_in,0,32),zong_6_ch_B8_ko,0,-1,0); //return(CertQuote(zong_5_ch_84_ko,zong_6_ch_B8_ko)); } //CertQuote <<==-------- -------- int Cert( string mu_0_st,int mu_1_in,string mu_2_st,string mu_3_st,string mu_4_st,int mu_5_in) { StringToCharArray(mu_0_st,zong_5_ch_84_ko,0,-1,0); StringToCharArray(IntegerToString(mu_1_in,0,32),zong_6_ch_B8_ko,0,-1,0); StringToCharArray(mu_2_st,zong_7_ch_EC_ko,0,-1,0); StringToCharArray(mu_3_st,zong_8_ch_120_ko,0,-1,0); StringToCharArray(mu_4_st,zong_9_ch_154_ko,0,-1,0); //return(Cert(zong_5_ch_84_ko,zong_6_ch_B8_ko,zong_7_ch_EC_ko,zong_8_ch_120_ko,zong_9_ch_154_ko,mu_5_in)); } //Cert <<==-------- -------- void CertDebug( string mu_0_st) { StringToCharArray(mu_0_st,zong_10_ch_188_ko,0,-1,0); //CertDebug(zong_10_ch_188_ko); } //CertDebug <<==-------- -------- void 初始化认证过程() { ArrayResize(zong_3_ch_1C_ko,1024,0); ArrayResize(zong_4_ch_50_ko,1024,0); ArrayResize(zong_5_ch_84_ko,1024,0); ArrayResize(zong_6_ch_B8_ko,1024,0); ArrayResize(zong_7_ch_EC_ko,1024,0); ArrayResize(zong_8_ch_120_ko,1024,0); ArrayResize(zong_9_ch_154_ko,1024,0); ArrayResize(zong_10_ch_188_ko,1024,0); } //初始化认证过程 <<==-------- -------- void CertRelease() { } //CertRelease <<==-------- -------- bool CertCheck() { string zi_2_st; int zi_3_in = 0; //----- ----- if ( zong_17_bo_27D ) { return(false); } zi_2_st = AccountName() ; zi_3_in = StringReplace(zi_2_st,"#"," ") ; if ( !(zong_16_bo_27C) ) { StringToCharArray(zong_1_st_0,zong_5_ch_84_ko,0,-1,0); StringToCharArray(IntegerToString(AccountNumber(),0,32),zong_6_ch_B8_ko,0,-1,0); StringToCharArray(zi_2_st,zong_7_ch_EC_ko,0,-1,0); StringToCharArray(AccountCompany(),zong_8_ch_120_ko,0,-1,0); StringToCharArray(ServerAddress(),zong_9_ch_154_ko,0,-1,0); // if ( 初始化认证过程(zong_5_ch_84_ko,zong_6_ch_B8_ko,zong_7_ch_EC_ko,zong_8_ch_120_ko,zong_9_ch_154_ko) == 2 ) { Print(zong_2_st_10); zong_17_bo_27D = true ; return(false); } zong_16_bo_27C = true ; } else { StringToCharArray(zong_1_st_0,zong_5_ch_84_ko,0,-1,0); StringToCharArray(IntegerToString(AccountNumber(),0,32),zong_6_ch_B8_ko,0,-1,0); // if ( CertQuote(zong_5_ch_84_ko,zong_6_ch_B8_ko) == 2 ) { Print(zong_2_st_10); zong_17_bo_27D = true ; return(false); } } return(true); } //CertCheck <<==-------- -------- void EA_BANK_InitEAMagicNumber() { int zi_1_in; //----- ----- zi_1_in = 0 ; for (zi_1_in = 0 ; zi_1_in < 30 ; zi_1_in ++) { zong_14_in_200_si30[zi_1_in] = -1; } } //EA_BANK_InitEAMagicNumber <<==-------- -------- bool EA_BANK_CheckEAMagicNumber( int mu_0_in) { int zi_2_in; //----- ----- zi_2_in = 0 ; for (zi_2_in = 0 ; zi_2_in < 30 ; zi_2_in ++) { if ( zong_14_in_200_si30[zi_2_in] == mu_0_in ) { return(true); } } return(false); } //EA_BANK_CheckEAMagicNumber <<==-------- -------- bool EA_BANK_CheckMagicSetting() { bool zi_2_bo = false; int zi_3_in = 0; //----- ----- zi_2_bo = true ; zi_3_in = 0 ; do { if ( zong_14_in_200_si30[zi_3_in] != -1 ) { return(true); } zi_3_in ++; if ( zi_3_in >= 30 ) break; } while(zi_2_bo); return( !(zi_2_bo) ); } //EA_BANK_CheckMagicSetting <<==-------- -------- double OrderCalculateLots( double mu_0_do) { double zi_2_do = 0.0; string zi_3_st; double zi_4_do = 0.0; double zi_5_do = 0.0; double zi_6_do = 0.0; double zi_7_do = 0.0; int zi_8_in = 0; //----- ----- if ( 资金管理!=0.0 ) { zi_2_do = 0.0 ; if ( 账户模式 == 0 ) { zi_2_do = AccountBalance() ; } else { if ( 账户模式 == 1 ) { zi_2_do = AccountFreeMargin() ; } } zi_3_st = StringSubstr(Symbol(),0,3) + AccountCurrency() ; zi_4_do = iClose(zi_3_st,0,0) ; if ( zi_4_do==0.0 ) { zi_4_do = 1.0 ; } zi_5_do = 资金管理 * zi_2_do / 1000000.0 / zi_4_do ; MarketInfo(Symbol(),MODE_LOTSTEP); zi_6_do = MarketInfo(Symbol(),MODE_MINLOT) ; zi_7_do = MarketInfo(Symbol(),MODE_MAXLOT) ; zi_8_in = MathLog(1.0 / zi_6_do) / MathLog(10.0) ; if ( zi_5_dozi_6_do ) { zi_5_do = 资金管理 * zi_2_do / 1000000.0 / zi_4_do ; } MarketInfo(Symbol(),MODE_LOTSTEP); if ( zi_5_do>zi_7_do ) { zi_5_do = zi_7_do ; } } else { if ( 资金管理==0.0 ) { zi_5_do = 手数 ; } } return(zi_5_do); } //OrderCalculateLots <<==-------- -------- void TimeExit( int mu_0_in) { double zi_1_do = 0.0; string zi_2_st; datetime zi_3_da = 0; int zi_4_in = 0; //----- ----- zi_2_st = TimeToString(TimeCurrent(),1) ; zi_3_da = StringToTime(zi_2_st + " " + 周末退出交易的时间) ; if ( TimeCurrent() >= zi_3_da ) { for (zi_4_in=OrdersTotal() - 1 ; zi_4_in >= 0 ; zi_4_in --) { if ( OrderSelect(zi_4_in,0,0) == false ) { return; } if ( DayOfWeek() != 5 || 周末退出交易的时间 == "" || 周末交易停止时间 >= 周末退出交易的时间 || OrderMagicNumber() != 魔术号 || OrderSymbol() != Symbol() ) continue; if ( ( OrderType() != 0 && OrderType() != 1 ) ) continue; RefreshRates(); if ( OrderType() == 0 ) { zi_1_do = Bid ; } else { if ( OrderType() == 1 ) { zi_1_do = Ask ; } } if ( OrderClose(OrderTicket(),OrderLots(),zi_1_do,滑点,0xFFFFFFFF) != false ) continue; Print("TimeExit"," OrderClose Error : ErrorCode=",GetLastError()); return; } } } //TimeExit <<==-------- -------- void TimeExit2( int mu_0_in) { double zi_1_do = 0.0; string zi_2_st; datetime zi_3_da = 0; int zi_4_in = 0; //----- ----- zi_2_st = TimeToString(TimeCurrent(),1) ; zi_3_da = StringToTime(zi_2_st + " " + 工作日退出时间) ; if ( TimeCurrent() >= zi_3_da && TimeCurrent() < zi_3_da + 180 ) { for (zi_4_in=OrdersTotal() - 1 ; zi_4_in >= 0 ; zi_4_in --) { if ( OrderSelect(zi_4_in,0,0) == false ) { return; } if ( DayOfWeek() == 5 || 工作日退出时间 == "" || OrderMagicNumber() != 魔术号 || OrderSymbol() != Symbol() ) continue; if ( ( OrderType() != 0 && OrderType() != 1 ) ) continue; RefreshRates(); if ( OrderType() == 0 ) { zi_1_do = Bid ; } else { if ( OrderType() == 1 ) { zi_1_do = Ask ; } } if ( OrderClose(OrderTicket(),OrderLots(),zi_1_do,滑点,0xFFFFFFFF) != false ) continue; Print("TimeExit2"," OrderClose Error : ErrorCode=",GetLastError()); return; } } } //TimeExit2 <<==-------- -------- int OrderEntrySignal_MACross() { int zi_2_in = 0; double zi_3_do = 0.0; double zi_4_do = 0.0; //----- ----- HideTestIndicators(true); zi_3_do = iBands(NULL,布林线时间周期,布林线周期参数,3.0,0,0,1,0) ; zi_4_do = iBands(NULL,布林线时间周期,布林线周期参数,3.0,0,0,2,0) ; HideTestIndicators(false); if ( ( Close[0]<=zi_4_do || Low[0]<=zi_4_do ) ) { zi_2_in = 1 ; } if ( ( Close[0]>=zi_3_do || High[0]>=zi_3_do ) ) { zi_2_in = -1 ; } return(zi_2_in); } //OrderEntrySignal_MACross <<==-------- -------- int OrderEntrySignal_BBand() { int zi_2_in = 0; double zi_3_do = 0.0; double zi_4_do = 0.0; //----- ----- HideTestIndicators(true); zi_3_do = iBands(NULL,布林线时间周期,布林线周期参数,3.0,0,0,1,1) ; zi_4_do = iBands(NULL,布林线时间周期,布林线周期参数,3.0,0,0,2,1) ; HideTestIndicators(false); if ( ( Close[0]<=zi_4_do || Low[0]<=zi_4_do ) ) { zi_2_in = 1 ; } if ( ( Close[0]>=zi_3_do || High[0]>=zi_3_do ) ) { zi_2_in = -1 ; } return(zi_2_in); } //OrderEntrySignal_BBand <<==-------- -------- int OrderEntryFilter( int mu_0_in) { int zi_2_in = 0; double zi_3_do = 0.0; double zi_4_do = 0.0; double zi_5_do = 0.0; double zi_6_do = 0.0; //----- ----- HideTestIndicators(true); zi_3_do = iMACD(NULL,PERIOD_M15,75,200,9,0,0,0) ; zi_4_do = iMACD(NULL,PERIOD_M15,75,200,9,0,0,1) ; HideTestIndicators(false); HideTestIndicators(true); zi_5_do = iMA(NULL,PERIOD_M1,600,0,0,0,1) ; zi_6_do = iMA(NULL,PERIOD_M1,150,0,0,0,1) ; HideTestIndicators(false); if ( mu_0_in == -1 && zi_5_do>zi_6_do && zi_3_dozi_4_do ) { zi_2_in = 1 ; } return(zi_2_in); } //OrderEntryFilter <<==-------- -------- void StrategyMagicNum_1( string mu_0_st,double mu_1_do,int mu_2_in,int mu_3_in) { int zi_1_in = 0; int zi_2_in = 0; int zi_3_in = 0; int zi_4_in = 0; int zi_5_in = 0; int zi_6_in = 0; string zi_7_st; datetime zi_8_da = 0; //----- ----- int lin_in_1; double lin_do_2; int lin_in_3; int lin_in_4; double lin_do_5; string lin_st_6; int lin_in_7; double lin_do_8; int lin_in_9; int lin_in_10; double lin_do_11; string lin_st_12; zi_3_in = CalculateCurrentOrders(0,mu_3_in,mu_0_st) ; zi_4_in = CalculateCurrentOrders(2,mu_3_in,mu_0_st) ; zi_5_in = CalculateCurrentOrders(3,mu_3_in,mu_0_st) ; zi_6_in = OrderEntrySignal_BBand ( ) ; if ( zi_6_in == -1 ) { zi_1_in = -1 ; } if ( zi_6_in == 1 ) { zi_1_in = 1 ; } zi_1_in = OrderEntryFilter ( zi_1_in) ; if ( MarketInfo(Symbol(),MODE_SPREAD)>最大点差 * zong_15_in_278 ) return; zi_7_st = TimeToString(TimeCurrent(),1) ; zi_8_da = StringToTime(zi_7_st + " " + 周末交易停止时间) ; if ( DayOfWeek() == 5 && TimeCurrent() >= zi_8_da ) { return; } if ( zi_1_in == 1 && zi_3_in < 最大持仓量 ) { lin_in_1 = mu_3_in; lin_do_2 = 买单止盈点数; lin_in_3 = 买单止损点数; lin_in_4 = mu_2_in; lin_do_5 = mu_1_do; lin_st_6 = mu_0_st; if ( ( Digits == 3 || Digits == 5 ) ) { lin_in_3=lin_in_3 * 10; lin_do_2 = lin_do_2 * 10.0; } CheckOrderSend(lin_st_6,0,lin_do_5,Ask,lin_in_4,Ask - lin_in_3 * Point,lin_do_2 * Point + Ask,订单注释,lin_in_1,Red); zi_2_in = 0 ; } if ( zi_1_in == -1 && zi_3_in < 最大持仓量 ) { lin_in_7 = mu_3_in; lin_do_8 = 卖单止盈点数; lin_in_9 = 卖单止损点数; lin_in_10 = mu_2_in; lin_do_11 = mu_1_do; lin_st_12 = mu_0_st; if ( ( Digits == 3 || Digits == 5 ) ) { lin_in_9=lin_in_9 * 10; lin_do_8 = lin_do_8 * 10.0; } CheckOrderSend(lin_st_12,1,lin_do_11,Bid,lin_in_10,lin_in_9 * Point + Bid,Bid - lin_do_8 * Point,订单注释,lin_in_7,Blue); zi_2_in = 0 ; } } //StrategyMagicNum_1 <<==-------- -------- void OrderClosePositions( string mu_0_st,int mu_1_in,double mu_2_do,double mu_3_do) { int zi_1_in = 0; int zi_2_in = 0; int zi_3_in = 0; int zi_4_in = 0; bool zi_5_bo = false; int zi_6_in = 0; int zi_7_in = 0; //----- ----- zi_3_in = 0 ; zi_4_in = 0 ; zi_5_bo = false ; for (zi_6_in=OrdersTotal() - 1 ; zi_6_in >= 0 ; zi_6_in --) { if ( OrderSelect(zi_6_in,0,0) == false ) break; if ( OrderMagicNumber() != mu_1_in || OrderSymbol() != mu_0_st ) continue; zi_2_in = OrderType() ; if ( ( zi_2_in != 0 && zi_2_in != 1 ) ) continue; zi_1_in = OrderTicket() ; zi_3_in = zi_2_in ; break; } if ( zi_1_in == 0 ) return; zi_7_in = GetTickCount() ; do { if ( GetTickCount() - zi_7_in > 等待时间 * 1000 ) { Alert("Order Close timeout ERROR Check the LOG FILE !!"); return; } if ( IsTradeAllowed() == true ) { RefreshRates(); if ( zi_3_in == 0 ) { zi_5_bo = OrderClose(zi_1_in,OrderLots(),mu_2_do,滑点,White) ; } else { if ( zi_3_in == 1 ) { zi_5_bo = OrderClose(zi_1_in,OrderLots(),mu_3_do,滑点,White) ; } } if ( zi_5_bo == false ) { zi_4_in = GetLastError() ; if ( 邮件通知 ) { SendMail("AssyeGBP 邮件通知:","Order Close Timeout ERROR !! Check LOG." + mu_0_st); } } else { if ( zi_5_bo ) { if ( !(邮件通知) ) return; SendMail("AssyeGBP 邮件通知:","Order Closed !! Check LOG." + mu_0_st); return; } } } Print("[Order Close ERROR!!] : ",zi_4_in," "); if ( zi_4_in == 129 ) return; } while(zi_4_in != 130); } //OrderClosePositions <<==-------- -------- void OrderMagicNum1Exit( string mu_0_st,int mu_1_in,double mu_2_do,int mu_3_in,double mu_4_do,double mu_5_do) { int zi_1_in = 0; int zi_2_in = 0; int zi_3_in = 0; int zi_4_in = 0; int zi_5_in = 0; int zi_6_in = 0; //----- ----- zi_2_in = CalculateCurrentOrders(0,mu_1_in,mu_0_st) ; zi_3_in = CalculateCurrentOrders(2,mu_1_in,mu_0_st) ; zi_4_in = CalculateCurrentOrders(3,mu_1_in,mu_0_st) ; zi_5_in = OrderEntrySignal_MACross ( ) ; if ( zi_5_in == -1 ) { zi_1_in = -1 ; } if ( zi_5_in == 1 ) { zi_1_in = 1 ; } if ( CalculateCurrentOrders(0,mu_1_in,mu_0_st) == 0 ) return; zi_6_in = OrderGetPosition ( mu_0_st,mu_1_in) ; if ( zi_6_in == 0 && zi_1_in == -1 ) { OrderClosePositions(mu_0_st,mu_1_in,mu_4_do,mu_5_do); } if ( zi_6_in != 1 || zi_1_in != 1 ) return; OrderClosePositions(mu_0_st,mu_1_in,mu_4_do,mu_5_do); } //OrderMagicNum1Exit <<==-------- -------- bool OrderChangePosition( double mu_0_do,double mu_1_do,string mu_2_st,int mu_3_in) { int zi_2_in = 0; int zi_3_in = 0; int zi_4_in = 0; int zi_5_in = 0; int zi_6_in = 0; //----- ----- zi_2_in = 0 ; for (zi_3_in = 0 ; zi_3_in < OrdersTotal() ; zi_3_in ++) { if ( OrderSelect(zi_3_in,0,0) == false ) break; if ( OrderMagicNumber() != mu_3_in || OrderSymbol() != mu_2_st ) continue; zi_4_in = OrderType() ; if ( ( zi_4_in != 0 && zi_4_in != 1 ) ) continue; zi_2_in = OrderTicket() ; break; } if ( zi_2_in == 0 ) { return(false); } mu_0_do = NormalizeDouble(mu_0_do,Digits) ; mu_1_do = NormalizeDouble(mu_1_do,Digits) ; if ( mu_0_do==0.0 ) { mu_0_do = OrderStopLoss() ; } if ( mu_1_do==0.0 ) { mu_1_do = OrderTakeProfit() ; } if ( OrderStopLoss()==mu_0_do && OrderTakeProfit()==mu_1_do ) { return(false); } zi_5_in = GetTickCount() ; for ( ; ; ) { if ( GetTickCount() - zi_5_in > 等待时间 * 1000 ) { Alert("OrderModify timeout ERROR Check the LOG FILE !!"); return(false); } if ( IsTradeAllowed() == true ) { if ( OrderModify(zi_2_in,0.0,mu_0_do,mu_1_do,0,Aqua) == true ) { return(true); } zi_6_in = GetLastError() ; Print("OrderModify ERROR :",zi_6_in); if ( (zi_6_in == 1 || zi_6_in == 130) ) break; } Sleep(100); continue; } return(false); } //OrderChangePosition <<==-------- -------- bool TradeTimeCheck1( bool mu_0_bo,string mu_1_st,string mu_2_st) { string zi_2_st; datetime zi_3_da = 0; datetime zi_4_da = 0; bool zi_5_bo = false; //----- ----- zi_2_st = TimeToString(TimeCurrent(),1) ; zi_3_da = StringToTime(zi_2_st + " " + mu_1_st) ; zi_4_da = StringToTime(zi_2_st + " " + mu_2_st) ; zi_5_bo = false ; if ( zi_3_da < zi_4_da ) { if ( TimeCurrent() >= zi_3_da && TimeCurrent() < zi_4_da ) { zi_5_bo = true ; } else { zi_5_bo = false ; } } else { if ( TimeCurrent() >= zi_4_da && TimeCurrent() < zi_3_da ) { zi_5_bo = false ; } else { zi_5_bo = true ; } } if ( mu_0_bo == false ) { zi_5_bo = true ; } return(zi_5_bo); } //TradeTimeCheck1 <<==-------- -------- bool TradeTimeCheck2( bool mu_0_bo,string mu_1_st,string mu_2_st) { string zi_2_st; datetime zi_3_da = 0; datetime zi_4_da = 0; bool zi_5_bo = false; //----- ----- zi_2_st = TimeToString(TimeCurrent(),1) ; zi_3_da = StringToTime(zi_2_st + " " + mu_1_st) ; zi_4_da = StringToTime(zi_2_st + " " + mu_2_st) ; zi_5_bo = false ; if ( zi_3_da < zi_4_da ) { if ( TimeCurrent() >= zi_3_da && TimeCurrent() < zi_4_da ) { zi_5_bo = true ; } else { zi_5_bo = false ; } } else { if ( TimeCurrent() >= zi_4_da && TimeCurrent() < zi_3_da ) { zi_5_bo = false ; } else { zi_5_bo = true ; } } if ( mu_0_bo == false ) { zi_5_bo = true ; } return(zi_5_bo); } //TradeTimeCheck2 <<==-------- -------- bool TradeWeekCheck() { bool zi_2_bo = false; int zi_3_in = 0; //----- ----- zi_3_in = DayOfWeek() ; if ( 星期一交易开关 && zi_3_in == 1 ) { zi_2_bo = true ; } if ( 星期二交易开关 && zi_3_in == 2 ) { zi_2_bo = true ; } if ( 星期三交易开关 && zi_3_in == 3 ) { zi_2_bo = true ; } if ( 星期四交易开关 && zi_3_in == 4 ) { zi_2_bo = true ; } if ( 星期五交易开关 && zi_3_in == 5 ) { zi_2_bo = true ; } return(zi_2_bo); } //TradeWeekCheck <<==-------- -------- bool CheckOrderSend( string mu_0_st,int mu_1_in,double mu_2_do,double mu_3_do,int mu_4_in,double mu_5_do,double mu_6_do,string mu_7_st,int mu_8_in,color mu_9_co) { int zi_2_in = 0; int zi_3_in = 0; int zi_4_in = 0; //----- ----- mu_3_do = NormalizeDouble(mu_3_do,Digits) ; mu_5_do = NormalizeDouble(mu_5_do,Digits) ; mu_6_do = NormalizeDouble(mu_6_do,Digits) ; zi_2_in = 0 ; zi_3_in = 0 ; if ( ( Digits == 3 || Digits == 5 ) ) { mu_4_in *=10; } zi_4_in = GetTickCount() ; for ( ; ; ) { if ( GetTickCount() - zi_4_in > 等待时间 * 1000 ) { Alert("Order-Send TimeOut ERROR!! Check the experts log."); if ( 邮件通知 ) { SendMail("AssyeGBP Mall Alert ","Order-Send TimeOut ERROR!! Check LOG." + mu_0_st); } return(false); } if ( IsTradeAllowed() == true ) { RefreshRates(); if ( 允许普通订单 ) { zi_2_in = OrderSend(mu_0_st,mu_1_in,mu_2_do,mu_3_do,0,0.0,0.0,mu_7_st,mu_8_in,0,mu_9_co) ; if ( zi_2_in > 0 ) { if ( OrderSelect(zi_2_in,1,0) == true && OrderModify(OrderTicket(),OrderOpenPrice(),mu_5_do,mu_6_do,0,mu_9_co) == true && 邮件通知 ) { SendMail("AssyeGBP Mall:","Order Entry!! Check LOG." + mu_0_st); } return(true); } zi_3_in = GetLastError() ; } else { if ( 是否排除普通订单 ) { zi_2_in = OrderSend(mu_0_st,mu_1_in,mu_2_do,mu_3_do,mu_4_in,mu_5_do,mu_6_do,mu_7_st,mu_8_in,0,mu_9_co) ; if ( zi_2_in != -1 ) { if ( 邮件通知 ) { SendMail("AssyeGBP Mall:","Order Entry!! Check LOG." + mu_0_st); } return(true); } zi_3_in = GetLastError() ; } } Print("[Order-Send ERROR!!] : ",zi_3_in," "); if ( (zi_3_in == 129 || zi_3_in == 130) ) break; } Sleep(100); continue; } return(false); } //CheckOrderSend <<==-------- -------- int CalculateCurrentOrders( int mu_0_in,int mu_1_in,string mu_2_st) { int zi_2_in = 0; int zi_3_in = 0; int zi_4_in = 0; int zi_5_in = 0; int zi_6_in = 0; //----- ----- zi_3_in = 0 ; zi_4_in = 0 ; for (zi_5_in = 0 ; zi_5_in < OrdersTotal() ; zi_5_in ++) { if ( OrderSelect(zi_5_in,0,0) == false ) break; if ( OrderSymbol() != mu_2_st || OrderMagicNumber() != mu_1_in ) continue; zi_6_in = OrderType() ; if ( mu_0_in == 0 ) { if ( ( zi_6_in == 0 || zi_6_in == 2 || zi_6_in == 4 ) ) { zi_3_in ++; } if ( ( zi_6_in == 1 || zi_6_in == 3 || zi_6_in == 5 ) ) { zi_4_in ++; } } if ( mu_0_in == 1 ) { if ( ( zi_6_in == 2 || zi_6_in == 4 ) ) { zi_3_in ++; } if ( ( zi_6_in == 3 || zi_6_in == 5 ) ) { zi_4_in ++; } } if ( mu_0_in == 2 && ( zi_6_in == 0 || zi_6_in == 2 || zi_6_in == 4 ) ) { zi_3_in ++; } if ( mu_0_in == 3 && ( zi_6_in == 1 || zi_6_in == 3 || zi_6_in == 5 ) ) { zi_4_in ++; } if ( mu_0_in != 4 ) continue; if ( zi_6_in == 0 ) { zi_3_in ++; } if ( zi_6_in != 1 ) continue; zi_4_in ++; } if ( ( mu_0_in == 0 || mu_0_in == 1 || mu_0_in == 4 ) ) { zi_2_in=zi_3_in + zi_4_in; } if ( mu_0_in == 2 ) { zi_2_in = zi_3_in ; } if ( mu_0_in == 3 ) { zi_2_in = zi_4_in ; } return(zi_2_in); } //CalculateCurrentOrders <<==-------- -------- int OrderGetPosition( string mu_0_st,int mu_1_in) { int zi_2_in = 0; int zi_3_in = 0; //----- ----- zi_2_in = 0 ; for (zi_3_in = 0 ; zi_3_in < OrdersTotal() ; zi_3_in ++) { if ( OrderSelect(zi_3_in,0,0) == false ) break; if ( OrderMagicNumber() != mu_1_in || OrderSymbol() != mu_0_st ) continue; if ( ( OrderType() != 0 && OrderType() != 1 ) ) continue; zi_2_in = OrderType() ; break; } return(zi_2_in); } //OrderGetPosition <<==-------- -------- int OrderSell( string mu_0_st,double mu_1_do,int mu_2_in,int mu_3_in,double mu_4_do,int mu_5_in,int mu_6_in,int mu_7_in) { double zi_2_do = 0.0; double zi_3_do = 0.0; bool zi_4_bo = false; //----- ----- if ( mu_6_in == 0 ) { if ( ( Digits == 3 || Digits == 5 ) ) { mu_3_in *=10; mu_4_do = mu_4_do * 10.0 ; } zi_2_do = mu_3_in * Point + Bid ; zi_3_do = Bid - mu_4_do * Point ; } zi_4_bo = CheckOrderSend(mu_0_st,1,mu_1_do,Bid,mu_2_in,zi_2_do,zi_3_do,订单注释,mu_5_in,Blue) ; return(0); } //OrderSell <<==-------- -------- int OrderBuy( string mu_0_st,double mu_1_do,int mu_2_in,int mu_3_in,double mu_4_do,int mu_5_in,int mu_6_in,int mu_7_in) { double zi_2_do = 0.0; double zi_3_do = 0.0; bool zi_4_bo = false; //----- ----- if ( mu_6_in == 0 ) { if ( ( Digits == 3 || Digits == 5 ) ) { mu_3_in *=10; mu_4_do = mu_4_do * 10.0 ; } zi_2_do = Ask - mu_3_in * Point ; zi_3_do = mu_4_do * Point + Ask ; } zi_4_bo = CheckOrderSend(mu_0_st,0,mu_1_do,Ask,mu_2_in,zi_2_do,zi_3_do,订单注释,mu_5_in,Red) ; return(0); } //<<==OrderBuy <<==