Money Management - page 15

 

;et me be more specific.

I need help in coding an ea that after i open a trade for two lots the ea will close the first lot at "x" pips and the second lot at "y" pips.

 
Brazenmichael:
I need help in coding an ea that after i open a trade for two lots the ea will close the first lot at "x" pips and the second lot at "y" pips.

Take a look at the code of the EA on post 16 of this thread: https://www.mql5.com/en/forum/176995

 

I find these two scripts to be the best way to manage my risk when trading manually. They allow me to place trades quickly with the exact size necessary for my risk level based on percentage of account equity. You can set it to a flat stop in pips or exact levels. You can place immediate and pending orders. Very simple and very accurate. No more time wasting calculations.

Steve

Files:
autosell.mq4  3 kb
autobuy.mq4  3 kb
 

i think that is what im looking for linux....thanks

 

radatats...nices eas....working with the code now on them to covert to my original post.

 
seawolf:
I'm building a Position Sizing calculator as a function based on the "Kelly Formula"

(Win Rate-((1-Win Rate)/(Avg Win/Avg Loss)

I've got the over all code and calculations working with manual inputs (extern) for the required variables and am now trying to get the function working dynamically by calling certain account information (namely I want to calculate the Winning consistency rate (%), the avg # pips per winning trade, and the avg # pips per lossing trade)

I could use any and all help getting the three functions (WinRate AvgWin & AvgLoss) operating. I have been using the manual input variation for months and it works great. Here is the complete code for this (automated) version to this point... in testing I am getting no dynamic output, everything goes back to the default setting (50, 40, 20). I have this set up as it's own EA for testing and easy modularization into any existing EA. once attached to any chart, the output is printed in the log/expert tab. the use of fractals is intentional so that maximum account growth (or minimal loss) is exploited. as a note most Brokers offering the MT trader platform allow fractal trading for either mini or std lots. This will prove use full in the future with money management that can take off partial lot positions (ie: remove 25% of 1 Lot). anyway...

in order to collect the real time account info I need I am trying to...

1. count all trades

2. count trades that are profitable

etc. etc.

I may or may not be going about this the right way.

Thanks in advance for all the help...

SeaWolf

//+------------------------------------------------------------------+

//| KellyFormula.mq4 |

//+------------------------------------------------------------------+

#property copyright "seawolf"

#property link "seawolf"

//+------------------------------------------------------------------+

//| EXTERNAL INFORMATION INPUT |

//+------------------------------------------------------------------+

extern int MyAccount = 1001; //------>>>> Account ID

extern int ExpertID = 500001; //------>>>> Magic Number for this EA

extern double PipValue= 1.00; //------>>>> use for ALL calc's

extern double LotCost= 50.0; //------>>>> use for ALL calc's

extern double PercentMax= 24.0; //------>>>> max % account leveraged @ one time

extern int TradesMax= 3; //------>>>> max simultaniouse trades (example: 24%/3 trades = 8% per trade)

extern bool UseKelly= true; //------>>>> Manual overide toggle

extern double ManualLots= 1.0; //------>>>> # lots if "UseKelly" is false

extern double mWinRate= 50.00; //------>>>> winning consistancy in % (manual overide)

extern int mAvgWin= 40; //------>>>> avg # pips per winning trade (manual overide)

extern int mAvgLoss= 20; //------>>>> avg # pips per lossing trade (manual overide)

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

//----

//----

return(0);

}

int deinit()

{

//----

//----

return(0);

}

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

//----

PositionSize();

{

Print("Lots=",PositionSize()," WinRate=",WinRate()," AvgWin=",AvgWin()," AvgLoss=",AvgLoss());

}

Comment("Current Time is ",TimeToStr(TimeCurrent(),TIME_MINUTES)," GMT ",TimeToStr(TimeCurrent(),TIME_DATE)," ... Win Rate= ",WinRate()," Avg Win= ",AvgWin()," Avg Loss= ",AvgLoss());

//----

return(0);

}

//----

//+------------------------------------------------------------------+

//| CALCULATE POSITION SIZE FOR ALL NEW TRADES |

//+------------------------------------------------------------------+

//------------------------>>>>

double PositionSize()

{

//------------------------>>>> DO NOT USE KELLY FORMULA, USE FLAT RATE

if(UseKelly == true)

{

double KelyForm = WinRate()-((1-WinRate())/(AvgWin()/AvgLoss()));

double PerTrade;

double Lots;

if(KelyForm > PercentMax)

{

PerTrade = (PercentMax/10)/TradesMax;

}

else if(KelyForm < PercentMax)

{

PerTrade = (KelyForm/10)/TradesMax;

}

else if(KelyForm == PercentMax)

{

PerTrade = (KelyForm/10)/TradesMax;

}

Lots = (PerTrade * AccountBalance()/LotCost);

return(MathRound(Lots)/10);

}

}

