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

 

안녕 모두.

이 문제를 도와주세요.

mt4 터미널과 거래 신호에 대한 경고를 발행하는 어드바이저(수제)가 있습니다. 모바일 단말기에 알림이 오기를 원합니다. 설정에서 설정하고 테스트 오고 오더 파라미터 변경은 오는데 어드바이저에서 알림이 안오네요...이유가 뭔지 모르겠고 구글은 답변을 안해주네요.

경고는 터미널 자체에 반영됩니다.
 
그러나 어울리기에는 불편한 장소입니다. 우리는 불일치에 일종의 스택 오버플로 및/또는 채널이 필요합니다.
 
Sergey Dymov 오더 파라미터 변경은 왔는데 어드바이저에서 알림이 안오네요...이유가 뭔지 모르겠고 구글은 답변을 안해주네요.
당신은 코드를 볼 필요가 있습니다 ... 여기에 텔레파시가 없습니다)
 
MakarFX # :
당신은 코드를 볼 필요가 있습니다 ... 여기에 텔레파시가 없습니다)

모든 것이 표준입니다

if ((EURTP>=3)&&(JPYTP<=0)&&(z!=2))

{Alert("EURJPY 구매. EUR=", EURTP, ", JPY=", JPYTP); z=2;} //

 
Sergey Dymov 오더 파라미터 변경은 오는데 어드바이저에서 알림이 안오네요...이유가 뭔지 모르겠고 구글은 답변을 안해주네요. 경고는 터미널 자체에 반영됩니다.

https://www.mql5.com/ru/docs/network/sendnotification

https://docs.mql4.com/ru/common/sendnotification

Документация по MQL5: Сетевые функции / SendNotification
Документация по MQL5: Сетевые функции / SendNotification
  • www.mql5.com
SendNotification - Сетевые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Sergey Dymov # :

모든 것이 표준입니다

if ((EURTP>=3)&&(JPYTP<=0)&&(z!=2))

{Alert("EURJPY 구매. EUR=", EURTP, ", JPY=", JPYTP); z=2;} //

 if ((EURTP>= 3 )&&(JPYTP<= 0 )&&(z!= 2 ))
    {
     Alert ( "Покупай EURJPY. EUR=" , EURTP, ", JPY=" , JPYTP); z= 2 ;
     SendNotification (текст сообщения);
    } 
 
고마워 얘들아! 나는 결코 잊지 않을 것!
 

그래서 클릭으로만 선을 생성하고 삭제하고 커서 위치에서 색과 이름이 바뀌고...아무것도 바뀌지 않고 똑같은 문제가 발생했습니다. 버튼바의 위치에 따라 라인이 생성됩니다. 맨 아래에 있는데 조건에 따라 노란색(Sell Stop)이지만 여기에서는 if(price > Ask) 조건이 발생합니다. 왜냐하면 어떤 거시기의 버튼을 클릭하면 가격이 최고가와 같기 때문입니다 차트의 가격, 즉 매도호가보다 높으므로 이 순간에 price > Ask = true입니다. 글쎄, 논리적으로 다음 마우스 움직임은 모든 것을 수정해야하지만 그렇지 않습니다. 버튼을 한 번만 클릭하면 기록됩니다.

 2021.12 . 07 03 : 05 : 56.888 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12 . 07 03 : 05 : 53.408 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12 . 07 03 : 05 : 53.408 test GBPUSD,M1: Stop Loss rename onto Buy Stop false error 0
2021.12 . 07 03 : 05 : 53.408 test GBPUSD,M1: Buy Stop rename onto Sell Stop true error 0
2021.12 . 07 03 : 05 : 53.408 test GBPUSD,M1: Sell Stop rename onto Buy Stop true error 0
2021.12 . 07 03 : 05 : 53.408 test GBPUSD,M1: Sell Stop create true error 4204

I x 왜 4204(객체 없음)가 과거 오류일 수 있습니다.

버튼을 클릭하면 입찰 수준에 녹색 선이 표시되며 이 선은 마우스 커서 이동에 반응하지 않습니다. 커서가 Ask 위로 이동하면 메시지가 계속 쏟아져 들어옵니다.

 2021.12 . 07 03 : 14 : 00.993 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12 . 07 03 : 13 : 59.563 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12 . 07 03 : 13 : 57.363 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12 . 07 03 : 13 : 57.253 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12 . 07 03 : 13 : 57.223 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12 . 07 03 : 13 : 57.223 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12 . 07 03 : 13 : 57.193 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12 . 07 03 : 13 : 57.153 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
 void OnChartEvent ( const int id, const long &lparam, const double &dparam, const string &sparam)
{
     datetime static dt          = 0 ;
     double    static price       = 0 ;
     int        static window      = 0 ;
     double    static sl          = 0 ;
     string    static line_name;
     double static price2 = 0 ;
     double static price3 = 0 ;
     double static price4 = 0 ;


   if (id== CHARTEVENT_OBJECT_CLICK ){
     //Нажатие на SO в зависимоти от расположения панели создаёт линию
     if (sparam== "Button Stop Order" ){
       if (panel_position == 1 || panel_position == 2 ){
        line_name = "Buy Stop" ;
        CreateLine(line_name, clrGreen );
      }
       if (panel_position == 3 || panel_position == 4 ){
        line_name = "Sell Stop" ;
        CreateLine(line_name, clrYellow );
      }
    }
     //Нажатие на линию меняет цвет на красный
     if (sparam== "Buy Stop" || sparam== "Sell Stop" ) {
       ObjectSetString ( 0 ,line_name, OBJPROP_NAME , "Stop Loss" );
      line_name = "Stop Loss" ;
       Print (line_name, " onto red " , ObjectSetInteger ( 0 , line_name, OBJPROP_COLOR , clrRed ));
    }
     //Нажатие на красной линии удаляет её и отжимает кнопку
     if (sparam== "Stop Loss" ){
       ObjectDelete (line_name);
      button_name = "Button Stop Order" ;
      ms= GetMicrosecondCount ();
    }
  }
   //Если кнопка SO нажата, то линия будет следовать за курсором
   if ( ObjectGetInteger ( 0 , "Button Stop Order" , OBJPROP_STATE )){
     int x = ( int )lparam;
     int y = ( int )dparam;
     //Переведём координаты X, Y в дату и время
     if ( ChartXYToTimePrice (window,x,y,window,dt,price)){
       Comment ( StringFormat ( "CURSOR PRICE %.5f \nIF PRICE > ASK %.5f\nIF PRICE < BID %.5f\nIF PRICE IN SPREAD ZONE %.5f" ,
                            price,price2,price4,price3));
       //Линия меняет цвет с зелёного на желтый
       if (price < Bid){
        price4 = price;
         if (ObjectExist( 0 , "Buy Stop" ) || ObjectExist( 0 , "Not Allowed" )){
           Print (line_name, " rename onto Sell Stop " , ObjectSetString ( 0 ,line_name, OBJPROP_NAME , "Sell Stop" ), " error " , GetLastError ());
          line_name = "Stop Loss" ;
           ObjectSetInteger ( 0 , line_name, OBJPROP_COLOR , clrYellow );
        }
      }
       //Линия меняет цвет с желтого на зелёный
       if (price > Ask){
        price2 = price;
         if (ObjectExist( 0 , "Sell Stop" ) || ObjectExist( 0 , "Not Allowed" )){
           Print (line_name, " rename onto Buy Stop " , ObjectSetString ( 0 ,line_name, OBJPROP_NAME , "Buy Stop" ), " error " , GetLastError ());
          line_name = "Buy Stop" ;
           ObjectSetInteger ( 0 , line_name, OBJPROP_COLOR , clrGreen );
        }
      }
       //Линия меняет цвет на серый если в зоне спреда
       if (price > Bid && price < Ask){
        price3 = price;
         if (ObjectExist( 0 , "Sell Stop" ) || ObjectExist( 0 , "Buy Stop" )){
           Print (line_name, " rename onto Not Allowed " , ObjectSetString ( 0 ,line_name, OBJPROP_NAME , "Not Allowed" ), " error " , GetLastError ());
          line_name = "Not Allowed" ;
           ObjectSetInteger ( 0 , line_name, OBJPROP_COLOR , clrGray );
        }
      }
       //Прикрепляем линию к курсору
       if (id == CHARTEVENT_MOUSE_MOVE )
         if ( ObjectMove (line_name, 0 , 0 ,price))
           ChartRedraw ( 0 );
    }
  } else if (ObjectExist( 0 ,line_name)) Print (line_name, " delete " , ObjectDelete (line_name), " error " , GetLastError ());
   //Если нажать Esc то удалится линия и кнопка отожмется
   if (id == CHARTEVENT_KEYDOWN && lparam == 27 ){
      button_name = "Button Stop Order" ;
      ms= GetMicrosecondCount ();
  }
}
//----------------------------------------------------------------------
void CreateLine( const string name, const color clr)
{
   Print (name, " create " , ObjectCreate ( 0 , name, OBJ_HLINE , 0 , TimeCurrent (),Bid), " error " , GetLastError ());
   ObjectSetInteger ( 0 , name, OBJPROP_COLOR , clr);
   ObjectSetInteger ( 0 , name, OBJPROP_STYLE , 3 ); 
}
 bool ObjectExist( const long _chartID, const string _name) { return ( ObjectFind (_chartID, _name) >= 0 ); }
 
Nerd Trader # :


초보 프로그래머로서 조언을 드립니다. 디버깅 (매우 강력한 도구)을 사용하는 방법을 배우십시오. 그리고 모든 것을 스스로 알아내십시오. 흥미롭네요. 어려울 것 같으면 간단한 것부터 시작하십시오. 디버그는 응용 프로그램이 어떻게 작동하는지 가장 작은 세부 사항까지 이해하는 데 도움이 됩니다.

Отладка программ на MQL5
Отладка программ на MQL5
  • www.mql5.com
Эта статья ориентирована в первую очередь на программистов, которые уже изучили язык, но еще недостаточно освоились в разработке программ. Статья раскрывает практические приемы отладки программ и является объединенным опытом, не только моим, но и многих программистов, на опыте которых я учился.
 
Mihail Matkovskij # :

초보 프로그래머로서 조언을 드립니다. 디버깅 (매우 강력한 도구)을 사용하는 방법을 배우십시오. 그리고 모든 것을 스스로 알아내십시오. 흥미롭네요. 어려운 경우(가능성이 낮음), 간단한 것부터 시작하십시오. 디버그는 응용 프로그램이 어떻게 작동하는지 가장 작은 세부 사항까지 이해하는 데 도움이 됩니다.

테스터에서 작동하지 않기 때문에 나는 보통 그것 없이는 하지만 여기의 경우는 실제 데이터를 허용합니다. 시도해야 합니다. 내가 이해하는 것은 개체 이름 변경이 있는 이 코드의 버전이 색상을 변경할 때 개체가 다시 생성되었던 과거와 다르지 않다는 것입니다.


UPD

디버그 모드에서 mql4에서 라인을 생성하는 버튼이 차트에 없습니다.