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

 
solnce600:
它用什么按钮来让你微笑或振作起来?

乌里不知道,我也不知道这个按钮,但有时我们会摇摇尾巴 ...:)))
 
lottamer:

2个小时试图写一篇测试文章,以进一步测试不同的条件。

不起作用!

请告诉我这个错误。

问题是,订单在自己的方向上2个百分点后打开。

打开卖和结束...



一切似乎在逻辑上都是正确的!只有注意--所有的变量都必须在开头以上声明,包括括号内的变量。
 
hoz:


我想知道为什么这里会有一个条件?


有一个while循环,原则上可能是无限的,所以已经采取了措施,使其更容易从图表中取出EA或将其关闭。

如果出了问题,最好是终止启动,而不是循环。在下一次打勾时,重复它。

 
lottamer:

Kim的函数有一个时间参数="自1970年以来的日期和时间(秒"

我尝试了2种变体。

而这两者给出的利润不是当天的,而是整个历史的全部利润....。

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

我不太理解写一个独立函数的逻辑。毕竟,函数RefreshRates() 本身的作用是更新预定义变量的数据。而买入卖出 是预定义的变量。如果函数RefreshRates() 更新预定义的变量,为什么还要写一些额外的函数?

那里有一个奇特之处。

bool RefreshRates( )

刷新预定义变量和时间序列数组中的数据。当专家顾问或脚本已经进行了很长时间的计算,需要更新数据时,可以使用这个功能。如果数据被更新,它返回TRUE,否则返回FALSE。数据可能不会被更新,只因为它对应于客户终端的 当前状态。专家顾问和脚本使用他们自己的历史数据副本工作。当前符号上的数据副本是在专家顾问或脚本首次启动时创建的。在每次启动专家顾问时(记住,该脚本只执行一次,不依赖于传入的点数),最初创建的副本会被更新。当专家顾问或脚本运行时,一个或几个新的点会到来,所以数据会过时。

数据也不是即时更新的。这必须得到控制。

 
Zhunko:

那里有一个奇特之处。

bool RefreshRates( )

刷新预定义变量和时间序列数组中的数据。当专家顾问或脚本已经进行了很长时间的计算,需要更新数据时,可以使用这个功能。如果数据被更新,它返回TRUE,否则返回FALSE。数据可能不会被更新,只因为它对应于客户终端的当前状态。专 家顾问和脚本使用他们自己的历史数据副本工作。当前符号上的数据副本是在专家顾问或脚本首次启动时创建的。在每次启动专家顾问时(记住,该脚本只执行一次,不依赖于传入的点数),最初创建的副本会被更新。当专家顾问或脚本运行时,一个或几个新的点会到来,所以数据会过时。

数据也不是即时更新的。这必须得到控制。


根据给定的参考,让我们采取ASK价格。如果我们运行RefreshRates()预定义变量 数组中的数据会被更新。如果ASC的价格发生了变化,那么在运行RefreshRates() 后,ASC将采取新的价值如果是这样的话。

数据可能不会仅仅因为与客户终端的当前状态相匹配而刷新。

则ASC值没有变化。因此,以前的ASK值将在计算中使用,因为它没有改变,就像以前一样。

毕竟,如果RefreshRates() 返回的值是TRU,这意味着它已经成功地更新了数据,所以我们不需要再去检查它了你不同意吗?

 
hoz:


基于这个参考,我们来看看ASC的价格。如果我们运行RefreshRates(),预定义变量数组中的数据会被更新。因此,如果ASC的价格发生了变化,那么在运行RefreshRates() 后,ASC将采取新的价值而如果是这样的话。

则ASC值没有变化。因此,以前的ASK值将被用于计算,这就是它的原貌,因为它没有改变。

毕竟,如果RefreshRates() 返回TRU值,它已经成功地更新了数据,我们不需要再去检查它了!你不同意吗?

不,它可以返回FALSE,数据将是新的。

数据可能不被更新的唯一原因是它对应于客户终端的 当前状态

你必须找到一个指示,告诉你数据是新鲜的。对于不同的任务,它可能是不同的。
 
Zhunko:

不,它可以返回FALSE,数据将是新的。

