È necessario scriveretempl(T1) davanti ad ogni funzionee prenderà una variabile o l'argomento richiesto? Perché è dichiaratotempl(T) e chiamatotempl(T1), devo aggiungere un numero prima di ogni funzione(templ(T1)templ(T2)templ(T3)) o devo scriveretempl(T1) ovunque?E se diversi parametri sono segnati intemplate<typename T>allora come sarebbe, come questotemplate<typename T,typename P,typename Q>-templ(T,P,Q).
Sì, la registrazione è ancora fatta prima di ogni funzione, dove si vuole trasformare una funzione normale in un modello di funzione. È solo che questo disco è notevolmente più corto ora. T1 è un nome che denota un certo tipo di dati, che vengono memorizzati in una variabile con il suo nome (a). Non è necessario aggiungere un numero. Puoi usare lo stesso nome ovunque, anche la stessa T senza numero. Il templ non viene chiamato, ma viene automaticamente sostituito con ciò che gli viene anteposto in #define. Questa è una semplice sostituzione di un testo con un altro, ma potete scrivere i parametri di input tra parentesi, proprio come le funzioni.
#define templ(T) template<typename T> // один входной параметр именуемый буквой "T" т. е. "T" это просто имя.
templ(T1) T1 Funct(T1 a) { return a;} // функция вернёт тот же тип, что и будет передан при вызове это функции
A tempo di compilazione l'espressione templ(T1) sarà sostituita con template<typename T1> e otterrete questo
template<typename T1>
T1 Funct(T1 a) { return a;}
Per i parametri multipli, sì, avete indovinato come descrivere.
Директива #define подставляет expression вместо всех последующих найденных вхождений identifier в исходном тексте. identifier заменяется только в том случае, если он представляет собой отдельный токен. identifier не заменяется, если он является частью комментария, частью строки, или частью другого более длинного идентификатора. expression...
Capisco che bisogna selezionare tramite interruttore, e inserire i nomi lì
Il tuo codice stampa un valore int, mentre tu hai bisogno di selezionare una stringa
Userei un array di costanti di stringhe per selezionare il nome dell'indicatore, cioè il mio esempio vi dà il numero del record quando l'utente lo seleziona, e questo numero può essere il numero di un elemento (indice) dell'array di stringhe, dove memorizzereste i nomi di testo degli indicatori
Mi dispiace di non avere un terminale, non posso mostrare l'esempio nel codice, ma penso di aver spiegato l'idea
Io userei un array di costanti di stringa per selezionare il nome dell'indicatore, cioè il mio esempio vi dà il numero del record quando viene selezionato dall'utente, e questo numero può essere il numero dell'elemento (indice) dell'array di stringhe dove salverete i nomi testuali degli indicatori
Mi dispiace di non avere un terminale, non posso mostrare l'esempio nel codice, ma penso di aver spiegato l'idea
PS:
Grazie, l'ho fatto, è abbastanza utile.
E la versione finale, questa è solo una bomba. Mi mancava da molto tempo, dato che ho almeno 20 grafici aperti nel terminale
Ciao a tutti. Aiuto, per favore. Voglio che l'EA aspetti n ore dopo aver chiuso un trade. Posso anche modificare questa funzione. Sarebbe corretto cambiare Mode_Trades in Mode_History? Grazie
Carcass77: Ciao a tutti. Aiuto, per favore. Voglio che l'EA aspetti n ore dopo aver chiuso un trade. Posso anche modificare questa funzione. Sarebbe corretto cambiare Mode_Trades in Mode_History? Grazie
MODE_HISTORY - naturalmente è necessario, ma c'è un altro punto: nel testo "dopo la chiusura" e nel codiceOrderOpenTime
E non andare nei bar, restituire il tempo t e poi usarlo in qualche modo:
Si prega di notare che la funzione è cambiata leggermente.
//+------------------------------------------------------------------+//| 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);
}
//+----------------------------------------------------------------------------+
È necessario scriveretempl(T1) davanti ad ogni funzionee prenderà una variabile o l'argomento richiesto? Perché è dichiaratotempl(T) e chiamatotempl(T1), devo aggiungere un numero prima di ogni funzione(templ(T1)templ(T2)templ(T3)) o devo scriveretempl(T1) ovunque?E se diversi parametri sono segnati intemplate<typename T>allora come sarebbe, come questotemplate<typename T,typename P,typename Q>-templ(T,P,Q).
Sì, la registrazione è ancora fatta prima di ogni funzione, dove si vuole trasformare una funzione normale in un modello di funzione. È solo che questo disco è notevolmente più corto ora.
T1 è un nome che denota un certo tipo di dati, che vengono memorizzati in una variabile con il suo nome (a). Non è necessario aggiungere un numero. Puoi usare lo stesso nome ovunque, anche la stessa T senza numero.
Il templ non viene chiamato, ma viene automaticamente sostituito con ciò che gli viene anteposto in #define. Questa è una semplice sostituzione di un testo con un altro, ma potete scrivere i parametri di input tra parentesi, proprio come le funzioni.
A tempo di compilazione l'espressione templ(T1) sarà sostituita con template<typename T1> e otterrete questo
Per i parametri multipli, sì, avete indovinato come descrivere.
Capisco, grazie per l'informazione, l'ho già provato - è utile.
Capisco che bisogna selezionare tramite interruttore, e inserire i nomi lì
Il tuo codice stampa un valore int, mentre tu hai bisogno di selezionare una stringa
Userei un array di costanti di stringhe per selezionare il nome dell'indicatore, cioè il mio esempio vi dà il numero del record quando l'utente lo seleziona, e questo numero può essere il numero di un elemento (indice) dell'array di stringhe, dove memorizzereste i nomi di testo degli indicatori
Mi dispiace di non avere un terminale, non posso mostrare l'esempio nel codice, ma penso di aver spiegato l'idea
PS:
Io userei un array di costanti di stringa per selezionare il nome dell'indicatore, cioè il mio esempio vi dà il numero del record quando viene selezionato dall'utente, e questo numero può essere il numero dell'elemento (indice) dell'array di stringhe dove salverete i nomi testuali degli indicatori
Mi dispiace di non avere un terminale, non posso mostrare l'esempio nel codice, ma penso di aver spiegato l'idea
PS:
Grazie, l'ho fatto, è abbastanza utile.
E la versione finale, questa è solo una bomba. Mi mancava da molto tempo, dato che ho almeno 20 grafici aperti nel terminale
Ciao a tutti. Aiuto, per favore. Voglio che l'EA aspetti n ore dopo aver chiuso un trade. Posso anche modificare questa funzione. Sarebbe corretto cambiare Mode_Trades in Mode_History? Grazie
MODE_HISTORY - naturalmente è necessario, ma c'è un altro punto: nel testo "dopo la chiusura" e nel codiceOrderOpenTime
E non andare nei bar, restituire il tempo t e poi usarlo in qualche modo:
MODE_HISTORY - naturalmente è necessario, ma c'è un altro punto: nel testo "dopo la chiusura" e nel codiceOrderOpenTime
E non andare nei bar, restituire il tempo t e poi usarlo in qualche modo:
Ho corretto a Mode_History, è così che il gufo non apre il primo ordine. Puoi approfondire la soluzione? Grazie
Ho corretto in Mode_History, così il gufo non apre il primo ordine. Puoi per favore elaborare la soluzione? Grazie
Date un'occhiata a questo.
Date un'occhiata a questo.
Come si risolve il primo ordine?
E come si risolve il primo ordine?
Si prega di notare che la funzione è cambiata leggermente.