//+------------------------------------------------------------------+//| 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"
//ВХОДНОЙ ПАРАМЕТР
inputushort Constanta=50; //Константа//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- create timerEventSetTimer(20);
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
//--- destroy timerEventKillTimer();
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//---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);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
Sleep(20000);
}
//+------------------------------------------------------------------+
请看这段代码:
弗拉基米尔请看这段代码:
敬上,弗拉基米尔。很遗憾,我这两天无法检查它,但请接受我的谢意!
谢谢您,但请注意,这不是现成的代码,只是我的思考方向。它可能是错的。您需要检查一下。您可以考虑另一种方法--移除 OnTimer,然后在 OnTick() 中尝试相同的代码。总之,试试看吧。
再见,弗拉基米尔
记录当前价格和时间。比较每个刻度的时间和当前时间,如果超过 20 秒,则记住第二个价格。计算第一个价格和第二个价格之间的差额。将所得结果与常数进行比较,然后决定是否下单。
记住当前价格和时间。比较每个跳动点的时间和当前时间,如果超过 20 秒,则记住第二个价格。计算第一个价格和第二个价格之间的差值。将所得结果与常数进行比较,然后决定是否下单。
我是否正确理解了您的意思:您需要每秒记住当前价格,然后将其与 20 秒内删除该系列每个值时的当前价格进行比较?
比较应该是连续的。
我的理解是否正确:您需要记住每秒的当前价格,这样当该系列的每个值被删除 20 秒后,您就可以将其与当前值进行比较?
比较应该是连续的。
如果需要检查所有的刻度,那么所有的刻度都应该记住并进行比较。如果根据算法可以减少次数,那么可以使用计时器,一秒钟后记住价格,20 秒后也记住并进行比较。或者说,您应该记住 20 秒内的所有价格或一秒内的价格,并与新的刻度进行比较。
每秒可能有 1 个刻度,5 秒内可能有 1 个刻度,一秒内可能有 100 个刻度。您必须决定在每 5 秒有一个刻度线和每秒有 100 个刻度线时如何操作。
如果您需要检查所有刻度,那么所有刻度都应记住并进行比较。如果可以根据算法减少频率,那么可以使用计时器,一秒钟后记住价格,20 秒后也记住并进行比较。或者说,您应该记住 20 秒内的所有价格或一秒内的价格,并与新的刻度进行比较。
每秒可能有 1 个刻度,5 秒内可能有 1 个,一秒内可能有 100 个。您必须决定在每 5 秒有一个刻度线和每秒有 100 个刻度线时如何操作。
这不是选择的问题,而是我写下来的难度问题....。我今天第一次来这里。我完全是个外行。
我只是想试试我的想法...
这不是一个选项的选择问题,而是我写下来的难度问题.....。这是我今天第一次来这里。完全是外行。
我只是想试试我的想法。
算法必须精确,并理解其应用条件。你不能以其他方式编写代码。代码是一种行动算法的实现,它不能不准确。
在这里,最好先自己写,也许你会纠正错误。
您了解等号的符号,知道多就是少。
环形缓冲区:
取一个缓冲区--一个由"价格、时间 "结构组成的 足够大的静态数组(或两个单独的数组)。
我们使用两个变量--指向缓冲区头部和尾部的 "指针"(索引)。
在每一次跳转时,我们都会在头部添加一个元素,并将指针向前推进。
将时间与尾部的元素进行比较,必要时移动指针。
将价格与尾部元素进行比较。
如果某个指针到达了数组的末尾,我们会将该指针重置为零。
取两个变量--指向缓冲区头部和尾部的 "指针"(索引)。
在每次跳转时,我们都会在头部添加一个元素,并移动指针。
将时间与尾部的元素进行比较,必要时移动指针。
将价格与尾部元素进行比较。
如果某个指针已到达数组的末尾,则将该指针重置为零。