Discussão do artigo "Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte VIII): Eventos de modificação de ordens e posições"
Boa noite, Artem. Você vive e aprende para sempre! E eu estou aprendendo, usando seu trabalho como material metodológico. Obrigado por seu trabalho e experiência consideráveis.
Obviamente, não sem mal-entendidos e, para ser ainda mais preciso, quanto mais aprendo, mais não entendo.
No arquivo anexo, tentei modificar seu Expert Advisor TestDoEasyPart08, adicionando um indicador personalizado, também o iCrossAD.
Usei a função iCustom(asymbol.Name(), _Period, "iCrossAD");
CrossAD = iCustom(asymbol.Name(), _Period, "iCrossAD"); if (CrossAD == INVALID_HANDLE) { Print("Falha ao criar o descritor do indicador iCrossAD!"); return(INIT_FAILED); }
Em seguida, tentei copiar os dados do indicador para os buffers do EA e verifiquei se estava conseguindo fazer isso bem.
void OnTick() { //+------------------------------------------------------------------+////////////////////////////// int buf_size = 30; double Buf_Arrow_Sell[], Last_Arrow_Sell; double Buf_Arrow_Buy[], Last_Arrow_Buy; ArraySetAsSeries(Buf_Arrow_Sell, true); ArraySetAsSeries(Buf_Arrow_Buy, true); if (CopyBuffer(CrossAD, 3, 0, buf_size, Buf_Arrow_Sell) != buf_size || ArraySize(Buf_Arrow_Sell) != buf_size) { Print("Falha ao copiar corretamente os dados do iCrossAD"); return; } else Last_Arrow_Sell = Buf_Arrow_Sell[0]; if (CopyBuffer(CrossAD, 2, 0, buf_size, Buf_Arrow_Buy) != buf_size || ArraySize(Buf_Arrow_Buy) != buf_size) { Print("Falha ao copiar corretamente os dados do iCrossAD"); return; } else Last_Arrow_Buy = Buf_Arrow_Buy[0]; //+------------------------------------------------------------------+ Comment("Saída de dados fractais"., "\n Last_Arrow_Buy = ",Last_Arrow_Buy, "\n ---------------------- ", "\n Last_Arrow_Sell = ",Last_Arrow_Sell ); //+------------------------------------------------------------------+ //+------------------------------------------------------------------+//////////////////////////////
Todos esses truques não funcionam. Por favor, diga-me onde estou errando e como fazer isso realmente ????.
Boa noite, Artem. Você vive e aprende para sempre! E estou aprendendo, usando seu trabalho como material metodológico. Obrigado por seu considerável trabalho e experiência.
É claro que não é sem mal-entendidos e, para ser ainda mais preciso, quanto mais aprendo, mais não entendo.
No arquivo anexado, há uma tentativa de modificar seu Expert Advisor TestDoEasyPart08, adicionando um indicador personalizado, também o iCrossAD.
Usei a função iCustom(asymbol.Name(), _Period, "iCrossAD");
Em seguida, tentei copiar os dados do indicador para os buffers do EA e verifiquei se consegui fazer isso bem
Todo esse truque não quer funcionar. Por favor, diga-me onde estou errando e como fazer isso realmente?
"Não quer funcionar" - o que exatamente não funciona?
Isso é o que eu faria em nível global:
int buf_size = 30; double Buf_Arrow_Sell[], Last_Arrow_Sell; double Buf_Arrow_Buy[], Last_Arrow_Buy;
Isso em OnInit():
ArraySetAsSeries(Buf_Arrow_Sell, true); ArraySetAsSeries(Buf_Arrow_Buy, true);
E verificar se o indicador tem valores nos buffers na barra zero - você só os verifica na barra zero. Não me lembro o que ele fornece e em que barra.
- "O que exatamente não está funcionando...?" - Nesta etapa, estou tentando ver os valores das últimas setas para cima e para baixo do indicador nos Comentários. Se eu conseguir isso, poderei compará-las por tempo e, portanto, saberei qual delas foi a última e, portanto, a "atual". Isso pode ser considerado como um sinal ao alterar o valor ou como um filtro para outros sinais (pode/não pode). Mas o problema é que não consigo inserir esses valores nos Comentários e, mais ainda, não consigo ver os próprios Comentários, o texto deveria estar visível?
- " Isto é o que eu faria em um nível global: ..." - Movi-o, tentei entender por que é assim, acho que consegui, obrigado pela ciência!!!!
- "Isso é o que eu faria em OnInit(): ..." - Movi-o, muito obrigado, vou me lembrar disso.
- "E verifique se o indicador sempre tem valores nos buffers na barra zero - ..." - Vou tentar organizar um comentário dentro do indicador e executar o indicador para ver o valor em si com meus olhos, mas como eles serão exibidos em um gráfico? Ativar o indicador em um gráfico separado?
- "Você os verifica somente na barra zero..." - Sim, percebo que, ao acessar a matriz com essas setas, provavelmente obterei quase sempre um valor vazio e apenas raramente, quando uma seta for desenhada, o valor não estará vazio. Então, preciso organizar uma troca do último sinal no lado do indicador ou executar um loop, escrever os últimos valores até o primeiro não vazio aqui no Expert Advisor? Ou seja, exatamente a mesma troca que no lado do indicador?????
Por favor, ajude-me com o comentário, pois não consigo entender por que ele não é exibido!!!!
- "O que exatamente não está funcionando...?" - Nesta etapa, estou tentando ver os valores das últimas setas para cima e para baixo do indicador nos Comentários. Se eu conseguir isso, poderei compará-las por tempo e, portanto, saberei qual delas foi a última e, portanto, a "atual". Isso pode ser considerado como um sinal ao alterar o valor ou como um filtro para outros sinais (pode/não pode). Mas o problema é que não consigo inserir esses valores nos Comentários e, mais ainda, não consigo ver os próprios Comentários, o texto deveria estar visível?
- " Isto é o que eu faria em nível global:" - Movi-o, tentei entender por que é assim, acho que consegui, obrigado pela ciência!!!!
- "Este aqui em OnInit():" - Movido, muito obrigado, vou me lembrar.
- "E verifique se o indicador sempre tem valores nos buffers na barra zero - ..." - Tentarei organizar um comentário dentro do indicador e executar o indicador para ver o valor em si com meus olhos, mas como eles serão exibidos em um gráfico? Ativar o indicador em um gráfico separado?
- "Você os verifica somente na barra zero..." - Sim, percebo que, ao acessar a matriz com essas setas, provavelmente obterei quase sempre um valor vazio e apenas raramente, quando uma seta for desenhada, o valor não estará vazio. Então, preciso organizar uma troca do último sinal no lado do indicador ou executar um loop, escrever os últimos valores até o primeiro não vazio? Quero dizer exatamente a mesma troca do lado do indicador????
Por favor, ajude-me com o comentário, pois não consigo entender por que ele não é exibido!!!!
O que está escrito no registro "Experts"? As alças do indicador são criadas?
O que está escrito no diário "Experts"? Os identificadores de indicadores são criados?
Boa tarde. Sim, a alça foi criada e é igual a 10.
Fiz um pouco de progresso (muito pouco!). Há registros de comentários
Há registros de Print()
2019.05.19 17:31:13.127 2018.01.02 00:00:00 Handle iCrossAD = 10
2019.05.19 17:31:13.580 2018.01.02 09:00:00:00 Copiou dados do segundo buffer do indicador iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Dados copiados do 3º buffer do indicador iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:20 Dados copiados do segundo buffer do indicador iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.581 2018.01.02 09:00:20 Dados copiados do 3º buffer do indicador iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
Dois buffers no indicador, dos quais os dados são copiados, contêm os valores para os quais as setas do indicador são definidas. Eles são gravados lá no momento da definição da seta. Dessa forma, concluo que eles devem ser preenchidos com preços duplos no momento da formação da seta. Mas, por algum motivo, recebo uma figura cósmica que, se não me engano, é o máximo de valores duplos possíveis no MT5.
Mas eu tentei e consegui isso no testador, não havia cotações ontem e hoje, hoje é domingo.
Se houver algum desejo, por favor, me ajude a entender. Expert Advisor e indicador anexados à postagem. O Expert Advisor foi alterado, escrevi sobre isso acima, o indicador também é seu, não há alterações nele.
Boa tarde. Sim, a alça foi criada, é igual a 10.
Fiz um pouco de progresso (muito pouco!). Apareceram registros de comentários
Há registros de Print()
2019.05.19 17:31:13.127 2018.01.02 00:00:00 Handle iCrossAD = 10
2019.05.19 17:31:13.580 2018.01.02 09:00:00:00 Copiou dados do segundo buffer do indicador iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Dados copiados do terceiro buffer do indicador iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.79769313486262316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:20 Dados copiados do segundo buffer do indicador iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.79769313486262316e+308
2019.05.19 17:31:13.581 2018.01.02 09:00:20 Dados copiados do 3º buffer do indicador iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.79769313486262316e+308
Dois buffers no indicador, dos quais os dados são copiados, contêm os valores para os quais as setas do indicador são definidas. Eles são gravados lá no momento da definição da seta. Dessa forma, concluo que eles não devem ser preenchidos com preços duplos. Mas, por algum motivo, tenho uma figura cósmica que, se não me engano, é o máximo de valores duplos possíveis no MT5.
No entanto, eu tentei e consegui isso no testador, não havia cotações ontem e hoje, hoje é domingo.
Se houver algum desejo, por favor, me ajude a entender. Expert Advisor e indicador anexados à postagem. O Expert Advisor foi alterado, escrevi sobre isso acima, o indicador também é seu, não há alterações nele.
Bem, aqui discutimos questões sobre a biblioteca, não a ignorância trivial sobre valores vazios de buffers de indicadores. VALOR_VAZIO == DBL_MAX
Entendi, ouvi, obrigado. Acho que eu sabia algo sobre valores vazios, vou estudar a questão.
Se não for apropriado aqui, você pode recomendar algum tópico em que eu possa obter respostas para essas perguntas mais simples de você ou de seus colegas?
Se não houver um lugar assim, provavelmente valeria a pena criar um.
Desculpe-me por incomodá-lo, mas não há conversas animadas aqui, não há ninguém para interferir e quem, além do autor, dará a melhor orientação.
Além disso, estou tentando usar sua biblioteca. Primitiva, é claro, mas o melhor que posso, desculpe.
Roger, ouvi você, obrigado. Achei que sabia algo sobre valores vazios, vou dar uma olhada nisso.
Se não for apropriado aqui, você pode recomendar algum outro tópico em que eu possa obter respostas para essas perguntas mais simples de você ou de seus colegas?
Se não houver um lugar assim, provavelmente valeria a pena criar um.
Desculpe incomodá-lo, mas não há discussões animadas aqui, não há ninguém para incomodar e quem, além do autor, dará a melhor orientação.
Além disso, estou tentando usar sua biblioteca. Primitivo, é claro, mas como posso, desculpe.
Para perguntas não relacionadas à biblioteca, escreva aqui:
- 2016.11.09
- www.mql5.com
Para perguntas não relacionadas à biblioteca, poste aqui:
Muito obrigado, fui, olhei, li. Era exatamente o que eu precisava, vou usá-lo.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Biblioteca para desenvolvimento fácil e rápido de programas para a MetaTrader (parte VIII): Eventos de modificação de ordens e posições foi publicado:
Nos artigos anteriores, nós começamos a criar uma grande biblioteca multi-plataforma, simplificando o desenvolvimento de programas para as plataformas MetaTrader 5 e MetaTrader 4. Na sétima parte, nós adicionamos o monitoramento da ativação de ordens StopLimit e preparamos a funcionalidade para o monitoramento de outros eventos envolvendo ordens e posições. Neste artigo, nós desenvolveremos a classe para monitorar os eventos de modificação de ordens e posições.
Vamos compilar o EA.
Definimos os valores em pontos do StopLoss e TakeProfit iguais a zero para abrir as posições e colocar as ordens pendentes sem os níveis de stop. Definimos o StopLoss para modificação (pontos) e TakeProfit para modificação (pontos) para 20 e 60, respectivamente (os valores padrão) — estes níveis de StopLoss e TakeProfit devem ser ajustados através do pressionamento dos botões.
Iniciamos o EA no testador e definimos as ordens pendentes. Em seguida, pressionamos os botões para definir o StopLoss e TakeProfit um após o outro. Os níveis são definidos e as entradas apropriadas aparecem no diário. Em seguida, ativamos o trailing e observamos as ordens conforme seguindo o preço e as entradas correspondentes são exibidas no diário. As posições acionadas pelas ordens possuem os seus níveis de StopLoss alterados, e as entradas correspondentes aparecem no diário.
Netting:
Hedging:
Autor: Artyom Trishkin