//+--------------------------------------------------------------------------+ //| FractalTakeOut_v1.mq4 | //| Copyright © Mar/30/2007, C.O.P.Y.C.A.T. | //| http://finance.groups.yahoo.com/group/MetaTrader_Experts_and_Indicators/ | //+--------------------------------------------------------------------------+ //Built for Peter Henry , as described in the thread titled "Simple Fractal trading system" @ http://finance.groups.yahoo.com/group/MetaTrader_Experts_and_Indicators/ #property copyright "Copyright © Mar/30/2007, C.O.P.Y.C.A.T." #property link "http://finance.groups.yahoo.com/group/MetaTrader_Experts_and_Indicators/" extern double StopLoss$ = 10.00; // == $0.00 , Not Pips extern int MagicNumber = 1913; double HighPrice = 0; bool HighBreaker = false; double LowPrice = 0; bool LowBreaker = false; int i; int ticket = 0; double BuyTradeTime=0; double SellTradeTime=0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if (!IsDemo())return(0); double Ma3High = iMA(Symbol(),0,3,0,MODE_SMA,PRICE_HIGH,0); double Ma3Low = iMA(Symbol(),0,3,0,MODE_SMA,PRICE_LOW ,0); double LastVisableHighFractal = 0, LastVisableLowFractal = 0; for (int b=Bars-10;b>=0;b--) { if (iFractals(Symbol(),0,MODE_UPPER, b) > 0) LastVisableHighFractal = iFractals(Symbol(),0,MODE_UPPER, b); if (iFractals(Symbol(),0,MODE_LOWER, b) > 0) LastVisableLowFractal = iFractals(Symbol(),0,MODE_LOWER, b); } ticket = 0; BuyTradeTime=0; SellTradeTime=0; for (i = 0; i < OrdersHistoryTotal() ; i++) { OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if ( OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber ) { BuyTradeTime = OrderOpenTime(); } if ( OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber ) { SellTradeTime = OrderOpenTime(); } } for (i = 0; i < OrdersTotal() ; i++) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if ( OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == MagicNumber ) { if(OrderOpenTime()>= BuyTradeTime) { BuyTradeTime = OrderOpenTime(); } else { BuyTradeTime = BuyTradeTime; } if(Close[0]>=Ma3High || OrderProfit()<=(-StopLoss$)) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,White); } } if ( OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == MagicNumber ) { if(OrderOpenTime()>= SellTradeTime) { SellTradeTime = OrderOpenTime(); } else { SellTradeTime = SellTradeTime; } if(Close[0]<=Ma3Low || OrderProfit()<=(-StopLoss$)) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,White); } } } if (HighBreaker && HighPrice < LastVisableHighFractal) { HighBreaker = false; } if (!HighBreaker && High[0] > LastVisableHighFractal) { HighPrice = LastVisableHighFractal; HighBreaker = true; LowBreaker = false; } if (LowBreaker && LowPrice > LastVisableLowFractal) { LowBreaker = false; } if (!LowBreaker && Low[0] < LastVisableLowFractal) { LowPrice = LastVisableLowFractal; HighBreaker = false; LowBreaker = true; } if (HighPrice == 0) HighBreaker = false; if (LowPrice == 0) LowBreaker = false; if (HighBreaker && Close[0] < Ma3Low && BuyTradeTime < Time[0]) { ticket = OrderSend(Symbol(),OP_BUY,0.10,Ask,0,0,0,"FractalTakeOut_v1"+MagicNumber,MagicNumber,0,Aqua); BuyTradeTime = TimeCurrent(); if(ticket < 1) { Print("OrderSend failed with error #",GetLastError()); BuyTradeTime = 0; } } if (LowBreaker && Close[0] > Ma3High && SellTradeTime < Time[0]) { ticket = OrderSend(Symbol(),OP_SELL,0.10,Bid,0,0,0,"FractalTakeOut_v1"+MagicNumber,MagicNumber,0,DeepPink); SellTradeTime = TimeCurrent(); if(ticket < 1) { Print("OrderSend failed with error #",GetLastError()); SellTradeTime = 0; } } Comment("\n"," Last Visable High Fractal Price : ",LastVisableHighFractal, "\n"," Last High TakeOut Price : ",HighPrice, "\n"," Buy Mode : ",HighBreaker, "\n", "\n"," Last Visable Low Fractal Price : ",LastVisableLowFractal, "\n"," Last Low TakeOut Price : ",LowPrice, "\n"," Sell Mode : ",LowBreaker); //---- return(0); } //+------------------------------------------------------------------+