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

 

Ah, eu vejo o problema... você define o roteiro para colocar uma ordem de "COMPRA" ao invés de mudar a variável externa a ser COMPRADA STOP... por isso é que ela colocou uma ordem de mercado.

A partir de seu posto:

2010.11.04 20:37:53 Assisted_Order_Script_2010.11.01 EURJPY,H1 entradas: Order_Type="BUY"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

Tente COMPRAR STOP.


Eu recebo 0,12 lotes por EURJPY em uma conta demo financiada com $2300 USD

2010.11.04 20:10:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: abrir #155713274 comprar paragem 0.12 EURJPY a 115.840 sl: 115.689 tp: 115.885 ok
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: tentativa de OP_BUYSTOP 0,12000000 lotes @115.84000000 sl:115.68900000 tp:115.88500000
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: Patrimônio LíquidoAtualEm Risco = $22,44 e Tamanho do Lote atual = 0,12 e Lucro Alvo = $6,69 para uma relação de 0,3:1 Lucro:Perda
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max permitido EquityAtRisk = $23.00 e Max computado Lotsize = 0.123
2010.11.04 20:10:15 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
 

Também fiz o NZDJPY comprar o exemplo de topo:

2010.11.04 20:14:16 Assisted_Order_Script_2010.11.01 NZDJPY,H1: abrir #155714279 comprar stop 0.10 NZDJPY a 64.319 sl: 64.134 tp: 64.460 ok<br / translate="no">2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: tentativa de OP_BUYSTOP 0,10000000 lotes @64.31900000 sl:64.13400000 tp:64.46000000
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Patrimônio Líquido CorrenteEm Risco = $22.90 e Tamanho do Lotsize Corrente = 0.1 e Lucro Alvo = $17.45 para uma relação de 0.8:1 Lucro:Perda
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1: Max permitido EquityAtRisk = $23.00 e Max computado Lotsize = 0.1004
2010.11.04 20:14:15 Assisted_Order_Script_2010.11.01 NZDJPY,H1 entradas: Order_Type="BUY STOP"; OpenBidPrice=64,297; StopLossBidPrice=64,134; TakeProfitBidPrice=64,46; MaxPercentEquityAtRisk=1; MinLotOverRide=false;

Agora o preço da ordem de entrada de 64,297 estava muito próximo do preço atual de mercado, por isso a rotina de ordem confiável moveu o preço de entrada para 64,319 por esse motivo, mas eu ainda recebo um lote razoável de 0,10.

Neste ponto, vou ter que concluir que há algo de errado em seu código na forma como você implementou os arquivos de inclusão e/ou como você utiliza as saídas. Você terá que carregar o código para que eu possa inspecionar, para que eu possa perseguir isto mais adiante.

 

Sim, é uma conta demo denominada em USD, alavancagem de 1:100. OK, eu acabei de rodá-la no EURJPY como uma BUY STOP, parece que temos bons números desta vez. O registro de especialista diz:


2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: removido
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: uninit reason 0
2010.11.04 21:37:18 Assisted_Order_Script_2010.11.01 EURJPY,H1: abrir #155719095 comprar paragem 0.11 EURJPY a 115.843 sl: 115.689 tp: 115.885 ok
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: tentativa OP_BUYSTOP 0.11000000 lotes @115.84300000 sl:115.68900000 tp:115.88500000
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Patrimônio LíquidoAtualEm Risco = $20.95 e Tamanho do Lote atual = 0.11 e Lucro Alvo = $5.71 para uma relação de 0.3:1 Lucro:Perda
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: Max permitido EquityAtRisk = $22.73 e Max computado Lotsize = 0.1193
2010.11.04 21:37:16 Assisted_Order_Script_2010.11.01 EURJPY,H1 inputs: Order_Type="BUY STOP"; OpenBidPrice=115.827; StopLossBidPrice=115.689; TakeProfitBidPrice=115.885; MaxPercentEquityAtRisk=1; MinLotOverRide=false;
2010.11.04 21:36:23 Assisted_Order_Script_2010.11.01 EURJPY,H1: carregado com sucesso
2010.11.04 21:34:16 Assisted_Order_Script_2010.11.01 EURJPY,H1: removido
2010.11.04 21:34:11 Assisted_Order_Script_2010.11.01 EURJPY,H1: carregado com sucesso



... e colocou o pedido de compra pendente como 0,11 lotes. perfeito. Sim, eu acho que algo está "borked up" no meu código, como você diz... lol. Eu sempre fui tão ultra cuidadoso colocando seu código no entanto... o que poderia ser. OK, vou fazer uma depuração aqui e te avisarei. Desculpe incomodar você Phillip!


Obrigado

Shawn

 

Devo começar de novo com sua versão mais recente que você acabou de publicar, Phillip?


Shawn

 

