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

 
이 사이트에서 가장 좋은 신호 표시기를 알려주세요...물론, 여전히 무료입니다!
 
barabashkakvn :
그리고 "역사를 기반으로 한 많은 계산"이 동적 배열 에 추가됩니까?

그런 것이 있습니다. 그렇습니다. :) 음, 더 정확하게는 여러 동적 배열이 사용되지만 이론상으로는 너무 큰 크기로 커지지 않아야 합니다.

그리고 그것을 반으로 나누는 것에 대해 - 어떤 세그먼트를 취하고 얼마나 많은 입력을 포함하는지에 큰 차이가 없는 것 같습니다. 평균적으로 하루는 2500~3500ms로 처리되지만 일주일은 몇 분을 기다려야 한다. 이제 적절한 로그가 없습니다. 정확히 얼마인지 알 수 없습니다. 그러나 하루에 5배 이상의 규모이며 대부분의 시간은 마지막 하루나 이틀에 보내집니다. 그 달은 밤새도록 둘 수 있으며 아침까지 여전히 매달릴 가능성이 큽니다.>.>

 
Lone_Irbis :


그리고 그것을 반으로 나누는 것에 대해 - 어떤 세그먼트를 취하고 얼마나 많은 입력을 포함하는지에 큰 차이가 없는 것 같습니다.

1/2의 비율로 정방향 테스트를 켜십시오. 자동으로 기록을 기간으로 분할합니다. 또한 게임이 양초의 가치가 있는지도 알 수 있습니다.
 
Lone_Irbis :
"전문가가 느린 가장 일반적인 이유"와 같은 기사가 어딘가에 있는지 궁금합니다. 나는 테스터의 EA가 처음에는 그냥 날아가는 이유를 중간에 알아 내려고 노력하고 있지만 더 멀리 갈수록 더 느려집니다. 아직 그렇게 중요하기에는 개발 단계가 아닙니다(주요 메커니즘과 도구를 개발하기에 충분한 속도가 있음). 하지만 1주일 이상 구간을 잡는 것은 의미가 없기 때문에 여전히 불편합니다. 그 후 속도는 0이 되는 경향이 있습니다.

바퀴에 페인트 통을 넣고 필요에 따라 움직이십시오.

https://www.mql5.com/ru/forum/14041/page3#comment_605412

Линейное торможение - ошибка программиста или особенность работы MT4?
Линейное торможение - ошибка программиста или особенность работы MT4?
  • www.mql5.com
Такая работа просто убивает возможность оперативной настройки советника.
 
MetaDriver :

바퀴에 페인트 통을 넣고 필요에 따라 움직이십시오.

https://www.mql5.com/ru/forum/14041/page3#comment_605412

비유가 재미있네요 :) 조언 감사합니다. 바로 그 배럴을 찾는 것만 남아 있습니다 ... 또는 오히려 배럴입니다. 그러나 이미 뉴스 핸들러와 저항 수준 에 대한 막연한 의심이 있습니다 ...
 
Lone_Irbis :
비유가 재미있네요 :) 조언 감사합니다. 바로 그 배럴을 찾는 것만 남아 있습니다 ... 또는 오히려 배럴입니다. 그러나 이미 뉴스 핸들러와 저항 수준에 대한 막연한 의심이 있습니다 ...
대부분의 경우 이러한 배럴은 "시간의 시작"입니다. EA는 각 막대(틱)에서 자체 거래 내역(또는 기타 축적된 정보)을 완전히 분석하려고 합니다.
 
최근에 패널 생성에 다시 초점을 맞추었으므로 질문입니다. 두 개의 레이블 OBJ_RECTANGLE_LABELOBJ_LABEL 을 만들고 차트에서 OBJ_RECTANGLE_LABEL을 끌어서 OBJ_LABEL이 하나의 전체와 같은 방식으로 끌 수 있도록 만드는 방법을 모르겠습니다. 아마도 그것들을 서로 바인딩하는 메커니즘이 있고 하나씩 동작이 다른 동작(다른 모든 것)에 대해 동일한 원인이 될 수 있습니까?
 
MetaDriver :
대부분의 경우 이러한 배럴은 "시간의 시작"입니다. EA는 각 막대(틱)에서 자체 거래 내역(또는 기타 축적된 정보)을 완전히 분석하려고 합니다.

영형! 놀랍게도 몇 분 만에 문제가 발견되어 말 그대로 제거되었습니다. 실제로, 그것은 거래 기록에 있었고 매 틱마다 움직였습니다. "mql5에 대한 가장 간단한 Expert Advisor" 코드에서 "상속"된 기능에서 맨 처음에 기초로 사용되었습니다. 그 이후로 어떻게 든 내 머리에서 완전히 떨어졌습니다. 글쎄, 그것은 작동하는 것 같습니다, 좋아, 내 생각에는 - 왜 그것을 만지십시오 ... 분명히 그 코드의 비트를 분류 할 가치가 있습니다 :) 갑자기 누군가가 비슷한 브레이크로 여기에서 구글링을하면 문제가있는 것을 게시 할 것입니다 이 문제를 해결하기 위한 시도에서 주제에 대한 조각과 내 크리에이티브. 내 버전이 소스에 비해 얼마나 "더 정확"한지 모르겠습니다. 아마도 이것은 내가 쓰는 모든 것과 정확히 같은 똥 코드입니다. [물론 나에게 그것은 중요하지 않다. 내 말은, 갑자기 누군가가 맨 아래 부분을 사용하려고 생각한다면: 저자는 독학으로 똥코더를 배운다는 것을 명심하십시오. ^^] 하지만 적어도 나에게는 고장난 것이 없는 것 같고, 로봇은 이제 제트기처럼 날아갑니다. :) 글쎄, 적어도 예전에 비하면. 2개월의 평가판은 약 1분 만에 실행되었으며 이는 원래의 6시간 이상과 여전히 좋은 대조를 이룹니다.%)

그것은:

 // Эта функция вызывалась дважды за каждый тик. С ее помощью записывались две глобальные переменные: 
// с ценой последнего ордера и числом открытых ордеров (да, взятый за исходник код был примером самого простейшего мартина). 
double History( bool LastPrice = false ){
   long Ticket, OldTicket = 0 , PosID, Magic, Dir;
   double PriceOpen = 0 , Count = 0 ;
   ENUM_DEAL_TYPE CheckDir;
   if (Sell) CheckDir = DEAL_TYPE_SELL ; 
   else if (Buy) CheckDir = DEAL_TYPE_BUY ;
   
   HistorySelect ( 0 , Now);
   int HistoryTotal = HistoryDealsTotal ();
   // Проблемное место было тут: в цикле перебиралась вся история торговли, что в начале немного. 
   // Но даже за сутки счетчик доходил до сотни (не рискну предположить, сколько там набиралось за месяц). 
   // И этот бессмысленный и беспощадный процесс повторялся на каждом тике вообще без всякой на то причины.
   for ( int i= 0 ; i < HistoryTotal; i++){ 
      Ticket = ( int ) HistoryDealGetTicket (i);
      PosID  = HistoryDealGetInteger (Ticket, DEAL_POSITION_ID );
      Magic  = HistoryDealGetInteger (Ticket, DEAL_MAGIC );
      Dir    = HistoryDealGetInteger (Ticket, DEAL_TYPE );
      
       if (LastPrice) { // Этой частью добывалась цена
         if (PosID == PositionID && Magic == MagicNumber && Dir == CheckDir) {
             if (Ticket > OldTicket) {
               PriceOpen = HistoryDealGetDouble (Ticket, DEAL_PRICE );
               OldTicket = Ticket;
            }
         }
      }
      
       else { // А тут оно считало ордера
         if (PosID == PositionID && Magic == MagicNumber) Count++;
      }                              
   }
   
   if (LastPrice) return (PriceOpen);
   else return (Count);
}

그것은되었다:

 // Вызывается она теперь только в конце функций создания/изменения/закрытия позиций. Если открытых нет - глобальные переменные просто обнуляются.
// Хотя в принципе, если вызывать ее не каждый тик, а только на изменениях, вероятно и старая версия не тормозила бы так уж сильно
void History(){
   long Ticket, PosID, Magic, Dir;
   bool GotPrice = false ;
   Total = 0 ;
   HistorySelect ( 0 , Now);
   int HistoryTotal = HistoryDealsTotal ();
   
   // Похоже, что быстрее будет считать с обратного конца
   for ( int i=HistoryTotal;i>= 0 ;i--){
      Ticket = ( int ) HistoryDealGetTicket (i);
      PosID  = HistoryDealGetInteger (Ticket, DEAL_POSITION_ID );
      Magic  = HistoryDealGetInteger (Ticket, DEAL_MAGIC );
      Dir    = HistoryDealGetInteger (Ticket, DEAL_TYPE );
      
       if (PosID == PositionID && Magic == MagicNumber) {
         // Корявую конструкцию заменяем на... другую корявую конструкцию... но она хотя бы компактнее :)
         Total++; 
         if (!GotPrice){
            LastOrderPrice = HistoryDealGetDouble (Ticket, DEAL_PRICE );
            GotPrice = true ; // Раз уж нужная цена всегда в начале списка, на ней и остановимся
         }
      }
       // Чтобы не перепахивать всю торговую историю, если номер позиции уже меньше нашего (но больше ноля) - прерываем цикл
       else if (PosID > 0 && PosID < PositionID) break ; 
   }
}

일반적으로 도움을 주셔서 감사합니다 :) 팁이 없었더라면 코드의 먼지가 많은 구석을 들여다보는 것이 오랫동안 생각나지 않았을 것입니다 ...

 
Lone_Irbis :

영형! 놀랍게도 몇 분 만에 문제가 발견되어 말 그대로 제거되었습니다. 실제로, 그것은 거래 기록에 있었고 매 틱마다 움직였습니다. "mql5에 대한 가장 간단한 Expert Advisor" 코드에서 "상속"된 기능에서 맨 처음에 기초로 사용되었습니다. 그 이후로 어떻게 든 내 머리에서 완전히 떨어졌습니다. 글쎄, 그것은 작동하는 것 같습니다, 좋아, 내 생각에는 - 왜 그것을 만지십시오 ... 분명히 그 코드의 비트를 분류 할 가치가 있습니다 :) 갑자기 누군가가 비슷한 브레이크로 여기에서 구글링을하면 문제가있는 것을 게시 할 것입니다 이 문제를 해결하기 위한 시도에서 주제에 대한 조각과 내 크리에이티브. 내 버전이 소스에 비해 얼마나 "더 정확"한지 모르겠습니다. 아마도 이것은 내가 쓰는 모든 것과 정확히 같은 똥 코드입니다. [물론 나에게 그것은 중요하지 않다. 내 말은, 갑자기 누군가가 맨 아래 부분을 사용하려고 생각한다면: 저자는 독학으로 똥코더를 배운다는 것을 명심하십시오. ^^] 하지만 적어도 나에게는 고장난 것이 없는 것 같고, 로봇은 이제 제트기처럼 날아갑니다. :) 글쎄, 적어도 예전에 비하면. 2개월의 평가판은 약 1분 만에 실행되었으며 이는 원래의 6시간 이상과 여전히 좋은 대조를 이룹니다.%)

그것은:

그것은되었다:

일반적으로 도움을 주셔서 감사합니다 :) 팁이 없었더라면 코드의 먼지가 많은 구석을 들여다보는 것이 오랫동안 생각나지 않았을 것입니다 ...

확인.
 
paladin800 :
최근에 패널 생성에 다시 초점을 맞추었으므로 질문입니다. 두 개의 레이블 OBJ_RECTANGLE_LABELOBJ_LABEL 을 만들고 차트에서 OBJ_RECTANGLE_LABEL을 끌어서 OBJ_LABEL이 하나의 전체와 같은 방식으로 끌 수 있도록 만드는 방법을 모르겠습니다. 아마도 그것들을 서로 바인딩하는 메커니즘이 있고 하나씩 동작이 다른 동작(다른 모든 것)에 대해 동일한 원인이 될 수 있습니까?

준비된 메커니즘이 없습니다. 직접 작성하셔야 합니다. 다행히도 이것은 그다지 어렵지 않습니다. 그러나 약간의 작업이 필요합니다.

행운을 빕니다.

사유: