Participe de nossa página de fãs
Coloque um link para ele, e permita que outras pessoas também o avaliem
Avalie seu funcionamento no terminal MetaTrader 5
Money Fixed Margin - expert para MetaTrader 5
- Visualizações:
- 1231
- Avaliação:
- Publicado:
- 2017.02.13 13:55
- Atualizado:
- 2018.02.22 13:44
- Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Exemplo para calcular o tamanho do lote com uma margem fixa. Isto é, se for especificado 10%, é aberta uma posição cuja margem é 10% da margem livre.
Parâmetros de entrada:
- StopLoss (in pips) — nível StopLoss
- % risk — tamanho da margem para a posição, como uma porcentagem da margem livre
Para simular a negociação, é organizado este ciclo:
if(count%980==0) // we pass 980 tics
{
//--- getting lot size for open long position (CMoneyFixedMargin)
O valor inicial count=-21 é definido exclusivamente para "aquecer" o testador de estratégias. A seguir, calcula-se o montante remanescente a partir da divisão da variável count por 980 (número tomado simplesmente do limite). Ou seja, a cada 980 ticks é feita a entrada no ciclo de cálculo do lote, tendo em conta os riscos na negociação.
Ciclo de cálculo do lote dependendo do risco da transação (cálculo para a posição Buy):
Primeiro passo
double sl=0.0;
double check_open_long_lot=0.0;
//--- variant #1: StopLoss=0.0
sl=0.0;
check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
Print("sl=0.0",
", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
", Balance: ", DoubleToString(m_account.Balance(),2),
", Equity: ", DoubleToString(m_account.Equity(),2),
", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
//--- variant #2: StopLoss!=0.0
sl=m_symbol.Bid()-ExtStopLoss;
check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
Print("sl=",DoubleToString(sl,m_symbol.Digits()),
", CheckOpenLong: ",DoubleToString(check_open_long_lot,2),
", Balance: ", DoubleToString(m_account.Balance(),2),
", Equity: ", DoubleToString(m_account.Equity(),2),
", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
if(check_open_long_lot==0.0)
return;
na variável check_open_long_lot, usando o método CheckOpenLong da classe CMoneyFixedMargin, obtemos o tamanho calculado do lote para a posição Buy tendo em conta o StopLoss:
No diário dos Expert Advisors, são impressos estes parâmetros: tamanho calculado do lote dependendo do risco da transação, saldo da conta de negociação no momento do cálculo, montante na conta no momento de cálculo, tamanho da garantia reservada no momento do cálculo:
Se o calculo retornar o valor "0.0", saímos:
return;
Segundo passo
Na variável chek_volime_lot, usando o método CheckVolume da classe CTrade, obtemos o tamanho para a posição Buy, para a qual não temos fundos suficientes. Neste ponto, nós passamos os seguintes parâmetros: m_symbol.Name() — nome do símbolo, check_open_long_lot — volume da posição que queremos abrir (nós já calculamos este valor anteriormente):
double chek_volime_lot=m_trade.CheckVolume(m_symbol.Name(),check_open_long_lot,m_symbol.Ask(),ORDER_TYPE_BUY);
Terceiro passo
Se o método CheckVolume não retornar "0.0", verificamos a condição: não temos os fundos suficientes para abrir a posição do lote calculado tendo em conta o risco.
if(chek_volime_lot>=check_open_long_lot)
m_trade.Buy(chek_volime_lot,NULL,m_symbol.Ask(),m_symbol.Bid()-ExtStopLoss,m_symbol.Bid()+ExtStopLoss);
else
Print("CMoneyFixedRisk lot = ",DoubleToString(check_open_long_lot,2),
", CTrade lot = ",DoubleToString(chek_volime_lot,2));
Se houver suficientes fundos, abriremos a posição, se não houver, então, no diário de EAs são impressos o tamanho calculado do lote tendo em conta o risco da transação (DoubleToString(check_open_long_lot,2)) e o tamanho do lote para o qual não há fundos suficientes (DoubleToString(chek_volime_lot,2)).
Exemplo de abertura de uma posição Buy, com uma margem livre de risco de 10%:
Ao mesmo tempo, foi impresso no diário:
Money Fixed Margin (EURUSD,M1) 2016.11.28 00:03:24 sl=1.05792, CheckOpenLong: 0.28, Balance: 3000.00, Equity: 3000.00, FreeMargin: 3000.00
Trade 2016.11.28 00:03:31 instant buy 0.28 EURUSD at 1.06076 sl: 1.05792 tp: 1.06292 (1.06042 / 1.06076 / 1.06042)
Trades 2016.11.28 00:03:31 deal #2 buy 0.28 EURUSD at 1.06076 done (based on order #2)
Trade 2016.11.28 00:03:31 deal performed [#2 buy 0.28 EURUSD at 1.06076]
Trade 2016.11.28 00:03:31 order performed buy 0.28 at 1.06076 [#2 buy 0.28 EURUSD at 1.06076]
Money Fixed Margin (EURUSD,M1) 2016.11.28 00:03:31 CTrade::OrderSend: instant buy 0.28 EURUSD at 1.06076 sl: 1.05792 tp: 1.06292 [done at 1.06076]
Observe que, ao calcular o lote dependendo do rico da margem livre, o StopLoss é irrelevante.
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/17282
RSI EA - negociação segundo os níveis de sobrevenda/sobrecompra, de acordo com o indicador iRSI (Relative Strength Index, RSI).
MA ReverseNegociação segundo a Moving Average. Verificando se há fundos suficientes.
Volumes Buy e sell.
Corr velocityIndicador Velocity "corrigido" (Momentum suavizado).