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

 
Vitaly Muzichenko :

글쎄, 나는 저축 외에 추구하는 또 다른 목표가 있었다.

차트에 Expert Advisors가 있으며 패널에서 거래를 위해 창을 추가로 여는 것은 옳지 않습니다. 따라서 거래 패널은 지표 형태로 작성되었습니다. 하나의 차트에 많은 것을 넣을 수 있습니다.

코드가 약간 잘렸지만 논리는 명확합니다.

지시자

 // Открыть позиции
   // Открыть позицию Buy
   if ( sparam ==prefix+ "_openBuy" ) {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger ( 0 ,prefix+ "_openBuy" , OBJPROP_STATE , false );
     ChartRedraw ();
   }
   // Открыть позицию Sell
   if ( sparam ==prefix+ "_openSell" ) {
     BroadcastEvent(gMagic,edLots,_symbol);
     ObjectSetInteger ( 0 ,prefix+ "_openSell" , OBJPROP_STATE , false );
     ChartRedraw ();
   }

//===============================================================================================
//------------------ Функция посылает сообщение всем открытым графикам -------------------------+
//===============================================================================================
void BroadcastEvent( long lparam, double dparam, string sparam) {
 ushort eventID= 9784 - CHARTEVENT_CUSTOM ;
 long currChart= ChartFirst (); 
 int i= 0 ; 
   while (i< CHARTS_MAX )                 // у нас наверняка не больше CHARTS_MAX открытых графиков 
   { 
     EventChartCustom (currChart,eventID,lparam,dparam,sparam); 
    currChart= ChartNext (currChart); // на основании предыдущего получим новый график 
     if (currChart==- 1 ) break ;         // достигли конца списка графиков 
    i++;                             // не забудем увеличить счетчик 
   } 
 }

조언자

 // -- Получим нажатие кнопки с индикатора
// Открыть позицию
 if (id== 9784 )     
  {
   if (UseSound) PlaySound ( "tick.wav" );
   OpenPosition(sparam,OP_BUY,dparam, 0 , 0 , "comm" ,( int )lparam, clrNONE );
  }
 
Aleksei Stepanenko :

지표는 어디에 있습니까? 포럼 스레드를 헤매지 않도록 여기에 첨부하십시오.

지시자
파일:
[삭제]  
네, 제 차트의 ChartID 를 터미널의 전역 변수에 EA로 쓰는 것도 생각했습니다. 그러면 모든 표시기가 이벤트를 보낼 위치를 알게 됩니다. BroadcastEvent 없이 포인트와이즈.
 
Aleksei Stepanenko :
예, 또한 내 차트의 ChartID 를 터미널의 전역 변수에 EA로 쓰는 것에 대해 생각했습니다. 그러면 모든 표시기가 이벤트를 보낼 위치를 알게 됩니다. BroadcastEvent 없이 포인트와이즈.

전역 변수 - 동일한 파일, 터미널은 그것으로 열심히 작동하고 디스크를 죽이며, 프로필에서만 동일한 주기로 틱 단위로 확인하는 것은 바람직하지 않습니다. :)

[삭제]  
frank2020 :
지시자
그리고 이 지표에서 무엇을 얻고 싶습니까?
 
frank2020 :
지시자

여기에서 가져온 것이 있다면

Ищу канальные индикаторы для MT5
Ищу канальные индикаторы для MT5
  • 2017.03.28
  • www.mql5.com
Все привет, ищу любые канальные индикаторы, которых нет по умолчанию в MT5 Нужны для оптимизации ТС (какой их индикаторов покажет устойчивые резуль...
[삭제]  
Vitaly Muzichenko :

전역 변수 - 동일한 파일, 터미널은 그것으로 열심히 작동하고 디스크를 죽이며, 프로필에서만 동일한 주기로 틱 단위로 확인하는 것은 바람직하지 않습니다. :)

아니 아니. EA가 시작되면 차트 번호를 전역 변수 에 씁니다. 그런 다음 시작 시 한 번 표시기가 이 변수를 읽고 개체 가 생성될 때마다 Expert Advisor가 있는 차트에만 이벤트를 보냅니다.
 
Vitaly Muzichenko :

전역 변수 - 동일한 파일, 터미널은 그것으로 열심히 작동하고 디스크를 죽이며, 프로필에서만 동일한 주기로 틱 단위로 확인하는 것은 바람직하지 않습니다. :)

동일한 파일을 강제로 플러시하면 나머지 시간에는 램에서 많은 작업이 수행됩니다.

[삭제]  

일반적으로 조언자/지표 사이의 정상적인 송신기는 다음과 같습니다.

수화기:

 int OnInit ()
   {
   GlobalVariableSet ( "A" , ChartID ());
   return ( INIT_SUCCEEDED );
   }

void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam) 
   {
   if (id== CHARTEVENT_CUSTOM + 777 )
      {
       printf ( "Сообщение принято: " +sparam);
      }
   }

송신기:

 int OnInit ()
   {
   long a=( long ) GlobalVariableGet ( "A" );
   EventChartCustom (a, 777 , 0 , 0 , "Превед медвед!" );
   return ( INIT_SUCCEEDED );
   }

CPU 부하가 없습니다.

 
Aleksei Stepanenko :

일반적으로 조언자/지표 사이의 정상적인 송신기는 다음과 같습니다.

정상이 아닙니다, 당신은 무언가를 전송하기 위해 8 바이트로 고통받습니다.

작동하긴 하지만 - @fxsaber bible은 TypeToByte를 사용하여 더 복잡한 구조를 교환하는 것으로 보입니다.


추신: 충돌을 어떻게 처리하시겠습니까? - IMHO, 모든 도로는 데이터 교환 데이터베이스로 연결되며, 작업의 90%가 귀하를 위해 수행되며 매우 고품질입니다.