Faz sentido usar o mais recente, eu sou.

 

Oi Phillip, eu estava prestes a fazer uma cirurgia no meu EA novamente para atualizar para sua última versão que você postou alguns dias atrás, mas depois de ler aquele post novamente... isso me deixou com um número razoável de perguntas. Achei que deveria lhe perguntar primeiro antes de rasgar meu EA:


(1) Você menciona que há 2 novos arquivos de inclusão:


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Comércio_Posição_Gerenciamento_2010.10.29.mqh (26,68 KB)


... e o antigo StopLoss_Manager_2010.05.24.mqh? Esse arquivo não é mais necessário em sua nova versão?


(2) Onde você diz:


"Passo 2: Adicione o seguinte ao topo de seu EA para que ele tenha acesso às funções de chamada contidas nos arquivos anexos

#include <OrderReliable_2010.10.12.mqh>

#Incluir <Comércio_Posição_Gerenciamento_2010.10.29.mqh>"


... esta é uma nova versão ou OrderRelable? Eu estava usando LibOrderReliable.mqh. Alguma coisa mudou com isso? Também, não precisamos incluir o novo arquivo Analyze_Currency_Symbol_2010.10.29.mqh também?


(3) Nesta linha de código você diz para adicionar ao usar sua nova versão:


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... o que é OpenPrice_ND e StopLossPrice_ND? Estas variáveis que eu preciso declarar, ou elas estão embutidas em algum lugar em seus arquivos de inclusão? Também nesta nova versão de sua função LotSize, o número de parâmetros e a ordem dos mesmos mudou bastante, não é mesmo? A chamada para LotSize em sua versão anterior foi:


CurrentLotSize=LotSize(CurrentEquityAtRisk,CurrentStopLossPrice,CurrentOrderType,CurrentSymbolType,CurrentCounterPairForCross);


(4) Eu notei em meu código usando sua versão anterior, eu tinha atribuído CurrentOrderType=OP_BUY; Na realidade, estou fazendo uma ordem de parada de compra. Isso faria alguma diferença?



Desculpe incomodá-lo, mas fiquei um pouco desnorteado com estas coisas.


Obrigado

Shawn

 

(1) You mention there's 2 new include files:


Analyze_Currency_Symbol_2010.10.29.mqh (34.54 KB)

Comércio_Posição_Gerenciamento_2010.10.29.mqh (26,68 KB)


... e o antigo StopLoss_Manager_2010.05.24.mqh? Esse arquivo não é mais necessário em sua nova versão?


Eu realmente não tenho certeza porque adicionei essa parte ao meu posto original, a não ser para garantir que o usuário final teria um conjunto completo de arquivos para se basear.

Eu pessoalmente uso uma versão atualizada desse gerenciador de stoploss, mas ele não tem nenhuma relação com este tópico aqui, você deve implementar quaisquer procedimentos de stoploss que prefira usar. O código que carreguei neste tópico não depende de um arquivo de stoploss, mas depende de você configurar corretamente seu código para identificar o preço do stoploss, de modo que você possa enviá-lo para a função de chamada do equityatrisk.

(2) Onde você diz:


"Passo 2: Adicione o seguinte ao topo de sua EA para que ela tenha acesso às funções de chamada contidas nos arquivos anexos

#Incluir <OrderReliable_2010.10.12.mqh>

#Incluir <Comércio_Posição_Gerenciamento_2010.10.29.mqh>".


... esta é uma nova versão ou OrderRelable? Eu estava usando LibOrderReliable.mqh. Alguma coisa mudou com isso? Também, não precisamos incluir o novo arquivo Analyze_Currency_Symbol_2010.10.29.mqh também?

É uma nova versão, coloquei o link para ela no final do meu post na parte inferior da primeira página deste tópico (eu colocaria o link para ela, mas a busca está CORRIDA, argh!)

Modifiquei a nova versão de modo que ela funcione de forma transparente com corretores do tipo ecn. Envie suas ordens através de ordensendrefiáveis e não importa se o corretor aceita ou não SL & TP em ordens de mercado, o roteiro de ordens confiáveis trata disso para você.

(3) Nesta linha de código você diz para adicionar ao usar sua nova versão:


double CurrentLotSize=LotSize(CurrentEquityAtRisk,OpenPrice_ND,StopLossPrice_ND,CurrentOrderType);


... o que é OpenPrice_ND e StopLossPrice_ND? Estas variáveis que eu preciso declarar, ou elas estão embutidas em algum lugar em seus arquivos de inclusão? Também nesta nova versão de sua função LotSize, o número de parâmetros e a ordem dos mesmos mudou bastante, não é mesmo? A chamada para LotSize em sua versão anterior foi:

Sim, estas são variáveis que você precisa declarar em algum momento em seu código e atribuir-lhes os preços de mercado para os quais você deve abrir a nova posição (OpenPrice_ND) e o preço de stoploss (StopLossPrice_ND).

