//+------------------------------------------------------------------+ //| PriceChannelExpert_v4.mq4 | //| Copyright © 2006, Forex-TSD.com | //| Written by IgorAD,igorad2003@yahoo.co.uk | //| http://finance.groups.yahoo.com/group/TrendLaboratory | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, Forex-TSD.com " #property link "http://www.forex-tsd.com/" #include #include //---- input parameters extern string Expert_Name = "---- PriceChannelExpert_v4 ----"; extern int Magic = 10000; extern int Slippage = 6; extern bool Trace = false; // Trace Switch extern string Main_data = " Trade Volume & Trade Method"; extern double Lots = 0.1; extern double TakeProfit = 100; // Take Profit Value extern double InitialStop = 50; // Initial Stop Value extern bool TrailingStop = false; // Trailing Stop Switch extern bool SwingTrade = false; // Swing Trade Switch extern bool PendingOrder = false; // PendingOrder/InstantExecution Switch extern double PendOrdGap = 10; // Gap from High/Low for Pending Orders extern double BreakEven = 30; // BreakEven Level in pips extern double BreakEvenGap = 0; // Pips when BreakEven will be reached extern string Calc_data = " Price Channel Parameters "; extern int MainTimeFrame = 1440; // Large Time Frame in min extern int MainChanPeriod = 9; // Price Channel Period for Large Time Frame extern double MainRisk = 0.3; // Overbought/Oversold Level 0...0.5 for Large Time Frame extern int ChanPeriod = 9; // Price Channel Period for current Time Frame extern double Risk = 0.3; // Overbought/Oversold Level 0...0.5 for current Time Frame extern string MM_data = " MoneyManagement by L.Williams "; extern bool MM = false; // ΜΜ Switch extern double MMRisk = 0.15; // Risk Factor extern double MaxLoss = 1000; // Maximum Loss by 1 Lot int MainTrend=0, Trend=0, PrevTrend=0, digit, Signal=0, b=0, cnt=0, Kz=0, ticket=0; double Mainsmin1,Mainsmax1,Mainbsmin1=0,Mainbsmax1=0,Mainbsmin2=0,Mainbsmax2=0, MainHigh=0, MainLow=0, MainClose1 = 0, smin1=0,smax1=0,bsmin1=0,bsmax1=0,bsmin2=0,bsmax2=0, SellStop,BuyStop; double MainTFdata[][6]; bool BuyInTrade = false, SellInTrade = false; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } // ---- Scan Trades int ScanTrades() { int total = OrdersTotal(); int numords = 0; for(int cnt=0; cnt 0) BuyStop = BuyPrice - InitialStop*Point; else BuyStop=bsmin1; if (TakeProfit > 0) BuyProfit= BuyPrice + TakeProfit*Point; else BuyProfit=0; ticket = OrderSend(Symbol(),Mode, MoneyManagement ( MM, Lots, MMRisk, MaxLoss), NormalizeDouble(BuyPrice, digit), Slippage, NormalizeDouble(BuyStop , digit), NormalizeDouble(BuyProfit , digit), "buy",Magic,0,Blue); if(ticket<0) { Print("BUY : OrderSend failed with error #",GetLastError()); //return(0); } if (PendingOrder && GetLastError() == 130) int ticket2=OrderSend(Symbol(),OP_BUY, MoneyManagement ( MM, Lots, MMRisk, MaxLoss), Ask, Slippage, NormalizeDouble(BuyStop , digit), NormalizeDouble(BuyProfit , digit), "buy",Magic,0,Blue); BuyInTrade=true; SellInTrade = false; Kz=1; Signal = 0; return(0); } void PendOrdsDel() { if(Close[1]< 0.5*(bsmin1+bsmax1))int PendClose=1; if(Close[1]> 0.5*(bsmin1+bsmax1)) PendClose=-1; for (cnt=0;cnt0) { OrderDelete(OrderTicket()); return(0); } else if (mode==OP_SELLSTOP && PendClose<0) { OrderDelete(OrderTicket()); return(0); } } } } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { int total,ticket; //---- digit = MarketInfo(Symbol(),MODE_DIGITS); if ( Trace ) SetTrace(); if (Bars>b) { b=Bars; PriceChannel(); if (MainTimeFrame > 0) MainPriceChannel(); else MainTrend = Trend; Print(" Trend = ",Trend, " PrevTrend = ",PrevTrend," MainTrend=",MainTrend, " Signal=",Signal); PendOrdsDel(); TradeSignal(); CloseTrade(); if (BreakEven >0) BreakEvenStop(); if (TrailingStop) TrailStop(); //Print(" Signal = ",Signal); if (SwingTrade) { if (ScanTrades()<1 && Signal>0 && !BuyInTrade) BuyOrdOpen(); if (ScanTrades()<1 && Signal<0 && !SellInTrade ) SellOrdOpen(); } else { if (ScanTrades()<1 && Signal>0) BuyOrdOpen(); if (ScanTrades()<1 && Signal<0) SellOrdOpen(); } }//if (Bars>b) //---- return(0); } //start() //+------------------------------------------------------------------+