论坛全局菜单下方 - TICKMILL 285X70论坛全局菜单下方 - ThinkMarkets285X70论坛全局菜单下方 - 荔枝返现285X70论坛全局菜单下方 -  icmarkets285X70
  • 1
  • 2
前往
共 26 条
kanhost
注册时间2014-04-01
[讨论]哈哈,决定自己编写EA了
发表于:2014-04-05 07:19只看该作者
22楼 电梯直达
电梯直达
这个EA模板很好你可以参考哦! //+------------------------------------------------------------------+ //| BBQ_EA_V1.0.6 | //| M5 EURUSD | //| created by Monty666 2013-05-08 | //+------------------------------------------------------------------+ // #property copyright "外汇联盟 www.FXunion.com QQ群144033" #property link "" #include #include // //---- input parameters extern string mm = "MoneyManagement"; extern double StopLoss = 33; extern double TakeProfit = 120; extern double Lots = 0.1; extern bool UseMM = FALSE; extern double PercentageMM = 10.0; extern int SlipPage = 3; extern double MaxSpread = 2.0; extern int TrailingStop = 4; extern int TrailingStep = 8; extern int BreakEven = 3; extern int movestopto = 2; extern double Distance = 15; extern int exp = 2600; extern string deleteOrders = "delete pending after 5 minutes"; extern int DelOrders = 10; extern string Timefilter = "Time shift between local and broker"; extern int ServerTimeZone = 0; extern int TimeControl = 1; extern int HourStartGMT = 9; extern int HourStopGMT = 5; extern string News = "Newsfilter"; extern bool AvoidNews = TRUE; extern int MinimumImpact = 3; extern int MinsBeforeNews = 60; extern int MinsAfterNews = 30; extern string Friday = "FridayFinalHour"; extern bool UseFridayFinalTradeTime = TRUE; extern int FridayFinalHourGMT = 10; extern string SignalSettings = "Signals"; extern int MA_Period = 99; extern int Slippage_MA = 28; extern int Williams_Period = 21; extern int Level_High = 5; extern int Level_Low = 95; extern int ATR_Period = 18; extern int Level_ATR_Stop = 4; extern int CCI_Period = 16; //14 extern int Level_CCI_High = 90; extern int Level_CCI_Low = -110; // HMA extern int MaMetod=2; extern int MaPeriod=6; extern int MaMetod2=3; extern int MaPeriod2=2; // Stoch extern double First_Stoch_KP = 4; // RSI //extern string SignalRSI = "RSI settings"; //extern int rsitimeframe1=1; //extern int rsiperiod1=6; //extern int rsitimeframe2=5; //extern int rsiperiod2=10; //extern int rsitimeframe3=15; //extern int rsiperiod3=20; //extern int rsilevel1=92; //extern int rsilevel2=128; //extern int shift2=0; // highlow extern int PipsAdd = 4; // macd //extern double MACDOpenLevel = 3; //extern double MACDCloseLevel = 2; //extern double MATrendPeriod = 24; extern string SignalClose = "Close settings"; extern int Close_Williams = 0; extern int Williams_Close_Buy = 80; extern int Williams_Close_Sell = 40; extern int Only_Profit = 5; extern int Close_CCI = 0; extern int CCI_Close_Buy = 20; extern int CCI_Close_Sell = -70; extern int MagicNumber = 19777; extern int MagicNumber2 = 18777; extern int MagicNumber3 = 17771; extern int MagicNumber4 = 16777; extern string TradeComment = "BBQ"; double point; int digits,i,D; int BarCount; int Current; int bc=-1,tpb,tps,cnt,total; int gi_240 = 0; int gi_244 = 0; int gi_224 = 0; int gi_228 = 6; int gi_328; int g_error_332; double g_price_336; double g_price_344; double g_price_352; double gd_360; double gd_368; double g_iclose_376; double g_iatr_384; double g_iwpr_392; double g_icci_400; double g_ima_408; int g_datetime_420; // pivot bool AsLongAs=true; int ExtFormula=0; datetime PreviousBarTime1; datetime PreviousBarTime2; datetime LastTradeTime = 0; int ThisBarTrade = 0; int bartime = 0; //+------------------------------------------------------------------+ //| Time Filter | //+------------------------------------------------------------------+ bool TradeSession() { int Hour_Start_Trade; int Hour_Stop_Trade; Hour_Start_Trade = HourStartGMT + ServerTimeZone; Hour_Stop_Trade = HourStopGMT + ServerTimeZone; if (Hour_Start_Trade < 0)Hour_Start_Trade = Hour_Start_Trade + 24; if (Hour_Start_Trade >= 24)Hour_Start_Trade = Hour_Start_Trade - 24; if (Hour_Stop_Trade > 24)Hour_Stop_Trade = Hour_Stop_Trade - 24; if (Hour_Stop_Trade <= 0)Hour_Stop_Trade = Hour_Stop_Trade + 24; if ((UseFridayFinalTradeTime && (Hour()>=FridayFinalHourGMT + ServerTimeZone) && DayOfWeek()==5)||DayOfWeek()==0)return (FALSE); // Friday Control if((TimeControl(Hour_Start_Trade,Hour_Stop_Trade)!=1 && TimeControl==1 && Hour_Start_TradeHour_Stop_Trade) ||TimeControl==0)return (TRUE); // "Trading Time"; return (FALSE); // "Non-Trading Time"; } int TimeControl(int StartHour, int EndHour) { if (Hour()>=StartHour && Hour()< EndHour) { return(0); } return(1); } //+------------------------------------------------------------------+ //| Lots Sizes and Automatic Money Management | //+------------------------------------------------------------------+ double GetLots() { if (UseMM) { double a, maxLot, minLot; a = (PercentageMM * AccountFreeMargin() / 100000); double LotStep = MarketInfo(Symbol(), MODE_LOTSTEP); maxLot = MarketInfo(Symbol(), MODE_MAXLOT ); minLot = MarketInfo(Symbol(), MODE_MINLOT ); a = MathFloor(a / LotStep) * LotStep; if (a > maxLot) return(maxLot); else if (a < minLot) return(minLot); else return(a); } else return(Lots); } //+------------------------------------------------------------------+ //| close by signal | //+------------------------------------------------------------------+ bool close_signal(int ai_0, double ad_4) { if (ai_0 == 0) { if (Close_Williams > 0 && (-1.0 * g_iwpr_392) < Williams_Close_Buy && Only_Profit < 0 || Bid > ad_4 + Only_Profit * gi_328 * Point) return (1); if (Close_CCI > 0 && g_icci_400 > CCI_Close_Buy) return (1); if (gi_224 > 0 && g_iatr_384 < gi_228 * gi_328 * Point) return (1); if (gi_240 == 1 && iClose(NULL, 0, 1) < g_ima_408) return (1); if (gi_244 == 1 && g_ima_408 < iMA(NULL, 0, MA_Period, 0, MODE_SMMA, PRICE_CLOSE, 2)) return (1); } if (ai_0 == 1) { if (Close_Williams > 0 && (-1.0 * g_iwpr_392) > Williams_Close_Sell && Only_Profit < 0 || Ask < ad_4 - Only_Profit * gi_328 * Point) return (1); if (Close_CCI > 0 && g_icci_400 < CCI_Close_Sell) return (1); if (gi_224 > 0 && g_iatr_384 < gi_228 * gi_328 * Point) return (1); if (gi_240 == 1 && iClose(NULL, 0, 1) > g_ima_408) return (1); if (gi_244 == 1 && g_ima_408 > iMA(NULL, 0, MA_Period, 0, MODE_SMMA, PRICE_CLOSE, 2)) return (1); } return (0); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //Calculate for 4 or 5 digits broker if(Digits==5||Digits==3){ D=10;} else{D=1;} if(Digits<4) { point=0.01; digits=2; gi_328 = 10; } else { point=0.0001; digits=4; gi_328 = 1; } return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| MaxSpread | //+------------------------------------------------------------------+ bool Mspread() { double Spread = Ask-Bid; if(Spread <= MaxSpread * point)return (TRUE); return (FALSE); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int cnt, ticket, ticket2, ticket3, ticket4, total; double SL,TP; total=OrdersTotal(); int OpenedOrders=0; //+------------------------------------------------------------------+ //| newsfilter | //+------------------------------------------------------------------+ bool ContinueTrading=true; if(AvoidNews && !IsTesting()) { static int PrevMinute=-1; int MinSinceNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,1,0); int MinToNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,1,1); int ImpactSinceNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,2,0); int ImpactToNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,2,1); if(Minute()!=PrevMinute) { PrevMinute=Minute(); if((MinToNews<=MinsBeforeNews && ImpactToNews>=MinimumImpact) || (MinSinceNews<=MinsAfterNews && ImpactSinceNews>=MinimumImpact))ContinueTrading=false; } } //+------------------------------------------------------------------+ //| trailing | //+------------------------------------------------------------------+ createlstoploss(StopLoss); createltakeprofit(TakeProfit); createsstoploss(StopLoss); createstakeprofit(TakeProfit); if(TrailingStop>0)MoveTrailingStop(); if(BreakEven>0)MoveBreakEven(); //+------------------------------------------------------------------+ //| signals | //+------------------------------------------------------------------+ int sign1, sign2, sign3, sign4, sign5, sign6; // wsr signals g_iclose_376 = iClose(NULL, 0, 1); g_ima_408 = iMA(NULL, 0, MA_Period, 0, MODE_SMMA, PRICE_CLOSE, 1); g_iwpr_392 = iWPR(NULL, 0, Williams_Period, 1); g_iatr_384 = iATR(NULL, 0, ATR_Period, 1); g_icci_400 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, 1); g_datetime_420 = iTime(Symbol(), 0, 0); // buy if (g_iclose_376 > g_ima_408 + Slippage_MA * gi_328 * point && g_iwpr_392 < (-1 * Level_Low) && g_icci_400 < Level_CCI_Low && g_iatr_384 > Level_ATR_Stop * gi_328 * point) sign1=1; // sell if (g_iclose_376 < g_ima_408 - Slippage_MA * gi_328 * point && g_iwpr_392 > (-1 * Level_High) && g_icci_400 > Level_CCI_High && g_iatr_384 > Level_ATR_Stop * gi_328 * point) sign1=-1; // Pivot int limit=1; for(int i=1;i<=limit;i++) { double DPa=iCustom(Symbol(),0,"DailyPivot_Shift",ServerTimeZone,ExtFormula,0,i); double DP=iCustom(Symbol(),0,"DailyPivot_Shift",ServerTimeZone,ExtFormula,0,0); string BUY="false"; string SELL="false"; if((AsLongAs==false&&OpenDP)||(AsLongAs==true&&Open[0]>DP))BUY="true"; if((AsLongAs==false&&Open>DPa&&Open[0]80 && STOM2>80 && STOM3>80 && STOM4>80 && STOM5>80 && STOM6>80 && STOM7>80 && STOM8>80 && STOM9>80 && STOM10>80) sign3=1; // HeikenAshi double HA1a=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,2,i+1); double HA2a=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,3,i+1); double HA1=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,2,i); double HA2=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,3,i); string BUYh="false"; string SELLh="false"; if(HA2aHA1)BUYh="true"; if(HA2a>HA1a&&HA2rsilevel2) sign5=-1; */ // highlow GlobalVariableSet("uplevel", High[1] + PipsAdd*point); GlobalVariableSet("dnlevel", Low[1] - PipsAdd*point); /* // macd double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious(MACDOpenLevel*point) && MaCurrent>MaPrevious && sign5==1) sign4=1; if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDOpenLevel*point) && MaCurrent Level_ATR_Stop * gi_328 * point) { Buy2="true"; Buy3Check="false"; } if (SELLh=="true" && sign3==-1 && sign5==-1 && sign2==-1 && sign2==-1 && g_iatr_384 > Level_ATR_Stop * gi_328 * point) { Sell2="true"; Sell3Check="false"; } */ // stoporders if (BUYh=="true" && Bid>=GlobalVariableGet("uplevel") && bartime != Time[0] && sign2==1 && g_iatr_384 > Level_ATR_Stop * gi_328 * point) { Buy3="true"; Buy4Check="false"; } if (SELLh=="true" && Bid<=GlobalVariableGet("dnlevel") && bartime != Time[0] && sign2==-1 && g_iatr_384 > Level_ATR_Stop * gi_328 * point) { Sell3="true"; Sell4Check="false"; } //+------------------------------------------------------------------+ //| count open orders | //+------------------------------------------------------------------+ int totalo; totalo=0; for(int io=0;ioMinutes_2delete*60 || Buy1=="true") && OrderType()==OP_BUYSTOP) { OrderDelete(OrderTicket()); } else if((TimeCurrent()-OrderOpenTime()>Minutes_2delete*60 || Sell1=="true") && OrderType()==OP_SELLSTOP) { OrderDelete( OrderTicket() ); } } } //+------------------------------------------------------------------+ //| open orders | //+------------------------------------------------------------------+ // double MyAsk = Ask + Distance*point; double MyBid = Bid - Distance*point; double MyAsk2 = Ask + Distance*point; double MyBid2 = Bid - Distance*point; if (ThisBarTrade != Bars) { // wsfr indis standardorder //////////////////////// // buyorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && Buy1=="true") { ThisBarTrade = Bars; ticket=OrderSend(Symbol(),OP_BUY,GetLots(),Ask,SlipPage,0,0,TradeComment,MagicNumber,0,Green); LastTradeTime = LocalTime(); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sellorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && Sell1=="true") { ThisBarTrade = Bars; ticket=OrderSend(Symbol(),OP_SELL,GetLots(),Bid,SlipPage,0,0,TradeComment,MagicNumber,0,Red); LastTradeTime = LocalTime(); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } /* // rsi stoch standardorder //////////////////////// // buyorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && totalo2<1 && totalo3<1 && Buy2=="true" && Buy2Check=="true") { ThisBarTrade = Bars; ticket2=OrderSend(Symbol(),OP_BUY,GetLots(),Ask,SlipPage,0,0,TradeComment,MagicNumber2,0,Green); LastTradeTime = LocalTime(); if(ticket2<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sellorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && totalo2<1 && totalo3<1 && Sell2=="true" && Sell2Check=="true") { ThisBarTrade = Bars; ticket2=OrderSend(Symbol(),OP_SELL,GetLots(),Bid,SlipPage,0,0,TradeComment,MagicNumber2,0,Red); LastTradeTime = LocalTime(); if(ticket2<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } */ // highlow stoporder //////////////////////// // buy stoporder if (Buy3=="true" && totalp<1 && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket3 = OrderSend(Symbol(), OP_BUYSTOP, GetLots(), MyAsk, SlipPage, 0, 0, TradeComment, MagicNumber3, expire, Lime); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket3<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sell stoporder if (Sell3=="true" && totalp<1 && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket3 = OrderSend(Symbol(), OP_SELLSTOP, GetLots(), MyBid, SlipPage, 0, 0, TradeComment, MagicNumber3, expire, Orange); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket3<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } /* // macd stoporder //////////////////////// // buy stoporder if (sign4==1 && sign2==1 && totalp<1 && totalo<1 && totalo2<1 && totalo3<1 && totalo4<1 && Buy2Check=="true" && Buy4Check=="true" && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket4 = OrderSend(Symbol(), OP_BUYSTOP, GetLots(), MyAsk2, SlipPage, 0, 0, TradeComment, MagicNumber4, expire, Lime); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket4<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sell stoporder if (sign4==-1 && sign2==-1 && totalp<1 && totalo<1 && totalo2<1 && totalo3<1 && totalo4<1 && Sell2Check=="true" && Sell4Check=="true" && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket4 = OrderSend(Symbol(), OP_SELLSTOP, GetLots(), MyBid2, SlipPage, 0, 0, TradeComment, MagicNumber4, expire, Orange); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket4<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } */ } //+------------------------------------------------------------------+ //| open orders end | //+------------------------------------------------------------------+ return(0); } //+------------------------------------------------------------------+ //| trailing functions 1 | //+------------------------------------------------------------------+ void MoveTrailingStop() { int cnt,total=OrdersTotal(); for(cnt=0; cnt0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,digits)) { if((NormalizeDouble(OrderStopLoss(),digits)0&&NormalizeDouble(Bid+TrailingStep*point,digits)(NormalizeDouble(Ask+TrailingStop*point,digits)))||(OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,digits),OrderTakeProfit(),0,Red); } } } } } } return(0); } //+------------------------------------------------------------------+ //| breakeven 1 | //+------------------------------------------------------------------+ void MoveBreakEven() { int cnt,total=OrdersTotal(); for(cnt=0; cnt0) { if(NormalizeDouble((Bid-OrderOpenPrice()),digits)>BreakEven*point) { if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),digits)<0) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+movestopto*point,digits),OrderTakeProfit(),0,Blue); } } } } else { if(BreakEven>0) { if(NormalizeDouble((OrderOpenPrice()-Ask),digits)>BreakEven*point) { if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),digits)<0) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-movestopto*point,digits),OrderTakeProfit(),0,Red); } } } } } } } return(0); } // add TP & SL void createlstoploss(double StopLoss){ RefreshRates(); for(int i=0;i
个性签名

