Fehler, Irrtümer, Fragen - Seite 1521
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
Gleichzeitig besagt die Hilfe der IsStopped-Funktion, dass der Programmbetrieb nach 3 Sekunden zwangsweise beendet wird, wenn es einen Befehl zum Beenden des mql-Programms gibt.
Und wenn while(true) durch while(!IsStopped()) ersetzt wird, wird der Indikator erfolgreich beendet, wenn er aus dem Diagramm entfernt wird.
Alles ist klar. Wir haben eine Nachsicht für die normale Löschung gewährt.
Wenn sich das Terminal schließt, wird es hart sein. Nicht mehr als 3 Sekunden.
Und ich bin mir nicht sicher, ob wir dies in die Dokumentation schreiben werden, 1. um nicht in das Schreiben solch unbedachter Indikatoren zu verfallen (haben Sie dies geschrieben, um zu überprüfen?) 2. Wie gelockert, so gestrafft.
Eine lustige Ursache für den internen Compiler-Fehler (Funktion, die im Indikator verwendet wird):
...Die Lösung liegt auf der Hand, aber ich stimme zu - eine sehr lustige Panne. :)))
Ich habe Ihnen eine private Nachricht geschrieben.
Dmitri Custurov:
Здравствуйте. Не получается написать код, который открывал бы позицию через n-количество баров после открытия предыдущей позиции. Пробовал использовать Time[i], iBarShift, iTime. Все безуспешно. В программировании новичок. Поиск ничего не дал.
Hier ist der Code:
if ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1))Timer=Time[0];}
TimerNull=iBarShift(NULL,0,Timer,false);
if ((TimerNull>=n)&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red);
z=2;}
Ich habe es auch auf diese Weise versucht:
Timer=Time[0];}
TimerNull=Zeit[0];
if ((TimerNull>=(Timer+2700))&&(z==1)) //als Beispiel habe ich hier 2700 Sekunden anstelle von n angegeben, was im Test 3 15-Minuten-Kerzen bedeutete) {int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red);
z=2;}
Und auch so:
Timer=Time[0];}
TimerNull=Zeit[0];
if ((CurrentTime()>=(Timer+2700))&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red); //In diesem Fall, wenn ich 2700 entfernt habe, wurde der zweite Handel direkt nach dem ersten im gleichen Takt eröffnet, das macht Sinn. Und selbst wenn ich einen beliebigen Wert bis 600 anstelle von 2700 einstellte, wurde das zweite Geschäft in derselben Leiste geöffnet. Bei einem Wert von mehr als 600 wurde der zweite Handel nie eröffnet. Ich kann nicht verstehen, was das Problem ist. Ich wäre Ihnen für Ihre Hilfe sehr dankbar.
Die Parameter Timer und TimerNull haben das Format datetime.
in Ihrem Beispiel gibt es keine Aufzählung von z.B. Positionen
if ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1))
Daher wählt es immer die Position 0.
Das macht alles Sinn. Es wurde ein Nachlass für die normale Löschung gewährt.
Wenn Sie das Terminal schließen, wird es hart sein. Nicht mehr als 3 Sekunden.
Und ich bin mir nicht sicher, ob wir dies in die Dokumentation schreiben werden, 1. um nicht in das Schreiben solch unbedachter Indikatoren zu verfallen (haben Sie dies geschrieben, um zu überprüfen?) 2. Wie gelockert, so gestrafft.
Ziehen Sie es also schon an, oder korrigieren Sie den Verweis. Nachgeben und nicht nachgeben ist kein ernsthaftes Thema. Was Programmierer von Ihnen erwarten, ist keine "Bevormundung", sondern klare, gut dokumentierte Software.
Natürlich hat dieser Code keinen anderen Zweck als eine Demonstration, um die Sie selbst gebeten haben. Und es ist ganz harmlos, harmlos, es zu bekommen, wenn man Sleep entfernt und Comment durch Print ersetzt. Weder in Quartet noch in Quartet 5 gibt es einen Schutz gegen das Einspammen von Gigabytes an Druckdaten in das Protokoll.
Hier ist der Code:
if ((OrderSelect(0,SELECT_BY_POS,MODE_TRADES)==False)&&(Signal==1))Timer=Time[0];}
TimerNull=iBarShift(NULL,0,Timer,false);
if ((TimerNull>=n)&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red);
z=2;}
Ich habe es auch auf diese Weise versucht:
Timer=Time[0];}
TimerNull=Zeit[0];
if ((TimerNull>=(Timer+2700))&&(z==1)) //als Beispiel habe ich hier 2700 Sekunden anstelle von n angegeben, was im Test 3 15-Minuten-Kerzen bedeutete) {int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red);
z=2;}
Und auch so:
Timer=Time[0];}
TimerNull=Zeit[0];
if ((CurrentTime()>=(Timer+2700))&&(z==1))
{int send2=OrderSend(Symbol(), OP_SELL, Volume_, Bid, 0, 0, 0, NULL, 2, 0, Red); //In diesem Fall, wenn ich 2700 entfernt habe, wurde der zweite Handel direkt nach dem ersten im gleichen Takt eröffnet, das macht Sinn. Und selbst wenn ich einen beliebigen Wert bis 600 anstelle von 2700 einstellte, wurde das zweite Geschäft in derselben Leiste geöffnet. Bei einem Wert von mehr als 600 wurde der zweite Handel nie eröffnet. Ich kann nicht verstehen, was das Problem ist. Ich wäre Ihnen für Ihre Hilfe sehr dankbar.
Die Parameter Timer und TimerNull haben das Format datetime.
Dies ist eine der möglichen Implementierungen. Dieser EA sollte eine Order nach der angegebenen Anzahl von Bars eröffnen. Und lernen Sie, wie man EA-Code richtig einfügt, nämlich über die SRC-Schaltfläche in der Nachrichtenleiste.
111
Die Frage richtet sich wahrscheinlich an die Entwickler von Websites oder an die Administratoren von Freelance-Diensten
---
Früher: 568 abgeschlossene Aufträge, 75% persönlich
13 Jobs hinzugefügt (alle persönlich) und wurde: 581 erledigt, 75% persönlich
---
Daher die Frage: entschlüsseln Sie bitte, was 75% bedeutet?