초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1474

 
Artyom Trishkin #:

제 질문의 요점을 놓치고 계십니다. 서버의 메모리가 부족하여 버스트가 발생해도 기다릴 필요가 없습니다.

코드에 객체 유출이 있는 경우 Expert Advisor를 실행한 상태에서 가정용 로컬 컴퓨터에서 다시 컴파일하면 유출된 객체의 수와 유형에 대한 메시지가 로그에 표시되어야 합니다. 또는 차트에서 실행하여 한 번에 삭제하세요. 물론 누출이 있는 경우 누출에 대한 메시지도 표시되어야 합니다.

컴파일할 때 아무 것도 쓰지 않습니다. 삭제하고 새 로그를 설치합니다. 그게 다입니다.

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

여전히 서버에서 작동 중입니다. 기다릴게요, 로그에 뭔가 기록할지도 모르니까요.

 
Aleksandr Slavskii #:

댓글을 아날로그로 만들려고 했지만 글자가 더 컸습니다.

여러 차트에 댓글을 달고 Expert Advisor를 실행한 후 얼마 후 화면이 꺼지고 서버가 재부팅될 때까지 문제가 발생했습니다))))).

CCanvas 클래스에서 뭔가 잘못하고있는 것은 분명하지만 정확히 무엇이 잘못되었는지 이해하지 못합니다.

나는 그것을 얻은 것 같아요. 내가 잘못 이해했다면 정정 해주세요.

내 코드에서 각 틱마다 다른 이름을 가진 리소스를 만듭니다.

캔버스에서 코드

      //--- 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))

그리고 다음 번 이미지를 새로 고칠 때 이 리소스는 삭제되지 않습니다.

객체는 동일하지만 리소스가 다르게 첨부되어 있습니다.

그래서 코드를 다시 작성했습니다.

나는 그것이 정확해야한다고 생각합니다.

#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 #:

컴파일할 때 아무것도 쓰지 않습니다. 제거했다가 다시 빌드합니다. 그게 다입니다.

서버에서 여전히 작동 중입니다. 기다릴게요, 로그에 뭔가 기록할지도 모르니까요.

"전문가" 매거진

 
Artyom Trishkin #:

전문가 매거진

전문가 매거진에서는 멸균 청결.

//---

일반적으로 문제의 원인을 해결했습니다.

프로그램을 닫을 때 메모리에서 캔버스에서 만든 리소스를 삭제하는 방법이 남아 있습니다.

개체를 삭제하면 이름이 있지만 리소스 이름이 "보호"되어 어떤 식 으로든 인식 할 수 없습니다.

예, OOP는 재미있는 것입니다.

결국 함수 본문이 아닌 전역에 canvas를 선언하고 deinit에 canvas.Destroy()를 추가해야 했습니다;

비행은 괜찮습니다)

 

좋은 하루, 좋은 기분!

오랫동안 저는 위험에 따라 로트를 계산하기 위해 기성품 함수를 사용해 왔지만 손절매 크기에 대한 구속력이 없었습니다. 오늘 저는 처음부터 스크립트 형태로 나만의 함수를 작성하기로 결정했지만 (확인을 쉽게하기 위해) 손절매를 고려했습니다. 로트 크기를 계산하는 공식(노란색으로 강조 표시)을 참조하세요. 제가 놓친 부분이 있을 수 있습니다.

최소, 최대 로트, 단계 등에 대한 모든 종류의 확인은 나중에 할 것이기 때문에 포함되지 않았습니다!

감사합니다, 블라디미르.

//+------------------------------------------------------------------+
//|                                   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 #:

모두 좋은 하루 되세요!

오랫동안 저는 위험에 따라 로트를 계산하기 위해 기성품 함수를 사용해 왔지만 손절매 크기에 대한 바인딩이 없었습니다. 오늘 저는 처음부터 스크립트 형태로 나만의 함수를 작성하기로 결정했지만 (확인을 쉽게하기 위해) 손절매를 고려했습니다. 로트 크기를 계산하는 공식(노란색으로 강조 표시)을 참조하세요. 제가 뭔가 놓쳤을 수도 있습니다.

최소, 최대 로트, 단계 등에 대한 모든 종류의 확인은 나중에 할 것이기 때문에 포함되지 않았습니다!

감사합니다, 블라디미르.

한 틱의 비용을 고려할 필요가 있습니다.

 
Alexey Viktorov #:

틱당 비용을 고려해야 합니다.

안녕하세요 Alexey 님, 답변해 주셔서 감사합니다. 자가 교육의 목적으로 진드기 한 마리의 비용을 고려하는 목적을 이해하고 괜찮다면 공식의 어느 부분에 적용해야하는지 간략하게 설명하고 싶습니다. 아마도 나는 당신이 말하는 것을 잘 이해하지 못했을 것입니다.

감사합니다, 블라디미르.

 
MrBrooklin #:

안녕하세요 Alexey 님, 답변해 주셔서 감사합니다. 자가 교육 목적으로 틱당 비용을 고려하는 목적을 이해하고 괜찮다면 공식의 어느 부분에 적용해야하는지 간략하게 설명하고 싶습니다. 제가 잘못 이해한 것 같습니다.

감사합니다, 블라디미르.

트레이더가 실패할 경우 기꺼이 잃을 수 있는 금액을 결정합니다. 손실 = 손실*핍 값*랏. 따라서 - 랏 = 허용 가능한 손실/ (손실*핍 값) 이 공식은 근사치입니다.

 
Alexey Viktorov #:

트레이더가 실패할 경우 잃을 수 있는 금액을 결정합니다. 손실 = 손실*핍 가치*랏. 따라서 - 랏 = 허용 가능한 손실/ (손실*핍 값) 이 공식은 근사치입니다.

알겠습니다. 어떻게 구현할지 천천히 생각해 보겠습니다. 조언해 주셔서 감사합니다!

안부, 블라디미르.

 

테스터에서 포지션 청산 시간을 어떻게 알 수 있나요?

포지션 1, 2, 3을 오픈합니다.

포지션 3, 2, 1을 청산합니다.

테스터 보고서나 테스터 자체에서 특정 포지션의 청산 시간을 찾는 방법을 찾지 못했습니다.

테스터가 기록하는 보고서에서도 포지션 청산 시간을 알 수 있는 방법이 없습니다.


포지션 개시 및 청산 시간을 알아야 합니다. 어떻게 해야 하나요?

라이브러리 중 하나에 "테스터의 캐시를 만들고 형식을 열어준 개발자에게 감사합니다"라고fxsaber가 썼습니다.

라이브러리 자체를 이해할 수 없습니다.

옵트 파일 형식만 찾을 수 있습니다.

포럼에서 tst 파일 - 단일 패스 형식을 공개하는 위치를 아는 사람이 있으면 링크를 알려 주시면 위치_ID를 찾을 수 있습니다.

fxsaber 읽으면 답장 해주세요.