Прощаи робот-да здравствует маразм - страница 4

 
Mislaid:

Очень полезен контроль выхода за границы массива с указанием строки в коде. Раньше было: деление на ноль, и ищи, где хочешь. А еще хуже, если ошибка не проявлялась.

Не могли бы вы привести пример как это делать? Не нашел ничего об этой возможности в документации.
 
Andrei01:
Не могли бы вы привести пример как это делать? Не нашел ничего об этой возможности в документации.

Вот именно! Сейчас ничего делать не надо. Откройте вкладку  "эксперты" и читайте логи. Если ошибка появится, то вы увидите сообщение об этом. Типа:

 array out of range ....... с указанием на номер строки в коде.

 
Mislaid:

Откройте вкладку  "эксперты" и читайте логи.

А для индикаторов и скриптов это работает?
 
Pavlick:

Попробуйте изменить регистр первой буквы имени скрипта/индикатора. Как-то тоже парился https://www.mql5.com/ru/forum/152533/page2#982156

P.S: ну и string менять на char[]

Ответ,павлику!

Вы павлик большои молодец!

ваш код сразу заработал!

теперь можно мышкои запуститъ

скрипт!

Осталось вмонтировать в индикатор

ваш код вставил в индикатор

осталось маленькое препятствие

едитор не хочет признать название

скрипта.я написал название в месте

откуда скрипт должен быть вызван.

осталось только  чтобы скрипт был

признан!

может поможешь?

с искренним приветом

панса

 
pansa:

Ответ,павлику!

Вы павлик большои молодец!

ваш код сразу заработал!

теперь можно мышкои запуститъ

скрипт!

Осталось вмонтировать в индикатор

ваш код вставил в индикатор

осталось маленькое препятствие

едитор не хочет признать название

скрипта.я написал название в месте

откуда скрипт должен быть вызван.

осталось только  чтобы скрипт был

признан!

может поможешь?

с искренним приветом

панса




Если что - помогу
 
С этими предупреждения еще есть одна очень хорошая засада (по крайней мере была). Приоритет логических выражения изменился. Когда приоритет явно, путем скобок, не определен, тогда компилятор дает только предупреждение, хотя логическое выражение теперь дает совсем другой эффект чем раньше. По идее должно быть ошибкой. Кто-то может решил забить на предупреждения, а среди них предупреждение о логическом выражении.
 
Vinin:

Если что - помогу

 

Привет,Винину!

большое спасибо

за желание помочь!

Для обзора посылаю как был организован

вызов скрипта компостером

панса

____________________________________

Привет,павлик!

хочу показать на примере

как был организован вызов скрипта

компостером,теперь ето все не работает.

для обзора

панса

 

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

//|                                        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:

 

Привет,Винину!

большое спасибо

за желание помочь!

Для обзора посылаю как был организован

вызов скрипта компостером

панса

____________________________________

Привет,павлик!

хочу показать на примере

как был организован вызов скрипта

компостером,теперь ето все не работает.

для обзора

панса


Неужели трудно нажать на 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".

С уважением, Павлик ))

 
Pavlick:

В таком виде должно нормально работать:

И не забывайте про регистр первой буквы скрипта, например, если скрипт "test" не запускается, то стоит попробовать "Test".

С уважением, Павлик ))


Привет,павлик!

получил твою доработку и

пытался поместить все в индикатор

однако едитор не хочет

посмотрите что можно сделать

чтобы заработало!

Панса

 

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

//|                                             AltrTREND_Signal.mq4 |

//|                        Copyright 2014, MetaQuotes Software Corp. |

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

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

 

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

//|                                 AltrTrend_Signal_v2_2_alert.mq4  |

//|                                       Ramdass - Conversion only  |

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

#property  copyright "Author - OlegVS, GOODMAN"

#property strict

#import "user32.dll"

  int RegisterWindowMessageA(uchar &lParam[]);

  int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);

  void keybd_event(int VirtualKey, int ScanCode, int Flags, int ExtraInfo);

#import

 

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 DeepSkyBlue

