굿바이 로봇, 만세 광기 - 페이지 4

 
Mislaid :

코드의 라인 표시를 사용하여 범위를 벗어난 배열을 제어하는 것은 매우 유용합니다. 이전에는 0으로 나누고 원하는 위치를 찾습니다. 그리고 더 나쁜 것은 오류가 나타나지 않는 경우입니다.

어떻게하는지 예를 들어 주시겠습니까? 문서에서 이 기능에 대한 정보를 찾지 못했습니다.
 
Andrei01 :
어떻게하는지 예를 들어 주시겠습니까? 문서에서 이 기능에 대한 정보를 찾지 못했습니다.

그게 다야! 이제 아무것도 할 필요가 없습니다. "전문가" 탭을 열고 로그를 읽으십시오. 오류가 발생하면 이에 대한 메시지가 표시됩니다. 유형:

범위를 벗어난 배열 ....... 코드의 줄 번호를 나타냅니다.

 
Mislaid :

"전문가" 탭을 열고 로그를 읽으십시오.

지표와 스크립트에서 작동합니까?
 
Pavlick :

스크립트/인디케이터 이름의 첫 글자의 대소문자를 변경해 보십시오. 왠지 나도 찐 https://www.mql5.com/ru/forum/152533/page2#982156

추신: 음, 문자열을 char[]로 변경

대답해, 공작!

당신은 훌륭한 파블릭이고 수고했습니다!

코드가 즉시 작동했습니다!

이제 마우스를 사용할 수 있습니다

스크립트!

표시기에 장착해야 합니다.

귀하의 코드가 표시기에 삽입됩니다

작은 장애물이 있다

편집자가 이름을 인식하고 싶지 않습니다.

script.i는 제목을 제자리에 썼습니다.

스크립트가 호출되어야 하는 곳에서.

만 남아   스크립트가 될 수 있도록

인정!

도울 수 있니?

진심으로

판사

 
pansa :

대답해, 공작!

당신은 훌륭한 파블릭이고 수고했습니다!

코드가 즉시 작동했습니다!

이제 마우스를 사용할 수 있습니다

스크립트!

표시기에 장착해야 합니다.

귀하의 코드가 표시기에 삽입됩니다

작은 장애물이 있다

편집자가 이름을 인식하고 싶지 않습니다.

script.i는 제목을 제자리에 썼습니다.

스크립트를 호출해야 하는 위치에서.

만 남아   스크립트가 될 수 있도록

인정!

도울 수 있니?

진심으로

판사




무슨 일 있으면 내가 도와줄게
 
이러한 경고와 함께 여전히 매우 좋은 매복이 하나 있습니다(적어도 한 번은 있었음). 부울 표현식 의 우선 순위가 변경되었습니다. 괄호로 우선 순위를 명시적으로 지정하지 않으면 부울 표현식이 이제 이전과 매우 다른 효과를 가지지만 컴파일러는 경고만 제공합니다. 이론상 그것은 실수여야 합니다. 누군가는 경고에 점수를 매기기로 결정했을 수 있으며 그 중 하나는 논리적 표현에 대한 경고입니다.
 
Vinin :

무슨 일 있으면 내가 도와줄게

이봐 비니나!

매우 감사합니다

도우려고!

리뷰를 위해 어떻게 구성했는지 보내드립니다.

컴포스터로 스크립트 호출

판자

__________________________________________

안녕 공작님!

나는 예를 보여주고 싶다

스크립트 호출이 어떻게 구성되었는지

퇴비, 이제 모든 것이 작동하지 않습니다.

검토를 위해

판사

//+----------------------------------------------- --------------------+

//|                                         sample_execute_script.mq4 |

//+----------------------------------------------- --------------------+

 

# "user32.dll" 가져오기

  int RegisterWindowMessageA(문자열 메시지 이름);

  int PostMessageA(int hwnd, int msg, int wparam, 문자열 이름);

  무효 keybd_event(int VirtualKey, int ScanCode, int 플래그, int ExtraInfo);

#수입

 

 

정수 시작()

{

                int winHandle = WindowHandle( Symbol(), Period() );

//

//

//

if( 신호 < 0 && trigl==true &&   구매 == true ) {StartScript( winHandle, "SchliesenProfitOrders" ); }

 

//

//

//

 

무효 StartScript(int hWnd, 문자열 ScriptName, bool AutomaticAcceptDefaults = false)

{

                int MessageNumber = RegisterWindowMessageA("MetaTrader4_Internal_Message");

                PostMessageA(hWnd, 메시지 번호, 16, 스크립트 이름);

                if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }

}

 

