//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по стопу. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, osl;
int dg, i, j=-1, 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();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
osl=NormalizeDouble(OrderStopLoss(), dg);
if (ocp==osl) return(True);
}
return(False);
}
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.05.2008 |//| Описание : Возвращает флаг закрытия последней позиции по тейку. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
datetime t;
double ocp, otp;
int dg, i, j=-1, 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();
j=i;
}
}
}
}
}
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
ocp=NormalizeDouble(OrderClosePrice(), dg);
otp=NormalizeDouble(OrderTakeProfit(), dg);
if (ocp==otp) return(True);
}
return(False);
}
我有以下问题。在init()中有一个块,它挂起了终端(这是我想转移到dll的东西)。当然,日志是不能被查看的--终端只能通过Ctrl+Alt+Delete关闭。为了追踪而取消打印(以及测量进入块的循环的传输时间)并没有帮助--打印机没有写任何东西,甚至没有创建日志。我尝试使用FileOpen/FileWrite,目的相同--文件刚刚被创建(0 Kb),而且没有声音。我把FileWrite放在FileOpen之后,在下一行 - 没有效果。我应该往哪边挖?
该主题已被关闭...坏人。
我有以下问题。在init()中有一个块,它挂起了终端(这是我想转移到dll的东西)。当然,日志是不能被查看的--终端只能通过Ctrl+Alt+Delete关闭。为了追踪而取消打印(以及测量传入环路的传输时间)并没有帮助--打印机没有写任何东西,甚至没有创建日志。我尝试使用FileOpen/FileWrite,目的相同--文件刚刚被创建(0 Kb),而且没有声音。我把FileWrite放在FileOpen之后,在下一行 - 没有效果。挖掘的方向是什么?
看,有没有隐藏在属性中的?
这并不隐蔽。
试试用这个。如果这没有帮助,为了寻找错误,你可以暂时把提到的初始化块通过一个标志进入启动,进行一次性启动,并尝试从它那里 "拉 "出日志。
start和ininit中的一次性启动都不起作用--Print和FileWrite都不起作用。我把这段代码附在后面(我没有看到其他的出路),我不打算在这里发布,因为它太长了。我已经删除了所有的缓冲区声明,并在那里描述了内置技术指标的所有调用。我已经考虑过数组的内存溢出问题,我计算过,最大的数组加上所有其他的数组是50.5米。那么,如果在进入区块时,即使在第一行也不打印...- 这就是困扰我的问题。附带的版本是真实的FileWrite。
启动时的一次性启动和ininit都不起作用--打印和FileWrite都不起作用。我附上这段代码(我没有看到其他的出路),我不在这里粘贴,因为它太长了。我已经删除了所有的缓冲区声明,并在那里描述了内置技术指标的所有调用。我已经考虑过数组的内存溢出问题,我计算过,最大的数组加上所有其他的数组是50.5米。那么,如果在进入区块时,即使在第一行也不打印...- 这就是困扰我的问题。附带的版本是真实的FileWrite。
代码的风格并没有处置它。没有空格,不同层次的括号,连续的几个操作,没有评论......。恶梦!:-))
你自己明白吗?
他结束了这个话题...不是一个好男人。
= :)
一次性启动和初始启动都不起作用--打印也不起作用,FileWrite也不起作用。我附上这段代码(我没有看到其他的出路),我不在这里粘贴,因为它太长了。我已经删除了所有的缓冲区声明,并在那里描述了内置技术指标的所有调用。我已经考虑过数组的内存溢出问题,我计算过,最大的数组加上所有其他的数组是50.5米。那么,如果在进入区块时,即使在第一行也不打印...- 这就是困扰我的问题。附带的版本是真实的FileWrite。
我同意Vadim的观点--代码很难阅读。试着将这段代码分解成功能块,在每个块中打印或写入文件。并以 "减慢 "代码执行速度的结构运行,例如,像这样。
将下一个区块的执行时间推迟1秒。- 终端应该有足够的时间来打印日志。
在Kim的 "最后的位置关闭标志由STOP "和另一个由TAKE "有2个非常相似的功能。
这里是代码
如你所见,它们非常相似。
但由于某些原因,只有 通过STOP关闭才 对我有效。
它可以工作,但我的专家顾问不打印UNIT,而是一直打印NULL。
但在STOP处的收盘打印正确:如果停止=1,如果不停止=0....
请帮助我,....
在Kim的 "最后的位置关闭标志由STOP "和另一个由TAKE "有2个非常相似的功能。
这里是代码
如你所见,它们非常相似。
但由于某些原因,只有通过STOP关闭才对我有效。
我手动开仓,放空TAKE。它工作 - 但EA不打印UNIT,而是继续打印ZERO。
但在STOP处的收盘打印正确:如果停止=1,如果不停止=0....
请帮助我理解这个问题,....