오류, 버그, 질문 - 페이지 3155

 
murziks # :


csv 대신 Metatrader가 읽을 수 있는 다른 내용을 알려주세요.

바이너리 파일을 읽고 쓸 수 있습니다. 변수, 구조, 배열. 이 모든 것이 파일에 기록되고 다시 읽힙니다.

 

친애하는 모바일 단말기 개발자 여러분, "메일" 탭에서 문자로 작업을 수정하십시오.

모바일 단말(안드로이드)의 마지막 빌드 이전에, 작업 계정에 연결할 때 "메일" 탭에 이전에 여러 번 삭제된 문자가 쌓여 있었습니다.

삭제되지 않고 이전에 삭제된 편지의 죽인 "메일" 탭에서와 같이 계정에 다시 연결하기만 하면 됩니다. 그래서 그것을 없애기 위해 무엇을해야합니까?

 

체크박스의 값에 대해 "RMB > 거래 내역" 및 "F8 > 표시를 통해 거래 내역 표시를 활성화/비활성화할 수 있는 경우" PC용 터미널의 변경 사항을 설명하십시오. 거래 내역" ?

음, 즉 , 터미널의 일반 설정 에서 간섭하지 않도록 거래 내역 표시를 비활성화할 수 있으며 차트 설정이나 RMB를 통해 활성화된 경우 모든 차트에 표시됩니다. 나는 논리를 이해하지 못한다.

 

친애하는 PC 단말기 개발자 여러분. 오랫동안 차트 프로필(템플릿이 아닌 프로필)로 작업할 때 프로필을 변경하면 수동으로 지정하지 않아도 자동으로 저장된다는 이상한 논리가 유지되었습니다.

사용자 프로필 설정 오류 또는 터미널 충돌은 구성하기 어려운 작업 공간을 박으로 만듭니다.

글쎄요, 사용자가 프로필을 수동으로 저장하지 않은 동안 프로필에 대한 변경 사항이 저장되지 않도록 할 수 없는 이유는 무엇입니까? 마지막 작업 프로필)?

수년 동안 우리는 TradingView라 불리는 내장 인터페이스의 변경을 기다려왔지만 이것은 확실히 당신에게 어렵지 않고 사용자에게 매우 편리합니다.

 

예를 들어 " 계산 속도 를 높이기 위해 핍으로 이익" 확인란이 있는 테스트가 15% 감소하고 이 확인란이 없으면 93% 감소하는 이유는 무엇입니까?

어떤 결과가 더 맞습니까?

거래 횟수는 동일합니다.

동시에 같은 로트에서 1번의 경우 2불, 2번의 경우 20불입니다.

로트를 변경해도 차이가 10k인 것을 알 수 있습니다.

 
고맙습니다. 그런 다음 txt와 나는 원하지 않을 것입니다.
 
MQ 서버에서 암호화폐가 사라졌습니다. 저하, 슬픔 및 성가심입니다.
 

일반/대기열의 버그.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

[가능한 오류] CQueue 컨테이너 클래스

로리스 드 마르키 , 2022.02.14 13:00

안녕하세요!

나는 적어도 CQueue::Contains(T item) 및 CQueue::Remove(T item) 메서드에 버그가 있다고 생각합니다.

대기열은 고전적인 head-to-tail 라운드 로빈을 사용하여 관리되므로 이 코드는 잘못되어야 합니다.

 //+------------------------------------------------------------------+
//| Removes all values from the CQueue<T>.                           |
//+------------------------------------------------------------------+
template < typename T>
bool CQueue::Contains(T item)
  {
   int count=m_size;
//--- try to find item in array
   while (count--> 0 )
     {
       //--- use default equality function
       if (::Equals(m_array[count],item))
         return ( true );
     }
   return ( false );
  }

또한, 상단에 있는 메소드 설명이 잘못되어 이 클래스를 작성할 때 약간의 실수가 있었을지도 모른다는 생각이 들게 합니다.


