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

 
-Aleks- :

내가 그것을 알아낼 수 있도록 도와주세요!

나는 각 (그대로) 요일(파일은 하루에 한 번 작성됨)에 대한 최대 감소를 찾아야 합니다 . - MT4 터미널.

최대 드로우다운은 차트에서 펀드의 피크부터 현재 드로우다운까지의 거리이고, 드로우다운은 현재 손실입니다.

이 코드를 작성했습니다

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew==AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

그러나 일부 차트에서는 올바르게 표시되고 일부에서는 표시되지 않습니다. 시각적으로는 차트가 동일한 유형입니다.

분명히 코드나 논리에 실수를 한 것 같은데 어느 쪽인지 알 수 없습니다.

내가 아는 한, 균형에서가 아니라 Equity Peak에서 Equity pit까지 계산해야 하므로 하락의 그림이 크게 부드러워집니다!

그리고 답변에 코드가 중복되어 사이트가 어지럽지 않도록 SRC 버튼을 다른 방법으로 사용하십시오!

 
Boris :

내가 아는 한, 균형에서가 아니라 Equity Peak에서 Equity pit까지 계산해야 하므로 하락의 그림이 크게 부드러워집니다!

그리고 답변에 코드가 중복되어 사이트가 어지럽지 않도록 SRC 버튼을 다른 방법으로 사용하십시오!

잔액을 자금으로 변경했습니다. 여전히 테스터와 수렴하지 않습니다. 테스터의 가치가 더 큽니다. ACCOUNT_PROFIT - 사실, 잔액과 자금 간의 델타, 아마도 이것이 요점입니다 ... 반면에 작업은 고문이 작동하는 데 얼마나 많은 돈이 필요한지 알아내는 것이므로 취하는 것은 의미가 없습니다. 최대 자금을 고려하여 나에게 ...

SRC가 무엇인지 몰라서 사용하지 않습니다.

 
-Aleks- :

잔액을 자금으로 변경했습니다. 여전히 테스터와 수렴하지 않습니다. 테스터의 가치가 더 큽니다. ACCOUNT_PROFIT - 사실, 잔액과 자금 간의 델타, 아마도 이것이 요점입니다 ... 반면에 작업은 고문이 작동하는 데 얼마나 많은 돈이 필요한지 알아내는 것이므로 취하는 것이 의미가 없습니다. 최대 자금을 고려하여 나에게 ...

SRC가 무엇인지 몰라서 사용하지 않습니다.

비디오 카메라 왼쪽에 있는 이 버튼(위 참조)은 코드를 붙여넣는 데 사용됩니다!

주식에 대해! 잔액을 Equity로 대체한 경우 ACCOUNT_PROFIT를 제외해야 합니다. 자본 = 잔액 + 이익. 그러나 우리는 터미널에서 끊임없이 변화하는 Equity를 봅니다. 테스터의 보고서에서 Equity 및 드로우다운은 포지션을 닫는 순간에 기록되므로 중간 해치 드로우다운은 고정되지 않습니다. 그 결과 테스터의 사진은 실제보다 더 즐겁습니다. 최근부터 테스터, 데모, 실생활에서 헛소리를 피하기 위해 어드바이저의 각 조치, 열기, 수정, 닫기 등에 필요한 모든 정보를 입력하고 있습니다. 나 자신이나 다른 사람을 용납하십시오! 하지만 이미 눈치채셨을 겁니다. ;)

 

좋은 저녁이에요! 표준 라이브러리 의 CTrailingFixedPips 클래스 에 대해 알려주세요. "추적" TakeProfit 수준의 의미는 무엇입니까? 그것은 결코 도달하지 않을 것입니다, 그렇죠? 또는 무언가 또는 코드 또는 의미를 이해하지 못합니다.

문서에서:

" 가격 오프셋이 손절매 수준보다 크면 포지션에 대한 새로운 손절매 가격을 설정하는 것이 제안됩니다. 손절매 수정 조건이 충족되고 이익 실현 수준이 0이 아닌 경우 포지션에 대한 새로운 이익실현 가격을 설정하도록 제안했습니다 ."