무효 ClearConfigDialog()

{

                수면(100);

                keybd_event(13, 0, 0, 0);

}

// //

// //

// //

반환(0);

 
pansa :

이봐 비니나!

매우 감사합니다

도우려고!

리뷰를 위해 어떻게 구성했는지 보내드립니다.

컴포스터로 스크립트 호출

판자

__________________________________________

안녕 공작님!

나는 예를 보여주고 싶다

스크립트 호출이 어떻게 구성되었는지

퇴비, 이제 모든 것이 작동하지 않습니다.

검토를 위해

판자


SRC 를 클릭 하고 코드를 붙여넣기가 어렵습니까?!  

 //+------------------------------------------------------------------+
//|                                        sample_execute_script.mq4 |
//+------------------------------------------------------------------+
#import "user32.dll"
   int RegisterWindowMessageA( string MessageName);
   int PostMessageA( int hwnd, int msg, int wparam, string Name);
   void keybd_event( int VirtualKey, int ScanCode, int Flags, int ExtraInfo);
#import

int start()
{
   int winHandle = WindowHandle( Symbol (), Period () );
//
//
//
   if (signal < 0 && trigl== true && buy == true ) 
  {
    StartScript(winHandle, "SchliesenProfitOrders" ); 
  }
//
//
//
}
void StartScript( int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false )
{
   int MessageNumber = RegisterWindowMessageA( "MetaTrader4_Internal_Message" );
  PostMessageA(hWnd, MessageNumber, 16 , ScriptName);
   if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
} 
void ClearConfigDialog()
{
   Sleep ( 100 );
  keybd_event( 13 , 0 , 0 , 0 );
}
//
//
//
return ( 0 );
 
pansa :

다음과 같이 잘 작동해야 합니다.

 void StartScript( int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false )
{
     char buf[];
     StringToCharArray ( "MetaTrader4_Internal_Message" , buf);
     int MT4InternalMsg = RegisterWindowMessageA(buf);
     StringToCharArray (ScriptName, buf);
    SendMessageA(hWnd, MT4InternalMsg, 16 , buf);
     if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }
}
void ClearConfigDialog()
{
     Sleep ( 100 );
    keybd_event( 13 , 0 , 0 , 0 );

}

그리고 스크립트의 첫 글자의 대소문자를 잊지 마십시오. 예를 들어 "test" 스크립트가 실행되지 않으면 "Test"를 시도해야 합니다.

진심으로, Pavlik))

 
Pavlick :

다음과 같이 잘 작동해야 합니다.

그리고 스크립트의 첫 글자의 경우를 잊지 마세요. 예를 들어 " test " 스크립트가 실행되지 않으면 "Test"를 시도해야 합니다.

진심으로, Pavlik))


안녕 공작님!

수정본을 받았고

지표에 모든 것을 넣으려고 했습니다.

그러나 편집자가 원하지 않는

무엇을 할 수 있는지보십시오

작동하도록!

판사

//+----------------------------------------------- --------------------+

//|                                              AlttrEND_Signal.mq4 |

//|                         Copyright 2014, MetaQuotes Software Corp. |

//|                                               https://www.mql5.com |

//+----------------------------------------------- --------------------+

 

//+----------------------------------------------- --------------------+

//|                                  AltrTrend_Signal_v2_2_alert.mq4   |

//|                                         Ramdass - 변환 전용   |

//+----------------------------------------------- --------------------+

#특성   copyright "저자 - OlegVS, GOODMAN"

#속성엄격

# "user32.dll" 가져오기

  int RegisterWindowMessageA(uchar &lParam[]);

  int SendMessageA(int hWnd, int 메시지, int wParam, char &lParam[]);

  무효 keybd_event(int VirtualKey, int ScanCode, int 플래그, int ExtraInfo);

#수입

 

#속성 표시기_차트_창

#속성 표시기_버퍼 2

#property indicator_color1 딥스카이블루

#property indicator_color2 오렌지레드

#속성 표시기_너비1 1

#속성 표시기_너비2 1

 

//---- 입력 매개변수

extern bool Alert_message=true;

외부 정수   time_alert_minutes=60; // ????? ???? ???????????? ???? ??? ? 60?????.

외부 정수 K = 30;

외부 이중 Kstop = 0.5;

외부 정수 K주기 = 150;

extern int PeriodADX = 7;//14;

외부 정수 CountBars = 100;

 

//---- 버퍼

이중 val1[];

이중 val2[];

 

이중 AlertTime;

//+----------------------------------------------- --------------------+

