if(!trend)
{
(if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) // Если бар соответствует требуемым признакам..
cnt++; // .. прибавим 1 к счётчикуif (Close[i] < Open[i]) // Если бар, не соответствует основному признаку..
cnt = 0;
}
else
{
...
}
//в шапке#import "SharedMemoryMT4.dll"int MemoryCreate(int nArea, string sPrefixArea, int hFileUser, int nIndex, string sName, int nSize);
bool MemoryWriteInt(int nArea, string sPrefixArea, int nIndex, string sName, int nStartByte, int nValue);
bool MemoryCloseHandle(int nArea, string sPrefixArea, int hMemory);
#import//в инит
hMapping=MemoryCreate(1, "", NULL, -1, "ind", 60*GlobalVariableGet("ADXBars"));
//в деинит
MemoryCloseHandle(1, "", hMapping);
//в старт вместо for(; i<Σ; i++) MemoryWriteInt(1, "", -1, "ind", i, iBars(sn, 1));//ind[i]=iBars(sn, 1);
我们写一个测试脚本,将鼠标悬停在秒上,读取x秒前的TOLHCV 值(而不是蜡烛图)。
#property show_inputs#import "SharedMemoryMT4.dll"int MemoryOpen(int nArea, string sPrefixArea, int nIndex, string sName);
int MemoryReadInt(int nArea, string sPrefixArea, int nIndex, string sName, int nStartByte);
#importexternint x;//сколько секунд назад с данного момента прикрепления смотрим значения TOLHCVint init()
{
MemoryOpen(1, "", -1, "ind");
return(0);
}
int start()
{
//MemoryReadInt(1, "", -1, "ind", i) это ind[i], GlobalVariableGet("final") это последний элемент в массиве, а ф-ла выглядит так: n=ind[final]-ind[final-x]+1int n=MemoryReadInt(1, "", -1, "ind", GlobalVariableGet("final"))-MemoryReadInt(1, "", -1, "ind", GlobalVariableGet("final")-x)+1;
Alert(TimeToStr(TimeCurrent(),TIME_SECONDS), ": Time=", TimeToStr(Time[n], TIME_SECONDS), ", Open=", Open[n], ", High=", High[n], ", Low=", Low[n], ", Close=", Close[n], ", Volume=", Volume[n]);
return(0);
}
我们运行的是秒的时间框架。在初始化时,将显示一个窗口
Ошибка в методе "Utils::Memory::Mapping::Create()".
В файловом отображении ""
не выделена память при отсутствии дескриптора пользовательского файла.
日志中共有58.572次
10:45:42 SandyEw7-2.4 EURUSD,M1: function 'MemoryWriteInt' call from dll 'SharedMemoryMT4.dll' critical error c0000005 at 02CA05A3.
...
10:48:43 SandyEw7-2.4 EURUSD,M1: function 'MemoryWriteInt' call from dll 'SharedMemoryMT4.dll' critical error c0000005 at 02CA05A3.
并在解除初始化时显示一个窗口
В методе "MT4::Memory::SearchIndexOrHandle()" не установлен параметр для поиска в области памяти терминала.
你好,编程大师
你能告诉我如何在左上角 画一个充满背景颜色的矩形,并在图表上面和专家显示的文字下面有一个小的缩进(为了美观)?
预先感谢
是一样的...也要描述一下,只是针对不同的情况。
不就是这样吗?
Artem,不要介意写 代码,好吗?或者把你手里的东西给我,我就会结束这种痛苦......
关于测试器操作的问题:在运行一个测试 后,你改变了参数(日期、货币对、时间框架),重新运行测试--它在运行,但当它结束时,"图表 "和 "报告 "等选项卡中的信息根本没有变化--一切都停留在以前的测试 中。保存的报告也被证明是旧的。原因是什么,如何解决这个问题?也许有一些功能可以重置结果?
我已经阅读了手册、文章,搜索了论坛--我没有遇到任何提到这样的问题......
它不应该是这样的,也许你检查了 "优化"?
这不应该是这样的,也许你勾选了 "优化"?
哦,看来是这样的:当运行一个新的测试时,我没有注意到优化是开着的,以为这不是关键。略显奇怪的界面解决方案...
但现在已经开始工作了,非常感谢你!
我没有深入研究逻辑,但直觉告诉我有一些不必要的计算。一年半以前,我在解决同样的问题,在天文分钟的开始,用报价收集和形成M1烛台,并有明确的切割。如果你会感兴趣,你可以看看你的代码(文件)的一些纯优化的时刻。真的,如果我们认真谈论优化,你需要衡量代码的运行时间。;)
现在我正在尝试一种完全从头开始的不同方式。
向瓦迪姆提出的关于绘图的问题。那么,呃...从头开始。我们把原来的滴答声TF。
原则上,有一个非常简单的逻辑:我们抓住了一个出价,形成RateInfo,但我们把时间放到Volume和model Time。现在,不用担心如何模拟时间,我们完全去掉模拟,用标准的TOLHCV来做,在它前面加上 "如果从最后一次调用start()到现在已经超过0秒"。如果它在同一条件的其他分支中较少,则编辑High-Low并增加Volume。本质上,它与上面描述的相同,但周期完全被删除,即我们得到 "有缺口 "的第二个TF(有缺失的秒)。
还把看涨看跌的分级完全关闭。值得赌一把吗?让我们检查一下,把GetTickCount() 缩小到这个变量和所有者的初始变量,在一个图表上同时运行,看一下日志。
正如预期的那样。勾选--原始,有间隙的秒数--修改。现在在time=TimeCurrent()之前形成一个辅助数组。
这是在秒速快三精准人工下注计划的代码中。对于将徘徊在secondtf本身的EA来说,TOLHCV值x秒前就可以得到ind[GlobalVariableGet("final")]-ind[GlobalVariableGet("final")-x]+1,当然如果这个数组是以某种方式传递的。因此,让我们使用映射。
我们写一个测试脚本,将鼠标悬停在秒上,读取x秒前的TOLHCV 值(而不是蜡烛图)。
我们运行的是秒的时间框架。在初始化时,将显示一个窗口
日志中共有58.572次
并在解除初始化时显示一个窗口
В методе "MT4::Memory::SearchIndexOrHandle()" не установлен параметр для поиска в области памяти терминала.
好在后来deinitializatsii它,我把脚本 - 警报一次。我覆盖了MemoryCreate和MemoryCloseHandle,什么都没有出现(脚本保持警报),日志
- 就这样了。因此,从逻辑上讲,我使用调用的顺序是错误的,或者是声明 的方式不正确。我的操作系统是WinXP。瓦迪姆,至少告诉我该往哪个方向走。