Alternativamente, você poderia renomear minhas variáveis com as que você já está usando. Considere essas variáveis como placeholders, substitua suas variáveis quando apropriado.

(4) Eu notei em meu código usando sua versão anterior, eu tinha atribuído CurrentOrderType=OP_BUY; Na realidade, estou fazendo um pedido de parada de compra. Isso faria alguma diferença?
Faz diferença zero. Tudo o que é importante é que você passe o tipo de pedido corretamente para as respectivas funções de chamada. Elas já estão codificadas para fazer a coisa certa, dependendo do tipo de ordem. Se você não enviar o tipo de ordem correto para a função de chamada, então você definitivamente receberá resultados inválidos das próprias funções de chamada.

Todas estas são boas perguntas, se você não perguntar, então não pode esperar que você mesmo aprenda ;)
 
1005phillip:

Eu realmente não tenho certeza porque adicionei essa parte ao meu posto original, a não ser para garantir que o usuário final teria um conjunto completo de arquivo para se basear.

Eu pessoalmente utilizo uma versão atualizada desse gerenciador de stoploss, mas ele não tem nenhuma relação com este tópico aqui, você deve implementar quaisquer procedimentos de stoploss que prefira utilizar. O código que carreguei neste tópico não depende de um arquivo de stoploss, mas depende de você configurar corretamente seu código para identificar o preço do stoploss, de modo que você possa enviá-lo para a função de chamada do equityatrisk.



>>> OK! Tenho minhas próprias tampas de parada para que eu não precise disso - vou removê-las!



É uma nova versão, coloquei o link para ela no final do meu post na parte inferior da primeira página deste tópico (eu colocaria o link para ela, mas a busca está CORRIDA, argh!)

Modifiquei a nova versão de modo que ela funcione de forma transparente com corretores do tipo ecn. Envie suas ordens através de encomendas confiáveis e não importa se o corretor aceita ou não SL & TP em ordens de mercado, o roteiro de ordens confiáveis trata disso para você.


>>> OK, já estou usando o OrderSendReliable2Step, então vou deixar meu código como está, usando meu LibOrderReliable.mqh existente. Ainda assim, não precisamos incluir o novo arquivo Analyze_Currency_Symbol_2010.10.29.mqh também?



Sim, estas são variáveis que você precisa declarar em algum momento em seu código e atribuir-lhes os preços de mercado para os quais você deve abrir a nova posição (OpenPrice_ND) e o preço de stoploss (StopLossPrice_ND).

Alternativamente, você poderia renomear minhas variáveis com as que você já está usando. Considere essas variáveis como placeholders, substitua suas variáveis quando apropriado.


>>> Entendi, foi o que eu imaginei que fossem. Acho que você pulou este comentário que eu havia feito --> "Também nesta nova versão de sua função LotSize, o número de parâmetros e a ordem deles mudou um pouco, não é mesmo?"




Faz diferença zero. Tudo o que é importante é que você passe o tipo de ordem corretamente para as respectivas funções de chamada. Eles já estão codificados para fazer a coisa certa, dependendo do tipo de ordem. Se você não enviar o tipo de ordem correto para a função de chamada, então você definitivamente obterá resultados inválidos das próprias funções de chamada.


>>> OK!



Todas estas são boas perguntas, se você não perguntar, então não pode esperar que você aprenda ;)


>>> Estou tentando! Obrigado Phillip.


Shawn


 

>>> não precisamos incluir também o novo arquivo Analyze_Currency_Symbol_2010.10.29.mqh?

Não em seu EA, mas você precisa do arquivo em seu diretório de inclusão porque ele é chamado a partir do arquivo de inclusão do Gerenciamento de Posição Comercial.

Ao ter #include <Trade_Position_Management_2010.10.29.mqh> em seu EA, você já tem link com Trade_Position_Management_2010.10.29.mqh e Analyze_Currency_Symbol_2010.10.29.mqh.

>>> Também nesta nova versão de sua função LotSize, o número de parâmetros e a ordem deles mudou bastante, não foi

Você não precisa mais basear o CurrentSymbolType nem o CurrentCounterPairForCross. Ele é tratado internamente agora.

Se você olhar dentro do arquivo Trade Position você verá a seção equityatrisk e há comentários a respeito do uso da função. Eles podem ajudar, mas não têm certeza de quão auto-explicativos eles são.

 

É um bug que só aconteceu comigo?
Não posso compilar nenhum arquivo com o MetaEditor mq4 se eu colocar uma linha com # include.
Nem fui capaz de compilar arquivos mq4 que tenham uma linha # include no código.
Só permite linhas
# Include <stderror.mqh>
# Include <stdlib.mqh>
# Include <WinUser32.mqh>