<전문가\Trailing\CTrailingFixedPips.mqh>

 //+------------------------------------------------------------------+
//| Checking trailing stop and/or profit for long position.          |
//+------------------------------------------------------------------+
bool CTrailingFixedPips::CheckTrailingStopLong(CPositionInfo *position, double &sl, double &tp)
  {
...
...   
   delta=m_stop_level*m_adjusted_point;
   if (price-base>delta)
     {
      sl=price-delta;
       if (m_profit_level!= 0 ) tp=price+m_profit_level*m_adjusted_point;
     }
...
  }
 
Hexen :

좋은 저녁이에요! 표준 라이브러리 의 CTrailingFixedPips 클래스 에 대해 알려주세요. "추적" TakeProfit 수준의 의미는 무엇입니까? 그것은 결코 도달하지 않을 것입니다, 그렇죠? 또는 무언가 또는 코드 또는 의미를 이해하지 못합니다.

문서에서:

" 가격 오프셋이 손절매 수준보다 크면 포지션에 대한 새로운 손절매 가격을 설정하는 것이 제안됩니다. 손절매 수정 조건 이 충족되고 이익 실현 수준이 0이 아닌 경우 포지션에 대한 새로운 이익실현 가격을 설정하도록 제안했습니다 ."

<전문가\Trailing\CTrailingFixedPips.mqh>

오타일 가능성이 큽니다. 손절매여야 합니다.
 
Hexen :

좋은 저녁이에요! 표준 라이브러리 의 CTrailingFixedPips 클래스 에 대해 알려주세요. "추적" TakeProfit 수준의 의미는 무엇입니까? 그것은 결코 도달하지 않을 것입니다, 그렇죠? 또는 무언가 또는 코드 또는 의미를 이해하지 못합니다.

문서에서:

" 가격 오프셋이 손절매 수준보다 크면 포지션에 대한 새로운 손절매 가격을 설정하는 것이 제안됩니다. 손절매 수정 조건이 충족되고 이익 실현 수준이 0이 아닌 경우 포지션에 대한 새로운 이익실현 가격을 설정하도록 제안했습니다 ."

<전문가\Trailing\CTrailingFixedPips.mqh>

위의 코드로 판단하면 TP는 SL과 동기적으로 움직인다. 용광로에서 그런 후행)
 
Boris :

비디오 카메라 왼쪽에 있는 이 버튼(위 참조)은 코드를 붙여넣는 데 사용됩니다!

따라서 코드에는 "코드" 스타일이 있습니다. 메뉴에서 선택합니다. 저는 그것을 사용합니다.

보리스 :

주식에 대해! 잔액을 Equity로 대체한 경우 ACCOUNT_PROFIT를 제외해야 합니다. 자본 = 잔액 + 이익. 그러나 우리는 터미널에서 끊임없이 변화하는 Equity를 봅니다. 테스터의 보고서에서 Equity 및 드로우다운은 포지션을 닫는 순간에 기록되므로 중간 해치 드로우다운은 고정되지 않습니다. 그 결과 테스터의 사진은 실제보다 더 즐겁습니다. 최근부터 테스터, 데모, 실생활에서 헛소리를 피하기 위해 어드바이저의 각 조치, 열기, 수정, 닫기 등에 필요한 모든 정보를 입력하고 있습니다. 나 자신이나 다른 사람을 용납하십시오! 하지만 이미 눈치채셨을 겁니다. ;)

테스터에서 포지션을 청산하는 순간에만 드로다운을 고정했다면, 하나의 주문을 사용할 때 시장에서 드로우다운은 없을 텐데, 그렇지 않습니다 ;)

ACCOUNT_PROFIT=Account-balance , 그래서 계산에서 이 표시기를 사용하지 않을 이유가 없습니다...

 
-Aleks- :

내가 그것을 알아낼 수 있도록 도와주세요!

나는 각 (그대로) 요일(파일은 하루에 한 번 작성됨)에 대한 최대 감소를 찾아야 합니다 . - MT4 터미널.

