/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Возвращает кол-во значимых цифр после запятой
вернёт 0 если число без значимой десятичной дробной части
вернёт -1 в случае ошибки во время разбора строки на массив
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/int GetDigits(double n)
{
ushort array[];
string st=(string)n; // явным образом формируем строку из числаint len=StringLen(st);
if(len<3) return(0); // число не может быть дробным если строка получилась меньше трёх символовif(StringToShortArray(st,array)!=len+1) return(-1); // разбираем строку на массив символовfor(int i=0;i<len;i++) if(array[i]=='.') return(len-i-1); // ищем в строке точку и если она есть, возвращаем кол-во символов от точки до конца строкиreturn(0);
}
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Возвращает кол-во значимых цифр после запятой для чисел с точностью до 8 знаков
Вернёт 0 если число целое (в пределах 8 знаков после запятой)
Вернёт -1 в случае ошибки во время разбора строки на массив
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/int GetDigits(double n)
{
ushort array[];
if(StringToShortArray(StringFormat("%.8f",n),array)<10) return(-1); // число в строку и разбираем строку на массив символовint r=ArraySize(array)-2; // размер массива минус ноль-терминатор и минус нулевая база указателя for(;r>0 && array[r]=='0';r--); // ищем справа не нольfor(int l=0;l<=r;l++) if(array[l]=='.') return(r-l); // ищем слева точку и если она есть, возвращаем кол-во символов от точки до не нуля справаreturn(0);
}
申请书已经创建,但三天多来没有人看它。
申请号是什么?
常年的配音主题=)
我要求开发人员增加两个标准功能。
我建议采用以下规格。
====
Rp
该函数返回要与仪器的价格步长对齐的值。
双重Rp(
stringsymbol_name, // 符号名称
doublevalue// 价格要对齐
);
参数
符号_名称
[in] 符号。
价值
[in] 正数。
返回的值
四舍五入到 交易工具的价格步骤的最近数字 。
...
例子。
输入值。
symbol_name = ES-...
值 = 2000.55
产出=2000.50
(按仪器ES=0.25的价格阶梯)输入值。
symbol_name = SPX
值 = 2000.55
输出=2000.63
(在SPX上,价格步长也是0.25,就像在ES上一样,但有一个基数偏移,报价只能有以下小数部分 - 13,38,63,88)
输入值。
symbol_name = RTS
值 = 82055,55
输出=82060
(RTS工具的价格步骤=10)
...诸如此类。
第二个功能,我更感兴趣。
====
Rv
该函数返回一个值,该值将与仪器的音量步长保持一致,范围为SYMBOL_VOLUME_MIN 到SYMBOL_VOLUME_MAX。
double Rv(
stringsymbol_name, // 符号名称
doublevalue// lot to align
);
参数
符号_名称
[in] 符号。
价值
[in] 正数。
返回的值
最接近的数字,四舍五入 到交易工具 的数量步骤 。这个数字不会大于 SYMBOL_VOLUME_MAX或小于 SYMBOL_VOLUME_MIN。
...
======
我期望这些函数的主要属性是,它们应该对世界上所有的交易工具和任何介绍都有效。
如果有人有现成的解决方案,请分享,只要开发者做。
奇怪的是,仍然没有这样的=/。
为了解决你评论中的问题,我做了一个最笨拙的函数,但即使它对许多输入值都失败了。
功能代码。
关键是,我愚蠢地将确定小数的有效部分的整个麻烦转移到编译器插入的方法上,而不是运算符=(string)。
但事实证明,这样一来,代码中的字符串格式 几乎与printf()中的g型一样,即对于长分数,字符串以科学格式打印。
我怎样才能在没有指数格式和右边没有额外数字的情况下将任意n的输出变成一个字符串,而且不麻烦=)?
还有一个问题:是否总是用点隔开的小数点,或者在系统设置中默认为逗号或其他东西?
为了解决你评论中的问题,我做了一个最笨拙的函数,但即使它对许多输入值都失败了。
功能代码。
关键是,我愚蠢地将确定小数的有效部分的整个麻烦转移到编译器插入的方法上,而不是运算符=(string)。
但事实证明,这样一来,代码中的字符串格式 几乎与printf()中的g型一样,即对于长分数,字符串以科学格式打印。
我怎样才能在没有指数格式和右边没有额外数字的情况下将任意n的输出变成一个字符串,而且不麻烦=)?
还有一个问题:是否总是用点隔开的小数点,或者在系统设置中默认为逗号或其他东西?
那么你不喜欢Point()、Digits的什么呢?
至少要有DigitsLot(),它将返回音量步长的精度。
也许我没有得到你的暗示。有什么合理的方法可以通过Point()或Digits()获得你要找的东西吗?
不过,真的需要我上面描述的那两个功能(价格和地段的有效均衡器)。
我明白,在外汇套件中,交易量最常被接受为0.01的增量,没有人关心明天会发生什么,但终端正在发展。
有越来越多的工具。所有不允许整批增量的自制设备都不再起作用了。谁说不会有最低地段,比如说四分之一?没有太多的变体。
这个解决方案必须是绝对的(对所有的值),否则不能信任。
而关于这句话。当你发送请求时,服务器接受不均匀的价格,如果只是将其规范化(在字符中切割),但还有其他任务。
你同意,我们应该能够获得任何符号的真实可能的报价,但不是修剪过的。
为了解决你评论中的问题,我做了一个最笨拙的函数,但即使它对许多输入值都失败了。
功能代码。
...不要以为我是个傻瓜,为了一个纯粹的数学问题,如此固执地把一个数字变成一个字符串。
起初,我试图通过对数来做,但结果是故障频发,到了无以复加的地步=(
纠正自己的错误。这个似乎很有效。
不要以为我太傻,为了一个纯粹的数学问题而把数字做成一个字符串。
起初,我真的想通过对数来做,但结果是故障百出 =(
以防万一,你为什么不喜欢NormalizeDouble()_Point _Digits ?????????
你为什么要做自行车?
以防万一,NormalizeDouble() _Point _Digits ?????????有什么问题?
你为什么要创造一辆自行车?
为了以防万一,我将再回答一次。请解释一下如何使用 "NormalizeDouble() _Point _Digits "找出SYMBOL_VOLUME_STEP的 准确性?
或者如何从任何正数中获得SYMBOL_VOLUME_STEP的倍数?
如何得到以下结果。
2000.55(ES符号) -----> 2000.50
2000.55(SPX符号) -----> 2000.63
1055.5555(RTS符号) ------> 1060
对于今天(最好是明天)MT5终端中可用的世界上的任何符号
"????????"
开发人员只能增加2个功能,并随着终端的发展进行修改,而我不知道不同交易工具的所有特殊性。我在哪里可以找到甚至存在哪些报价?而且我需要一个引号,而不是NormalizeDouble()的结果。
如果这辆自行车已经出来了--捅出一个具体的实施方案,我将不胜感激。我自己发现的东西现在已经在一些符号上不起作用了。
...
2000.55(ES符号) -----> 2000.50
2000.55(符号SPX) -----> 2000.63
1055.5555(符号RTS) ------> 1060
...