任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 858

 

下午好。

窗口中的指标最多显示5位小数。

当通过iCustom(Symbol(),PERIOD_M1, "MACD",12, 26, SignalSMA, 0, 0)在专家顾问中使用它时,它最多显示4位小数(由Print命令设置)。

我如何在棋盘上得到5位数?

 
DoubleToString 函数打印,你会得到你想要的5个字符。如果你愿意,你也可以得到8个字符。
 
AlexeyVik:
使用DoubleToString 函数打印,你将得到你想要的5个字符。如果你愿意,你也可以得到8个。
换句话说,专家顾问中的指标计算是按5位数进行的,而打印在日志中显示时将会把它削减为4位?
 
Craft:
换句话说,专家顾问中的指标计算是按小数点后5位进行的,而打印出来的结果在日记中显示时,会削减到小数点后4位?

如果没有经过规范化处理,计算结果可以达到小数点后16位。

Данные типа double выводятся с точностью до 16 десятичных цифр после точки, при этом данные могут выводиться либо в традиционном либо в научном формате – в зависимости от того, как запись будет наиболее компактна.
Данные типа float выводятся с 5 десятичными цифрами после точки. Для вывода вещественных чисел с другой точностью либо в явно указанном формате необходимо использовать функцию PrintFormat(). 

直接通过打印输出 的计算结果是不切实际的。代码中还有别的东西,比如说规范化。




 

这就是问题所在,没有其他东西(规范化等)。

double g_macd=iCustom(Symbol(),PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

打印("g_macd=",g_macd)。

g_MACD在指示器中的数值(第一缓冲区)是小数点后第5位,而Print在日志中显示的数值是小数点后第4位,这是不允许的。

如何解决这个问题?

 
Craft:

这就是问题所在,没有其他东西(规范化等)。

double g_macd=iCustom(Symbol(), PERIOD_M1, "g_MACD",12, 26, SignalSMA, 1, 0);

打印("g_macd=",g_macd)。

g_MACD在指示器中的数值(第一缓冲区)是小数点后第5位,而Print在日志中显示的数值是小数点后第4位,这是不允许的。

如何解决这个问题?

看看你的代码,问题就出在那里。

为了测试它,我运行了一个带有WPR调用的简单脚本,并打印了指标调用的 结果。

 double wpr1=iWPR(NULL,0,1440,1);
 Print("WPR=",wpr1);

****2015.03.08 01:12:15	2015.03.06 22:59 **** EURUSD,H1: WPR=-99.1902834008098


如你所知,指标本身在其窗口中显示小数点后4位的数值,但对于Expert Advisors来说,它显示13位甚至14位。

 
Pokrov:

你好!请看下面的代码,在信号上创建 "Arrow "对象,在测试器中没有画出箭头,虽然日志通过了,而且在测试器的启动日志中也写了一个错误 TestGenerator: unmatched data error (volume limit 412 at 2014.10.13 17:10 exceeded) 。

而在测试过程中,它产生了一个错误 "检查USDJPYm,M5箭头:对象创建错误:代码#4200" - 但我猜这是正常的,因为一开始程序发现对象被创建了,在删除它后,又重新创建了它。总的来说,我希望你能对这些问题提出意见。

不要严格按照文字判断。


乡亲们,请帮帮我,帮帮我的箭!!!。

//+------------------------------------------------------------------+
//| SignalOpenOrderBuy SendMail                                      |
//+------------------------------------------------------------------+
if (PLO0>S0 && PLO1<=S1 && PLO2<S2 && Time[0] > SignalTime)
{
SignalTime = TimeCurrent();
bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
Print("Стрелка Buy установлена");
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
ResetLastError();
ObjectDelete(0,"ArrowBay");
RefreshRates();
SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);
ObjectSetInteger(0,"ArrowBay",OBJPROP_COLOR,clrGreen);
if(!SignalBuy)
Print("Ошибка создания объекта: code #",GetLastError());
else
Print("Стрелка Buy установлена");
}
 
Pokrov:

乡亲们,请帮帮我,帮帮我的箭!!!。

弄清楚这条线路。

bool SignalBuy = ObjectCreate(0,"ArrowBay",OBJ_ARROW_BUY,0,0,Bid,SignalTime);

看看箭头画在哪里。

 
AlexeyVik:

弄清楚这一行

看看箭头画在哪里。

我现在已经得到了箭头,它们正根据点数从一个信号移动到另一个信号。

然后我可以在图表上分析信号的触发情况?

 
Pokrov:

谢谢你,阿列克谢!这很有帮助,现在箭头出现了,并按点从一个信号移动到另一个信号,但我怎样才能使箭头出现并在每个信号上保持原位?

然后我可以在图表上分析信号的触发情况?

停止移动,画出新的。