Addio robot - ciao marasma - pagina 4

 
Mislaid:

Controllare i confini dell'array specificando una stringa nel codice è molto utile. Una volta era: dividi per zero e guarda dove vuoi. Ed è ancora peggio se l'errore non è apparso.

Potrebbe fornire un esempio di come farlo? Non ho trovato nulla su questa caratteristica nella documentazione.
 
Andrei01:
Potresti fare un esempio di come farlo? Non ho trovato nulla su questa caratteristica nella documentazione.

Esattamente! Non c'è bisogno di fare nulla ora. Aprite la scheda "esperti" e leggete i registri. Se appare un errore, vedrete un messaggio al riguardo. Come:

array out of range....... che indica il numero di linea nel codice.

 
Mislaid:

Aprite la scheda "esperti" e leggete i registri.

Funziona per gli indicatori e gli script?
 
Pavlick:

Prova a cambiare il caso della prima lettera del nome dello script/indicatore. Anche tu sei stato in difficoltà una volta https://www.mql5.com/ru/forum/152533/page2#982156

P.S: bene, cambia stringa con char[]

Rispondi, Pavlik!

Buon per te Pavlik!

Il tuo codice ha funzionato subito!

Ora potete eseguire il

script!

Resta da inserire nell'indicatore!

Il tuo codice è stato inserito nell'indicatore!

c'è solo un piccolo ostacolo

l'indicatore non vuole riconoscere il nome

Ho scritto il nome nel posto

da cui lo script dovrebbe essere chiamato.

Tutto ciò che rimane è che lo script sia

riconosciuto!

potete aiutarmi?

Cordiali saluti

punsa

 
pansa:

Rispondi, Pavlik!

Sei grande, Pavlik!

il tuo codice ha funzionato subito!

ora è possibile eseguire il

il copione!

Resta da inserire nell'indicatore!

Il tuo codice è stato inserito nell'indicatore!

c'è solo un piccolo ostacolo

l'indicatore non vuole riconoscere il nome

Ho scritto il nome nel posto

da cui lo script dovrebbe essere chiamato.

Tutto ciò che rimane è che lo script sia

riconosciuto!

potete aiutarmi?

Cordiali saluti

Panza




Ti aiuterò se ne hai bisogno
 
C'è ancora un'ottima presa con questi avvertimenti (almeno c'era). La priorità delle espressioni logiche è cambiata. Quando la priorità non è esplicitamente definita da parentesi, il compilatore dà solo un avvertimento, anche se l'espressione logica ora ha un effetto completamente diverso da prima. Deve essere un errore. Qualcuno potrebbe aver deciso di lasciar perdere gli avvertimenti, e tra questi c'è un avvertimento su un'espressione logica.
 
Vinin:

Ti aiuterò se hai bisogno di aiuto.

Ciao, Vinin!

grazie mille

per aver voluto aiutare!

Vi mando per una panoramica di come il

chiamata script compositore

pansa

____________________________________

Ciao Pavlik!

Vorrei mostrarvi un esempio

come è stata organizzata la chiamata allo script

con la compostiera, ora non funziona.

per la revisione

pansa

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

//|sample_execute_script.mq4 |

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

#importare "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);

#importare

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()

{

Dormire(100);

keybd_event(13, 0, 0, 0);

}

//

//

//

ritorno(0);

 
pansa:

Ciao, Vinin!

grazie mille

per aver voluto aiutare!

Vi mando per una panoramica di come il

chiamata script compositore

pansa

____________________________________

Ciao Pavlik!

Vorrei mostrarvi un esempio

come è stata organizzata la chiamata allo script

con la compostiera, ora non funziona.

per la revisione

pansa


È davvero difficile cliccare sull'SRC e incollare il codice?!

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

Questo dovrebbe funzionare bene:

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);

}

E non dimenticare il caso della prima lettera dello script, per esempio, se lo script "test" non inizia, dovresti provare "Test".

Rispettosamente, Pavlik ))

 
Pavlick:

Questo dovrebbe funzionare bene:

E non dimenticate il caso della prima lettera dello script, per esempio, se lo script"test" non funziona, dovreste provare "Test".

Saluti, Pavlik )))


Ciao Pavlik!

Hai la tua raffinatezza e

ha cercato di mettere tutto nell'indicatore

ma l'indicatore non vuole.

vedi cosa puoi fare

per farlo funzionare!

Panza

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

//|AltrTREND_Signal.mq4 |

//| Copyright 2014, MetaQuotes Software Corp.

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

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

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

//|AltrTrend_Signal_v2_2_alert.mq4|

//|Ramdass - Solo conversione|

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

#property copyright "Autore - OlegVS, GOODMAN"

#proprietà rigorosa

#importare "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);

#importare

#proprietà indicator_chart_window

#proprietà indicator_buffers 2

#property indicator_color1 DeepSkyBlue

#property indicator_color2 OrangeRed

#proprietà indicator_width1 1

#proprietà indicator_width2 1

//---- parametri di ingresso

extern bool Alert_message=true;

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

extern int K = 30;

extern double Kstop = 0,5;

extern inttern Kperiod = 150;

extern int PeriodADX = 7; //14;

extern int CountBars = 100;

//---- buffer

doppio val1[];

doppio val2[];

doppio AlertTime;

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

//| funzione di inizializzazione dell'indicatore personalizzato

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

int init()

{

stringa short_name;

//---- linea dell'indicatore

IndicatorBuffers(1);

SetIndexStyle(0,DRAW_ARROW);

SetIndexArrow(0,241);

IndicatorBuffers(2);

SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(1,242);

SetIndexBuffer(0,val1);

SetIndexBuffer(1,val2);

se(CountBars>=Bars)

CountBars=Bars;

SetIndexDrawBegin(0, Bars - CountBars + PeriodADX );

SetIndexDrawBegin(1, Bars - CountBars + PeriodADX );

//----

ritorno(0);

}

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

//| AltrTrend_Signal_v2_2|

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

int start()

{

int i, shift, counted_bars = IndicatorCounted();

//----

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

//----

int i1, i2, t_per;

doppio Range, AvgRange, smin, smax, SsMax, SsMin, SSP, prezzo;

bool uptrend, vecchio;

//----

se(Bars <=PeriodADX+ 1)

ritorno(0);

//----

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

{

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

Gamma = 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 = Basso[shift];

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

{

prezzo = Alto[i2];

se(SsMax < prezzo)

SsMax= prezzo;

prezzo = Basso[i2];

se(SsMin >= prezzo)

SsMin = prezzo;

}

//----

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

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

val1[shift] = 0,0;

val2[shift] = 0,0;

se(Close[shift] < smin)

{

uptrend = falso;

}

se(Close[shift] > smax)

{

uptrend = vero;

}

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

{

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

}

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

{

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

}

vecchio = tendenza al rialzo;

}

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()

{

Dormire(100);

keybd_event(13, 0, 0, 0);

}

//---- Allarme

se (Periodo()<Tempo_di_allarme_minuti) t_per=Periodo(); altrimenti t_per=Tempo_di_allarme_minuti; // ???? <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 ;

}

ritorno(0);

}

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