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 Risk - expert para MetaTrader 5
- Visualizações:
- 1756
- Avaliação:
- Publicado:
- 2017.02.01 08:51
- Atualizado:
- 2018.02.15 17:31
- Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance
Exemplo para calcular o tamanho do lote, dependendo do risco na transação.
Como funciona:Define-se a a porcentagem do risco da negociação (parâmetro % risk) e Stop-Loss (parâmetro StopLoss (in pips)). Dessa maneira, definem-se os parâmetros da possível perda do depósito.
Para simular a negociação, é organizado este ciclo:
if(count%980==0) // we pass 980 tics
{
//--- getting lot size for open long position (CMoneyFixedRisk)
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 check_open_long_lot=m_money.CheckOpenLong(m_symbol.Ask(),m_symbol.Bid()-ExtStopLoss);
Print("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 CMoneyFixedRisk, obtemos o tamanho calculado do lote para a posição Buy tendo em conta o StopLoss:
No diário de 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:
", Balance: ", DoubleToString(m_account.Balance(),2),
", Equity: ", DoubleToString(m_account.Equity(),2),
", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
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 (para verificar, no testador, selecione EURUSD, M1, período de teste de 2016.11.28, depósito $3 000):
Foi aberta a posição Buy (impressão do Diário do testador) — o tamanho do lote tendo em conta o risco da transação foi de 2.23.
Trade 2016.11.28 00:03:37 instant buy 2.23 EURUSD at 1.06076 sl: 1.05942 tp: 1.06142 (1.06042 / 1.06076 / 1.06042)
Trades 2016.11.28 00:03:37 deal #2 buy 2.23 EURUSD at 1.06076 done (based on order #2)
Trade 2016.11.28 00:03:37 deal performed [#2 buy 2.23 EURUSD at 1.06076]
Trade 2016.11.28 00:03:37 order performed buy 2.23 at 1.06076 [#2 buy 2.23 EURUSD at 1.06076]
Money Fixed Risk (EURUSD,M1) 2016.11.28 00:03:37 CTrade::OrderSend: instant buy 2.23 EURUSD at 1.06076 sl: 1.05942 tp: 1.06142 [done at 1.06076]
Money Fixed Risk (EURUSD,M1) 2016.11.28 00:48:32 CheckOpenLong: 2.60, Balance: 3000.00, Equity: 2828.29, FreeMargin: 462.80
Money Fixed Risk (EURUSD,M1) 2016.11.28 00:48:32 CMoneyFixedRisk lot = 2.60, CTrade lot = 0.43
Trade 2016.11.28 00:53:15 stop loss triggered #2 buy 2.23 EURUSD 1.06076 sl: 1.05942 tp: 1.06142 [#3 sell 2.23 EURUSD at 1.05942]
Trades 2016.11.28 00:53:15 deal #3 sell 2.23 EURUSD at 1.05942 done (based on order #3)
Trade 2016.11.28 00:53:15 deal performed [#3 sell 2.23 EURUSD at 1.05942]
Trade 2016.11.28 00:53:15 order performed sell 2.23 at 1.05942 [#3 sell 2.23 EURUSD at 1.05942]
Tester stopped by user
Tester final balance 2701.18 USD
após a segunda entrada no ciclo, descobriu-se que não havia suficientes fundos para a abertura da segunda posição.
No final, a posição foi fechada pelo Stop-Loss com uma perda de 298.82:
Isto quase corresponde ao risco 10% do depósito 3 000.
Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/17199
Expert Advisor que opera nas rupturas da média móvel. São utilizados os indicadores: dois iMA (Moving Average, MA), iRSI(Relative Strength Index, RSI) e duas iEnvelopes (Envelopes).
The PuncherNegociação segundo os indicadores: iStochastic (Stochastic Oscillator) e iRSI (Relative Strength Index, RSI).
Apresenta os parâmetros importantes de instrumento e conta.
BigBarSoundExpert Advisor que emite um sinal sonoro e um alerta ao ultrapassar um determinado tamanho de vela.