¿Es necesario escribirtempl(T1) delante de cada funcióny que ésta tome una variable o el argumento requerido? ¿Por qué se declaratempl(T) y se llamatempl(T1), debo añadir un número antes de cada función(templ(T1)templ(T2)templ(T3)) o debo escribirtempl(T1) en todas partes?Y si se anotan varios parámetros entemplate<typename T>entonces cómo sería, como estetemplate<typename T,typename P,typename Q>-templ(T,P,Q).
Sí, el registro se sigue haciendo antes de cada función, cuando se quiere convertir una función normal en una plantilla de función. Es que este disco es notablemente más corto ahora. T1 es un nombre que denota algún tipo de dato, que se almacena en una variable con su nombre (a). No es necesario añadir un número. Puede utilizar el mismo nombre en todas partes, incluso la misma T sin número. No se llama a la plantilla, sino que se sustituye automáticamente por lo que se le antepone en #define. Se trata de una simple sustitución de un texto por otro, pero se pueden escribir los parámetros de entrada entre paréntesis, al igual que las funciones.
#define templ(T) template<typename T> // один входной параметр именуемый буквой "T" т. е. "T" это просто имя.
templ(T1) T1 Funct(T1 a) { return a;} // функция вернёт тот же тип, что и будет передан при вызове это функции
En tiempo de compilación la expresión templ(T1) será reemplazada por template<typename T1> y obtendrá esto
template<typename T1>
T1 Funct(T1 a) { return a;}
En el caso de los parámetros múltiples, sí, ha acertado en la descripción.
Директива #define подставляет expression вместо всех последующих найденных вхождений identifier в исходном тексте. identifier заменяется только в том случае, если он представляет собой отдельный токен. identifier не заменяется, если он является частью комментария, частью строки, или частью другого более длинного идентификатора. expression...
Entiendo que hay que seleccionar a través del interruptor, e introducir los nombres allí
Su código imprime un valor int, mientras que usted necesita seleccionar una cadena
Yo utilizaría una matriz de constantes de cadena para seleccionar el nombre del indicador, es decir, mi ejemplo le da el número del registro cuando el usuario lo selecciona, y este número puede ser el número de un elemento (índice) de la matriz de cadenas, donde almacenaría los nombres de texto de los indicadores
lo siento no tengo un terminal, no puedo mostrar el ejemplo en el código, pero creo que he explicado la idea
Yo utilizaría un array de constantes de cadena para seleccionar el nombre del indicador, es decir, mi ejemplo te da el número del registro cuando es seleccionado por el usuario, y este número puede ser el número del elemento (índice) del array de cadenas donde guardarás los nombres de texto de los indicadores
lo siento no tengo un terminal, no puedo mostrar el ejemplo en el código, pero creo que he explicado la idea
PS:
Gracias, lo hice, es bastante útil.
Y la versión final, es la bomba. Llevo mucho tiempo sin ver esto, ya que tengo al menos 20 gráficos abiertos en el terminal
Hola a todos. Ayuda, por favor. Quiero que el EA espere n horas después de cerrar una operación. También puedo modificar esta función. ¿Sería correcto cambiar Mode_Trades por Mode_History? Gracias
Carcass77: Hola a todos. Ayuda, por favor. Quiero que el EA espere n horas después de cerrar una operación. También puedo modificar esta función. ¿Sería correcto cambiar Mode_Trades por Mode_History? Gracias
MODE_HISTORY - por supuesto que es necesario, pero hay otro punto: en el texto "después de cerrar" y en el códigoOrderOpenTime
Y no vayas a los bares, devuelve el tiempo t y luego úsalo de alguna manera:
Tenga en cuenta que la función ha cambiado ligeramente.
//+------------------------------------------------------------------+//| 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);
}
//+----------------------------------------------------------------------------+
¿Es necesario escribirtempl(T1) delante de cada funcióny que ésta tome una variable o el argumento requerido? ¿Por qué se declaratempl(T) y se llamatempl(T1), debo añadir un número antes de cada función(templ(T1)templ(T2)templ(T3)) o debo escribirtempl(T1) en todas partes?Y si se anotan varios parámetros entemplate<typename T>entonces cómo sería, como estetemplate<typename T,typename P,typename Q>-templ(T,P,Q).
Sí, el registro se sigue haciendo antes de cada función, cuando se quiere convertir una función normal en una plantilla de función. Es que este disco es notablemente más corto ahora.
T1 es un nombre que denota algún tipo de dato, que se almacena en una variable con su nombre (a). No es necesario añadir un número. Puede utilizar el mismo nombre en todas partes, incluso la misma T sin número.
No se llama a la plantilla, sino que se sustituye automáticamente por lo que se le antepone en #define. Se trata de una simple sustitución de un texto por otro, pero se pueden escribir los parámetros de entrada entre paréntesis, al igual que las funciones.
En tiempo de compilación la expresión templ(T1) será reemplazada por template<typename T1> y obtendrá esto
En el caso de los parámetros múltiples, sí, ha acertado en la descripción.
Ya veo, gracias por la información, ya lo he probado, es práctico.
Entiendo que hay que seleccionar a través del interruptor, e introducir los nombres allí
Su código imprime un valor int, mientras que usted necesita seleccionar una cadena
Yo utilizaría una matriz de constantes de cadena para seleccionar el nombre del indicador, es decir, mi ejemplo le da el número del registro cuando el usuario lo selecciona, y este número puede ser el número de un elemento (índice) de la matriz de cadenas, donde almacenaría los nombres de texto de los indicadores
lo siento no tengo un terminal, no puedo mostrar el ejemplo en el código, pero creo que he explicado la idea
PS:
Yo utilizaría un array de constantes de cadena para seleccionar el nombre del indicador, es decir, mi ejemplo te da el número del registro cuando es seleccionado por el usuario, y este número puede ser el número del elemento (índice) del array de cadenas donde guardarás los nombres de texto de los indicadores
lo siento no tengo un terminal, no puedo mostrar el ejemplo en el código, pero creo que he explicado la idea
PS:
Gracias, lo hice, es bastante útil.
Y la versión final, es la bomba. Llevo mucho tiempo sin ver esto, ya que tengo al menos 20 gráficos abiertos en el terminal
Hola a todos. Ayuda, por favor. Quiero que el EA espere n horas después de cerrar una operación. También puedo modificar esta función. ¿Sería correcto cambiar Mode_Trades por Mode_History? Gracias
MODE_HISTORY - por supuesto que es necesario, pero hay otro punto: en el texto "después de cerrar" y en el códigoOrderOpenTime
Y no vayas a los bares, devuelve el tiempo t y luego úsalo de alguna manera:
MODE_HISTORY - por supuesto que es necesario, pero hay otro punto: en el texto "después de cerrar" y en el códigoOrderOpenTime
Y no vayas a los bares, devuelve el tiempo t y luego úsalo de alguna manera:
He corregido a Mode_History, así es como el búho no abre la primera orden. ¿Puede detallar la solución? Gracias
He corregido a Mode_History, para que el búho no abra la primera orden. ¿Puede explicar la solución? Gracias
Mira esto.
Echa un vistazo a esto.
¿Cómo se resuelve el primer pedido?
¿Y cómo se resuelve la primera orden?
Tenga en cuenta que la función ha cambiado ligeramente.