Ist es notwendig,templ(T1) vor jede Funktion zu schreiben, die eine Variable oder das erforderliche Argument annimmt? Warum wirdtempl(T) deklariertundtempl(T1) aufgerufen, sollte ich vor jeder Funktion eine Zahl hinzufügen(templ(T1)templ(T2)templ(T3)) oder sollte ich überalltempl(T1) schreiben?Und wenn mehrere Parameter intemplate<typename T>gewertet werden, wie würde es dann sein, wie diesestemplate<typename T,typename P,typename Q>-templ(T,P,Q).
Ja, die Aufzeichnung erfolgt immer noch vor jeder Funktion, bei der Sie eine normale Funktion in eine Funktionsvorlage umwandeln wollen. Es ist nur so, dass diese Platte jetzt merklich kürzer ist. T1 ist ein Name, der eine Art von Daten bezeichnet, die in einer Variablen mit dem Namen (a) gespeichert werden. Es ist nicht notwendig, eine Zahl hinzuzufügen. Sie können überall den gleichen Namen verwenden, sogar das gleiche T ohne Nummer. Die Vorlage wird nicht aufgerufen, sondern automatisch durch das ersetzt, was ihr in #define vorangestellt ist. Dies ist eine einfache Ersetzung eines Textes durch einen anderen, aber Sie können die Eingabeparameter in Klammern schreiben, genau wie bei Funktionen.
#define templ(T) template<typename T> // один входной параметр именуемый буквой "T" т. е. "T" это просто имя.
templ(T1) T1 Funct(T1 a) { return a;} // функция вернёт тот же тип, что и будет передан при вызове это функции
Zur Kompilierzeit wird der Ausdruck templ(T1) durch template<typename T1> ersetzt und man erhält folgendes
template<typename T1>
T1 Funct(T1 a) { return a;}
Für mehrere Parameter, ja, Sie haben richtig geraten, wie zu beschreiben.
Директива #define подставляет expression вместо всех последующих найденных вхождений identifier в исходном тексте. identifier заменяется только в том случае, если он представляет собой отдельный токен. identifier не заменяется, если он является частью комментария, частью строки, или частью другого более длинного идентификатора. expression...
Ich habe verstanden, dass Sie über einen Schalter auswählen und die Namen dort eingeben müssen.
Ihr Code gibt einen int-Wert aus, während Sie einen String auswählen müssen
Ich würde ein Array von String-Konstanten verwenden, um den Indikatornamen auszuwählen, d.h. mein Beispiel gibt Ihnen die Nummer des Datensatzes, wenn der Benutzer ihn auswählt, und diese Nummer kann die Nummer eines Elements (Index) des String-Arrays sein, in dem Sie die Textnamen der Indikatoren speichern würden
Sorry, ich habe kein Terminal, ich kann das Beispiel im Code nicht zeigen, aber ich denke, ich habe die Idee erklärt
Ich würde ein Array von String-Konstanten verwenden, um den Namen des Indikators auszuwählen, d.h. mein Beispiel gibt Ihnen die Nummer des Datensatzes, wenn er vom Benutzer ausgewählt wird, und diese Nummer kann die Nummer des Elements (Index) des String-Arrays sein, in dem Sie die Textnamen der Indikatoren speichern werden
Sorry, ich habe kein Terminal, ich kann das Beispiel im Code nicht zeigen, aber ich denke, ich habe die Idee erklärt
PS:
Danke, das habe ich getan, es ist ziemlich praktisch.
Und die endgültige Version ist einfach der Hammer. Das habe ich schon lange vermisst, denn ich habe mindestens 20 Charts im Terminal geöffnet
Hallo zusammen. Hilfe, bitte. Ich möchte, dass der EA nach dem Schließen eines Geschäfts n Stunden lang wartet. Ich kann diese Funktion auch optimieren. Wäre es richtig, Mode_Trades in Mode_History zu ändern? Dankeschön
Carcass77: Hallo zusammen. Hilfe, bitte. Ich möchte, dass der EA nach dem Schließen eines Geschäfts n Stunden lang wartet. Ich kann diese Funktion auch optimieren. Wäre es richtig, Mode_Trades in Mode_History zu ändern? Dankeschön
MODE_HISTORY - natürlich wird er benötigt, aber es gibt noch einen weiteren Punkt: im Text "after closing" und im CodeOrderOpenTime
Und gehen Sie nicht in Bars, bringen Sie die Zeit t zurück und verwenden Sie sie dann irgendwie:
Bitte beachten Sie, dass sich die Funktion leicht geändert hat.
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
// здесь пофиг какой символ и какая позиция ... последняя позиция и всеint ClosePos = SecondsAfterCloseLastPos();
// здесь по тек. символу и пофиг какая позиция // int ClosePos = SecondsAfterCloseLastPos(Symbol()); // здесь по тек. символу и OP_BUY позиция // int ClosePos = SecondsAfterCloseLastPos(Symbol(),OP_BUY); // здесь по тек. символу , OP_BUY позиция , и магик 5 // int ClosePos = SecondsAfterCloseLastPos(Symbol(),OP_BUY,5);// продажи, вместо OP_BUY прописываем OP_SELL.if(ClosePos > 3600 || ClosePos == 0 ) {/*можно открывать*/}
}
//+------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает количество секунд после закрытия последней позиций. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+int SecondsAfterCloseLastPos(string sy="",int op=-1,int mn=-1)
{
datetime t=0;
int i,k=OrdersHistoryTotal();
if(sy=="0") sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==sy || sy=="")
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op<0 || OrderType()==op)
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(t<OrderCloseTime()) t=OrderCloseTime();
}
}
}
}
}
}
int CloseTime;
if(t==0)
CloseTime=0;
else
CloseTime = int(TimeCurrent()-t);
return(CloseTime);
}
//+----------------------------------------------------------------------------+
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Ist es notwendig,templ(T1) vor jede Funktion zu schreiben, die eine Variable oder das erforderliche Argument annimmt? Warum wirdtempl(T) deklariertundtempl(T1) aufgerufen, sollte ich vor jeder Funktion eine Zahl hinzufügen(templ(T1)templ(T2)templ(T3)) oder sollte ich überalltempl(T1) schreiben?Und wenn mehrere Parameter intemplate<typename T>gewertet werden, wie würde es dann sein, wie diesestemplate<typename T,typename P,typename Q>-templ(T,P,Q).
Ja, die Aufzeichnung erfolgt immer noch vor jeder Funktion, bei der Sie eine normale Funktion in eine Funktionsvorlage umwandeln wollen. Es ist nur so, dass diese Platte jetzt merklich kürzer ist.
T1 ist ein Name, der eine Art von Daten bezeichnet, die in einer Variablen mit dem Namen (a) gespeichert werden. Es ist nicht notwendig, eine Zahl hinzuzufügen. Sie können überall den gleichen Namen verwenden, sogar das gleiche T ohne Nummer.
Die Vorlage wird nicht aufgerufen, sondern automatisch durch das ersetzt, was ihr in #define vorangestellt ist. Dies ist eine einfache Ersetzung eines Textes durch einen anderen, aber Sie können die Eingabeparameter in Klammern schreiben, genau wie bei Funktionen.
Zur Kompilierzeit wird der Ausdruck templ(T1) durch template<typename T1> ersetzt und man erhält folgendes
Für mehrere Parameter, ja, Sie haben richtig geraten, wie zu beschreiben.
Verstehe, danke für die Information, ich habe es bereits ausprobiert - es ist praktisch.
Ich habe verstanden, dass Sie über einen Schalter auswählen und die Namen dort eingeben müssen.
Ihr Code gibt einen int-Wert aus, während Sie einen String auswählen müssen
Ich würde ein Array von String-Konstanten verwenden, um den Indikatornamen auszuwählen, d.h. mein Beispiel gibt Ihnen die Nummer des Datensatzes, wenn der Benutzer ihn auswählt, und diese Nummer kann die Nummer eines Elements (Index) des String-Arrays sein, in dem Sie die Textnamen der Indikatoren speichern würden
Sorry, ich habe kein Terminal, ich kann das Beispiel im Code nicht zeigen, aber ich denke, ich habe die Idee erklärt
PS:
Ich würde ein Array von String-Konstanten verwenden, um den Namen des Indikators auszuwählen, d.h. mein Beispiel gibt Ihnen die Nummer des Datensatzes, wenn er vom Benutzer ausgewählt wird, und diese Nummer kann die Nummer des Elements (Index) des String-Arrays sein, in dem Sie die Textnamen der Indikatoren speichern werden
Sorry, ich habe kein Terminal, ich kann das Beispiel im Code nicht zeigen, aber ich denke, ich habe die Idee erklärt
PS:
Danke, das habe ich getan, es ist ziemlich praktisch.
Und die endgültige Version ist einfach der Hammer. Das habe ich schon lange vermisst, denn ich habe mindestens 20 Charts im Terminal geöffnet
Hallo zusammen. Hilfe, bitte. Ich möchte, dass der EA nach dem Schließen eines Geschäfts n Stunden lang wartet. Ich kann diese Funktion auch optimieren. Wäre es richtig, Mode_Trades in Mode_History zu ändern? Dankeschön
MODE_HISTORY - natürlich wird er benötigt, aber es gibt noch einen weiteren Punkt: im Text "after closing" und im CodeOrderOpenTime
Und gehen Sie nicht in Bars, bringen Sie die Zeit t zurück und verwenden Sie sie dann irgendwie:
MODE_HISTORY - natürlich wird er benötigt, aber es gibt noch einen weiteren Punkt: im Text "after closing" und im CodeOrderOpenTime
Und gehen Sie nicht in Bars, bringen Sie die Zeit t zurück und verwenden Sie sie dann irgendwie:
Ich habe auf Mode_History korrigiert, so dass die Eule die erste Bestellung nicht öffnet. Können Sie die Lösung näher erläutern? Danke
Ich habe auf Mode_History korrigiert, damit die Eule nicht die erste Bestellung öffnet. Können Sie die Lösung bitte näher erläutern? Danke
Schauen Sie sich das an.
Schauen Sie sich das an.
Wie wird der erste Auftrag erledigt?
Und wie lösen Sie den ersten Auftrag?
Bitte beachten Sie, dass sich die Funktion leicht geändert hat.