MT4 高空低多EA系统,判断顶部做空,底部做多,完整注释。

原理: 类似股票高抛低吸观点,顶部破位时做空单。底部破位时做多单。

适合:震荡行情

注意事项:如果破位暴涨暴跌会造成亏损。

EA完整代码都注释过了很清楚。希望大家一起进步成长。

作业: 把这EA改一下改成突破进单,效果意想不到。。。

点击下载程序与源码 文件大小:3.09 KB

必须读我.txt 策汇在线.url MQL4/ MQL4/Experts/ MQL4/Experts/HighThrowingAndLowSuctio.mq4

MQL4/Experts/HighThrowingAndLowSuctio.mq4代码片段:

//+------------------------------------------------------------------+ //| HighThrowingAndLowSuctio.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "策汇在线 www.fxchs.com" #property link "http://www.fxchs.com" #property version "1.00" #property strict //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // // EA原理: 类似股票高抛低吸观点,顶部破位时做空单。底部破位时做多单。 // // EA适合:震荡行情 // // 注意事项:如果破位暴涨暴跌会造成亏损。 // // EA完整代码都注释过了很清楚。希望大家一起进步成长。 // // 作业: 把这EA改一下改成突破进单,效果意想不到。。。 // //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // 每笔交易基础手数,资金管理会调大手数 double FirstLots=0.01; // 最多的定单数量 extern double MaxOrderNum=50; // 止盈点 extern double GivenPointClose=100; // 帐户内达到多少点,强平所有单子 extern double AimPointCloseAll=100; // 允许交易滑点 extern int Slippage = 3; // EA标记 extern int MagicNumber = 888888; // 最大允许手数 extern int MaxLots=20; // 记录时间与开关变量,避免一个周期内频繁开单 static int RecordTime; static bool done=false; // 初始化与反初始化 int init() { ObjectCreate("comment_label", OBJ_LABEL, 0, 0, 0); ObjectSet("comment_label", OBJPROP_XDISTANCE, 50); ObjectSet("comment_label", OBJPROP_YDISTANCE, 20); ObjectSetText("comment_label", "高空低多系统", 20, "Arial", Red); return (0); } int deinit() { ObjectDelete("comment_label"); return (0); } //入口 int start() { // 获取当前周期最高最低价 double HighIn4 = iHigh(Symbol(), 0, iHighest(Symbol(), 0, MODE_HIGH, 20, 1)); double LowIn4 = iLow(Symbol(), 0, iLowest(Symbol(), 0, MODE_LOW, 20, 1)); double HighIn2 = iHigh(Symbol(), 0, iHighest(Symbol(), 0, MODE_HIGH, 20, 1)); double LowIn2 = iLow(Symbol(), 0, iLowest(Symbol(), 0, MODE_LOW, 20, 1)); // 如果 保证金比例不足,禁止交易 if (AccountFreeMargin() <= 100.0) { Alert("保证金比例不足,禁止交易!"); return (0); } // 如果盈利额超过设定的止盈点数,强制平仓所有。 if(GetTotalProfit()>AimPointCloseAll*Point*100000*FirstLots){ CloseAllOrder(); } // 定单过多, 根据设置的盈利点数 ,平掉盈利的单子 if(OrdersTotal()>=MaxOrderNum){ CloseAllGivenWinSell(); CloseAllGivenWinBuy(); } // 这里记录时间,当前一个周期内,只能开一单。避免频繁开单 if(Time[0]!=RecordTime){ RecordTime=Time[0]; done=false; } // 如果底部破位, 做多单 // 如果顶部破位,做空单。 if (Bid < LowIn4 && done==false && OrdersTotal()<MaxOrderNum && AccountFreeMargin()>100){ MoneyManagement(); OrderSend(Symbol(), OP_BUY, FirstLots, NormalizeDouble(Ask, Digits), Slippage, 0, 0, "Order Buy", MagicNumber, 0, Blue); done=true; } else if (Ask > HighIn4 && done==false && OrdersTotal()<MaxOrderNum && AccountFreeMargin()>100){ MoneyManagement(); OrderSend(Symbol(), OP_SELL, FirstLots, NormalizeDouble(Bid, Digits), Slippage, 0, 0, "Order Sell", MagicNumber, 0, Red); done=true; } // 当前价格比最低点还要低,平掉赚钱的空单 // 当前价格比最高点还要高时,平掉赚钱的多单 if (Bid < LowIn2){ CloseAllWinSell(); }else if (Ask > HighIn2){ CloseAllWinBuy(); } return (0); } // 强制平掉所有定单 void CloseAllOrder(){ bool SucceedClose = FALSE; for (int j= OrdersTotal() - 1; j >= 0; j--) { OrderSelect(j,SELECT_BY_POS, MODE_TRADES); if(OrderType()==OP_BUY) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), Slippage, Blue); else if(OrderType()==OP_SELL) OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slippage, Red); } } // 获取盈利总数 double GetTotalProfit(){ double TotalProfit=0; for (int j= OrdersTotal() - 1; j >= 0; j--) { OrderSelect(j,SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY || OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber) TotalProfit += OrderProfit(); } return (TotalProfit); } // 平掉所有盈利的空单 void CloseAllWinSell(){ bool SucceedClose = FALSE; for (int j= OrdersTotal() - 1; j >= 0; j--) { OrderSelect(j,SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber && OrderProfit()>0) SucceedClose=OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slippage, Red); } } // 平掉盈利的多单 void CloseAllWinBuy(){ bool SucceedClose = FALSE; for (int j= OrdersTotal() - 1; j >= 0; j--) { OrderSelect(j,SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber && OrderProfit()>0) SucceedClose=OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), Slippage, Blue); } } // 根据设置的盈利点数 ,平掉盈利的空单 void CloseAllGivenWinSell(){ bool SucceedClose = FALSE; for (int j= OrdersTotal() - 1; j >= 0; j--) { OrderSelect(j,SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber && OrderProfit()>GivenPointClose*Point*100000*FirstLots) SucceedClose=OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slippage, Red); } } // 根据设置的盈利点数 ,平掉盈利的多单 void CloseAllGivenWinBuy(){ bool SucceedClose = FALSE; for (int j= OrdersTotal() - 1; j >= 0; j--) { OrderSelect(j,SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber && OrderProfit()>GivenPointClose*Point*100000*FirstLots) SucceedClose=OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Bid,Digits), Slippage, Blue); } } // 简单的资金管理,净值小于10万,每手0.1。 // 大于10万,按每5万1倍比例跟单。有限制最大手数 void MoneyManagement(){ if(AccountEquity()<100000){ FirstLots=0.1; }else{ int times = AccountEquity()/50000; FirstLots=0.1*times; if(FirstLots>MaxLots) FirstLots=MaxLots; } }