// // 4X Lab.NET © Copyright 2005-2006 ASCSE LLC // http://www.4xlab.net // email: 4xlab@4xlab.net // using System; namespace FourPercentShell { // UNMODIFIED CLASS, SAME AS IN 4XLAB.NET public class fPercentageChange : ForexObject { double iPercentage; double iMin; double iMax; bool FirstTick; sTick Tick; double Spread; public fPercentageChange() { } public override void Init(string pParameters) { this.InitializeParameters(pParameters,"PERCENT:0.001;"); iPercentage = PParser.GetDouble("PERCENT",0); Framework.TickServer.RegisterTickListener("System","*",this); Framework.WriteGraphLine("InTrade,Margin,Tick,Min,MinTh,Max,MaxTh"); FirstTick = true; } public override void ReceiveTick(sTick pTick) { Spread = pTick.Ask - pTick.Bid; Tick = pTick; DecisionFunction(); } public override void ReceiveCandle(sCandle pCandle, int pPeriod, string pCBTitle) { } private void DecisionFunction() { if (FirstTick) { FirstTick = false; iMin = Tick.Bid; iMax = Tick.Bid; } else { if (Framework.Account.InTrade()==1) { if (Tick.Bid > iMax) { iMax = Tick.Bid; } if ((iMax-Tick.Bid) > iPercentage*iMax) { Framework.Account.ExitTrade(); Framework.Account.EnterTrade(-1); iMin = Tick.Bid; iMax = 0; } } if (Framework.Account.InTrade()==-1) { if (Tick.Bid < iMin) { iMin = Tick.Bid; } if ((Tick.Bid-iMin) > iPercentage*iMin) { Framework.Account.ExitTrade(); Framework.Account.EnterTrade(1); iMax = Tick.Bid; iMin = 0; } } if (Framework.Account.InTrade()==0) { if ((Tick.Bid-iMin) > iPercentage*iMin) { Framework.Account.EnterTrade(1); iMax = Tick.Bid; iMin = 0; } if ((iMax-Tick.Bid) > iPercentage*iMax) { Framework.Account.EnterTrade(-1); iMin = Tick.Bid; iMax = 0; } } } double logInTrade = Framework.Account.InTrade(); double logMargin = Framework.Account.GetAccount().C; double MinTh = iMin + iMin*iPercentage; double MaxTh = iMax - iMax*iPercentage; Framework.WriteGraphLine(logInTrade+","+logMargin+","+Tick.Bid+","+ iMin+","+MinTh+","+iMax+","+MaxTh); } public override bool Finished() { bool returnv = true; return returnv; } public override string Title() { return "% Trend Change"; } } }