sto scrivendo un ea per la mt4, volevo far aprire un ordine con una size dimensionata al 2% del rischio rispetto al capitale
ho scritto il seguente codice, quando vado a calcolare la size, mi restituisce una size di 14 lotti, usando un conto demo da 5.000 euro ed uno stop di 50 pips. Ovviamente è sbagliata, mi sapete dire come si fa a calcolare la size corretta?
il codice sbagliato è quello della funzione getSize()
grazie
Codice: Seleziona tutto
//+------------------------------------------------------------------+
//| TestSizeEA.mq4 |
//| Copyright 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
int OnInit()
{
openBuy() ;
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
}
void openBuy()
{
double stopLossInPips = 50;
double takeProfitInPips = 75;
int slippage = 3;
int magicNumber = 1;
double pairPipScale = 0.0001;
if (Digits() == 2 || Digits() == 3) pairPipScale = 0.01;
double stopLossInPipsScaled = stopLossInPips*pairPipScale;
double size = getSize(stopLossInPips);
double stopLossPrice = NormalizeDouble(Ask-stopLossInPipsScaled,Digits);
double takeProfitInPipsScaled = takeProfitInPips*pairPipScale;
double takeProfitPrice= NormalizeDouble(Ask+takeProfitInPipsScaled,Digits);
Print("buy Ask: ",Ask," - stopLossPrice: ",stopLossPrice," - takeProfitPrice: ",takeProfitPrice);
double orderTicket = OrderSend(NULL,OP_BUY,size,Ask,slippage,stopLossPrice,takeProfitPrice,"pos1",magicNumber,0,clrGreen);
if(orderTicket<0)
{
Print("OrderSend buy failed with error: ",GetLastError());
}
}
double getSize(double stopLossInPips) {
double maxLossPercent = 2;//rischio per operazione impostato al 2 % dell'equity
double pipValue = MarketInfo(Symbol(),MODE_TICKVALUE);
if (Digits==3 || Digits==5) pipValue *= 10;
double orderSize = NormalizeDouble(AccountEquity() * maxLossPercent / stopLossInPips * pipValue / 100, Digits);
Print("orderSize ",orderSize);
return orderSize;
}