Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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 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.
Öffnen Sie die Registerkarte "Experten" und lesen Sie die Protokolle.
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
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
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);
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?
Das sollte gut funktionieren:
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 ))
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);
}
//+------------------------------------------------------------------+