//+------------------------------------------------------------------+

//| COLLECT REAL TIME ACCOUNT INFO |

//+------------------------------------------------------------------+

//------------------------>>>>

double WinRate()

{

double Ticket;

double CountWins = 0;

for(Ticket=0;Ticket<OrdersTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == ExpertID)

{

//------>>>>

if(OrderType()==OP_BUY)

{

if(OrderClosePrice() >= OrderOpenPrice())

CountWins++;

}

else if(OrderType()==OP_SELL)

{

if(OrderClosePrice() <= OrderOpenPrice())

CountWins++;

}

}

}

if(CountWins > 0)

return(MathRound(CountWins/OrdersHistoryTotal())*10);

else

Print("Real Time WinRate not Available");

return(mWinRate);

}

//------>>>>

//------------------------>>>>

double AvgWin()

{

double Ticket;

double CountTrades = 0;

double CountPips = 0;

for(Ticket=0;Ticket<OrdersTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == ExpertID)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()>=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

if(OrderType()==OP_SELL && OrderClosePrice()<=OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() >= 0)

CountPips++;

}

}

}

if(CountPips > 0)

return(MathRound(CountPips/CountTrades)*10);

else

Print("Real Time AvgWin not Available");

return(mAvgWin);

}

//------>>>>

//------------------------>>>>

double AvgLoss()

{

double Ticket;

double CountTrades = 0;

double CountPips = 0;

for(Ticket=0;Ticket<OrdersTotal();Ticket++)

{

OrderSelect(Ticket,SELECT_BY_TICKET,MODE_HISTORY);

if(MyAccount==AccountNumber() && OrderSymbol()==Symbol() && OrderMagicNumber() == ExpertID)

{

//------>>>>

if(OrderType()==OP_BUY && OrderClosePrice()<OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() < 0)

CountPips++;

}

if(OrderType()==OP_SELL && OrderClosePrice()>OrderOpenPrice())

CountTrades++;

{

if(OrderProfit() < 0)

CountPips++;

}

}

}

if(CountPips > 0)

return(MathRound(CountPips/CountTrades)*10);

else

Print("Real Time AvgLoss not Available");

return(mAvgLoss);

}

//---------------------------------------------------------------------+

Has any one managed to automate the kelly formular or intergrate it into their EA trading system

 

Money management script

Would anybody have a script I could use for scalping that I can set a stop lose in and have both a buy and sell script that would automatically adjust the lot size when placing a order with the stop lose also set when it opens a trade.

 
darkkiller:
who have MQ4 version for this LotCalculator?thanks

I applied this indicator but it gives a totally inaccurate figure. It may have something to do with my broker having an extra decimal place in their price.

For example normal brokers may display a price like: 1.1234

My broker displays: 1.12345

Would this have something to do with the wrong lot calculation?

I really want this tool to work as it will save lots of paper calculations, and save trees lol.

I realise it is only .ex4, but maybe the source code is out there somewhere. Or someone could knock a similar one up quickly as it is pretty simple I imagine.

Thx

Files:
 
jeffkerwin:
I applied this indicator but it gives a totally inaccurate figure. It may have something to do with my broker having an extra decimal place in their price.

For example normal brokers may display a price like: 1.1234

My broker displays: 1.12345

Would this have something to do with the wrong lot calculation?

I really want this tool to work as it will save lots of paper calculations, and save trees lol.

I realise it is only .ex4, but maybe the source code is out there somewhere. Or someone could knock a similar one up quickly as it is pretty simple I imagine.

Thx

Hi Jeff,

I think this tool works well. You should put in the stop loss figure in pips and the pips are ten times larger if you use five decimals brokers. So, you should put in StopLoss = 200 instead of 20 in case of five decimals brokers.

Regards,

Chrisstoff

 

Adjust Trade Size based on signal activity?

Hi there all you guru coders - im hoping someone can help out - I have a system that runs on 10 marekts hourly.

What i have noticed is that when a number of trades are generated withing the same 10-20 minute timeframe they are much more likely to be winners than the odd trade that fires off unsupported.

So i need a code example please of how to look at the last param1 open trade times and if they are within a param2 window - then set a flag - which i will then pickup in my trade sizing function

much appreciated - once i have done it i will post back to the forum but i need a start point please

cheers

mike

Reason: