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

 
Interesting :
그럴 가능성이 큽니다. 나는 또한 타이머에 연결된 코드의 절반을 가지고 있습니다. 이제 새 빌드를 기다리거나 목발을 생각해 내야 합니다.

정확히는 방금 OnTimer를 OnTick으로 변경했고 모든 것이 이전과 같이 진행되었지만 코어에 대한 최적화는 동시에가 아니라 차례로 이루어집니다. 개발자들이 그런 명백한 오류를 빨리 고칠 것 같습니다(희망합니다).

 
Interesting :

다음은 타이머를 트리거하지 않는 코드입니다.

그리고 여기에서 쉽게

제 경우에는 도움이 되지 않았습니다.
[삭제]  
Erm955 :

정확히는 방금 OnTimer를 OnTick으로 변경했고 모든 것이 이전과 같이 진행되었지만 코어에 대한 최적화는 동시에가 아니라 차례로 이루어집니다. 개발자들이 그런 명백한 오류를 빨리 고칠 것 같습니다(희망합니다).

또한 사용자 정의 이벤트에 대한 명백한 오류(테스터에서 작동)가 빠르게 수정될 것 같았습니다. 아직 목발을 사용해야 하는데... :(
발마르 :
제 경우에는 도움이 되지 않았습니다.

기능이 있을 수 있습니다.

Win 2003 Server SP2 x32(AMD 2600+, 단일 코어)에서 시도했습니다. 그리고 그것은 "빈" Expert Advisor에 대해 말할 수 있습니다. 두 개의 변수와 몇 가지 기능만 추가되었습니다(타이머 상태 확인 및 첫 번째 시작 포착).

 

코드 10005는 어디로 갔으며 무엇을 의미합니까?

requot (10004)와 "요청 거부됨"(10006) 사이의 중간은 무엇입니까?

 2010.11 . 13 23 : 44 : 14      Core 1    2010.11 . 11 22 : 00 : 30    CTrade::PositionOpen: instant sell 0.10 #IBM at 145.38 [unknown retcode 10005 ]
2010.11 . 13 23 : 44 : 14      Core 1    2010.11 . 11 22 : 00 : 30    prices for #IBM 0.10 ( 145.38 / 145.41 / 145.38 )
2010.11 . 13 23 : 44 : 14      Core 1    2010.11 . 11 22 : 00 : 30    CTrade::PositionOpen: instant buy 0.10 #IBM at 145.41 [unknown retcode 10005 ]
2010.11 . 13 23 : 44 : 14      Core 1    2010.11 . 11 22 : 00 : 30    prices for #IBM 0.10 ( 145.38 / 145.41 / 145.38 )
 

챔피언십 2010 토론회 https://championship.mql5.com/2010/en/users/capr 에서 참가자는 전문가 고문의 코드를 게시했습니다. 컴파일을 시도했습니다(빌드 355). 컴파일 결과 여러 경고가 발행됩니다. 나는 다음 지점에 관심이 있습니다. 코드에는 다음 스니펫이 있습니다.

 void CountOrderStop( string symbol)
  {
   datetime from= 0 ;
   datetime to= TimeCurrent ();
//--- запросить всю историю
   HistorySelect (from,to);
//--- переменные для получения значений из свойств ордера
   ulong     ticket;
   double    open_price;
   double    initial_volume;
   datetime time_setup;
//   string   symbol;
   string    type;
   long      order_magic;
   count_sell_stop= 0 ;
   count_buy_stop= 0 ;

//--- количество текущих отложенных ордеров
   uint      total= OrdersTotal ();
//--- пройдем в цикле по всем ордерам
   for ( uint i= 0 ;i<total;i++)
     {
       //--- получим тикет ордера по его позиции в списке
       if (ticket= OrderGetTicket (i) && (GetOrderType( OrderGetInteger ( ORDER_TYPE ))== "buy stop limit" || GetOrderType( OrderGetInteger ( ORDER_TYPE ))== "buy stop" || GetOrderType( OrderGetInteger ( ORDER_TYPE ))== "buy limit" ) && OrderGetString ( ORDER_SYMBOL )==symbol)
        {
         //--- получим свойства ордера
         open_price=       OrderGetDouble ( ORDER_PRICE_OPEN );
         time_setup=       OrderGetInteger ( ORDER_TIME_SETUP );
         symbol=           OrderGetString ( ORDER_SYMBOL );
         order_magic=       OrderGetInteger ( ORDER_MAGIC );
         int positionID =   OrderGetInteger (ORDER_POSITION_ID);
         initial_volume=   OrderGetDouble ( ORDER_VOLUME_INITIAL );
         type=GetOrderType( OrderGetInteger ( ORDER_TYPE ));
         count_buy_stop=count_buy_stop+ 1 ;
        }
       if (ticket= OrderGetTicket (i) && (GetOrderType( OrderGetInteger ( ORDER_TYPE ))== "sell stop limit" || GetOrderType( OrderGetInteger ( ORDER_TYPE ))== "sell limit" || GetOrderType( OrderGetInteger ( ORDER_TYPE ))== "sell stop" ) && OrderGetString ( ORDER_SYMBOL )==symbol)
        {
         //--- получим свойства ордера
         open_price=       OrderGetDouble ( ORDER_PRICE_OPEN );
         time_setup=       OrderGetInteger ( ORDER_TIME_SETUP );
         symbol=           OrderGetString ( ORDER_SYMBOL );
         order_magic=       OrderGetInteger ( ORDER_MAGIC );
         int positionID =   OrderGetInteger (ORDER_POSITION_ID);
         initial_volume=   OrderGetDouble ( ORDER_VOLUME_INITIAL );
         type=GetOrderType( OrderGetInteger ( ORDER_TYPE ));
         count_sell_stop=count_sell_stop+ 1 ;
        }
        count_order = count_buy_stop + count_sell_stop;
     }
//---
  }

동일한 유형의 두 if(ticket= ...) 구성 중 컴파일러 는 마지막 하나에 대해서만 "expression is not boolean" 경고를 발행합니다(즉, 이전의 유사한 경고를 "마스킹"함). 경고에 지정된 것은 주석 처리되어 있습니다(컴파일러를 확인하기 위해!) , 변경되지 않았지만 이전 컴파일 중에 프로토콜에서 누락된 상위 수준의 유사한 구성에 대해 경고가 발행됩니다.

이것은 기능입니까 버그입니까?

 

오류 , MetaTrader 5 MQL , 열림 , 시작됨: 2010.11.06 11:32 , #25823

대답 좀 해줘

 

그럴지도 모르겠지만 파일에 쓸

 class tick{
   public :
      MqlTick  data;             //новые тиковые данные
      bool     refresh();        //метод обновления тиковых данных с проверкой на поступление новых данных
      void     write();          //запись тиковых данных в файл
.........

void tick::write( void ){
   if (file_handle> 0 ) FileWrite (file_handle,data.bid);
}

때로는 정규화되지 않은 가격이 표시됩니다.

81.42
81.41
81.41
81.40000000000001
81.40000000000001
81.40000000000001
81.40000000000001
81.41
81.40000000000001
81.41
81.41

왜요?

어떻게 든 FileWriteStruct ( file_handle,data, sizeof(data))를 사용하여 파일에 쓸 수 없습니다.

 
정규화되지 않은 가격으로 모든 것이 명확해 보입니다. 저는 이것을 메이저(아직), 크로스에 대해 본 적이 없습니다. 일부는 드물게, 다른 경우에는 더 자주 나타납니다. 그래서 그들은 터미널에서 나에게 그러한 데이터를 제공합니다
 
IgorM :

어떻게 든 FileWriteStruct ( file_handle,data, sizeof(data))를 사용하여 파일에 쓸 수 없습니다.

바이너리 파일에 써야 합니다 - https://www.mql5.com/ru/docs/files/filewritearray

파일쓰기 배열

문자열을 제외한 모든 유형의 배열을 BIN 파일에 씁니다(문자열 및 동적 배열을 포함하지 않는 구조의 배열일 수 있음).

int 파일 쓰기 배열 (
    정수     file_handle , // 파일 핸들
    무효의    배열[] , // 배열
    정수     start_item=0 , // 배열의 시작 인덱스
    정수     items_count=WHOLE_ARRAY     // 요소의 양
);

예를 들어(기존 항목을 덮어쓰지 않도록 코드를 마무리해야 함):

 //+------------------------------------------------------------------+
//|                                         Test_FileWriteStruct.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class Tick
  {
private :
   int                m_file_handle;


public :
   MqlTick            data;             //новые тиковые данные
   void Tick(){m_file_handle= FileOpen ( "tickrecords.dat" , FILE_READ | FILE_WRITE | FILE_BIN );};
   void ~Tick(){ if (m_file_handle!= INVALID_HANDLE ) FileClose (m_file_handle);};
   bool               refresh();         //метод обновления тиковых данных с проверкой на поступление новых данных
   void               write();           //запись тиковых данных в файл

  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool Tick::refresh( void )
  {
   bool res= SymbolInfoTick ( Symbol (),data);
   if (!res) Print ( "Неудачный вызов SymbolInfoTick(), ошибка " , GetLastError ());
   return (res);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Tick::write( void )
  {
   if (m_file_handle!= INVALID_HANDLE ) FileWriteStruct (m_file_handle,data,size);
   else Print ( "Не удалось записать данные в файл. Ошибка " , GetLastError ());
  }

Tick tick;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (tick.refresh()) tick.write();

  }
//+------------------------------------------------------------------+

 

Документация по MQL5: Файловые операции / FileWriteArray
Документация по MQL5: Файловые операции / FileWriteArray
  • www.mql5.com
Файловые операции / FileWriteArray - Документация по MQL5
 
Rosh :

바이너리 파일에 써야 합니다 - https://www.mql5.com/ru/docs/files/filewritearray

예를 들어(기존 항목을 덮어쓰지 않도록 코드를 마무리해야 함):

좋아, 거대한 ATP, 그리고 방금 테스트를 위해 텍스트 파일에 썼습니다. 나는 이미 MqlTick이 실제로 얼마나 많은 구조인지 의심하기 시작했습니다. :)

추신: 나쁘지 않습니다. - 사실, 그들은 내 클래스와 코드를 복원했습니다.) - MT5에서 오프라인 차트를 생성하고 싶지 않은 것은 유감입니다. -표준 TF

파일: