#define templ(T) template<typename T> // один входной параметр именуемый буквой "T" т. е. "T" это просто имя.
templ(T1) T1 Funct(T1 a) { return a;} // функция вернёт тот же тип, что и будет передан при вызове это функции
Директива #define подставляет expression вместо всех последующих найденных вхождений identifier в исходном тексте. identifier заменяется только в том случае, если он представляет собой отдельный токен. identifier не заменяется, если он является частью комментария, частью строки, или частью другого более длинного идентификатора. expression...
//+------------------------------------------------------------------+//| 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);
}
//+----------------------------------------------------------------------------+
是否有必要在每个函数前面写上templ(T1), 它将接受一个变量或所需参数?为什么要声明templ(T)并 调用templ(T1), 我应该在每个函数前加一个数字(templ(T1)templ(T2)templ(T3))还是应该到处写templ(T1)?而如果几个参数在template<typename T>中被打分,那么会是怎样,就像这样template<typename T,typename P,typename Q>-templ(T,P,Q)。
是的,记录仍然是在每个函数之前完成的,在这里你想把一个普通的函数变成一个函数模板。只是这张唱片现在明显地短了。
T1是一个表示某种类型的数据 的名称,它被存储在一个具有其名称(a)的变量中。没有必要添加一个数字。你可以在任何地方使用同一个名字,甚至是没有数字的同一个T。
templ并没有被调用,而是被自动替换成#define中预置的内容。这是一个简单的用一个文本替换另一个文本的过程,但你可以把输入参数写在括号里,就像函数一样。
在编译时,templ(T1)表达式将被替换为模板<typename T1>,你会得到这样的结果
对于多个参数,是的,你猜对了如何描述。
我明白了,谢谢你的信息,我已经试过了--这很方便。
我知道你需要通过开关选择,并在那里输入名字。
你的代码打印的是一个int值,而你需要选择一个字符串
我会使用一个字符串常量 数组来选择指标名称,即我的例子在用户选择时给你记录的编号,这个编号可以是字符串数组的一个元素的编号(索引),你将在这里存储指标的文本名称
对不起,我没有终端,我不能在代码中显示这个例子,但我想我已经解释了这个想法。
PS。
我将使用一个字符串常量 数组来选择指标的名称,即我的例子在用户选择时给你记录的数字,这个数字可以是字符串数组的元素(索引)的数字,你将在其中保存指标的文本名称
对不起,我没有终端,我不能在代码中显示这个例子,但我想我已经解释了这个想法。
PS。
谢谢,我做了,这很方便。
而最后的版本,这只是炸弹。我已经错过了很长时间,因为我在终端中至少打开了20个图表。
大家好。请给予帮助。我想让EA在关闭 交易后 等待N小时。我能否也调整一下这个功能。将Mode_Trades改为Mode_History是否正确?谢谢你
MODE_HISTORY - 当然需要,但还有一点:在 "关闭后 "的文字和代码中,OrderOpenTime
也不要去酒吧,归还时间T,然后以某种方式使用它。
MODE_HISTORY - 当然需要,但还有一点:在 "关闭后 "的文字和代码中,OrderOpenTime
也不要去酒吧,归还时间T,然后以某种方式使用它。
我改成了Mode_History,这就是猫头鹰不开第一单的原因。你能详细介绍一下解决方案吗?谢谢
我改成了Mode_History,所以猫头鹰没有打开第一个订单。能否请您详细介绍一下解决方案?谢谢
看一看这个。
看一看这个。
第一个订单是如何解决的?
那么你如何解决第一个订单呢?
请注意,功能略有变化。