I would like to try to code Mr Ralph Vince's Optimal F for my
position sizing money management strategy as following:
#region*Using*declarations
using*System;
using*System.ComponentModel;
using*System.Diagnostics;
using*System.Drawing;
using*System.Drawing.Drawing2D;
using*System.Xml.Serialization;
using*NinjaTrader.Cbi;
using*NinjaTrader.Data;
using*NinjaTrader.Indicator;
using*NinjaTrader.Gui.Chart;
using*NinjaTrader.Strategy;
#endregion
//*This*namespace*holds*all*strategies*and*is*requir ed.*Do*not*change*it.
namespace*NinjaTrader.Strategy
{
****///*<summary>
****///*Enter*the*description*of*your*strategy*here
****///*</summary>
****[Description("Enter*the*description*of*your*strateg y*here")]
****public*class*OptimalFpositionSizing*:*Strategy
****{
**
public*enum*MMType
{
Optimal_F;
}
********#region*Variables
********//*Wizard*generated*variable***
******private*int*longQuantity=*0;
*** private*double*priorTradesCumProfit=*0;
* ***private*double*accbalNew***=*0;
**private*double*winningPercent_W*=*0;
**private*double**riskf****=*2;
**private*double**psize****=*0;
**private*MMType*mmtype;
**private*double*optimalF*=*0;*
**
**
*
******#endregion
********///*<summary>
********///*This*method*is*used*to*configure*the*strategy*and *is*called*once*before*any*strategy*method*is*call ed.
********///*</summary>
********protected*override*void*Initialize()
********{
****AccountSize*=*50000;
****EntriesPerDirection*=1*;
***EntryHandling*=*EntryHandling.UniqueEntries;
***ExitOnClose*=*false;
***IncludeCommission*=*true;
***CalculateOnBarClose*=*false;
*******
******}
********///*<summary>
********///*Called*on*each*bar*update*event*(incoming*tick)
********///*</summary>
********protected*override*void*OnBarUpdate()
********{
***if*(Bars.FirstBarOfSession)
***{
****//*AllTrades*includes*virtual*and*real-time*trades.*For*real-time*trades*please*use*.RealtimeTrades
****
priorTradesCumProfit*=*Performance.AllTrades.Trade sPerformance.Currency.CumProfit;
***}
*******//LONG*CRITERIA
******
***
**if(***********something)
{
*****PositionSize();
*****EnterLong(longQuantity,*"PositionLong");
***}
#region*PositionSIzeFunction*
**void*PositionSize()
**{
********
****
AccbalNew*=*AccountSize*+*priorTradesCumProfit;
*
**
***
if (Performance.AllTrades.Count > 20
&& Performance.AllTrades.LosingTrades.Count!=0)
{
winningPercent_W=((double)Performance.AllTrades.Wi nningTrades.Count-1)/((double)Performance.AllTrades.Count-1);
}
****if(*mmtype*==*MMType.Optimal_F)
****{
double optimalF = 2*winningPercent_W - 1
// Optimal F = 2P - 1, P=Probability of winning trades.
** **psize*=*AccbalNew***(optimalF/100)/stopLoss;
** *****longQuantity=(Convert.ToInt32(Math.Floor(psiz e)/100)*100);
*** ****}*
* }
****Print("");
****Print("ACC*BAlNew:*"+AccbalNew);
****Print("Time:*"+Time[0]);
****Print("CumProfit:*"+priorTradesCumProfit1);
****Print("Position*SIze:*"+Psize);*
****Print("Optimal_F:*"+optimalF);
**}
#endregion
_______
As I believed that using Winning Ratio (winningPercent_W) to calculate
the Optimal F is not accurate enough.
Can anybody help to code the Optimal F base on Mr Ralph Vince's
Formula, as I found it very difficult to code from DataSeries of past hostorical
data.
Thanks for your help.
Arthur
Comment