How to code? - page 97

 
matrixebiz:
Ok, I'll try it when I get home but then why does it still work with Buy orders already? Thanks

You could be in a Sell order, but the price meets the condition for the Buy stop change code, so it gets changed, and no longer meets the conditions for the Sell section, so it doesn't get changed there.

Big Be

 

Thanks Big Be for your help but I just realized that my old code does work but I have to enable the use of a StopLoss for SELL orders to get modified..

Wierd, that I don't need to enable a TakeProfit for MoveStopOnce to work with a BUY order but I have to enable a StopLoss for MoveStopOnce to modify the SELL order.

Oh, well, I'll have to look at the code a little deeper to figure that one out unless you know why.

EDIT: if you change to;

if(0 < OrderOpenPrice() - Point * MoveStopTo) {

[/code]

instead of;

[code]

if(OrderStopLoss() < OrderOpenPrice() - Point * MoveStopTo) {

Seems to work good.

Thanks

 

Need Help with Position Sizing Calculator

OK,

so 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);

}

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

 

To: Matrixebiz

EDIT: if you change to;

if(0 < OrderOpenPrice() - Point * MoveStopTo) {

[/code]

instead of;

[code]

if(OrderStopLoss() < OrderOpenPrice() - Point * MoveStopTo) {

Seems to work good.

Thanks

You are welcome.

Big Be

 

Fxpro,ask

hi all.. i juz want to ask about how to configure lots EA in FxPro..

i confused because it has 6 digits (1 digit extra) i fixed the S/L and T/P but i cant change the lot..

always 0.4 per trade.. even i change it to 0.1 or 0.3

i used 10points 3 EA..

Please Help Me.. email me at hansen_hardrocker@yahoo.co.id

or can PM please..

cheerz all..

 

Ask_change Lot (fxpro)

Fxpro,ask

hi all.. i juz want to ask about how to configure lots EA in FxPro..

i confused because it has 6 digits (1 digit extra) i fixed the S/L and T/P but i cant change the lot..

always 0.4 per trade.. even i change it to 0.1 or 0.3

i used 10points 3 EA..

Please Help Me.. email me at hansen_hardrocker@yahoo.co.id

or can PM please..

cheerz all..

 

i want it too.please send me at omidchart@yahoo.com

 

It probably because you have Money Management enabled in the EA.

 

Thx

matrixebiz:
It probably because you have Money Management enabled in the EA.

Thx bro..

im newbie..

 

Can You Change This EA?

Hello programmers,

I have this EA that places stop orders above and below current price. What I need is an EA that will place limit orders instead of stop orders above and below current price. Can you change this EA to do just that while keeping all of the parameters the same?

Thanks in advance,

Paul

Files: