初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1427

 
Valeriy Yastremskiy #:

算法必须精确,并了解其应用条件。否则就无法编写代码。代码是一种行动算法的实现,不可能不准确。

在这里,最好先自己编写,也许错误会得到纠正。

你知道等号的符号,多就是少。

你好,瓦列里!我完全同意您的观点。要写出正确的代码,您需要一个准确的开仓条件。这套代码也行得通:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//ВХОДНОЙ ПАРАМЕТР
input ushort Constanta=50; //Константа
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Tick function                                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
  }
//+------------------------------------------------------------------+

但问题是,它是否应该按照维塔利的意图运行?老实说,我不太明白为什么每 20 秒(甚至每 10 秒、5 秒或 1 秒)就要检查一次价格差异。这对确定价格进一步变动的方向有什么帮助?

弗拉基米尔

 
MrBrooklin #:

你好,瓦列里!我完全同意您的观点。要写出正确的代码,您需要一个准确的开仓条件。这段代码也很有效:

但问题是,它是否应该按照维塔利的意图运行?老实说,我不太明白为什么每 20 秒(甚至每 10 秒、5 秒或 1 秒)就要检查一次价格差异。这对确定价格进一步波动的方向有什么作用?

弗拉基米尔

MrBrooklin#:

你好,瓦列里!我完全同意您的观点。要写出正确的代码,您需要一个准确的开仓条件。这套代码也行得通:

但问题是,它是否应该按照维塔利的意图运行?老实说,我不太明白为什么每 20 秒(甚至每 10 秒、5 秒或 1 秒)就要检查一次价格差异。这对确定价格进一步波动的方向有什么作用?

弗拉基米尔

您对任务的描述有误!不是 "每 20 秒一次",而是每秒钟都用一段时间前的指标进行检查。至于 "为什么"--这不是讨论的问题。(20 秒只是一个例子)。

这就像移动平均线,第一根蜡烛与第二根蜡烛进行比较。只是我必须计算当前(零)分钟蜡烛图内的所有内容。毕竟,20 秒可以流向第一根蜡烛)。

 
vitaliy zamkovoy #:
你对任务的描述不正确!不是 "每 20 秒一次",而是每秒钟都要检查一段时间前的值。至于 "为什么"--这不是讨论的问题。(20 秒只是一个例子)。

是的,我错了,我没有完全理解您想做什么/检查什么。

再见,弗拉基米尔。

 

但是,如果与你的常数相等的距离不是在任何偶数秒内走完的,而是比如在 10.964 秒或 11.283 秒内走完的,那么会发生什么呢?是否满足条件?

弗拉基米尔

 
MrBrooklin #:

但是,如果与你的常数相等的距离不是在任何偶数秒内走完的,而是在例如 10.964 秒或 11.283 秒内走完的,那么会发生什么呢?是否满足条件?

弗拉基米尔

在 "与常数比较 "一词中,我指的不是相等,而是 "多""少"。如果是正差,我们用 "+"号与常数比较;如果是负差,我们用"-"号与常数比较。在第一种情况下,如果超出常数,我们就购买。在第二种情况下,如果数值较小,则出售。
 
vitaliy zamkovoy #:
在 "与常数比较 "一词中,我指的不是相等,而是 "多""少"。

现在一切都清楚了。

再见,弗拉基米尔。

 
MrBrooklin #:

现在一切都说得通了。

敬上,弗拉基米尔

我已经更新了那里的信息。请重新阅读。
 

我真不想再看这些废话了......毕竟,代码只有四行,而讨论却有三页之长。

  MqlTick mqlTick[], symbTick; // объявили переменные
  SymbolInfoTick(_Symbol, symbTick); // это последний тик
  CopyTicksRange(_Symbol, mqlTick, COPY_TICKS_ALL, symbTick.time_msc, symbTick.time_msc-20000); // Получили все тики за последние 20 секунд
  double delta = NormalizeDouble(mqlTick[ArraySize(mqlTick)-1].bid-mqlTick[0].bid, _Digits); // получили разницу крайних значений массива

20,000 毫秒就是 20 秒。

接下来,在 delta 变量的大小上设置一个条件:更多/更小、向左/向右或向北/向玉....

 
MrBrooklin #:

现在一切都说得通了。

敬上,弗拉基米尔

MrBrooklin#:

现在一切都说得通了。

敬礼,弗拉基米尔

vitaliy zamkovoy#:
我已经更新了那里的信息。请重新阅读。
阿列克谢-维克托罗夫是个势利小人,但一眼就看出了其中的诀窍。😆
 
vitaliy zamkovoy #:
在 "与常数比较 "一词中,我指的不是相等,而是 "多""少"。如果差额是正数,我们就用一个带 "+"号的常数来比较;如果差额是负数,我们就用一个带"-"号的常数来比较。在第一种情况下,如果超出常数,我们就购买。在第二种情况下,如果差值较小,则出售。

现在一切都清楚了。

弗拉基米尔

附注: 我唯一能建议的是,为了感兴趣,您可以看看我在这里的 留言,然后再看看留言之后的价格走势。它回滚到了 0.98000,或者更准确地说是 0.9806,然后再次上涨,如价格图表截图上的红色箭头所示。本建议仅供您参考。