[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 233

 
hoz:

Wie oft habe ich den Autopunkt schon benutzt, aber beim ersten Mal klappt es nicht.

Hier ist Init()

Ich setze sie an einer beliebigen Stelle des Programms ein (in diesem Fall sogar beim Start des Experiments):

Die Funktion kehrt in das Protokoll zurück:

Wo ist die Logik?

VladislavVG sagte mir: Weilbei der init()-Funktion nicht gewährleistet ist, dass die Daten des Finanzinstruments geladen werden.
 
GaNDarM:
VladislavVG hat es mir vorgeschlagen:Denn in der Phase der init()-Funktion ist es nicht garantiert, dass die Daten des Finanzinstruments geladen werden.

Der Wert der Variablen Point ohne Init() sollte also den gleichen Wert zurückgeben...
 
hoz:
Warum sollte es Unsinn sein, wenn die Funktion speziell einen Objektnamen zurückgibt?
Und Sie sind sich zu 100 % sicher, dass diese Funktion immer und überall korrekt funktioniert, dass sie nicht irgendwo versagt oder an irgendeinem kniffligen Objektnamen hängen bleibt oder dass Sie selbst nicht aus Versehen die Nummer eines nicht existierenden Objekts einfügen? Und das von der Funktion zurückgegebene Ergebnis kann nicht verwendet werden, um zu beurteilen, ob die Funktion richtig funktioniert hat oder nicht. So steht es in der Dokumentation. Der einzig richtige Weg ist, den Fehlercode zu ermitteln und ihn dann zu umgehen. So schützen Sie sich vor Ihren eigenen Fehlern (oder denen anderer).
 
hoz:

Wie oft habe ich den Autopunkt schon benutzt, aber beim ersten Mal hat es nicht funktioniert.


Wo bleibt da die Logik?

Versuchen Sie es so:

int init()
{
   if (Digits == 2 || Digits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (Digits == 1 || Digits == 3 || Digits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Nicht einmal so, sondern so:

int init()
{
   int MyDigits = MarketInfo(Symbol(), MODE_DIGITS)
   if (MyDigits == 2 || MyDigits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (MyDigits == 1 || MyDigits == 3 || MyDigits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Denn Digits ist eine interne Variable, genau wie Piont.

Das sollte funktionieren :)



 
hoz:

Der Wert der Point-Variable ohne Init() sollte also den gleichen Wert zurückgeben...

Das ist keine Tatsache... Point ist eine interne Variable des MQL-Prozessors und benötigt einige Zeit und einige Initialisierungsaktionen, um sie zu aktualisieren. All dies geschieht in der Regel erst, bevor der Prozessor start() aufruft, und in der Phase von init() dürfen die Werte der internen Variablen des Prozessors noch nicht gesetzt sein.
 
GaNDarM:


"Weinen" darüber:

und hier ist das Protokoll:

18:25:09 IndikatorZZ GBPJPY,Daily: F_CYF INIT: DownL = 0 UpL = 0


Sind die Variablen nicht zufällig int?


Ich habe mich schon ein paar Mal dabei ertappt

 
ilunga:

Sind die Variablen zufällig int?


Ich habe mich ein paar Mal dabei ertappt, wie ich das gemacht habe.


Nein, doppelt. Ich frage mich, was mit int los ist?
 
Hallo, ich hatte am Vortag ein Problem. Am 19.03.2013 gegen 17-00 Uhr GMT habe ich einen Auftrag zum Setzen eines Verkaufsstopps erteilt. Der Eröffnungskurs lag bei 1,2903, Stop Loss 1,2913, Trailing Stop 15 Pips, M15, Lot -0,5. Wie der Kontoverlauf zeigt, wurde die Position bei 17-49 eröffnet. Die Position wurde um 21:15 Uhr wieder durch GMT mit dem Gewinn minus 90 geschlossen. Als ich die Geschichte sah, kamen mir viele Fragen in den Sinn. Zum Beispiel, warum die Position an der Spitze des Spikes geschlossen wurde (siehe Bild). Warum wurde der Trailing-Stop nicht ausgelöst, denn wenn er funktioniert hätte, wäre der Gewinn positiv gewesen, weil die Kursbewegung korrekt war. Nach dem Trailing-Stop würde ein Stop-Loss nicht 90 USD betragen. Und noch einmal - warum die Position auf dem Höhepunkt des Anstiegs geschlossen wurde. Von Punkt zu Punkt. Ich habe mich in dieser Angelegenheit nicht an das Handelszentrum gewandt. Wahrscheinlich werden sie nicht antworten. Ich habe mich an dieses Forum erinnert und hoffe, dass Fachleute in der Lage sein werden, den Grund für diese Anomalie in einfacher Sprache zu erklären. Ich habe vor nicht allzu langer Zeit mit dem Handel auf MT4 begonnen. Ich schnüffle immer noch und schaue mich um.
 
Hallo. Können Sie mir bitte sagen, wenn ein EA mit mehreren Fenstern von Währungspaaren gleichzeitig verbunden ist, dann Änderungen in der EA in einem Fenster Auswirkungen auf die EA in einem anderen Fenster??? dh. lokale Variablen ändern oder nicht???
 

Meine Herren, bitte geben Sie mir einen Hinweis!

Ich versuche, eine einfache Idee umzusetzen, die in den Kommentaren zum Programm beschrieben ist.

Das Programm öffnet im TESTER Aufträge zu einem Preis, der nicht mit dem im Code angegebenen übereinstimmt.

Zum Beispiel wird der Auftrag zum Preis von 0,86084 eröffnet, während der nächstgelegene Wert im Array 0,85375 ist.

Die Differenz ist positiv, während der Code vorschreibt, Aufträge zu eröffnen, wenn die Differenz < 0,00000 ist, d.h. wenn sie negativ ist.


Bitte teilen Sie uns mit, wo sich der Fehler befindet.

Ich danke Ihnen.

int start()
{
 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);    
 #include <MASSIV.mqh> //объявление массива типа double (неповторяющиеся значения цены с пятью знаками после точки)
 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика

 int S = ArrayBsearch(  massiv,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000


{
                        
 OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыть
  }                                  

   }