//+--------------------------------------------------------------------------+ //| FractalTakeOut_v1a.mq4 | //| Copyright © Mar/30/2007, C.O.P.Y.C.A.T. | Copy Over Paste Yippee Code Assembly Technician //| 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 int OpenTradeBuffer = 1; extern int CloseTradeBuffer = 1; 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+1) > 0 ) LastVisableHighFractal = iFractals(Symbol(),0,MODE_UPPER, b+1); if ( iFractals(Symbol(),0,MODE_LOWER, b+1) > 0 ) LastVisableLowFractal = iFractals(Symbol(),0,MODE_LOWER, b+1); } 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+(CloseTradeBuffer*Point) || 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-(CloseTradeBuffer*Point) || OrderProfit() <= (-StopLoss$) ) { OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,White); } } } if ( !HighBreaker && High[0] > LastVisableHighFractal ) { HighPrice = LastVisableHighFractal; HighBreaker = true; 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+(OpenTradeBuffer*Point) && BuyTradeTime < Time[0] ) { ticket = OrderSend(Symbol(),OP_BUY,0.10,Ask,0,0,0,"FractalTakeOut_v1a"+MagicNumber,MagicNumber,0,Aqua); BuyTradeTime = TimeCurrent(); if( ticket < 1 ) { Print("OrderSend failed with error #",GetLastError()); BuyTradeTime = 0; } } if ( LowBreaker && Close[0] >= Ma3High-(OpenTradeBuffer*Point) && SellTradeTime < Time[0] ) { ticket = OrderSend(Symbol(),OP_SELL,0.10,Bid,0,0,0,"FractalTakeOut_v1a"+MagicNumber,MagicNumber,0,DeepPink); SellTradeTime = TimeCurrent(); if( ticket < 1 ) { Print("OrderSend failed with error #",GetLastError()); SellTradeTime = 0; } } Comment("\n"," Last High Fractal TakeOut Price : ",HighPrice, "\n"," Buy Mode : ",HighBreaker, "\n", "\n"," Last Low Fractal TakeOut Price : ",LowPrice, "\n"," Sell Mode : ",LowBreaker); //---- return(0); } //+------------------------------------------------------------------+