/*-----------------------------+ | | | Shared by www.Aptrafx.com | | | +------------------------------*/ //+----------------------------------------------------------+ //| Copyright 2005, Gordago Software Corp. | //| http://www.gordago.com/ | //| version 2.0 | //+----------------------------------------------------------+ #property copyright "Copyright 2005, Gordago Software Corp." #property link "http://www.gordago.com" #define MIN_STOPLOSS_POINT 10 #define MIN_TAKEPROFIT_POINT 10 #define MAGIC 0 extern string sNameExpert = "Generate from Gordago"; extern int nAccount =0; extern double dBuyStopLossPoint = 0; extern double dSellStopLossPoint = 0; extern double dBuyTakeProfitPoint = 0; extern double dSellTakeProfitPoint = 0; extern double dBuyTrailingStopPoint = 30; extern double dSellTrailingStopPoint = 30; extern double dLots = 0.10; extern int nSlippage = 1; extern bool lFlagUseHourTrade = False; extern int nFromHourTrade = 0; extern int nToHourTrade = 23; extern bool lFlagUseSound = False; extern string sSoundFileName = "alert.wav"; extern color colorOpenBuy = Blue; extern color colorCloseBuy = Aqua; extern color colorOpenSell = Red; extern color colorCloseSell = Aqua; void deinit() { Comment(""); } //+----------------------------------------------------------+ //| | //+----------------------------------------------------------+ int start(){ if (lFlagUseHourTrade){ if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) { Comment("Time for trade has not come else!"); return(0); } } if(Bars < 100){ Print("bars less than 100"); return(0); } if (nAccount > 0 && nAccount != AccountNumber()){ Comment("Trade on account :"+AccountNumber()+" FORBIDDEN!"); return(0); } if((dBuyStopLossPoint > 0 && dBuyStopLossPoint < MIN_STOPLOSS_POINT) || (dSellStopLossPoint > 0 && dSellStopLossPoint < MIN_STOPLOSS_POINT)){ Print("StopLoss less than " + MIN_STOPLOSS_POINT); return(0); } if((dBuyTakeProfitPoint > 0 && dBuyTakeProfitPoint < MIN_TAKEPROFIT_POINT) || (dSellTakeProfitPoint > 0 && dSellTakeProfitPoint < MIN_TAKEPROFIT_POINT)){ Print("TakeProfit less than " + MIN_TAKEPROFIT_POINT); return(0); } double diMA0=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0); double diEnvelopes1=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,1,MODE_LOWER,0); double diMA2=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0); double diEnvelopes3=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_LOWER,0); double diMA4=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0); double diEnvelopes5=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_LOWER,0); double diMA6=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0); double diMA7=iMA(NULL,60,220,0,MODE_EMA,PRICE_CLOSE,0); double diMA8=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0); double diEnvelopes9=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_UPPER,0); double diMA10=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,0); double diEnvelopes11=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_UPPER,0); double diMA12=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0); double diEnvelopes13=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,1,MODE_UPPER,0); double diMA14=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0); double diEnvelopes15=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_UPPER,0); double diMA16=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0); double diEnvelopes17=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_UPPER,0); double diMA18=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0); double diMA19=iMA(NULL,60,220,0,MODE_EMA,PRICE_CLOSE,0); double diMA20=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0); double diEnvelopes21=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_LOWER,0); double diMA22=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,0); double diEnvelopes23=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_LOWER,0); double diMA24=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1); double diEnvelopes25=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,1,MODE_LOWER,0); double diMA26=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1); double diEnvelopes27=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_LOWER,0); double diMA28=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1); double diEnvelopes29=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_LOWER,0); double diMA30=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1); double diMA31=iMA(NULL,60,220,0,MODE_EMA,PRICE_CLOSE,0); double diMA32=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1); double diEnvelopes33=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_UPPER,0); double diMA34=iMA(NULL,60,2,0,MODE_EMA,PRICE_CLOSE,1); double diEnvelopes35=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_UPPER,0); double diMA36=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1); double diEnvelopes37=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,1,MODE_UPPER,0); double diMA38=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1); double diEnvelopes39=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_UPPER,0); double diMA40=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1); double diEnvelopes41=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_UPPER,0); double diMA42=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1); double diMA43=iMA(NULL,60,220,0,MODE_EMA,PRICE_CLOSE,0); double diMA44=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1); double diEnvelopes45=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.3,MODE_LOWER,0); double diMA46=iMA(NULL,60,2,0,MODE_EMA,PRICE_OPEN,1); double diEnvelopes47=iEnvelopes (NULL,60,220,MODE_EMA,0,PRICE_CLOSE,0.7,MODE_LOWER,0); if(AccountFreeMargin() < (1000*dLots)){ Print("We have no money. Free Margin = " + AccountFreeMargin ()); return(0); } bool lFlagBuyOpen = false, lFlagSellOpen = false, lFlagBuyClose = false, lFlagSellClose = false; lFlagBuyOpen = ((diMA0>diEnvelopes1 && diMA24<diEnvelopes25) || (diMA2>diEnvelopes3 && diMA26<diEnvelopes27) || (diMA4<diEnvelopes5 && diMA28<diEnvelopes29) || (diMA6>diMA7 && diMA30<diMA31) || (diMA8>diEnvelopes9 && diMA32<diEnvelopes33) || (diMA10>diEnvelopes11 && diMA34<diEnvelopes35)); lFlagSellOpen = ((diMA12<diEnvelopes13 && diMA36>diEnvelopes37) || (diMA14<diEnvelopes15 && diMA38>diEnvelopes39) || (diMA16<diEnvelopes17 && diMA40>diEnvelopes41) || (diMA18<diMA19 && diMA42>diMA43) || (diMA20<diEnvelopes21 && diMA44>diEnvelopes45) || (diMA22<diEnvelopes23 && diMA46>diEnvelopes47)); lFlagBuyClose = False; lFlagSellClose = False; if (!ExistPositions()){ if (lFlagBuyOpen){ OpenBuy(); return(0); } if (lFlagSellOpen){ OpenSell(); return(0); } } if (ExistPositions()){ if(OrderType()==OP_BUY){ if (lFlagBuyClose){ bool flagCloseBuy = OrderClose(OrderTicket(), OrderLots (), Bid, nSlippage, colorCloseBuy); if (flagCloseBuy && lFlagUseSound) PlaySound(sSoundFileName); return(0); } } if(OrderType()==OP_SELL){ if (lFlagSellClose){ bool flagCloseSell = OrderClose(OrderTicket(), OrderLots (), Ask, nSlippage, colorCloseSell); if (flagCloseSell && lFlagUseSound) PlaySound(sSoundFileName); return(0); } } } if (dBuyTrailingStopPoint > 0 || dSellTrailingStopPoint > 0){ for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { bool lMagic = true; if (MAGIC > 0 && OrderMagicNumber() != MAGIC) lMagic = false; if (OrderSymbol()==Symbol() && lMagic) { if (OrderType()==OP_BUY && dBuyTrailingStopPoint > 0) { if (Bid-OrderOpenPrice() > dBuyTrailingStopPoint*Point) { if (OrderStopLoss()<Bid- dBuyTrailingStopPoint*Point) ModifyStopLoss(Bid- dBuyTrailingStopPoint*Point); } } if (OrderType()==OP_SELL) { if (OrderOpenPrice()- Ask>dSellTrailingStopPoint*Point) { if (OrderStopLoss() >Ask+dSellTrailingStopPoint*Point || OrderStopLoss()==0) ModifyStopLoss (Ask+dSellTrailingStopPoint*Point); } } } } } } return (0); } bool ExistPositions() { for (int i=0; i<OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { bool lMagic = true; if (MAGIC > 0 && OrderMagicNumber() != MAGIC) lMagic = false; if (OrderSymbol()==Symbol() && lMagic) { return(True); } } } return(false); } void ModifyStopLoss(double ldStopLoss) { bool lFlagModify = OrderModify(OrderTicket(), OrderOpenPrice(), ldStopLoss, OrderTakeProfit(), 0, CLR_NONE); if (lFlagModify && lFlagUseSound) PlaySound(sSoundFileName); } void OpenBuy() { double dStopLoss = 0, dTakeProfit = 0; if (dBuyStopLossPoint > 0) dStopLoss = Bid-dBuyStopLossPoint*Point; if (dBuyTakeProfitPoint > 0) dTakeProfit = Ask + dBuyTakeProfitPoint * Point; int numorder = OrderSend(Symbol(), OP_BUY, dLots, Ask, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy); if (numorder > -1 && lFlagUseSound) PlaySound(sSoundFileName); } void OpenSell() { double dStopLoss = 0, dTakeProfit = 0; if (dSellStopLossPoint > 0) dStopLoss = Ask+dSellStopLossPoint*Point; if (dSellTakeProfitPoint > 0) dTakeProfit = Bid-dSellTakeProfitPoint*Point; int numorder = OrderSend(Symbol(),OP_SELL, dLots, Bid, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenSell); if (numorder > -1 && lFlagUseSound) PlaySound(sSoundFileName); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
It Closes Orders by itself
Checks for the total of open orders
It can change open orders parameters, due to possible stepping strategy
Other Features:
It plays sound alerts