Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1474

 
Artyom Trishkin #:

Você não está entendendo o ponto da minha pergunta. Você não precisa esperar o servidor quando ele ficar sem memória e estourar.

Se houver um vazamento de objeto no código, recompile-o em seu computador local com o Expert Advisor em execução - uma mensagem sobre o número e o tipo de objetos vazados deve ser exibida nos registros. Ou execute-o em um gráfico e retire-o de uma vez - uma mensagem sobre o vazamento também deve aparecer, se houver, é claro.

Ele não grava nada durante a compilação. Ele o exclui e instala um novo. Isso é tudo.

NM      0       00:18:47.545    Experts expert Comm (SBRF-12.23,M1) removed
JI      0       00:18:47.547    Experts expert Comm (SBRF-12.23,M1) loaded successfully
KQ      0       00:18:47.560    Experts expert Comm (RTS-12.23,M1) removed
EE      0       00:18:47.562    Experts expert Comm (RTS-12.23,M1) loaded successfully

Ele ainda está funcionando no servidor. Vou esperar, talvez ele escreva algo nos registros.

 
Aleksandr Slavskii #:

Tentei fazer um análogo do comentário, mas as letras eram maiores.

Algum tempo depois de executar o Expert Advisor com um comentário em vários gráficos, algo ruim aconteceu, até a tela se apagar e reiniciar o servidor)))))

Está claro que estou fazendo algo errado com a classe CCanvas, mas o que exatamente está errado, eu não entendo.

Acho que já entendi. Corrija-me se entendi errado.

No meu código, em cada tique, crio um recurso com nomes diferentes.

código do Canvas

      //--- generate resource name
      m_rcname="::"+name+(string)ChartID()+(string)(GetTickCount()+MathRand());
      //--- initialize data with zeros
      ArrayInitialize(m_pixels,0);
      //--- create dynamic resource
      if(ResourceCreate(m_rcname,m_pixels,width,height,0,0,0,clrfmt))

E, na próxima atualização da imagem, esse recurso não é excluído, aparentemente.

O objeto é o mesmo, mas os recursos são anexados a ele de forma diferente.

Portanto, refiz o código.

Acho que ele deve estar correto.

#include <Canvas\Canvas.mqh>
//+------------------------------------------------------------------+
void Comm(string txt, color clr = clrYellow, int FontSize = 20, string Font = "Consolas", int flag = FW_BOLD)
  {
   int shift = 0;
   if(ChartGetInteger(0, CHART_SHOW_ONE_CLICK))
      shift = 60;

   CCanvas canvas;
   canvas.FontNameSet(Font);
   canvas.FontFlagsSet(flag);
   canvas.FontSizeSet(FontSize);

   int width = 0, height = 0;
   string result[];
   int size = StringSplit(txt, StringGetCharacter("\n", 0), result);
   height = (int)(FontSize * 1.8 * size);

   for(int i = 0; i < size; i++)
     {
      int w = canvas.TextWidth(result[i]);
      if(width < w)
         width = w;
     }

   if(ObjectFind(0, "Comment") < 0)
      canvas.CreateBitmapLabel(0, 0, "Comment", 5, 20 + shift, width, height, COLOR_FORMAT_ARGB_NORMALIZE);
   else
      canvas.Attach(0, "Comment", width, height, COLOR_FORMAT_ARGB_NORMALIZE);
   canvas.Erase(0x00FFFFFF);

   for(int i = 0; i < size; i++)
      canvas.TextOut(0, (int)(FontSize * 0.8 * i), result[i], ColorToARGB(clr, 255));

   canvas.Update(true);
  }
//+------------------------------------------------------------------+
 
Aleksandr Slavskii #:

Ele não escreve nada durante a compilação. Ele desinstala e reconstrói. Isso é tudo.

Ele ainda está funcionando no servidor. Vou esperar, talvez ele escreva algo nos registros.

"Revista "Experts

 
Artyom Trishkin #:

Revista Experts

Na Revista Experts, limpeza estéril.

//---

Em geral, resolvemos a causa do problema.

A questão que permanece é como excluir da memória um recurso criado pelo kanvas ao fechar o programa.

Eu excluo o objeto, ele tem um nome, mas o nome do recurso é "protegido" e não é possível reconhecê-lo de forma alguma.

Sim, a OOP é uma coisa engraçada.

No final, tive que declarar o canvas no global em vez de no corpo da função e adicionar canvas.Destroy() ao deinit;

