MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 452

 

안녕하세요. 말해 주세요. 실행 지연을 구성하는 방법. 새 촛불 이후 10초가 경과한 후 업데이트가 수행됩니다.

 #define   WM_COMMAND                     0x0111
#property indicator_chart_window
#import "user32.dll"
int RegisterWindowMessageA( string lpstring);
int PostMessageA( int   hWnd, int   Msg, int   wParam, string lParam);
int New_Bar;
datetime Time_0;
#import
int start()
 {
     New_Bar= 0 ;                   // Для начала обнулимся
   if (Time_0 != Time [ 0 ])           // Если уже другое время начала бара
      {
      New_Bar= 1 ;                 // А вот и новый бар
      Time_0 = Time [ 0 ];           // Запомним время начала нового бара
      PostMessageA ( WindowHandle ( Symbol (), Period ()), WM_COMMAND, 33324 , 0 );
      PostMessageA ( WindowHandle ( Symbol (), 0 ), RegisterWindowMessageA ( "MetaTrader4_Internal_Message" ), 2 , 1 );
      } 
 return ( 0 );
 }
 
안녕하세요, 차트에서 하나의 개체를 제거하면 나머지(선택 사항)가 삭제된다는 조건에 대한 코드를 작성하는 것을 용서하겠습니다.

하나의 개체에 다른 개체가 첨부되어 있고 이 개체가 삭제되면 나머지 개체는 차트에 매달려 있습니다.
 
Dmitry Ivkin :
안녕하세요, 차트에서 하나의 개체를 제거하면 나머지(선택 사항)가 삭제된다는 조건에 대한 코드를 작성하는 것을 용서하겠습니다.

하나의 개체에 다른 개체가 첨부되어 있고 이 개체가 삭제되면 나머지 개체는 차트에 매달려 있습니다.
객체를 생성 할 때 접두사를 사용합니다. 이름의 시작. 예: ObjectCreate ("777_a" ... ObjectCreate("777_z") 다음 ObjectsDelete(0,"777_") 그룹을 삭제합니다.
 
werter :

안녕하세요. 말해 주세요. 실행 지연을 구성하는 방법. 새 촛불 이후 10초가 경과한 후 업데이트가 수행됩니다.

가장 간단한 것은 Time_0 = Time[0] 이후입니다. 절전 (10000) 삽입; 더 낮은 #import 지시문이 2줄 위로 이동해야 하는 것 같습니다.

 
STARIJ :

가장 간단한 것은 Time_0 = Time[0] 이후입니다. 슬립(10000) 삽입; 더 낮은 #import 지시문이 2줄 위로 이동해야 하는 것 같습니다.

글쎄요, 전문가라면...아아, 수면 표시기에서는 불가능합니다.
 
STARIJ :
객체를 생성 할 때 접두사를 사용합니다. 이름의 시작. 예: ObjectCreate("777_a" ... ObjectCreate("777_z") 그런 다음 ObjectsDelete(0,"777_") 그룹을 삭제합니다.

답해주셔서 감사합니다. 아니오, 이해하지 못하셨습니다. 저는 그 물체에 다른 물체가 붙어 있었습니다. 그리고 표시기를 제거하면 모든 것이 정상이지만 오른쪽 버튼을 누르면 됩니다. 마우스를 누르고 삭제하면 정확히 1개의 개체가 삭제되지만 첨부된 모든 개체가 필요하므로 이해하시기 바랍니다)

 
Dmitry Ivkin :

답해주셔서 감사합니다. 아니오, 이해하지 못하셨습니다. 저는 그 물체에 다른 물체가 붙어 있었습니다. 그리고 표시기를 제거하면 모든 것이 정상이지만 오른쪽 버튼을 누르면 됩니다. 마우스를 누르고 삭제하면 정확히 1개의 개체가 삭제되지만 첨부된 모든 개체가 필요하므로 이해하시기 바랍니다)

주기적으로( 모든 틱 ?) 주 객체가 있는지 확인하고, 없으면 접두사로 자식 객체를 삭제합니다.
 
werter 글쎄, 그것은 전문가 일 것입니다 ... 슬프게도 수면 표시기에서는 불가능합니다.
 datetime Time_0= 0 ;

void ...
{
   if (Time_0 < TimeCurrent ())
   {
       Alert ( TimeCurrent ());
      Time_0 = Time [ 0 ]+ PeriodSeconds ()+ 10 ; 
   }
 

오랫동안 MQL4로 작성하지 않았으므로 이제 MQL5에서 Expert Advisor를 다시 작성해야 합니다. 어드바이저가 있는 심볼에서 1거래를 열어야 하는 코드가 맞나요?

어떤 이유로 테스터에서 2개의 거래가 열립니다.

...
if (!Orderex( _Symbol ))
{
   OrderSend ( NULL , OP_SELL ,lot, Bid , 30 , Bid +stop* Point , Bid -take* Point , NULL ,magicf, 0 , clrRed );
}
...
bool Orderex( string symbol)
{
   for ( int i= OrdersTotal (); i> 0 ; i--)
      {
         OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
         if ( OrderSymbol ()==symbol && OrderMagicNumber ()==magicf) return true ;
      
      
      
      }


   return false ;
}
 

생각하지 못했던 또 다른 뉘앙스를 만났습니다

1) 쌍으로 설치된 많은 고문이 있습니다.

2) 자체 설정을 사용하여 고문이 주문을 열 때(예: 0.1에서 0.5로 열기) "전문가" 행에 항목이 표시됩니다.

3) 전문가 라인을 읽고 x랏 이상의 오픈 포지션 이 있으면 나머지 로봇은 스스로 삭제하고 턴오프 등을 한다.


문제는 그것을 읽고 처리하는 방법입니다. 로그 파일에 없는 것 같습니다.