최대 드로우다운은 차트에서 펀드의 피크부터 현재 드로우다운까지의 거리이고, 드로우다운은 현재 손실입니다.

이 코드를 작성했습니다

   if(Analiz_Prosadki==true)
     {
      if(ContolSavaTXT==1)
        {
         ProfitNew=0;
         ProfitMin=0;
         ContolSavaTXT=0;
        }

      if(ContolSavaTXT==0)
        {
         ProfitNew=AccountInfoDouble(ACCOUNT_PROFIT);
         BalansNew= = AccountInfoDouble(ACCOUNT_BALANCE);  //Текузее значение баланса
         if (BalansNew>BalansMax) BalansMax=BalansNew;
         if (ProfitNew<ProfitMin && BalansNew>=BalansMax) ProfitMin=ProfitNew;
         if (ProfitNew<ProfitMin && BalansNew<BalansMax) ProfitMin=ProfitNew-(BalansMax-BalansNew);
        }

      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitMin);   // Пишем информацию в файл - функция возвращает 1
     }

그러나 일부 차트에서는 올바르게 표시되고 일부에서는 표시되지 않습니다. 시각적으로는 차트가 동일한 유형입니다.

분명히 코드나 논리에 실수를 한 것 같은데 어느 쪽인지 알 수 없습니다.

코드에서 오류를 찾았습니다. 추가 등호는 다음과 같아야 합니다.

  BalansNew = AccountInfoDouble(ACCOUNT_BALANCE);  

그러나 이것은 틱당 계산과 테스터의 결과 사이의 차이에 대한 이유를 밝히는 데 훨씬 더 가까이 다가가지 못했습니다.

나는 지분 계산으로 보리스의 이론을 확인했습니다. 동일한 결과는 음수입니다.

   if(Analiz_Prosadki==true)

     {

      if(ContolSavaTXT==1)

        {

         ProfitNew=0;

         ContolSavaTXT=0;

        }


      if(ContolSavaTXT==0)

        {

         BalansNew=AccountInfoDouble(ACCOUNT_EQUITY);  //Текущее значение баланса

         if (BalansNew>BalansMax) BalansMax=BalansNew;

         if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;

         if (ProfitNew<ProfitMin) ProfitMin=ProfitNew;

        }


      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitNew);   // Пишем информацию в файл - функция возвращает 1

     }

그건 그렇고, 거래에 하나의 로트 만 있으면 차트의 테스터에서 자본과 균형이 어떻게 동기화되지 않는지 명확하지 않습니까?

 
-Aleks- :

코드에서 오류를 찾았습니다. 추가 등호는 다음과 같아야 합니다.

  BalansNew = AccountInfoDouble(ACCOUNT_BALANCE);  

그러나 이것은 틱당 계산과 테스터의 결과 사이의 차이에 대한 이유를 밝히는 데 훨씬 더 가까이 다가가지 못했습니다.

나는 지분 계산으로 보리스의 이론을 확인했습니다. 동일한 결과는 음수입니다.

   if(Analiz_Prosadki==true)

     {

      if(ContolSavaTXT==1)

        {

         ProfitNew=0;

         ContolSavaTXT=0;

        }


      if(ContolSavaTXT==0)

        {

         BalansNew=AccountInfoDouble(ACCOUNT_EQUITY);  //Текущее значение баланса

         if (BalansNew>BalansMax) BalansMax=BalansNew;

         if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;

         if (ProfitNew<ProfitMin) ProfitMin=ProfitNew;

        }


      ContolSavaTXT=Printer.Write((string)TimeCurrent(),ProfitNew);   // Пишем информацию в файл - функция возвращает 1

     }

그건 그렇고, 거래에 하나의 로트 만 있으면 차트의 테스터에서 자본과 균형이 어떻게 동기화되지 않는지 명확하지 않습니까?

"형평성과 균형이 어떻게 일치하지 않는지"를 이해하려면 균형이 무엇인지, 자기자본이 무엇인지 이해해야 합니다.

잔액 - 계정의 고정 금액입니다.

자본 - 계정의 현재 변동 가능한 자본 금액입니다.

테스터에는 현재 작성 중인 것과 동일한 기능이 포함되어 있고 단점을 수정하지만 원하는 대로는 되지 않습니다.

결과적으로 최대 감소량을 계산하려면 이 값을 정적 또는 전역 변수 수준으로 저장할 변수를 선언한 다음 코드에서와 거의 동일한 방식으로 이 변수를 덮어써야 합니다.

여기 당신이 쓴 것입니다 ...

if (BalansNew>BalansMax) BalansMax=BalansNew; // Если новое значение эквити больше зафиксированного в прошлый раз - перезапишем значение переменной

// но это не просадка, это максимальная прибыль

if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;  // А здесь BalansNew уже равно BalansMax и эта строка не выполняется никогда...

두 개의 변수를 max와 min으로 만들고 그 안에 값을 써야 합니다.

그리고 큰 소리로 생각하십시오 : 하루가 아니라 주문을 닫고 변수를 덮어 쓸 때 파일에 쓰는 것이 좋습니다. 이 때, 자기자본은 잔액과 같으며, 우리가 max와 min을 쓰는 변수는 0으로 재설정된다.

 
Alexey Viktorov :

"형평성과 균형이 어떻게 일치하지 않는지"를 이해하려면 균형이 무엇인지, 자기자본이 무엇인지 이해해야 합니다.

잔액 - 계정의 고정 금액입니다.

자본 - 계정의 현재 변동 가능한 자본 금액입니다.

테스터에는 현재 작성 중인 것과 동일한 기능이 포함되어 있고 단점을 수정하지만 원하는 대로는 되지 않습니다.

결과적으로 최대 감소량을 계산하려면 이 값을 정적 또는 전역 변수 수준으로 저장할 변수를 선언한 다음 코드에서와 거의 동일한 방식으로 이 변수를 덮어써야 합니다.

여기 당신이 쓴 것입니다 ...

if (BalansNew>BalansMax) BalansMax=BalansNew; // Если новое значение эквити больше зафиксированного в прошлый раз - перезапишем значение переменной

// но это не просадка, это максимальная прибыль

if (BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax;  // А здесь BalansNew уже равно BalansMax и эта строка не выполняется никогда...

두 개의 변수를 max와 min으로 만들고 그 안에 값을 써야 합니다.

그리고 큰 소리로 생각하십시오 : 하루가 아니라 주문을 닫고 변수를 덮어 쓸 때 파일에 쓰는 것이 좋습니다. 이 때, 자기자본은 잔액과 같으며, 우리가 max와 min을 쓰는 변수는 0으로 재설정된다.

도움 요청에 응해주셔서 감사합니다!

전역 변수는 시장에서 실제 작업과 관련이 있습니다. 테스트 정보가 필요합니다. 그래서 신경 쓰지 않았습니다.

자기자본과 잔액이 무엇인지에 관해서는 - 확실히 알고 있지만, 어떻게 감소가 계산되는지 - 계산할 수 없었습니다. 제 코드 예제에서 마찬가지로 잔액과 자금을 모두 최대로 취하려고 시도했음을 알 수 있습니다. , 잔액과 자금을 최소한으로 취했지만 테스터로 비슷한 결과를 얻을 수는 없습니다. 대략적으로 수렴하지만 정확히는 아닙니다.

(BalansNew<BalansMax) ProfitNew=BalansNew-BalansMax; 한 번도 실행되지 않았습니까? 새 잔고 최고치(또는 자기자본 - 어쨌든 사실이 아님)에 도달하면 막대에서 실행되지 않지만 그 순간에 나는 이익 감소 ProfitMin=ProfitNew를 수정합니다.

하루에 파일을 기록하는 것이 더 관련이 있습니다. 일반적으로 주문이 마감되는 순간이 아니라 최대 인출액에 도달하기 때문에 목표는 고문이 작동하는 데 필요한 평균 자금 금액을 계산하는 것입니다.

사유: