variable nticks has a related cash value <= param riskFactor - % of tradeable account size.
Rules exist to validate that the size of the stop is with <=nticks.
Before the stop is place the stop size is validated. It must work for all stop calculation mode - without changing the placeStop method...
Following code
Stops maybe place in the following enum modes via method:
It also has an initial simple version for stop tick calculation - which only works for
ticks,currency,ATRPercentage(same as ticks)
I guess i am looking for input as to how to express a % and price stop as ticks
version 1.0 below
///<summary>
/// Enum for stop or target price calculation
///</summary>
publicenumorderCalculationMode
{
Percent = 0,
Price = 1,
Ticks = 2,
Currency = 3,
ATRPercentage = 4
}
///<summary>
/// Place Stop by this.Stop value and this.StopCalcMode orderCalculationMode
///</summary>
publicvoid placeStop()
{
if (Stop > 0)
{
if (StopCalcMode == (int)orderCalculationMode.ATRPercentage)
{
//stop is a percentile
SetStopLoss("", CalculationMode.Ticks, Instrument.MasterInstrument.Round2TickSize((aTRVal ue * Stop) / 100), SimulatedStop);
}
elseif (StopCalcMode == (int)orderCalculationMode.Currency)
{
//stop is cash
SetStopLoss(this.Stop, SimulatedStop);
}
elseif (StopCalcMode == (int)orderCalculationMode.Percent)
{
//stop is a percentile
SetStopLoss("", CalculationMode.Percent, Stop, SimulatedStop);
}
elseif (StopCalcMode == (int)orderCalculationMode.Price)
{
//stop is a price
SetStopLoss("", CalculationMode.Price, Stop, SimulatedStop);
}
elseif (StopCalcMode == (int)orderCalculationMode.Ticks)
{
//stop is n ticks
SetStopLoss("", CalculationMode.Ticks, Stop, SimulatedStop);
}
}
}
///<summary>
/// returns stop ticks
///</summary>
///<param name="stop"></param>
///<returns></returns>
privatedouble calcStopTicks(double stop)
{
if (StopCalcMode == (int)orderCalculationMode.ATRPercentage)
{
return Instrument.MasterInstrument.Round2TickSize(aTRValu e * (stop / 100));
}
elseif (StopCalcMode == (int)orderCalculationMode.Currency)
{
return Instrument.MasterInstrument.Round2TickSize(stop / (Instrument.MasterInstrument.PointValue * tickValue));
}
elseif (StopCalcMode == (int)orderCalculationMode.Ticks)
{
return stop;
}
else
{
thrownewException("Stop Calculations only valid with StopCalcMode ATRPercentage,Currency,Ticks");
}
return -1;
}
Comment