função de cálculo automático de tamanho de lote? - página 2

 
Isto é dourado. Poupou-me horas de trabalho. U da man!
 

Aproveite... mas não se roube da confiança que vem com a construção de seu próprio código e assim saber exatamente como ele funciona. Usar código pré-existente é uma boa maneira de melhorar seu conhecimento de uma maneira "puxando-se pelas suas botas", eu não estaria aqui se não tivesse código para usar como exemplo em meus primeiros dias, mas tenha certeza e force-se a aprender a pescar. Há valor nisso em tudo o mais que você faz.

 

@Phillip

O que você acha disto?

tradeVolume = AccountFreeMargin() * risco/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) );

if(tradeVolume<MarketInfo(Symbol(),MODE_MINLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MINLOT);

if(tradeVolume>MarketInfo(Symbol(),MODE_MAXLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MAXLOT)) tradeVolume=MarketInfo(Symbol(),MODE_MAXLOT);

res=OrderSend(Symbol(),OP_BUY,tradeVolume,Ask,3,Ask - 0.2,Ask + 0.4,",MAGICID,0,Red);

 
Ricotter:

tradeVolume = AccountFreeMargin() * risco/100 / ( stopLossPoints * MarketInfo( Symbol(), MODE_TICKVALUE ) );


Sem testá-lo pessoalmente para confirmar a matemática, mas assumindo que a matemática esteja correta, isso parece correto desde que você a aplique somente aos pares de moedas para os quais a moeda cotada é também a denominação da conta.

Por exemplo, se sua conta é baseada em USD, então você estará procurando aplicar somente esse método de cálculo de tradevolume aos pares de moedas com USD como moeda cotada - EURUSD, GBPUSD, etc.

Em meus códigos este tipo de par de moedas é designado como "Tipo 2".

O cálculo estará em erro se você aplicá-lo a um símbolo que tenha a denominação da conta como base (USDJPY quando a conta é baseada em USD, por exemplo). E também estará em erro se for aplicado a qualquer cruz.

Procure através dessa função de chamada SymboType() no "Analyze Currency Symbol" incluir arquivo que estava em meu outro post, a seção de cabeçalho comentada explica mais ou menos a base para os diferentes tipos de símbolos e porque você precisa calcular o patrimônio em risco e volumes (lotsize) de forma diferente, dependendo do tipo de símbolo.

Mas se seu plano é apenas negociar esses pares de tipos EURUSD e GBPUSD, então seu código parece estar pronto para ser usado!
 

Olá novamente Phillip... você deve se lembrar em um dos meus posts anteriores que eu havia dito "Parece que o código teve alguns problemas com pares JPY, no entanto. Isto já foi resolvido?". Bem, eu acho que esse problema pode ter surgido novamente comigo. Adicionei sua rotina corretamente (tenho quase certeza) ao meu EA e defini meu MaxPercentEquityAtRisk= 1,0 (1 por cento). O patrimônio em minha conta demo está em torno de US$2300, portanto estou disposto a arriscar aproximadamente US$23 em qualquer negociação. Minha EA usa perdas de parada de tamanho igual e metas de lucro - portanto, se estou arriscando $23 em uma negociação, estou atirando para um ganho de $23. De qualquer forma, minha EA gerou 2 negócios ontem à noite:

(1) Comprar EUR/JPY, 9,8 pips stoploss e 9,8 pips alvo de lucro. Sua rotina calculou um tamanho de lote de 0,80 lotes (muito grande) e a troca resultou num lucro de 10 pip de $96,91

(2) COMPRAR NZDJPY, 16,3 pips stoploss e 16,3 pips meta de lucro. Sua rotina calculou um tamanho de lote de 0,28 lotes e a troca resultou em uma perda de -$56,56.


Parece-me que ambas as negociações deveriam ter me dado aproximadamente uma vitória de $23 ou uma perda de $23, dado que estou arriscando apenas 1% do meu patrimônio de $2300, não?


Obrigado!

Shawn

 

Isto pode ajudar Phillp - aqui está o registro das declarações de impressão de seu código logo após ele calcular os tamanhos de lote para ambos os pedidos que mencionei acima:


05:14:56 EURJPY,H1: COMPRAR - EURJPY Max EquityAtRisk = $21,99 e Max Lotsize = 0,8085
05:14:56 EURJPY,H1: COMPRAR - EURJPY Current EquityAtRisk = $21,76 e Current Lotsize = 0,8
05:14:56 EURJPY,H1: COMPRAR - EURJPY MarketInfo(MODE_STOPLEVEL) = 30.00000
05:14:56 LibOrderRelable EURJPY,H1: carregado com sucesso
05:14:56 LibOrderRelable EURJPY,H1: OrderSendReliable v3.1:
05:14:56 LibOrderRelable EURJPY,H1: OrderSendReliable v3.1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
05:14:56 LibOrderRelable EURJPY,H1: OrderSendReliable v3.1: Tentativa de compra STOP 0.80000000 lotes @114.78700000 sl:114.68900000 tp:114.88500000



09:02:36 NZDJPY,H1: COMPRAR - NZDJPY Equidade MáximaAtRisk = $23,29 e Max Lotsize = 0,2814
09:02:36 NZDJPY,H1: COMPRAR - NZDJPY Equidade CorrenteAtRisk = $23,18 e Lotsize Corrente = 0,28
09:02:36 NZDJPY,H1: COMPRAR - NZDJPY MarketInfo(MODE_STOPLEVEL) = 70.00000
09:02:36 LibOrderRelable NZDJPY,H1: carregado com sucesso
09:02:36 LibOrderRelable NZDJPY,H1: OrderSendRelable v3.1:
09:02:36 LibOrderRelable NZDJPY,H1: OrderSendRelable v3.1: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
09:02:36 LibOrderRelable NZDJPY,H1: OrderSendReliable v3.1: Tentativa de compra STOP 0,28000000 lotes @64,29700000 sl:64,13400000 tp:64,46000000
09:02:37 LibOrderRelable NZDJPY,H1: abrir #155492665 comprar stop 0,28 NZDJPY a 64,297 sl: 64,134 tp: 64,460 ok
09:02:37 LibOrderRelable NZDJPY,H1: OrderSendRelable v3.1: Ticket #155492665: Pedido de compra STOP bem sucedido, detalhes a seguir.
09:02:37 LibOrderRelable NZDJPY,H1: #155492665 2010.11.04 13:02 comprar parada 0.28 NZDJPY 64.297 64.134 64.460 64.197 0.00 0.00 0.00 NZDJPY73650016 73650016
09:02:37 LibOrderRelable NZDJPY,H1: OrderSendRelable v3.1: - • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • •

09:02:37 LibOrderRelable NZDJPY,H1: OrderSendReliable v3.1:


... parece que está calculando o valor do Max EquityAtRisk multa... mas esses lotes resultam em lucros/perdas muito maiores do que o meu 1% de risco desejado.


Obrigado

Shawn

 

Qual é o seu corretor?

Na FXDD quando coloco essas ordens de parada recebo um lote de 0,15 para o EURJPY (@25,66 EaR)

2010.11.04 16:05:39 Assisted_Order_Script_2010.11.01 EURJPY,Diariamente: abrir #95896902 comprar stop 0,15 EURJPY a 114.827 sl: 114.689 tp: 114.885 ok<br / translate="no">2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Diariamente: tentativa de OP_BUYSTOP 0,15000000 lotes @114.82700000 sl:114.68900000 tp:114.88500000
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Diariamente: Equivalência PatrimonialCorrente em Risco = $25,66 e Tamanho do Lote atual = 0,15 e Lucro Alvo = $10,78 para uma relação de 0,4:1 Lucro:Perda
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Diariamente: Máximo permitido EquityAtRisk = $25.84 e Máximo computado Lotsize = 0.1511
2010.11.04 16:05:38 Assisted_Order_Script_2010.11.01 EURJPY,Entradas diárias: Order_Type="BUY STOP"; OpenBidPrice=114.787; StopLossBidPrice=114.689; TakeProfitBidPrice=114.885; MaxPercentEquityAtRisk=0.5; MinLotOverRide=false;

No IBFX eu recebo um lote de 0,16 com um EaR de $26,77 (maior patrimônio inicial na conta)

2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: abrir #94468219 buy stop 0.16 EURJPY a 114.824 sl: 114.689 tp: 114.885 ok
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: tentativa de OP_BUYSTOP 0,16000000 lotes @114.82400000 sl:114.68900000 tp:114.88500000
2010.11.04 16:09:34 Assisted_Order_Script_2010.11.01 EURJPY,H4: Patrimônio LíquidoAtualEm Risco = $26.77 e Tamanho do Lote atual = 0.16 e Lucro Alvo = $12.10 para uma relação de 0.5:1 Lucro:Perda
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4: Max permitido EquityAtRisk = $27.19 e Max computado Lotsize = 0.1625
2010.11.04 16:09:33 Assisted_Order_Script_2010.11.01 EURJPY,H4 entradas: Order_Type="BUY STOP"; OpenBidPrice=114.787; StopLossBidPrice=114.689; TakeProfitBidPrice=114.885; MaxPercentEquityAtRisk=0,5; MinLotOverRide=false;

Com o NZDJPY recebo um lote de 0,09 lotes e um EaR de 24,53 no IBFX:

2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: abrir #94468343 comprar paragem 0.09 NZDJPY a 64.354 sl: 64.134 tp: 64.460 ok
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: tentativa OP_BUYSTOP 0.09000000 lotes @64.35400000 sl:64.13400000 tp:64.46000000
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: Patrimônio Líquido CorrenteEm Risco = $24.53 e Tamanho do Lotsize Corrente = 0.09 e Lucro Alvo = $11.82 para uma razão de 0.5:1 Lucro:Perda
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4: Max permitido EquityAtRisk = $27.19 e Max computado Lotsize = 0.0998
2010.11.04 16:11:59 Assisted_Order_Script_2010.11.01 NZDJPY,H4 entradas: Order_Type="BUY STOP"; OpenBidPrice=64,297; StopLossBidPrice=64,134; TakeProfitBidPrice=64,46; MaxPercentEquityAtRisk=0,5; MinLotOverRide=false;

Existem nove corretores com os quais eu testei a compatibilidade, estes códigos são conhecidos por trabalharem em Alpari(US), CitiFXPro, CMS, Forex.com (Gain Capital), FXCM, FXDD, IBFX, MIG Bank, e ODL.

Estes corretores diferem o suficiente para que eu esteja satisfeito até agora que os códigos são agnósticos com base neles tratando habilmente as diferenças nos parâmetros do mercado de corretores que abrangem estes corretores.

Mas estamos assumindo que sua implementação do código não está quebrada, então vamos eliminar isso primeiro. Tente o script anexo, arraste e solte no EURJPY e introduza os parâmetros para sua BUY STOP como eu fiz acima e me informe sobre os resultados. (use apenas em uma conta demo, obviamente)

Arquivos anexados:
 

Obrigado Phillip... Estou usando uma demonstração da Alpari UK, patrimônio líquido da conta US$2272,85. OK, eu adicionei o script a um gráfico horário EURJPY (assim como meu EA usa). Ele não fez nada ou colocou nenhuma ordem pendente, então eu verifiquei a guia "Experts" para qualquer mensagem de erro... aqui está o que ele disse:


2010.11.04 20:39:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: removido
2010.11.04 20:38:38 Assisted_Order_Script_2010.11.01 EURJPY,H1: carregado com sucesso
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: removido
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit reason 0
2010.11.04 20:37:54 Assisted_Order_Script_2010.11.01 EURJPY,H1: divisão zero
2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max permitido EquityAtRisk = $22.73 e Max computado Lotsize = 0
2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs: Order_Type="BUY"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;


Obrigado!

Shawn

 

Nota: Eu tentei o roteiro novamente agora mesmo Phillip, os mesmos números, mas definindo MinLotOverride como verdadeiro... ele lançou uma ordem de MERCADO imediata (embora meu preço de compra fosse 115.827 e o mercado estivesse apenas em 114.945. Tamanho de lote = 0,01 e nenhuma ordem de stoploss ou de objetivo de lucro - ambos eram 0,0000

Obrigado

Shawn

 

Só para confirmar, a denominação de sua conta é USD, correto?

Estou fazendo o download da Alpari UK agora para verificar.

A abertura da ordem como mercado em vez de parada de compra é totalmente controlada pela rotina de ordem confiável...muito estranha. Terá que investigar isso também, então.

Uma coisa que chama minha atenção é este aviso:
"A alavancagem em uma conta demo é automaticamente definida para a alavancagem máxima de 1:500".

Não que a alavancagem deva estar afetando um calcário de grande porte, ela deve apenas afetar o IIRC de calças freemargin.

Editar: nevermind, vejo que a plataforma na verdade não é padrão para isto, é 1:100 de alavancagem máxima