#property indicator_color2 OrangeRed

#property indicator_width1 1

#property indicator_width2 1

 

//---- input parameters

extern bool Alert_message=true;

extern int  Time_alert_minutes=60; // ????? ????? ?????????? ???? ??? ? 60 ?????.

extern int K = 30;

extern double Kstop = 0.5;

extern int Kperiod = 150;

extern int PeriodADX = 7;//14;

extern int CountBars = 100;

 

//---- buffers

double val1[];

double val2[];

 

double AlertTime;

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

//| Custom indicator initialization function                         |

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

int init()

  {

    string short_name;

    //---- indicator line

    IndicatorBuffers(1);

    SetIndexStyle(0,DRAW_ARROW);

    SetIndexArrow(0,241);

    IndicatorBuffers(2);

    SetIndexStyle(1,DRAW_ARROW);

    SetIndexArrow(1,242);

    SetIndexBuffer(0,val1);

    SetIndexBuffer(1,val2);

    if(CountBars>=Bars)

        CountBars=Bars;

    SetIndexDrawBegin(0, Bars - CountBars + PeriodADX );

    SetIndexDrawBegin(1, Bars - CountBars + PeriodADX );

    //----

    return(0);

  }

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

//| AltrTrend_Signal_v2_2                                            |

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

int start()

  {  

    int i, shift, counted_bars = IndicatorCounted();

    //----

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

    //----

    int i1, i2, t_per;

    double Range, AvgRange, smin, smax, SsMax, SsMin, SSP, price;

    bool uptrend, old;

    //----

    if(Bars <=PeriodADX  + 1)

        return(0);

    //----

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

      {

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

           Range = 0;

           AvgRange = 0;

           for(i1 = shift; i1 <= shift + SSP; i1++)

                {

                  AvgRange = AvgRange + MathAbs(High[i1] - Low[i1]);

                }

           Range = AvgRange / (SSP + 1);

        //----

        SsMax = High[shift];

        SsMin = Low[shift];

        for(i2 = shift; i2 <= shift + SSP - 1; i2++)

          {

            price = High[i2];

            if(SsMax < price)

                SsMax = price;

            price = Low[i2];

            if(SsMin >= price) 

                SsMin = price;

          }

        //----

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

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

           val1[shift] = 0.0;

           val2[shift] = 0.0;

           if(Close[shift] < smin)

                {

                  uptrend = false;

                }

           if(Close[shift] > smax)

                {

                  uptrend = true;

                }

        if(uptrend != old && uptrend == true)

          {

            val1[shift] = Low[shift] - Range*Kstop;

           

          }

        if(uptrend != old && uptrend == false)

          {

            val2[shift] = High[shift] + Range*Kstop;

           

          }

        old = uptrend;

 

     } 

void StartScript(int hWnd, string ScriptName, bool AutomaticallyAcceptDefaults = false)

{

 

{

    char buf[];

    StringToCharArray("MetaTrader4_Internal_Message", buf);

    int MT4InternalMsg = RegisterWindowMessageA(buf);

    StringToCharArray("fPlayer", buf);

    SendMessageA(hWnd, MT4InternalMsg, 16, buf);

    if (AutomaticallyAcceptDefaults) { ClearConfigDialog(); }

}

void ClearConfigDialog()

{

    Sleep(100);

    keybd_event(13, 0, 0, 0);

 

}

 

 

//---- Alert

     if (Period()<Time_alert_minutes) t_per=Period(); else t_per=Time_alert_minutes; // ???? ??<Time_alert, ????? ????? ?????????? ???? ??? ? ??.

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

     {

     Alert(Symbol()," +++  BUY !!! +++" , "  //AltrTrend_Signal_v2_2_alert");

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

     //PlaySound("payment.wav");

    fPlayer;//script

   

     }

    

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

     {

     Alert(Symbol()," +++  SELL !!!   +++" , "  //AltrTrend_Signal_v2_2_alert");

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

    // PlaySound("payment.wav");

    fPlayer;

    }

          

 

    return(0);

  }

 

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

Причина обращения: