//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает тип последней открытой позиции или -1 |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+
int GetTypeLastClosePos(string sy="", int mn=-1) {
datetime t; // Переменная хранит время закрытияint i, k=OrdersHistoryTotal(), r=-1; // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордераif (sy=="0") sy=Symbol(); // Если в функцию в качестве значения символа передан NULL, то будет использоваться текущий символ графикаfor (i=0; i<k; i++) { // Цикл по истории от нуля до OrdersHistoryTotal()if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { // Если ордер с индексом i выбран в истории// ---------------------- определение нужного нам ордера ордера --------------------- if ((OrderSymbol()==sy || sy=="") && // если переданный символ совпадает с символом ордера или передано значение по-умолчанию
(mn<0 || OrderMagicNumber()==mn)) { // если передано значение по-умолчанию или магик ордера равен переданному в функцию значениюif (OrderType()==OP_BUY || OrderType()==OP_SELL) { // если это или Buy или Sell// --------------------- определение последнего закрытого ордера -------------------- if (t<OrderCloseTime()) { // если значение, записанное в t меньше времени закрытия ордера
t=OrderCloseTime(); // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
r=OrderType(); // запоминаем тип ордера
} // Конец блока определения времени закрытия.
} // Конец блока обработки найденного нужного ордера по типу (одного из возможных)
} // Конец блока проверки по символу и магику
} // Конец блока обработки выбранного ордера
} // Идём проверять следующий ордер (если i всё ещё меньше k)// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) -- return(r); // возвращаем результат поиска (либо тип ордера, либо -1)
} // Аминь.
关于第2点,一个例子。
int GetTypeLastClosePos(string sy, int mn) {
datetime t; // Переменная хранит время закрытияint i, k=OrdersHistoryTotal()-1, r=-1; // Объявление переменных i - индекс k - количество ордеров в истории r - будет хранить тип ордераfor (i=k; i>=0; i--) { // Обратный цикл по истории от OrdersHistoryTotal()-1 до нуля if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { // Если ордер с индексом i выбран в истории// ---------------------- определение нужного нам ордера ордера --------------------- if(OrderMagicNumber()!=mn) continue; // если магик не тот - идём выбирать следующий ордер в историиif(OrderSymbol()!=sy) continue; // если переданный символ не равен символу ордера - идём выбирать следующий ордер в историиif (OrderType()>1) continue; // если это не Buy и не Sell - идём выбирать следующий ордер в истории// --------------------- дальше имеем выбранный нужный нам ордер -------------------- // -------------------------- определяем время его закрытия ------------------------- if (t<OrderCloseTime()) { // если значение, записанное в t меньше времени закрытия ордера
t=OrderCloseTime(); // запоминаем значение времени закрытия выбранного ордера для следующего сравнения
r=OrderType(); // запоминаем тип ордера
} // Конец блока определения времени закрытия.
} // Конец блока обработки выбранного ордера
} // Идём проверять следующий ордер (если i всё ещё больше k)// -- после прохода в цикле по всей истории в r будет лежать тип ордера или -1 (если не нашли ничего) -- return(r); // возвращаем результат поиска (либо тип ордера, либо -1)
} // Аминь.
如果你要拆开这个函数,你不应该剪掉函数的标题,那里有重要的信息。
返回最后打开的位置的类型或-1 - 这意味着如果没有关闭的位置,那么当函数被调用时,其值将等于-1。
sy - 工具的名称(货币对)。
mn - 神奇的数字。如果我们设置为-1,那么无论什么魔法数字,该函数都将返回最后一个封闭订单的类型。
逐点回答,抱歉。
1 - 编程天才?
2 - 公平地说,除了粪便和其他腐烂产物,没有什么是多余的(坦率的意见,准备开始辩论,但在另一个主题:))。
3 - 现在一切都说得通了。:)
4 - 如此真实。我知道,我有点 "搞错 "了,用 "OrderSend "函数打字。
感谢你对 "Function-Brick解析 "模板的贡献。:)
1.让我们免于讽刺,好吗?它使你的学习变得舒适和轻松。天才与此有什么关系?
2.争论性的。
3.从你在代码中的评论来看,你根本不懂什么。
4.它发生了。
关于第2点,一个例子。
这里没有那么多不必要的东西
下面是一个实际使用自定义函数的例子:
.
?谢谢你。
因此,你必须应用函数的名称来使用它,而变量 "r "本身的设置是为了确定该函数的值!
这是我的一个小发现!^^
再次感谢你,尤里。:)
为了最后澄清,这是有可能的。
你的例子是不正确的。当你调用一个 有参数的函数 时,你必须在括号里给出这些参数的值,用逗号隔开。你还应该知道,并不是所有的函数都被赋值。如果函数类型是无效的,它就没有任何意义,目的是为了执行一些动作或计算一些变量。在后一种情况下,有必要知道这些变量的名称,以便使用这个函数的结果。
编译器会在这一行给你一个错误,说该变量没有被声明。
你至少应该这样做。
关于第2点,一个例子。
不必要的项目较少
对不起,我的问题很愚蠢,但你为什么要翻阅整个历史记录来寻找最后一个已关闭的订单?你从最后找到第一个,然后直接出去,我想。
对不起,我的问题很愚蠢,但你为什么要翻阅历史来寻找最后一个关闭的订单?按照我的理解,你从最后找到第一个,然后立即退出。
曾经有人讨论过一个问题,即历史记录是按照用户的排序来存储的。因此(为了安全起见),搜索的结果正是如此。
用户只能在视觉上对故事进行排序,故事中的位置数字不能被改变。
用户只能在视觉上对故事进行排序,故事中的位置数字不能被改变。
实际上,人们只能真正希望在测试器中获得秩序。
没有注意到,但好吧,我不争论。使深度达到10-20,应该足够了。但整个故事...在我看来,这有点过了。