//+-------------------------------------------------------------------------------------+//| Получаем состояние последней позиции (Открыта или закрыта) |//+-------------------------------------------------------------------------------------+bool isCloseByTakeLastOpenPos(int delta)
{
datetime lastOrderCloseTime = 0, // Время закрытия последнего открытого ордера
lastOOTHist = -1; // Время открытия последнего открытого ордера из историиint j = -1;
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() > 1) continue; // Все удалённые отложки нас не интересуют..if (lastOrderCloseTime < OrderCloseTime()) // Находим время закрытия..
{
lastOrderCloseTime = OrderCloseTime(); // ..последней закрытой позиции в истории
j = i;
}
}
if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderProfit() + OrderCommission() + OrderSwap() <= 0) return (false);
if (MathAbs(OrderProfit() - OrderClosePrice()) > delta * pt) return (false);
else
{
lastOOTHist = OrderOpenTime();
Comment("FUNC isCloseByTakeLastOpenPos : lastOOTHist = ", lastOOTHist);
}
}
else
{
Comment("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории");
return(false);
}
for(int h=OrdersTotal()-1; h>=0; h--)
{
if (OrderSelect(h, SELECT_BY_POS, MODE_TRADES))
{
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() > 1) continue;
if (lastOOTHist < OrderOpenTime()) return(false); // Выбранная рыночная позиция открыта позже закрытой по тейку
}
else {Print("FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер");return(false);}
}
return (true);
}
非常感谢您!我需要它来比较蜡烛的特性(更多,更少,等等),我把它拧上了--它很有效。只是不明白它是如何比较数据类型字符串的? 或者说双倍数到字符串并没有把数字翻译成字符串?:-D
PS。它在指标中不起作用--只在脚本中起作用...当我调用High[i]时--我得到的只有小数点后4位。
我在写。
Alert ("doubletostr High = ", DoubleToStr(High[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5) )
{
Alert ("More");
}
如果(DoubleToStr(High[2],5)<(DoubleToStr(High[3],5))
{
Alert ("Smaller");
}
工作,它写出的结果有五位数,大/小数。问题是,在指标中,字符串数组并没有在图表上显示出来。因此......。
......写作。
警报("归一化双倍高度=", NormalizeDouble(High[1],5))。
不起作用 - 结果是> 1,1234
我不理解开发商--他们为什么要把事情搞得这么复杂?为什么如果它在图表上显示这么多数字,就不会划出有五位数字的被调用函数?也许有一个简单的解决方案?
它变得更加有趣。
译文
Alert ("iFractals doubletostr=", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits))。
写入:1,32169 - 确定。
使用StrToDouble转换回一个数值。
Alert ("iFractals StrToDoubledoubletostr=", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits))。
结果:1.3217
应该有一个成龙的备忘录,他不明白芯片的意思)。
而阿勒特实际上输出的是什么?
它说是0.01,但实际上是0...0100。
它变得更加有趣。
译文
Alert ("iFractals doubletostr=", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits))。
写入:1,32169 - 确定。
使用StrToDouble转换回一个数值。
Alert("iFractals StrToDoubledoubletostr=", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits))。
结果:1.3217
应该有一个成龙的备忘录,他误解了芯片)。
DoubleToStr()用于以你想要的精度输出信息。标准的Print()、Alert()等,以4位数打印。
当你想看到一个具有你想要的精度的数字时,那是你使用DoubleToStr()的时候,而不是在计算中。
你不需要来回翻译任何东西 ...;)
它说是0.01,但实际值是0...0100。
然后输出100 * point = 100 * 0.00001 = 0.001pp (如果是五位数)
lBUY 的值已在上面改变。因此,在我看来,这个条件。
将不会被满足。因此,lBUY 的值将保持不变。
变量j必须在函数开始时明确初始化为一个负值。试试吧。我还没有进一步看。
嗯,到目前为止是一样的。在这里,我们有。
DoubleToStr()用于以你想要的精度输出信息。标准的Print()、Alert()等将打印4位数字。
当你想看到一个具有你想要的精度的数字时,那是你使用DoubleToStr()的时候,而不是在计算中。
你不需要来回翻译任何东西 ...;)
这是可以理解的...现在...)但整个问题是,我需要以某种方式挖出第五位数字进行计算(
如果DoubleToStr()对它不好,那么这门语言就没有这样的功能?难道开发商没有预见到这一点吗?
嗯,到目前为止是一样的。我们到了。
这是可以理解的...现在...)但整个问题是,我需要以某种方式挖出第五位数字进行计算(
如果DoubleToStr()对它不好,那么这门语言就没有这样的功能?难道开发商没有预见到这一点吗?
各位程序员!请告知如何将EA与指标相结合?
例如,我有一个简单的机器人mo_bidir.mq4,它使用自己的算法进行交易,我希望它继续使用自己的算法开仓交易,但在3 МА的信号之后。
例如在一个信号上 -- 三条移动平均线。
FastEMA>MediumEMA>SlowEMA(趋势 上升)-机器人 买入
FastEMA<MediumEMA<SlowEMA(趋势 下降) - 博特 卖出
Inp_Signal_ThreeEMA_FastPeriod = 8;
Inp_Signal_ThreeEMA_MediumPeriod = 38;
Inp_Signal_ThreeEMA_SlowPeriod = 48;
我需要的是专家顾问在5分钟内继续交易,而指标则从日或4小时的时间框架发出信号,我希望能在机器人设置中改变时间框架。