Remove 메서드는 다음과 같은 간단한 코드를 실행할 때 분명히 실패합니다.

   CQueue< ulong > foo;
   foo.Enqueue( 1 );
   foo.Remove( 1 );
   foo.Enqueue( 2 );
   printf (foo.Contains( 2 ));

요소가 분명히 대기열에 있으면 "거짓"을 인쇄합니다...


이 클래스가 수정되었거나 내 클래스 중 하나를 사용해야 하는지 알려주세요.

고맙습니다!


 

안녕하세요. MQL 배열에서 직접 및 역방향 인덱싱(시리즈)을 모두 사용할 수 있는 것으로 알려져 있습니다. 따라서 시리즈 또는 역 인덱싱이 필요한 경우 MQL에서 배열로 작업하는 가장 좋은 방법은 무엇입니까? 시리즈에 대한 인덱스로 값을 얻는 첫 번째 방법은 다음과 같습니다.

 double arrayValue( const double array[], conct int shift) {
   int len = ( int )array.Size();
   if (shift < 0 || shift >= len)
     return WRONG_VALUE ;
   return array[len - shift - 1 ];
}

ArraySetAsSeries 를 사용하는 두 번째 옵션.

 double arrayValue( double &array[], conct int shift) {
   int len = ( int )array.Size();
   double ret;
   if (shift < 0 || shift >= len)
     return WRONG_VALUE ;
   if (! ArraySetAsSeries (array, true ))
     return WRONG_VALUE ;
  ret = array[shift];
   ArraySetAsSeries (array, false );
   return ret;
}

물론 나는 아무 것도 주장하지 않지만 배열은 객체이기 때문에 ( 심지어 볼 수 있음)   주어진 예제의 코드에서), ArraySetAsSeries는 단순히 배열에 대한 시리즈 플래그를 켜고 인덱스로 값에 액세스할 때 첫 번째 예제에서와 같이 발생합니다.

 double arrayValue( const double array[], conct int shift) {
   int len = ( int )array.Size();
   if (shift < 0 || shift >= len)
     return WRONG_VALUE ;
   return array[ len - shift - 1 ];
}

그리고 이것이 대략적으로 지수에 의한 가치에 대한 집착이 있는 방법입니다.

매번 지표의 OnCalculate 핸들러에 배열에 대한 시리즈를 포함하는 것이 의미가 있습니까, 아니면 Rates_total 배열의 길이를 사용하여 아래쪽 막대를 참조하는 것이 더 낫습니까?

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]) 
{
   Print (price[rates_total- 1 ]); // получение цены на младшем баре без использования серии
   return (rates_total);
}

이 두 가지 방법은 속도 면에서 동일합니까, 아니면 제 생각의 어딘가에서 착각하고 있습니까?

 

터미널은 마감된 포지션 의 누적 이익을 반환하지 않습니다. 어디에서 문제가 발생할 수 있습니까?

 double GetClosedPositionsInstrumentProfit( string symbol, datetime from) 
{
   HistorySelect (from, TimeCurrent ());

   double profitSum = 0 ;

       for ( int i = HistoryDealsTotal ()- 1 ; i >= 0 ; i--) 
    {   
       ulong ticket = HistoryDealGetTicket (i);
       if (ticket < 0 ) continue ; 
       long magic = HistoryDealGetInteger (ticket, DEAL_MAGIC );
       if (magic != EXPERT_MAGIC) continue ; 
       string positionSymbol = HistoryDealGetString (ticket, DEAL_SYMBOL );
       if (symbol != positionSymbol) continue ; 
      
       double profit = HistoryDealGetDouble (ticket, DEAL_PROFIT ) + HistoryDealGetDouble (ticket, DEAL_SWAP )+ HistoryDealGetDouble (ticket, DEAL_COMMISSION );
      profitSum += profit; 
         
       Print ( "Profit " + DoubleToString (profitSum, 2 ));              
    }         
   return profitSum;
}
사유: