Auf Wiedersehen, Roboter - Hallo, Marasmus - Seite 4

 
Mislaid:

Die Kontrolle der Array-Grenzen durch Angabe einer Zeichenkette im Code ist sehr nützlich. Früher hieß es: durch Null dividieren und schauen, was man will. Und noch schlimmer war es, wenn der Fehler nicht auftrat.

Könnten Sie ein Beispiel dafür geben, wie man das macht? Ich konnte in der Dokumentation nichts über diese Funktion finden.
 
Andrei01:
Könnten Sie bitte ein Beispiel nennen, wie man das macht? Ich habe in der Dokumentation nichts über diese Funktion gefunden.

Ganz genau! Sie brauchen jetzt nichts zu tun. Öffnen Sie die Registerkarte "Experten" und lesen Sie die Protokolle. Wenn ein Fehler auftritt, erhalten Sie eine entsprechende Meldung. Wie:

array out of range....... mit Angabe der Zeilennummer im Code.

 
Mislaid:

Öffnen Sie die Registerkarte "Experten" und lesen Sie die Protokolle.

Funktioniert es auch bei Indikatoren und Skripten?
 
Pavlick:

Versuchen Sie, die Groß- und Kleinschreibung des ersten Buchstabens des Skript-/Indikatornamens zu ändern. Ich habe auch einmal gekämpft https://www.mql5.com/ru/forum/152533/page2#982156

P.S: Nun, ändern Sie string in char[]

Antworte, Pawlik!

Gut für dich, Pavlik!

Ihr Code hat sofort funktioniert!

Jetzt können Sie die

Skript!

Er muss noch in den Indikator eingebaut werden!

Ihr Code wurde in den Indikator eingefügt!

Es gibt nur ein kleines Hindernis

Indikator will den Namen nicht erkennen

Ich habe den Namen an die Stelle geschrieben, an der er im Skript steht.

von wo aus das Skript aufgerufen werden soll.

Jetzt muss nur noch das Drehbuch

erkannt!

Können Sie mir helfen?

mit freundlichen Grüßen

punsa

 
pansa:

Antworte, Pawlik!

Du bist großartig, Pavlik!

Ihr Code funktionierte auf Anhieb!

können Sie nun die

das Drehbuch!

Er muss noch in den Indikator eingebaut werden!

Ihr Code wurde in den Indikator eingefügt!

Es gibt nur ein kleines Hindernis

Indikator will den Namen nicht erkennen

Ich habe den Namen an die Stelle geschrieben, an der er im Skript steht.

von wo aus das Skript aufgerufen werden soll.

Jetzt muss nur noch das Drehbuch

erkannt!

Können Sie mir helfen?

mit freundlichen Grüßen

Panza




Ich werde Ihnen helfen, wenn Sie es brauchen
 
Es gibt noch einen sehr guten Haken an diesen Warnungen (zumindest gab es einen). Die Priorität der logischen Ausdrücke hat sich geändert. Wenn die Priorität nicht explizit durch Klammern definiert ist, gibt der Compiler nur eine Warnung aus, obwohl der logische Ausdruck jetzt eine ganz andere Wirkung hat als vorher. Das muss ein Fehler sein. Möglicherweise hat jemand beschlossen, die Warnungen zu ignorieren, darunter auch eine Warnung vor einem logischen Ausdruck.
 
Vinin:

Ich werde dir helfen, wenn du Hilfe brauchst.

Hallo, Vinin!

Ich danke Ihnen vielmals

dass Sie helfen wollen!

Ich schicke Sie, um einen Überblick darüber zu erhalten, wie die

Skriptaufruf Komposter

pansa

____________________________________

Hallo Pawlik!

Ich möchte Ihnen ein Beispiel zeigen

wie der Skriptaufruf organisiert wurde

mit dem Komposter, jetzt funktioniert er nicht mehr.

zur Überprüfung

pansa

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

//|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(), Zeitraum() );

//

//

//

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

{

Schlaf(100);

keybd_event(13, 0, 0, 0);

}

//

//

//

zurück(0);

 
pansa:

Hallo, Vinin!

Ich danke Ihnen vielmals

dass Sie helfen wollen!

Ich sende Ihnen einen Überblick darüber, wie die

Skriptaufruf Komposter

pansa

____________________________________

Hallo Pawlik!

Ich möchte Ihnen ein Beispiel zeigen

wie der Skriptaufruf organisiert wurde

mit dem Komposter, jetzt funktioniert er nicht mehr.

zur Überprüfung

pansa


Ist es wirklich so schwer, auf den SRC zu klicken und den Code einzufügen?

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

Das sollte gut funktionieren:

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

}

Und vergessen Sie nicht die Groß- und Kleinschreibung des Anfangsbuchstabens des Skripts, z. B. wenn das Skript nicht mit "test" beginnt, sollten Sie "Test" versuchen.

Hochachtungsvoll, Pawlik ))

 
Pavlick:

Das sollte gut funktionieren:

Und vergessen Sie nicht die Groß- und Kleinschreibung des ersten Buchstabens des Skripts. Wenn zum Beispiel das Skript"test" nicht ausgeführt wird, sollten Sie es mit "Test" versuchen.

Mit freundlichen Grüßen, Pawlik )))


Hallo Pawlik!

Ich habe Ihre Raffinesse und

versucht, alles in den Indikator zu packen

aber der Indikator will das nicht.

Sehen Sie, was Sie tun können

damit es funktioniert!

Panza

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

//|AltrTREND_Signal.mq4 |

//| Copyright 2014, MetaQuotes Software Corp.

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

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

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

//|AltrTrend_Signal_v2_2_alert.mq4|

//|Ramdass - Nur Bekehrung|

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

#property copyright "Autor - OlegVS, GOODMAN"

#Eigenschaft streng

#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

#Eigenschaft indicator_buffers 2

#property indicator_color1 DeepSkyBlue

#property indicator_color2 OrangeRed

#Eigenschaft indicator_width1 1

#Eigenschaft indicator_width2 1

//---- Eingabeparameter

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;

//---- Puffer

double val1[];

double val2[];

double AlertTime;

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

//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren|

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

int init()

{

string kurz_name;

//---- Indikatorzeile

IndikatorPuffer(1);

SetIndexStyle(0,DRAW_ARROW);

SetIndexPfeil(0,241);

IndikatorPuffer(2);

SetIndexStyle(1,DRAW_ARROW);

SetIndexPfeil(1,242);

SetIndexPuffer(0,val1);

SetIndexPuffer(1,val2);

if(CountBars>=Bars)

CountBars=Bars;

SetIndexDrawBegin(0, Bars - CountBars + PeriodADX );

SetIndexDrawBegin(1, Bars - CountBars + PeriodADX );

//----

zurück(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 Aufwärtstrend, alt;

//----

if(Balken <=PeriodADX+ 1)

zurück(0);

//----

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

{

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

Bereich = 0;

AvgRange = 0;

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

{

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

}

Bereich = AvgRange / (SSP + 1);

//----

SsMax = High[shift];

SsMin = Low[shift];

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

{

Preis = Hoch[i2];

if(SsMax < Preis)

SsMax= Preis;

Preis = Niedrig[i2];

if(SsMin >= Preis)

SsMin = Preis;

}

//----

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

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

val1[shift] = 0,0;

val2[shift] = 0,0;

if(Close[shift] < smin)

{

Aufwärtstrend = false;

}

if(Close[shift] > smax)

{

Aufwärtstrend = wahr;

}

if(Aufwärtstrend != alt && Aufwärtstrend == wahr)

{

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

}

if(Aufwärtstrend != alt && Aufwärtstrend == false)

{

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

}

alt = Aufwärtstrend;

}

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

{

Schlaf(100);

keybd_event(13, 0, 0, 0);

}

//---- Alert

if (Zeitraum()<Zeit_Alarm_minuten) t_per=Zeitraum(); sonst t_per=Zeit_Alarm_minuten; // ???? ??<Zeit_Alarm, ????? ????? ?????????? ???? ??? ? ??.

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 ;

}

zurück(0);

}

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