포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1059

 
artmedia70 :

그리고 여기서 다시 그리기를 원하는 것이 무엇인지 구체적으로 이해해야 합니다.

모든 표시기 버퍼를 완전히 다시 계산해야 할 수도 있습니다.
지표의 동작과 내부 변수의 외부 변화에 대한 반응을 실험해야 합니다.

솔직히 말해서, 나는 그것을 시도한 적이 없습니다 (나는 그것을 ... 글쎄, 나는 거짓말을하고 있습니다. 물론 나는했습니다. 그리고 여러 번 이벤트에 반응하고 필요한 것을 그리는 지표를 만들었습니다. 그러나 처음에는 버퍼를 그리는 비표준 접근 방식). 무언가를 그리는 테스트 표시기를 만들고(가장 가까운 막대의 화면에서 최소 몇 개의 점) 이벤트를 통해 버퍼 값을 변경해 봅니다. 변경되는 경우 지표에서 작업하는 한 가지 방법이며 그렇지 않은 경우 완전히 다른 접근 방식을 고려해야 합니다. 모든 계산을 타이머로 전송하거나 필요한 이벤트가 감지된 후 OnChartEvent()에서 직접 한 번의 재계산 주기를 수행해야 할 수도 있습니다...

요컨대 실험이 필요합니다 ...

고맙습니다!

 
artmedia70 :

어떤 이유로 TakeProfit의 모양은 합계를 중단하지 않습니다. 역사의 모든 마이너스를 계산합니다.
 
Neron_plus34 :
어떤 이유로 TakeProfit의 모양은 합계를 중단하지 않습니다. 역사의 모든 마이너스를 계산합니다.
루프를 확장합니다.
 
artmedia70 :
루프를 확장합니다.
덕분에 작동합니다.
 

안녕하세요... 저는 거기에서 다운로드한 MT4의 ForexClub에서 거래했습니다... InstaForex에서 다른 계정을 개설하기로 결정했습니다... 하지만 다른 계정에 연결하면 주가 화면에 "업데이트 대기 중"이라고 표시됩니다. ... 원하는 화면을 열려면 " 차트 열기 "를 다시 선택해야 합니다... 여기에서 제조업체에서 MT4를 다운로드하려고 했지만 거래 계정에 연결할 수 없습니다.... 연결되지 않습니다 ... 내가 뭘 잘못하고 있습니까? 도와주세요, 제발....

 
Forexman77 :

감사합니다!

그리고 선을 드래그한 후 표시기를 다시 그리는 방법.

 // Определение LastBar по расположению StopLine на графике
bool fNewStopLine(){
   bool New;
   int StopBar, Error;
   double Shift;
   datetime StopLine;
   if ( ObjectFind ( "StopLine" )== 0 ){                 // Есть стоп-линия
      StopLine=ObjectGet( "StopLine" ,OBJPROP_TIME1); // Время стоп-линии
      StopBar=iBarShift( NULL , 0 ,StopLine);           // Бар стоп-линии
      LastBar=StopBar+ 1 ;                           // Бар окончания построения
       if ( StopBar<=БарОкончания ){                 //    правее или на последнем баре
         LastBar=БарОкончания;                     // Перенести на нулевой бар
         StopBar=LastBar- 1 ;
         StopLine=Time[StopBar];
         if ( ! ObjectMove ( "StopLine" , 0 ,StopLine, 0 ) ){
             if ( !РежимОтладки ) PlaySound ( "alert.wav" );
             Print ( "***   StopLine - объект не перемещен, ошибка " + GetLastError ());
      }  }
       if ( StopLine!=OldStopLine ){                 // Новая стоп-линия
         ReInit();                                 // Повторная инициализация
         ClearScreen();                             // Очистить экран
         Shift= 0.01 *(WindowPriceMax()-WindowPriceMin())*СдвигИндикатораТиков;
         Error=fArrow( "TickIndicator" , "" , 0 ,StopBar // Сформировать индикатор тика
                     ,WindowPriceMin()+Shift, 0 , 0 , 0 , 0
                     ,ЗнакИндикатораТиков,ЦветИндикатораТиков,РазмерИндикатораТиков);
         OldStopLine=StopLine;                     // Стоп-линия обработана
         New= true ;                                 // Выполнить построение заново
      }
       else {                                         // Нет новой стоп-линии
         New= false ;                                 // Построение заново не выполнять
   }  }
   else {                                           // Нет стоп-линии
      New= false ;                                   // Построение заново не выполнять
      Error=fObjectDelete( "TickIndicator" );         // Удалить индикатор тика
   }
   return (New);
}
 
tara :

고맙습니다!
 

문제에 직면했습니다. 하나의 인디케이터를 기반으로 나만의 인디케이터를 만들고 있는데, 거기에 목적을 알 수 없는 라인이 여러 개 있고, 동시에 이 라인은 dll 라이브러리에서 사용됩니다. 이 줄이 무엇을 위한 것인지 자신의 말로 설명할 수 있습니까? 그리고 dll 라이브러리를 사용하지 않고 리메이크하는 방법은 무엇입니까? 나는 아래의 라인을 강조했다:

 #import "user32.dll"
         int   RegisterWindowMessageA ( string lpString); 
         int   PostMessageA           ( int hWnd, int Msg, int wParam, int lParam);
                
#define WM_COMMAND                     0x0111
#import

             int MT4InternalMsg;
             int hwnd;
             string sn; 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetTimer ( 60 );

   if (MT4InternalMsg == 0 )  
         {
         MT4InternalMsg = RegisterWindowMessageA( "MetaTrader4_Internal_Message" ); 
    }       
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();
      
  }

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
//---
                  hwnd = WindowHandle( Symbol (), 1 );
         if (PostMessageA(hwnd, 0x0111 , 0x822c , 0 ) == false )
          {
          hwnd = 0 ;
           return ;
          }
          PostMessageA(hwnd, MT4InternalMsg, 2 , 1 );    
  }
//+------------------------------------------------------------------+
 
1. 두 개 이상의 주문을 동시에 여는 방법은 무엇입니까?
2. 주문이 TP 또는 SL에 의해 마감되었음을 어떻게 알 수 있습니까?
3. 어드바이저와 실제 거래 시 어떤 문제가 발생할 수 있나요? TP, SL, 보류 중 등을 기본값으로 설정할 수 있습니까? 서버에서? 이 경우 어떻게 해야 합니까? 거래 로그를 어디에 안전하게 저장해야 하나요( 글로벌 변수 , 터미널, 파일 등)?
 
smart_man :
1. 두 개 이상의 주문을 동시에 여는 방법은 무엇입니까?
2. 주문이 TP 또는 SL에 의해 마감되었음을 어떻게 알 수 있습니까?
3. 어드바이저와 실제 거래 시 어떤 문제가 발생할 수 있나요? TP, SL, 보류 중 등을 기본값으로 설정할 수 있습니까? 서버에서? 이 경우 어떻게 해야 합니까? 거래 로그를 어디에 안전하게 저장해야 하나요(글로벌 변수, 터미널, 파일 등)?

여기에서 몇 가지 답변을 찾을 수 있습니다. https://www.mql5.com/en/forum/131859