O voo está bom)

 

Bom dia e bom humor!

Há muito tempo venho usando uma função pronta para calcular o lote de acordo com o risco, mas ela não estava vinculada ao tamanho do stop loss. Hoje decidi escrever minha própria função do zero na forma de um script (para facilitar a verificação), mas com o stop loss levado em consideração. Veja a fórmula para calcular o tamanho do lote (destacada em amarelo). Talvez eu tenha deixado passar alguma coisa.

Todos os tipos de verificações de lote mínimo, máximo, etapa, etc., etc., não foram incluídos, pois farei isso mais tarde!

Saudações, Vladimir.

//+------------------------------------------------------------------+
//|                                   Lot_Size_Depending_On_Risk.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
input double Risk=5;      // Размер риска
input uint Stop_Loss=500; // Размер стоп-лосса
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot_Size_Depending_On_Risk()
  {
   //--- определим валюту депозита
   string symbol="";
   string account_currency="";
   symbol=account_currency==AccountInfoString(ACCOUNT_CURRENCY) ? "EURUSDrfd" : "USDRUBrfd";
   double trading_account_currency=NormalizeDouble(SymbolInfoDouble(symbol,SYMBOL_BID),2);
   double lot=(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk*0.01)/(Stop_Loss*trading_account_currency);
   return(lot);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(DoubleToString(Lot_Size_Depending_On_Risk(),2));
  }
//+------------------------------------------------------------------+
 
MrBrooklin #:

Bom dia e bom ânimo a todos!

Há muito tempo venho usando uma função pronta para calcular o lote dependendo do risco, mas ela não estava vinculada ao tamanho do stop loss. Hoje decidi escrever minha própria função do zero na forma de um script (para facilitar a verificação), mas com o stop loss levado em consideração. Veja a fórmula para calcular o tamanho do lote (destacada em amarelo). Talvez eu tenha deixado passar alguma coisa.

Todos os tipos de verificações de lote mínimo, máximo, etapa, etc., etc., não foram incluídos, pois farei isso mais tarde!

Saudações, Vladimir.

É necessário levar em conta o custo de um tick.

 
Alexey Viktorov #:

Não deixe de considerar o custo por tique.

Olá Alexey, obrigado por responder. Para fins de autodidatismo, gostaria de entender o propósito de levar em conta o custo de um tick e também explicar brevemente em que parte da fórmula ele deve ser aplicado, se você não se importar. Talvez eu não tenha entendido muito bem do que você está falando.

Atenciosamente, Vladimir.

 
MrBrooklin #:

Olá Alexey, obrigado por responder. Para fins de autodidatismo, gostaria de entender o propósito de levar em conta o custo por tick e também explicar brevemente em que parte da fórmula aplicá-lo, se você não se importar. Talvez eu não tenha entendido o que você está falando.

Atenciosamente, Vladimir.

Para determinar o valor que um trader está disposto a perder em caso de falha. Perda = Perda*valor do pip*lote. Portanto, lote = perda aceitável/ (perda*valor do pip) A fórmula é aproximada.

 
Alexey Viktorov #:

Para determinar o valor que um trader está disposto a perder em caso de falha. Perda = Perda*valor do pip*lote. Portanto, lote = perda aceitável/ (perda*valor do pip) A fórmula é aproximada.

Entendo. Vou pensar no que fazer para implementá-la. Obrigado por sua orientação!

Atenciosamente, Vladimir.

 

Como posso saber o horário de fechamento de uma posição no testador?

Abro as posições 1, 2, 3

Fecho as posições 3, 2, 1

Nem no relatório do testador nem no próprio testador, não descobri como descobrir o horário de fechamento de uma determinada posição.

Da mesma forma, no relatório que o testador registra, não há como descobrir o horário de fechamento de uma posição.


Preciso descobrir o horário de abertura e fechamento de uma posição. Como?

Em uma de suas bibliotecas,a fxsaber escreve: "Obrigado aos desenvolvedores por criarem os caches do Tester e ajudarem a abrir seus formatos".

Não consigo entender a biblioteca em si.

Só consegui encontrar o formato dos arquivos opt.

Se alguém souber onde o fórum divulga os arquivos tst - formato de passagem única, forneça um link, talvez eu consiga encontrar o position_ID neles.

fxsaber, se você estiver lendo, por favor, responda.

Razão: