É necessário escrevermodelos (T1) em frente a cada funçãoe será preciso uma variável ou o argumento necessário? Por que ostemplates(T) são declaradose ostemplates(T1) chamados, devo adicionar um número antes de cada função(templates(T1)templates(T2)templates(T3)) ou devo escrevertemplates(T1) em todos os lugares?E se vários parâmetros são pontuados notemplate<digite o nome T>então como seria, como estetemplate<digite o nome T,digite o nome P,digite o nome Q>-templates(T,P,Q).
Sim, o registro ainda é feito antes de cada função, onde você quer transformar uma função normal em um modelo de função. É que este recorde é visivelmente mais curto agora. T1 é um nome que denota algum tipo de dado, que é armazenado em uma variável com seu nome (a). Não é necessário acrescentar um número. Você pode usar o mesmo nome em qualquer lugar, até mesmo o mesmo T sem um número. Os modelos não são chamados, mas são automaticamente substituídos com o que está preparado para ele em #define. Esta é uma simples substituição de um texto por outro, mas você pode escrever os parâmetros de entrada entre parênteses, da mesma forma que as funções.
#define templ(T) template<typename T> // один входной параметр именуемый буквой "T" т. е. "T" это просто имя.
templ(T1) T1 Funct(T1 a) { return a;} // функция вернёт тот же тип, что и будет передан при вызове это функции
Em tempo de compilação de modelos(T1) a expressão será substituída por template<typename T1> e você receberá isto
template<typename T1>
T1 Funct(T1 a) { return a;}
Para múltiplos parâmetros, sim, você adivinhou corretamente como descrever.
Директива #define подставляет expression вместо всех последующих найденных вхождений identifier в исходном тексте. identifier заменяется только в том случае, если он представляет собой отдельный токен. identifier не заменяется, если он является частью комментария, частью строки, или частью другого более длинного идентификатора. expression...
Eu entendo que você precisa selecionar via switch, e digitar os nomes lá
Seu código imprime um valor int, enquanto você precisa selecionar uma corda
Eu usaria uma matriz de constantes de string para selecionar o nome do indicador, ou seja, meu exemplo dá o número do registro quando o usuário o seleciona, e este número pode ser o número de um elemento (índice) da matriz de string, onde você armazenaria os nomes de texto dos indicadores
Desculpe não ter um terminal, não posso mostrar o exemplo no código, mas acho que já expliquei a idéia
Eu usaria um array de constantes de string para selecionar o nome do indicador, ou seja, meu exemplo dá o número do registro quando selecionado pelo usuário, e este número pode ser o número do elemento (índice) do array de string onde você salvará os nomes dos textos dos indicadores
Desculpe não ter um terminal, não posso mostrar o exemplo no código, mas acho que já expliquei a idéia
PS:
Obrigado, eu fiz, é bastante útil.
E a versão final, esta é apenas a bomba. Há muito tempo que sinto falta disto, pois tenho pelo menos 20 gráficos abertos no terminal
Olá a todos. Ajude, por favor. Quero que a EA espere por n horas depois de fechar uma negociação. Posso também ajustar esta função. Seria correto mudar Mode_Trades para Mode_History? Obrigado
Carcass77: Olá a todos. Ajude, por favor. Quero que a EA espere por n horas depois de fechar uma negociação. Posso também ajustar esta função. Seria correto mudar Mode_Trades para Mode_History? Obrigado
MODE_HISTÓRIA - é claro que é necessário, mas há outro ponto: no texto "após o fechamento" e no códigoOrderOpenTime
E não vá a bares, devolva o tempo t e depois use-o de alguma forma:
//+------------------------------------------------------------------+//| 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);
}
//+----------------------------------------------------------------------------+
É necessário escrevermodelos (T1) em frente a cada funçãoe será preciso uma variável ou o argumento necessário? Por que ostemplates(T) são declaradose ostemplates(T1) chamados, devo adicionar um número antes de cada função(templates(T1)templates(T2)templates(T3)) ou devo escrevertemplates(T1) em todos os lugares?E se vários parâmetros são pontuados notemplate<digite o nome T>então como seria, como estetemplate<digite o nome T,digite o nome P,digite o nome Q>-templates(T,P,Q).
Sim, o registro ainda é feito antes de cada função, onde você quer transformar uma função normal em um modelo de função. É que este recorde é visivelmente mais curto agora.
T1 é um nome que denota algum tipo de dado, que é armazenado em uma variável com seu nome (a). Não é necessário acrescentar um número. Você pode usar o mesmo nome em qualquer lugar, até mesmo o mesmo T sem um número.
Os modelos não são chamados, mas são automaticamente substituídos com o que está preparado para ele em #define. Esta é uma simples substituição de um texto por outro, mas você pode escrever os parâmetros de entrada entre parênteses, da mesma forma que as funções.
Em tempo de compilação de modelos(T1) a expressão será substituída por template<typename T1> e você receberá isto
Para múltiplos parâmetros, sim, você adivinhou corretamente como descrever.
Vejo, obrigado pela informação, já experimentei - é útil.
Eu entendo que você precisa selecionar via switch, e digitar os nomes lá
Seu código imprime um valor int, enquanto você precisa selecionar uma corda
Eu usaria uma matriz de constantes de string para selecionar o nome do indicador, ou seja, meu exemplo dá o número do registro quando o usuário o seleciona, e este número pode ser o número de um elemento (índice) da matriz de string, onde você armazenaria os nomes de texto dos indicadores
Desculpe não ter um terminal, não posso mostrar o exemplo no código, mas acho que já expliquei a idéia
PS:
Eu usaria um array de constantes de string para selecionar o nome do indicador, ou seja, meu exemplo dá o número do registro quando selecionado pelo usuário, e este número pode ser o número do elemento (índice) do array de string onde você salvará os nomes dos textos dos indicadores
Desculpe não ter um terminal, não posso mostrar o exemplo no código, mas acho que já expliquei a idéia
PS:
Obrigado, eu fiz, é bastante útil.
E a versão final, esta é apenas a bomba. Há muito tempo que sinto falta disto, pois tenho pelo menos 20 gráficos abertos no terminal
Olá a todos. Ajude, por favor. Quero que a EA espere por n horas depois de fechar uma negociação. Posso também ajustar esta função. Seria correto mudar Mode_Trades para Mode_History? Obrigado
MODE_HISTÓRIA - é claro que é necessário, mas há outro ponto: no texto "após o fechamento" e no códigoOrderOpenTime
E não vá a bares, devolva o tempo t e depois use-o de alguma forma:
MODE_HISTÓRIA - é claro que é necessário, mas há outro ponto: no texto "após o fechamento" e no códigoOrderOpenTime
E não vá a bares, devolva o tempo t e depois use-o de alguma forma:
Eu corrigi para Mode_History, é assim que a coruja não abre o primeiro pedido. Você pode elaborar a solução? Obrigado
Eu corrigi para Mode_History, para que a coruja não abra o primeiro pedido. Você pode, por favor, elaborar a solução? Obrigado
Dê uma olhada nisto.
Dê uma olhada nisto.
Como o primeiro pedido é resolvido?
E como você resolve a primeira encomenda?
Observe que a função foi ligeiramente alterada.