//| 커스텀 인디케이터 초기화 기능                          |

//+----------------------------------------------- --------------------+

정수 초기화()

  {

    문자열 short_name;

    //---- 표시줄

    표시기버퍼(1);

    SetIndexStyle(0,DRAW_ARROW);

    SetIndexArrow(0,241);

    표시기버퍼(2);

    SetIndexStyle(1,DRAW_ARROW);

    SetIndexArrow(1,242);

    SetIndexBuffer(0, val1);

    SetIndexBuffer(1, val2);

    if(CountBars>=막대)

        CountBars=막대;

    SetIndexDrawBegin(0, 막대 - CountBars + PeriodADX );

    SetIndexDrawBegin(1, 막대 - CountBars + PeriodADX );

    //----

    리턴(0);

  }

//+----------------------------------------------- --------------------+

//| AltrTrend_Signal_v2_2                                             |

//+----------------------------------------------- --------------------+

정수 시작()

  {   

    int i, shift, counted_bars = IndicatorCounted();

    //----

    if(counted_bars<0) return(-1);

    //----

    정수 i1, i2, t_per;

    이중 범위, AvgRange, smin, smax, SsMax, SsMin, SSP, 가격;

    bool 상승세, 이전;

    //----

    if(막대 <=PeriodADX   + 1)

        리턴(0);

    //----

    for(shift = CountBars - PeriodADX ; shift >= 0; shift--)

      {

        SSP = MathCeil(Kperiod / iADX(NULL, 0, PeriodADX, PRICE_CLOSE, MODE_MAIN, 1));

           범위=0;

           평균 범위 = 0;

           for(i1 = 시프트; i1 <= 시프트 + SSP; i1++)

                {

                  AvgRange = AvgRange + MathAbs(높음[i1] - 낮음[i1]);

                 }

           범위 = AvgRange / (SSP + 1);

        //----

        SsMax = 높음[시프트];

        SsMin = 낮음[시프트];

        for(i2 = 시프트; i2 <= 시프트 + SSP - 1; i2++)

          {

            가격 = 높음[i2];

            if(SsMax < 가격)

                 SsMax = 가격;

            가격 = 낮음[i2];

            if(SsMin >= 가격)  

                SsMin = 가격;

          }

        //----

        smin = SsMin + (SsMax - SsMin)*K / 100;

        smax = SsMax - (SsMax - SsMin)*K / 100;

           val1[시프트] = 0.0;

           val2[시프트] = 0.0;

           if(닫기[shift] < smin)

                {

                  상승 추세=거짓;

                }

           if(닫기[shift] > smax)

                {

                  상승 추세 = 사실;

                 }

        if(상승 추세 != 이전 && 상승 추세 == 참)

          {

            val1[shift] = 낮음[shift] - 범위*Kstop;

           

          }

        if(상승 추세 != 이전 && 상승 추세 == 거짓)

          {

            val2[shift] = High[shift] + 범위*Kstop;

           

          }

        오래된 = 상승세;

 

}  

무효 StartScript(int hWnd, 문자열 ScriptName, bool AutomaticAcceptDefaults = false)

{

 

{

    숯불[];

    StringToCharArray("MetaTrader4_Internal_Message", buf);

    int MT4InternalMsg = RegisterWindowMessageA(buf);

    StringToCharArray("fPlayer", buf);

    SendMessageA(hWnd, MT4InternalMsg, 16, buf);

    if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }

}

무효 ClearConfigDialog()

{

    수면(100);

    keybd_event(13, 0, 0, 0);

 

}

 

 

//---- 알리다

     if (Period()<Time_alert_minutes) t_per=Period(); else t_per=Time_alert_minutes; // ???? ??<시간경보, ????? ???? ???????????? ???? ??? ? ??.

     if (Alert_message==true && CurTime()>AlertTime && val1[0]!=0.0)

     {

     경고(기호()," +++   구입!!! ++" , "   //AltrTrend_Signal_v2_2_alert");

     AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60;

     //PlaySound("payment.wav");

    fPlayer;//스크립트

   

     }

    

     if (Alert_message==true && CurTime()>AlertTime && val2[0]!=0.0)

     {

     경고(기호()," +++   팔다!!!    ++" , "   //AltrTrend_Signal_v2_2_alert");

     AlertTime=CurTime() + (t_per - MathMod(TimeMinute(CurTime()), t_per))*60;

    // PlaySound("payment.wav");

    f플레이어;

    }

          

 

    반환(0);

  }

//+----------------------------------------------- --------------------+

사유: