int Normalize(double double_value, int digits) - приводит double в int (1.2999 в 12999)
double Restore(int int_value, int digits) - приводит полученный ранее int в double (12999 в 1.2999)
这里
//+------------------------------------------------------------------+
//| ShiftPoint.mq4 |
//| Begun |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
int Normalize(double double_value, int digits)
{
return (NormalizeDouble(double_value,digits)*MathPow(10,digits));
}
double Restore(int int_value, int digits)
{
return (NormalizeDouble((int_value/MathPow(10,digits)),digits));
}
//+------------------------------------------------------------------+
int start()
{
double Test_Value = 1.29999999;
int Test_int;
double Test_double;
Test_int = Normalize(Test_Value,Digits);
Test_double = Restore(Test_int,Digits);
Print("-----------------------------");
Print("Restored value = ",DoubleToStr(Test_double,Digits));
Print("Shift Point Value = ",Test_int);
Print("Real Double Value = ",DoubleToStr(Test_Value,8));
}
//+------------------------------------------------------------------+
产出。 shiftpoint EURUSD,H1: Real Double Value = 1.29999999 shiftpoint EURUSD,H1: ShiftPoint Value = 13000 shiftpoint EURUSD,H1: 恢复值=1.3000
迅速看了一下(还没有做任何挖掘),发现了你所计算的点 参考。
试试 "扔掉",把愚蠢的点。也许这就是问题所在(通过MarketInfo的点可能并不总是按照你想要的方式出来?)
它总是应该...
尽管你也可以尝试使其正常化 =)
而且这并不总是可以接受的--专家可能在几个货币对上进行交易,而且观点可能是不同的...
假设orderstoploss=1.29211(小数点后5位) bid=1.29716(也是5位) TrailingStop=50 point=0.001 那么(bid - TrailingStop * point)=1.29216>1.29211 真,这需要
数字 突然变成5 也可以
可以用 ,不痛不痒地更换。
我认为在追踪时没有必要检查是否有止损水平。实际上是这样的,我在纠正自己的错误。如果我们只在有利润的时候设置止损,如果没有,我们就愿意等待追加保证金。我没有发现其他东西。你的追踪止损在哪个货币对上运作不正确,是否有任何强烈的运动?
我把所有东西都转换为整数值,以便进行比较。我在任何可以的地方(在数组中)存储和使用给定的值。
使用给定的值(在数组、变量等中)。
即int类型的变量可以取值从-2147483648到2147483647。
这种维度相当适合于十字架。
相应地,1.2999和1.3000可以铸成12999和13000,然后它们可以安全地进行比较。
而不必担心任何周期性的错误。
我在这里勾画了一个例子 :)
这里
产出。
shiftpoint EURUSD,H1: Real Double Value = 1.29999999
shiftpoint EURUSD,H1: ShiftPoint Value = 13000
shiftpoint EURUSD,H1: 恢复值=1.3000
于
或者说。
你好。
我把一切都变成整数,以便进行比较
2dev:
你是对的--这是一个基本问题,比较浮点数是很危险的。
在重要的地方,总是通过Normalize()使数字达到一定的精度。
标准化的类型是double(8字节)。 顺便说一下,我们在
交易查询 中强制规范所有通过的价格,以避免错误。你可以发送止损请求为1.2932461,但它将被设置为1.2932。请检查这是否是试图在同一价格上重新设置止损的错误?
3个人在看 =)) 雷纳特来了,只是用手指着错误 =)))
我现在会检查,当然,但很可能是这种情况。我还没有把 "bid - TrailingStop *point"规范化,而这一结构恰恰涉及到订单修改...
我们并不用心,先生们;)
你是指Begun建议的Normalize()吗?
你是指Begun建议的Normalize()吗?
对不起,我是指标准的NormalizeDouble。