[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 419

 

Forexman77:
我怎样才能让程序给出EMA水平作为价格?假设EMA1有周期(1),EMA2有周期(0),EMA1等于1.3321,而EMA2本期为1.3200。表达的结果(EMA1到EMA2)必须是0.0121。当你运行脚本时,警报显示为零,而我们需要 "0.0121"。如何解决这个问题?

double delta = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0) - iMA(NULL,0,0,0,MODE_EMA,PRICE_CLOSE,0);

if (delta == 0.0121) Alert("Delta=0.0121"); 
 
Forexman77:
如何使程序输出EMA水平作为价格?假设EMA1有周期(1),EMA2有周期(0),EMA1等于1.3321,EMA2为当前周期1.3200。表达的结果(EMA1到EMA2)必须是0.0121。当我运行脚本时,警报显示为零,而我需要 "0.0121"。如何解决这个问题?

有可能看到脚本本身吗?- 估计你要么是数据类型 不对,比如是interger而不是double(所以它四舍五入为0),要么是其他原因导致了0:没有代码就很难理解。

顺便说一下,如果你用脚本检查你之前写的东西,错误可能是在脚本本身(估计是为了检查你的指标而写的),或者是在指标本身的代码中。

 
TarasBY:
如果你正确地过滤了你的订单,我建议你这样做,如果你在计算中包括佣金和掉期,那么一切都能正常工作。


你一定给了一个非常复杂的路径。

这对我来说是行不通的。


我愚蠢地在你的样本中插入了以下内容。

ld_Profit = fGet_ProfitLastCloseOrd (12);    
Print (ld_Profit);

它给出了一些数字,但与现实相差甚远。

你能不能告诉我,我需要在哪里输入数字12来使其发挥作用。因为我不知道 "过滤订单",在....。

 
lottamer:


你一定给了一个非常复杂的方法。

这对我来说是行不通的。


我愚蠢地在你的样本中插入了以下内容。

它给出了一些数字,但与现实相差甚远。

你能不能告诉我,我需要在哪里输入数字12来使其发挥作用。因为我根本不知道 "订单过滤",....。

我已经在图表上进行了所有的中间计算,以便更好地控制功能的工作。

只剩下你写代码了。

你有两个办法:要么自己理解(通过实例--我已经给了你一个工作脚本),要么找人帮你做。

P.S. 如果你突然想了解它,你可以从这里 开始。

附加的文件:
 
Chiripaha:

有可能看到脚本本身吗?- 估计你要么是数据类型不对,比如是interger而不是double(所以它四舍五入为0),要么是其他原因导致了0:没有代码就很难理解。

顺便说一句,如果你把以前写的东西编成脚本,错误可能在脚本本身(估计是为了测试你的指标而写的)或指标本身的代码中。


你是对的,我把EMA从int移到double,一切都像原来一样了。
 
TarasBY:

为了完全控制该功能,所有的中间计算都显示在图表上。

剩下的就是由你来写代码了。

有两种方法:要么你自己想办法(使用例子--我给了你一个工作脚本),要么你可以找人帮你做。

P.S. 如果你突然想弄清楚,你可以从这里 开始。


谢谢你,我一定会想办法解决。
 
Forexman77:
我怎样才能使程序将EMA水平作为价格输出?假设EMA1的周期为(1),EMA2的周期为(0),EMA1为1.3321,EMA2为1.3200的当前周期。表达的结果(EMA1到EMA2)必须是0.0121。当我运行脚本时,警报显示为零,而我需要 "0.0121"。如何解决这个问题?

在计算中使用double类型 的变量而不是int类型 的变量。

在计算表达式的结果时,使用NormalizeDouble(number1-number2, 所需精度)。

使用DoubleToStr(得到的结果,期望的精度)在屏幕上显示结果(在日记中)。

没有你的代码,就没有其他建议...

 
Forexman77:
你是对的,我把EMA从int改成double,一切都像原来那样了。

在这里,我们已经找到了...总之,要注意的是,为了避免隐藏的错误和不准确,在比较和计算double类型 的数据时要使用归一化的方法
 
Chiripaha:

一句话:当然,为了利益,可以请你更详细地描述一下当时的情况,因为你只提供了一个大概的描述:机器人订单是什么时候定的(是否提前定的;是否与机器人同时手动,等等)。但无论如何,即使在这种情况下,你也只需要与你的经纪人打交道,因为他有自己的线程,可能会排队进行交易。假设,如果手动挂单是先下的,那么订单执行时间就会不同(包括其他客户的订单),因此,价格也可能不同。如果机器人在形成信号的期间内下了订单,那么订单在队列中的到来是不明显的--因此执行价格可能出现偏差。另外,它可能受到你没有写任何东西的头寸大小的影响......等...

但是...都一样,这只能通过经纪人(DC)来澄清。而且我想他会找到一堆我没有提到的理由。- 而建议是正确的:在你的手中和对经纪人的日志,当然,如果你仍然认为你的挂单已经移动。但不要混淆两个不同的概念:挂单和这个挂单的交易。限价单是以任何最近的价格和申报的数量进入市场的指令。而交易 - 是有可能执行你的订单的价格,以申报的资金量(手)。- 而且这些订单的价格很可能是不同的(尤其是在快速市场上,也就是你得到的链接)。对于限价订单,订单的价格和执行的价格是相等的(根据定义)。

而事实上,模拟和真正的经纪人没有任何区别,这是很好的!- 这表明经纪人不会为了吸引客户而伪造交易(从你的话中可以看出)。- 在这种情况下,看不出有什么差异。


谢谢你如此详细的答复,一切都变得清晰了。如果我们使用即时 执行系统,这个问题会得到解决吗?

我没有提到的条件呢。

机器人下单的时间比人工下单的时间早,但在新闻发布前就已经修改了。

交易量是相同的,距离大约相同

一般来说,条件几乎完全相同。

 
TarasBY:
本日开始于当前D1条的开始(iTime (NULL, PERIOD_D1, 0)),但你是不是在寻找简单的方法?:))


问题就在这里。

一切正常,但只有一次。例如,如果我设置了一天的周期(iTime (NULL,PERIOD_D1, 0)),它在第二天就不起作用了。

写了一个测试代码来测试

GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_M1, 0));  

if  (GetProfitFromDateInCurrency()<1 && GetProfitFromDateInCurrency()>-1)
    { My_buy ();  My_close(); }
поставил период МИНУТКИ, так чтобы за минуту слить доллар на спреде и остановиться, ДО НАЧАЛА ВТОРОЙ МИНУТЫ. И он льет и останавливается. А вот почему на второй минуте он не открывает сделок?