那么,文件中存在一个明显的错误?而文件不能被信任?

Zhunko:

你必须找到一个能让你认为数据是新鲜的指示。对于不同的任务,它可能是不同的。

假设我们谈论的是ASK价格。我们有两个变量。

ASC -RefreshRates()之后的询问 值。

_ASK - 最后已知的询问 值。

_____________________________________________________________________________________

这很难说。这里可能是什么标志?有两种可能性。

1.预定义变量 的值已经改变。RefreshRates() 返回True

2.预定义变量的值没有 改变。RefreshRates() 返回False

如果我们看一下另一面,关于找到一个标志。有2种可能性。

1.预定义变量的值已经改变。也就是说,在我们的案例中,Ask = ASC

2.预定义变量的值没有 改变。即:Ask = _ASK

要么有一个变化的值,要么有一个不变的值,没有其他选择。那你想做什么?

 
hoz:

那么,文件中存在一个明显的错误?而文件不能被信任?

比方说,我们谈论的是ASK价格。我们有2个变量。

ASC -RefreshRates()之后的询问 值。

_ASK - 最后已知的询问 值。

_____________________________________________________________________________________

这很难说。这里可能是什么标志?有两种可能性。

1.预定义变量的值已经改变。RefreshRates() 返回True

2.预定义变量的值没有 改变。RefreshRates() 返回False

如果我们看一下另一面,关于找到一个标志。有2种可能性。

1.预定义变量的值已经改变。也就是说,在我们的案例中,Ask = ASC

2.预定义变量的值没有 改变。即:Ask = _ASK

要么有一个变化的值,要么有一个不变的值,没有其他选择。那你想怎么做呢?

文件都是有序的。这正是所描述的,这也是我向你指出的。

如果数据被更新,则返回TRUE,否则返回FALSE。数据可能不被更新的唯一原因是它与客户终端的 当前状态 相匹配。

所以这个函数只说已经收到了新的数据。

我不知道你想怎么做其他的事情。我从服务器(MarketInfo())上检查数据,有零条。我一直等到它们都是一样的。顺便说一下,这并不能保证在不久的将来历史上没有 "洞"。可能很容易有1、2、3个小节或几个小节的缺失,而零点小节会在那里。有时他们会在事后才来。有时他们不这样做。

 
Zhunko:

也就是说,这个函数说新数据已经到达,但仅此而已。

因此,如果有新的数据进来,这就是我们需要的,不是吗?
Zhunko:

我从服务器(MarketInfo())上检查了零条的数据。我等待着他们也是如此。顺便说一下,这并不能保证在最近的历史上没有 "洞"。可能很容易有1、2、3个小节或几个小节的缺失,而零点小节会在那里。有时他们会晚点来。有时他们不这样做。

嗯,是的,我们需要第0条的数据。MarketInfo()从零条上提取数据,仅此而已。为什么我们要用别的东西来检查呢?
Zhunko:

顺便说一下,它并不能保证在最近的历史中没有 "洞"。可能很容易出现1、2、3个小节或几个小节的缺失,而零会出现在那里。有时他们会晚点来。有时他们不这样做。

即使历史上有一个缺口,也不会影响当前的计算。它在当时会有一个洞。也就是说,如果我们获得了当前的Ask,我们并不真正关心几个柱子前的价格(我的意思不是正式的,而是关于某个市场变量的当前时刻,因为函数RefreshRates()将对第0个柱子上的当前时刻进行处理!)。

当然,我是在挖空心思,但我想了解如何做得更好。

你,Vadim,说我在上面写的函数不正确,我再重复一遍,加了几行

double fGet_TradePrice(int fi_price,       // Цена: 0 - Bid; 1 - Ask
                       string fs_symbol)   // валютная пара
{
   double ld_price = 0.0;
   
   switch (fi_price)
   {
         case 0:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Bid;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_BID);
         
         case 1:
         if (fs_symbol == Symbol())
         {
             RefreshRates();
             ld_price = Ask;
         }
         else
             ld_price = MarketInfo(fs_symbol, MODE_ASK);
   }
   
    if (ld_price != 0)
        return (ld_price);
}

在你看来,这里面有什么问题?