韬客社区www.talkfx.co

广告
TK30+TK31帖子一樓廣告
TK30+TK31帖子一樓廣告
kanhost
注册时间2014-04-01
发表于:2014-04-05 08:02只看该作者
23楼
君子性非异也,善假于物也!把自己的逻辑改动一下,就可以拥有自己的EA啦!你的明白!
kanhost
注册时间2014-04-01
发表于:2014-04-05 08:02只看该作者
24楼
//+------------------------------------------------------------------+ //| BBQ_EA_V1.0.6 | //| M5 EURUSD | //| created by Monty666 2013-05-08 | //+------------------------------------------------------------------+ // #property copyright "外汇联盟 www.FXunion.com QQ群144033" #property link "" #include #include // //---- input parameters extern string mm = "MoneyManagement"; extern double StopLoss = 33; extern double TakeProfit = 120; extern double Lots = 0.1; extern bool UseMM = FALSE; extern double PercentageMM = 10.0; extern int SlipPage = 3; extern double MaxSpread = 2.0; extern int TrailingStop = 4; extern int TrailingStep = 8; extern int BreakEven = 3; extern int movestopto = 2; extern double Distance = 15; extern int exp = 2600; extern string deleteOrders = "delete pending after 5 minutes"; extern int DelOrders = 10; extern string Timefilter = "Time shift between local and broker"; extern int ServerTimeZone = 0; extern int TimeControl = 1; extern int HourStartGMT = 9; extern int HourStopGMT = 5; extern string News = "Newsfilter"; extern bool AvoidNews = TRUE; extern int MinimumImpact = 3; extern int MinsBeforeNews = 60; extern int MinsAfterNews = 30; extern string Friday = "FridayFinalHour"; extern bool UseFridayFinalTradeTime = TRUE; extern int FridayFinalHourGMT = 10; extern string SignalSettings = "Signals"; extern int MA_Period = 99; extern int Slippage_MA = 28; extern int Williams_Period = 21; extern int Level_High = 5; extern int Level_Low = 95; extern int ATR_Period = 18; extern int Level_ATR_Stop = 4; extern int CCI_Period = 16; //14 extern int Level_CCI_High = 90; extern int Level_CCI_Low = -110; // HMA extern int MaMetod=2; extern int MaPeriod=6; extern int MaMetod2=3; extern int MaPeriod2=2; // Stoch extern double First_Stoch_KP = 4; // RSI //extern string SignalRSI = "RSI settings"; //extern int rsitimeframe1=1; //extern int rsiperiod1=6; //extern int rsitimeframe2=5; //extern int rsiperiod2=10; //extern int rsitimeframe3=15; //extern int rsiperiod3=20; //extern int rsilevel1=92; //extern int rsilevel2=128; //extern int shift2=0; // highlow extern int PipsAdd = 4; // macd //extern double MACDOpenLevel = 3; //extern double MACDCloseLevel = 2; //extern double MATrendPeriod = 24; extern string SignalClose = "Close settings"; extern int Close_Williams = 0; extern int Williams_Close_Buy = 80; extern int Williams_Close_Sell = 40; extern int Only_Profit = 5; extern int Close_CCI = 0; extern int CCI_Close_Buy = 20; extern int CCI_Close_Sell = -70; extern int MagicNumber = 19777; extern int MagicNumber2 = 18777; extern int MagicNumber3 = 17771; extern int MagicNumber4 = 16777; extern string TradeComment = "BBQ"; double point; int digits,i,D; int BarCount; int Current; int bc=-1,tpb,tps,cnt,total; int gi_240 = 0; int gi_244 = 0; int gi_224 = 0; int gi_228 = 6; int gi_328; int g_error_332; double g_price_336; double g_price_344; double g_price_352; double gd_360; double gd_368; double g_iclose_376; double g_iatr_384; double g_iwpr_392; double g_icci_400; double g_ima_408; int g_datetime_420; // pivot bool AsLongAs=true; int ExtFormula=0; datetime PreviousBarTime1; datetime PreviousBarTime2; datetime LastTradeTime = 0; int ThisBarTrade = 0; int bartime = 0; //+------------------------------------------------------------------+ //| Time Filter | //+------------------------------------------------------------------+ bool TradeSession() { int Hour_Start_Trade; int Hour_Stop_Trade; Hour_Start_Trade = HourStartGMT + ServerTimeZone; Hour_Stop_Trade = HourStopGMT + ServerTimeZone; if (Hour_Start_Trade < 0)Hour_Start_Trade = Hour_Start_Trade + 24; if (Hour_Start_Trade >= 24)Hour_Start_Trade = Hour_Start_Trade - 24; if (Hour_Stop_Trade > 24)Hour_Stop_Trade = Hour_Stop_Trade - 24; if (Hour_Stop_Trade <= 0)Hour_Stop_Trade = Hour_Stop_Trade + 24; if ((UseFridayFinalTradeTime && (Hour()>=FridayFinalHourGMT + ServerTimeZone) && DayOfWeek()==5)||DayOfWeek()==0)return (FALSE); // Friday Control if((TimeControl(Hour_Start_Trade,Hour_Stop_Trade)!=1 && TimeControl==1 && Hour_Start_TradeHour_Stop_Trade) ||TimeControl==0)return (TRUE); // "Trading Time"; return (FALSE); // "Non-Trading Time"; } int TimeControl(int StartHour, int EndHour) { if (Hour()>=StartHour && Hour()< EndHour) { return(0); } return(1); } //+------------------------------------------------------------------+ //| Lots Sizes and Automatic Money Management | //+------------------------------------------------------------------+ double GetLots() { if (UseMM) { double a, maxLot, minLot; a = (PercentageMM * AccountFreeMargin() / 100000); double LotStep = MarketInfo(Symbol(), MODE_LOTSTEP); maxLot = MarketInfo(Symbol(), MODE_MAXLOT ); minLot = MarketInfo(Symbol(), MODE_MINLOT ); a = MathFloor(a / LotStep) * LotStep; if (a > maxLot) return(maxLot); else if (a < minLot) return(minLot); else return(a); } else return(Lots); } //+------------------------------------------------------------------+ //| close by signal | //+------------------------------------------------------------------+ bool close_signal(int ai_0, double ad_4) { if (ai_0 == 0) { if (Close_Williams > 0 && (-1.0 * g_iwpr_392) < Williams_Close_Buy && Only_Profit < 0 || Bid > ad_4 + Only_Profit * gi_328 * Point) return (1); if (Close_CCI > 0 && g_icci_400 > CCI_Close_Buy) return (1); if (gi_224 > 0 && g_iatr_384 < gi_228 * gi_328 * Point) return (1); if (gi_240 == 1 && iClose(NULL, 0, 1) < g_ima_408) return (1); if (gi_244 == 1 && g_ima_408 < iMA(NULL, 0, MA_Period, 0, MODE_SMMA, PRICE_CLOSE, 2)) return (1); } if (ai_0 == 1) { if (Close_Williams > 0 && (-1.0 * g_iwpr_392) > Williams_Close_Sell && Only_Profit < 0 || Ask < ad_4 - Only_Profit * gi_328 * Point) return (1); if (Close_CCI > 0 && g_icci_400 < CCI_Close_Sell) return (1); if (gi_224 > 0 && g_iatr_384 < gi_228 * gi_328 * Point) return (1); if (gi_240 == 1 && iClose(NULL, 0, 1) > g_ima_408) return (1); if (gi_244 == 1 && g_ima_408 > iMA(NULL, 0, MA_Period, 0, MODE_SMMA, PRICE_CLOSE, 2)) return (1); } return (0); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //Calculate for 4 or 5 digits broker if(Digits==5||Digits==3){ D=10;} else{D=1;} if(Digits<4) { point=0.01; digits=2; gi_328 = 10; } else { point=0.0001; digits=4; gi_328 = 1; } return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| MaxSpread | //+------------------------------------------------------------------+ bool Mspread() { double Spread = Ask-Bid; if(Spread <= MaxSpread * point)return (TRUE); return (FALSE); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int cnt, ticket, ticket2, ticket3, ticket4, total; double SL,TP; total=OrdersTotal(); int OpenedOrders=0; //+------------------------------------------------------------------+ //| newsfilter | //+------------------------------------------------------------------+ bool ContinueTrading=true; if(AvoidNews && !IsTesting()) { static int PrevMinute=-1; int MinSinceNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,1,0); int MinToNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,1,1); int ImpactSinceNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,2,0); int ImpactToNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,2,1); if(Minute()!=PrevMinute) { PrevMinute=Minute(); if((MinToNews<=MinsBeforeNews && ImpactToNews>=MinimumImpact) || (MinSinceNews<=MinsAfterNews && ImpactSinceNews>=MinimumImpact))ContinueTrading=false; } } //+------------------------------------------------------------------+ //| trailing | //+------------------------------------------------------------------+ createlstoploss(StopLoss); createltakeprofit(TakeProfit); createsstoploss(StopLoss); createstakeprofit(TakeProfit); if(TrailingStop>0)MoveTrailingStop(); if(BreakEven>0)MoveBreakEven(); //+------------------------------------------------------------------+ //| signals | //+------------------------------------------------------------------+ int sign1, sign2, sign3, sign4, sign5, sign6; // wsr signals g_iclose_376 = iClose(NULL, 0, 1); g_ima_408 = iMA(NULL, 0, MA_Period, 0, MODE_SMMA, PRICE_CLOSE, 1); g_iwpr_392 = iWPR(NULL, 0, Williams_Period, 1); g_iatr_384 = iATR(NULL, 0, ATR_Period, 1); g_icci_400 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, 1); g_datetime_420 = iTime(Symbol(), 0, 0); // buy if (g_iclose_376 > g_ima_408 + Slippage_MA * gi_328 * point && g_iwpr_392 < (-1 * Level_Low) && g_icci_400 < Level_CCI_Low && g_iatr_384 > Level_ATR_Stop * gi_328 * point) sign1=1; // sell if (g_iclose_376 < g_ima_408 - Slippage_MA * gi_328 * point && g_iwpr_392 > (-1 * Level_High) && g_icci_400 > Level_CCI_High && g_iatr_384 > Level_ATR_Stop * gi_328 * point) sign1=-1; // Pivot int limit=1; for(int i=1;i<=limit;i++) { double DPa=iCustom(Symbol(),0,"DailyPivot_Shift",ServerTimeZone,ExtFormula,0,i); double DP=iCustom(Symbol(),0,"DailyPivot_Shift",ServerTimeZone,ExtFormula,0,0); string BUY="false"; string SELL="false"; if((AsLongAs==false&&OpenDP)||(AsLongAs==true&&Open[0]>DP))BUY="true"; if((AsLongAs==false&&Open>DPa&&Open[0]80 && STOM2>80 && STOM3>80 && STOM4>80 && STOM5>80 && STOM6>80 && STOM7>80 && STOM8>80 && STOM9>80 && STOM10>80) sign3=1; // HeikenAshi double HA1a=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,2,i+1); double HA2a=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,3,i+1); double HA1=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,2,i); double HA2=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,3,i); string BUYh="false"; string SELLh="false"; if(HA2aHA1)BUYh="true"; if(HA2a>HA1a&&HA2rsilevel2) sign5=-1; */ // highlow GlobalVariableSet("uplevel", High[1] + PipsAdd*point); GlobalVariableSet("dnlevel", Low[1] - PipsAdd*point); /* // macd double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious(MACDOpenLevel*point) && MaCurrent>MaPrevious && sign5==1) sign4=1; if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDOpenLevel*point) && MaCurrent Level_ATR_Stop * gi_328 * point) { Buy2="true"; Buy3Check="false"; } if (SELLh=="true" && sign3==-1 && sign5==-1 && sign2==-1 && sign2==-1 && g_iatr_384 > Level_ATR_Stop * gi_328 * point) { Sell2="true"; Sell3Check="false"; } */ // stoporders if (BUYh=="true" && Bid>=GlobalVariableGet("uplevel") && bartime != Time[0] && sign2==1 && g_iatr_384 > Level_ATR_Stop * gi_328 * point) { Buy3="true"; Buy4Check="false"; } if (SELLh=="true" && Bid<=GlobalVariableGet("dnlevel") && bartime != Time[0] && sign2==-1 && g_iatr_384 > Level_ATR_Stop * gi_328 * point) { Sell3="true"; Sell4Check="false"; } //+------------------------------------------------------------------+ //| count open orders | //+------------------------------------------------------------------+ int totalo; totalo=0; for(int io=0;ioMinutes_2delete*60 || Buy1=="true") && OrderType()==OP_BUYSTOP) { OrderDelete(OrderTicket()); } else if((TimeCurrent()-OrderOpenTime()>Minutes_2delete*60 || Sell1=="true") && OrderType()==OP_SELLSTOP) { OrderDelete( OrderTicket() ); } } } //+------------------------------------------------------------------+ //| open orders | //+------------------------------------------------------------------+ // double MyAsk = Ask + Distance*point; double MyBid = Bid - Distance*point; double MyAsk2 = Ask + Distance*point; double MyBid2 = Bid - Distance*point; if (ThisBarTrade != Bars) { // wsfr indis standardorder //////////////////////// // buyorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && Buy1=="true") { ThisBarTrade = Bars; ticket=OrderSend(Symbol(),OP_BUY,GetLots(),Ask,SlipPage,0,0,TradeComment,MagicNumber,0,Green); LastTradeTime = LocalTime(); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sellorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && Sell1=="true") { ThisBarTrade = Bars; ticket=OrderSend(Symbol(),OP_SELL,GetLots(),Bid,SlipPage,0,0,TradeComment,MagicNumber,0,Red); LastTradeTime = LocalTime(); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } /* // rsi stoch standardorder //////////////////////// // buyorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && totalo2<1 && totalo3<1 && Buy2=="true" && Buy2Check=="true") { ThisBarTrade = Bars; ticket2=OrderSend(Symbol(),OP_BUY,GetLots(),Ask,SlipPage,0,0,TradeComment,MagicNumber2,0,Green); LastTradeTime = LocalTime(); if(ticket2<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sellorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && totalo2<1 && totalo3<1 && Sell2=="true" && Sell2Check=="true") { ThisBarTrade = Bars; ticket2=OrderSend(Symbol(),OP_SELL,GetLots(),Bid,SlipPage,0,0,TradeComment,MagicNumber2,0,Red); LastTradeTime = LocalTime(); if(ticket2<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } */ // highlow stoporder //////////////////////// // buy stoporder if (Buy3=="true" && totalp<1 && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket3 = OrderSend(Symbol(), OP_BUYSTOP, GetLots(), MyAsk, SlipPage, 0, 0, TradeComment, MagicNumber3, expire, Lime); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket3<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sell stoporder if (Sell3=="true" && totalp<1 && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket3 = OrderSend(Symbol(), OP_SELLSTOP, GetLots(), MyBid, SlipPage, 0, 0, TradeComment, MagicNumber3, expire, Orange); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket3<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } /* // macd stoporder //////////////////////// // buy stoporder if (sign4==1 && sign2==1 && totalp<1 && totalo<1 && totalo2<1 && totalo3<1 && totalo4<1 && Buy2Check=="true" && Buy4Check=="true" && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket4 = OrderSend(Symbol(), OP_BUYSTOP, GetLots(), MyAsk2, SlipPage, 0, 0, TradeComment, MagicNumber4, expire, Lime); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket4<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sell stoporder if (sign4==-1 && sign2==-1 && totalp<1 && totalo<1 && totalo2<1 && totalo3<1 && totalo4<1 && Sell2Check=="true" && Sell4Check=="true" && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket4 = OrderSend(Symbol(), OP_SELLSTOP, GetLots(), MyBid2, SlipPage, 0, 0, TradeComment, MagicNumber4, expire, Orange); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket4<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } */ } //+------------------------------------------------------------------+ //| open orders end | //+------------------------------------------------------------------+ return(0); } //+------------------------------------------------------------------+ //| trailing functions 1 | //+------------------------------------------------------------------+ void MoveTrailingStop() { int cnt,total=OrdersTotal(); for(cnt=0; cnt0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,digits)) { if((NormalizeDouble(OrderStopLoss(),digits)0&&NormalizeDouble(Bid+TrailingStep*point,digits)(NormalizeDouble(Ask+TrailingStop*point,digits)))||(OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,digits),OrderTakeProfit(),0,Red); } } } } } } return(0); } //+------------------------------------------------------------------+ //| breakeven 1 | //+------------------------------------------------------------------+ void MoveBreakEven() { int cnt,total=OrdersTotal(); for(cnt=0; cnt0) { if(NormalizeDouble((Bid-OrderOpenPrice()),digits)>BreakEven*point) { if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),digits)<0) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+movestopto*point,digits),OrderTakeProfit(),0,Blue); } } } } else { if(BreakEven>0) { if(NormalizeDouble((OrderOpenPrice()-Ask),digits)>BreakEven*point) { if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),digits)<0) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-movestopto*point,digits),OrderTakeProfit(),0,Red); } } } } } } } return(0); } // add TP & SL void createlstoploss(double StopLoss){ RefreshRates(); for(int i=0;i
kanhost
注册时间2014-04-01
发表于:2014-04-05 08:03只看该作者
25楼
//+------------------------------------------------------------------+ //| BBQ_EA_V1.0.6 | //| M5 EURUSD | //| created by Monty666 2013-05-08 | //+------------------------------------------------------------------+ // #property copyright "外汇联盟 www.FXunion.com QQ群144033" #property link "" #include #include // //---- input parameters extern string mm = "MoneyManagement"; extern double StopLoss = 33; extern double TakeProfit = 120; extern double Lots = 0.1; extern bool UseMM = FALSE; extern double PercentageMM = 10.0; extern int SlipPage = 3; extern double MaxSpread = 2.0; extern int TrailingStop = 4; extern int TrailingStep = 8; extern int BreakEven = 3; extern int movestopto = 2; extern double Distance = 15; extern int exp = 2600; extern string deleteOrders = "delete pending after 5 minutes"; extern int DelOrders = 10; extern string Timefilter = "Time shift between local and broker"; extern int ServerTimeZone = 0; extern int TimeControl = 1; extern int HourStartGMT = 9; extern int HourStopGMT = 5; extern string News = "Newsfilter"; extern bool AvoidNews = TRUE; extern int MinimumImpact = 3; extern int MinsBeforeNews = 60; extern int MinsAfterNews = 30; extern string Friday = "FridayFinalHour"; extern bool UseFridayFinalTradeTime = TRUE; extern int FridayFinalHourGMT = 10; extern string SignalSettings = "Signals"; extern int MA_Period = 99; extern int Slippage_MA = 28; extern int Williams_Period = 21; extern int Level_High = 5; extern int Level_Low = 95; extern int ATR_Period = 18; extern int Level_ATR_Stop = 4; extern int CCI_Period = 16; //14 extern int Level_CCI_High = 90; extern int Level_CCI_Low = -110; // HMA extern int MaMetod=2; extern int MaPeriod=6; extern int MaMetod2=3; extern int MaPeriod2=2; // Stoch extern double First_Stoch_KP = 4; // RSI //extern string SignalRSI = "RSI settings"; //extern int rsitimeframe1=1; //extern int rsiperiod1=6; //extern int rsitimeframe2=5; //extern int rsiperiod2=10; //extern int rsitimeframe3=15; //extern int rsiperiod3=20; //extern int rsilevel1=92; //extern int rsilevel2=128; //extern int shift2=0; // highlow extern int PipsAdd = 4; // macd //extern double MACDOpenLevel = 3; //extern double MACDCloseLevel = 2; //extern double MATrendPeriod = 24; extern string SignalClose = "Close settings"; extern int Close_Williams = 0; extern int Williams_Close_Buy = 80; extern int Williams_Close_Sell = 40; extern int Only_Profit = 5; extern int Close_CCI = 0; extern int CCI_Close_Buy = 20; extern int CCI_Close_Sell = -70; extern int MagicNumber = 19777; extern int MagicNumber2 = 18777; extern int MagicNumber3 = 17771; extern int MagicNumber4 = 16777; extern string TradeComment = "BBQ"; double point; int digits,i,D; int BarCount; int Current; int bc=-1,tpb,tps,cnt,total; int gi_240 = 0; int gi_244 = 0; int gi_224 = 0; int gi_228 = 6; int gi_328; int g_error_332; double g_price_336; double g_price_344; double g_price_352; double gd_360; double gd_368; double g_iclose_376; double g_iatr_384; double g_iwpr_392; double g_icci_400; double g_ima_408; int g_datetime_420; // pivot bool AsLongAs=true; int ExtFormula=0; datetime PreviousBarTime1; datetime PreviousBarTime2; datetime LastTradeTime = 0; int ThisBarTrade = 0; int bartime = 0; //+------------------------------------------------------------------+ //| Time Filter | //+------------------------------------------------------------------+ bool TradeSession() { int Hour_Start_Trade; int Hour_Stop_Trade; Hour_Start_Trade = HourStartGMT + ServerTimeZone; Hour_Stop_Trade = HourStopGMT + ServerTimeZone; if (Hour_Start_Trade < 0)Hour_Start_Trade = Hour_Start_Trade + 24; if (Hour_Start_Trade >= 24)Hour_Start_Trade = Hour_Start_Trade - 24; if (Hour_Stop_Trade > 24)Hour_Stop_Trade = Hour_Stop_Trade - 24; if (Hour_Stop_Trade <= 0)Hour_Stop_Trade = Hour_Stop_Trade + 24; if ((UseFridayFinalTradeTime && (Hour()>=FridayFinalHourGMT + ServerTimeZone) && DayOfWeek()==5)||DayOfWeek()==0)return (FALSE); // Friday Control if((TimeControl(Hour_Start_Trade,Hour_Stop_Trade)!=1 && TimeControl==1 && Hour_Start_TradeHour_Stop_Trade) ||TimeControl==0)return (TRUE); // "Trading Time"; return (FALSE); // "Non-Trading Time"; } int TimeControl(int StartHour, int EndHour) { if (Hour()>=StartHour && Hour()< EndHour) { return(0); } return(1); } //+------------------------------------------------------------------+ //| Lots Sizes and Automatic Money Management | //+------------------------------------------------------------------+ double GetLots() { if (UseMM) { double a, maxLot, minLot; a = (PercentageMM * AccountFreeMargin() / 100000); double LotStep = MarketInfo(Symbol(), MODE_LOTSTEP); maxLot = MarketInfo(Symbol(), MODE_MAXLOT ); minLot = MarketInfo(Symbol(), MODE_MINLOT ); a = MathFloor(a / LotStep) * LotStep; if (a > maxLot) return(maxLot); else if (a < minLot) return(minLot); else return(a); } else return(Lots); } //+------------------------------------------------------------------+ //| close by signal | //+------------------------------------------------------------------+ bool close_signal(int ai_0, double ad_4) { if (ai_0 == 0) { if (Close_Williams > 0 && (-1.0 * g_iwpr_392) < Williams_Close_Buy && Only_Profit < 0 || Bid > ad_4 + Only_Profit * gi_328 * Point) return (1); if (Close_CCI > 0 && g_icci_400 > CCI_Close_Buy) return (1); if (gi_224 > 0 && g_iatr_384 < gi_228 * gi_328 * Point) return (1); if (gi_240 == 1 && iClose(NULL, 0, 1) < g_ima_408) return (1); if (gi_244 == 1 && g_ima_408 < iMA(NULL, 0, MA_Period, 0, MODE_SMMA, PRICE_CLOSE, 2)) return (1); } if (ai_0 == 1) { if (Close_Williams > 0 && (-1.0 * g_iwpr_392) > Williams_Close_Sell && Only_Profit < 0 || Ask < ad_4 - Only_Profit * gi_328 * Point) return (1); if (Close_CCI > 0 && g_icci_400 < CCI_Close_Sell) return (1); if (gi_224 > 0 && g_iatr_384 < gi_228 * gi_328 * Point) return (1); if (gi_240 == 1 && iClose(NULL, 0, 1) > g_ima_408) return (1); if (gi_244 == 1 && g_ima_408 > iMA(NULL, 0, MA_Period, 0, MODE_SMMA, PRICE_CLOSE, 2)) return (1); } return (0); } //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //Calculate for 4 or 5 digits broker if(Digits==5||Digits==3){ D=10;} else{D=1;} if(Digits<4) { point=0.01; digits=2; gi_328 = 10; } else { point=0.0001; digits=4; gi_328 = 1; } return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| MaxSpread | //+------------------------------------------------------------------+ bool Mspread() { double Spread = Ask-Bid; if(Spread <= MaxSpread * point)return (TRUE); return (FALSE); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int cnt, ticket, ticket2, ticket3, ticket4, total; double SL,TP; total=OrdersTotal(); int OpenedOrders=0; //+------------------------------------------------------------------+ //| newsfilter | //+------------------------------------------------------------------+ bool ContinueTrading=true; if(AvoidNews && !IsTesting()) { static int PrevMinute=-1; int MinSinceNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,1,0); int MinToNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,1,1); int ImpactSinceNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,2,0); int ImpactToNews=iCustom(NULL,0,"FFCal",true,true,false,true,true,2,1); if(Minute()!=PrevMinute) { PrevMinute=Minute(); if((MinToNews<=MinsBeforeNews && ImpactToNews>=MinimumImpact) || (MinSinceNews<=MinsAfterNews && ImpactSinceNews>=MinimumImpact))ContinueTrading=false; } } //+------------------------------------------------------------------+ //| trailing | //+------------------------------------------------------------------+ createlstoploss(StopLoss); createltakeprofit(TakeProfit); createsstoploss(StopLoss); createstakeprofit(TakeProfit); if(TrailingStop>0)MoveTrailingStop(); if(BreakEven>0)MoveBreakEven(); //+------------------------------------------------------------------+ //| signals | //+------------------------------------------------------------------+ int sign1, sign2, sign3, sign4, sign5, sign6; // wsr signals g_iclose_376 = iClose(NULL, 0, 1); g_ima_408 = iMA(NULL, 0, MA_Period, 0, MODE_SMMA, PRICE_CLOSE, 1); g_iwpr_392 = iWPR(NULL, 0, Williams_Period, 1); g_iatr_384 = iATR(NULL, 0, ATR_Period, 1); g_icci_400 = iCCI(NULL, 0, CCI_Period, PRICE_TYPICAL, 1); g_datetime_420 = iTime(Symbol(), 0, 0); // buy if (g_iclose_376 > g_ima_408 + Slippage_MA * gi_328 * point && g_iwpr_392 < (-1 * Level_Low) && g_icci_400 < Level_CCI_Low && g_iatr_384 > Level_ATR_Stop * gi_328 * point) sign1=1; // sell if (g_iclose_376 < g_ima_408 - Slippage_MA * gi_328 * point && g_iwpr_392 > (-1 * Level_High) && g_icci_400 > Level_CCI_High && g_iatr_384 > Level_ATR_Stop * gi_328 * point) sign1=-1; // Pivot int limit=1; for(int i=1;i<=limit;i++) { double DPa=iCustom(Symbol(),0,"DailyPivot_Shift",ServerTimeZone,ExtFormula,0,i); double DP=iCustom(Symbol(),0,"DailyPivot_Shift",ServerTimeZone,ExtFormula,0,0); string BUY="false"; string SELL="false"; if((AsLongAs==false&&OpenDP)||(AsLongAs==true&&Open[0]>DP))BUY="true"; if((AsLongAs==false&&Open>DPa&&Open[0]80 && STOM2>80 && STOM3>80 && STOM4>80 && STOM5>80 && STOM6>80 && STOM7>80 && STOM8>80 && STOM9>80 && STOM10>80) sign3=1; // HeikenAshi double HA1a=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,2,i+1); double HA2a=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,3,i+1); double HA1=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,2,i); double HA2=iCustom(Symbol(),0,"Heiken Ashi MA",MaMetod,MaPeriod,MaMetod2,MaPeriod2,3,i); string BUYh="false"; string SELLh="false"; if(HA2aHA1)BUYh="true"; if(HA2a>HA1a&&HA2rsilevel2) sign5=-1; */ // highlow GlobalVariableSet("uplevel", High[1] + PipsAdd*point); GlobalVariableSet("dnlevel", Low[1] - PipsAdd*point); /* // macd double MacdCurrent, MacdPrevious, SignalCurrent; double SignalPrevious, MaCurrent, MaPrevious; MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1); SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0); SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1); MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0); MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1); if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious(MACDOpenLevel*point) && MaCurrent>MaPrevious && sign5==1) sign4=1; if(MacdCurrent>0 && MacdCurrentSignalPrevious && MacdCurrent>(MACDOpenLevel*point) && MaCurrent Level_ATR_Stop * gi_328 * point) { Buy2="true"; Buy3Check="false"; } if (SELLh=="true" && sign3==-1 && sign5==-1 && sign2==-1 && sign2==-1 && g_iatr_384 > Level_ATR_Stop * gi_328 * point) { Sell2="true"; Sell3Check="false"; } */ // stoporders if (BUYh=="true" && Bid>=GlobalVariableGet("uplevel") && bartime != Time[0] && sign2==1 && g_iatr_384 > Level_ATR_Stop * gi_328 * point) { Buy3="true"; Buy4Check="false"; } if (SELLh=="true" && Bid<=GlobalVariableGet("dnlevel") && bartime != Time[0] && sign2==-1 && g_iatr_384 > Level_ATR_Stop * gi_328 * point) { Sell3="true"; Sell4Check="false"; } //+------------------------------------------------------------------+ //| count open orders | //+------------------------------------------------------------------+ int totalo; totalo=0; for(int io=0;ioMinutes_2delete*60 || Buy1=="true") && OrderType()==OP_BUYSTOP) { OrderDelete(OrderTicket()); } else if((TimeCurrent()-OrderOpenTime()>Minutes_2delete*60 || Sell1=="true") && OrderType()==OP_SELLSTOP) { OrderDelete( OrderTicket() ); } } } //+------------------------------------------------------------------+ //| open orders | //+------------------------------------------------------------------+ // double MyAsk = Ask + Distance*point; double MyBid = Bid - Distance*point; double MyAsk2 = Ask + Distance*point; double MyBid2 = Bid - Distance*point; if (ThisBarTrade != Bars) { // wsfr indis standardorder //////////////////////// // buyorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && Buy1=="true") { ThisBarTrade = Bars; ticket=OrderSend(Symbol(),OP_BUY,GetLots(),Ask,SlipPage,0,0,TradeComment,MagicNumber,0,Green); LastTradeTime = LocalTime(); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sellorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && Sell1=="true") { ThisBarTrade = Bars; ticket=OrderSend(Symbol(),OP_SELL,GetLots(),Bid,SlipPage,0,0,TradeComment,MagicNumber,0,Red); LastTradeTime = LocalTime(); if(ticket<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } /* // rsi stoch standardorder //////////////////////// // buyorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && totalo2<1 && totalo3<1 && Buy2=="true" && Buy2Check=="true") { ThisBarTrade = Bars; ticket2=OrderSend(Symbol(),OP_BUY,GetLots(),Ask,SlipPage,0,0,TradeComment,MagicNumber2,0,Green); LastTradeTime = LocalTime(); if(ticket2<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sellorder if (TradeSession() && ContinueTrading && Mspread() && totalo<1 && totalo2<1 && totalo3<1 && Sell2=="true" && Sell2Check=="true") { ThisBarTrade = Bars; ticket2=OrderSend(Symbol(),OP_SELL,GetLots(),Bid,SlipPage,0,0,TradeComment,MagicNumber2,0,Red); LastTradeTime = LocalTime(); if(ticket2<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } */ // highlow stoporder //////////////////////// // buy stoporder if (Buy3=="true" && totalp<1 && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket3 = OrderSend(Symbol(), OP_BUYSTOP, GetLots(), MyAsk, SlipPage, 0, 0, TradeComment, MagicNumber3, expire, Lime); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket3<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sell stoporder if (Sell3=="true" && totalp<1 && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket3 = OrderSend(Symbol(), OP_SELLSTOP, GetLots(), MyBid, SlipPage, 0, 0, TradeComment, MagicNumber3, expire, Orange); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket3<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } /* // macd stoporder //////////////////////// // buy stoporder if (sign4==1 && sign2==1 && totalp<1 && totalo<1 && totalo2<1 && totalo3<1 && totalo4<1 && Buy2Check=="true" && Buy4Check=="true" && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket4 = OrderSend(Symbol(), OP_BUYSTOP, GetLots(), MyAsk2, SlipPage, 0, 0, TradeComment, MagicNumber4, expire, Lime); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket4<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } // Sell stoporder if (sign4==-1 && sign2==-1 && totalp<1 && totalo<1 && totalo2<1 && totalo3<1 && totalo4<1 && Sell2Check=="true" && Sell4Check=="true" && TradeSession() && ContinueTrading && Mspread()) { ThisBarTrade = Bars; ticket4 = OrderSend(Symbol(), OP_SELLSTOP, GetLots(), MyBid2, SlipPage, 0, 0, TradeComment, MagicNumber4, expire, Orange); LastTradeTime = LocalTime(); Sleep(10000); RefreshRates(); if(ticket4<0) { Print("OrderSend failed with error #",GetLastError()); return(0); } } */ } //+------------------------------------------------------------------+ //| open orders end | //+------------------------------------------------------------------+ return(0); } //+------------------------------------------------------------------+ //| trailing functions 1 | //+------------------------------------------------------------------+ void MoveTrailingStop() { int cnt,total=OrdersTotal(); for(cnt=0; cnt0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,digits)) { if((NormalizeDouble(OrderStopLoss(),digits)0&&NormalizeDouble(Bid+TrailingStep*point,digits)(NormalizeDouble(Ask+TrailingStop*point,digits)))||(OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,digits),OrderTakeProfit(),0,Red); } } } } } } return(0); } //+------------------------------------------------------------------+ //| breakeven 1 | //+------------------------------------------------------------------+ void MoveBreakEven() { int cnt,total=OrdersTotal(); for(cnt=0; cnt0) { if(NormalizeDouble((Bid-OrderOpenPrice()),digits)>BreakEven*point) { if(NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),digits)<0) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+movestopto*point,digits),OrderTakeProfit(),0,Blue); } } } } else { if(BreakEven>0) { if(NormalizeDouble((OrderOpenPrice()-Ask),digits)>BreakEven*point) { if(NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),digits)<0) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-movestopto*point,digits),OrderTakeProfit(),0,Red); } } } } } } } return(0); } // add TP & SL void createlstoploss(double StopLoss){ RefreshRates(); for(int i=0;i
个性签名

韬客社区www.talkfx.co

StanleyM
注册时间2010-04-16
发表于:2014-04-05 08:54来自移动端只看该作者
26楼
用EA很多年的感悟,始终挣钱的EA应该不存在。但可以用自己的EA把自己需要的市场行情摘要出来。
个性签名

盈亏比+胜率

kimfufree
注册时间2007-01-29
天秤座
发表于:2014-04-05 13:40只看该作者
27楼
EA有生命期,支持把操作手法写成EA,一个是可以检验以前,另外一个是可以提前把操作要素体现出来作更直观的操作判断依据。
  • 1
  • 2
前往
共 26 条

本站免责声明:

1、本站所有广告及宣传信息均与韬客无关,如需投资请依法自行决定是否投资、斟酌资金安全及交易亏损风险;

2、韬客是独立的、仅为投资者提供交流的平台,网友发布信息不代表韬客的观点与意思表示,所有因网友发布的信息而造成的任何法律后果、风险与责任,均与韬客无关;

3、金融交易存在极高法律风险,未必适合所有投资者,请不要轻信任何高额投资收益的诱导而贸然投资;投资保证金交易导致的损失可能超过您投入的资金和预期。请您考虑自身的投资经验及风险承担能力,进行合法、理性投资;

4、所有投资者的交易帐户应仅限本人使用,不应交由第三方操作,对于任何接受第三方喊单、操盘、理财等操作的投资和交易,由此导致的任何风险、亏损及责任由投资者个人自行承担;

5、韬客不隶属于任何券商平台,亦不受任何第三方控制,韬客不邀约客户投资任何保证金交易,不接触亦不涉及投资者的任何资金及账户信息,不代理任何交易操盘行为,不向客户推荐任何券商平台,亦不存在其他任何推荐行为。投资者应自行选择券商平台,券商平台的任何行为均与韬客无关。投资者注册及使用韬客即表示其接受和认可上述声明,并自行承担法律风险。

版权所有:韬客外汇论坛 www.talkfx.com 联络我们:[email protected]