- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最佳答案
这是一个工作示例 script
使用 kernel32.dll
的原生 MQL 解决方案从 ./MQL4/Logs
复制日志文件至 ./MQL4/Files
. LogSignalParser
抽象基类需要被子类化并且需要实现 virtual bool parse()
方法。
编辑:@TenOutOfTen 想要一个如何解析日志文件中的以下行格式的实际示例:0 02:20:00.874 SuperIndicator USDCAD,M5: Alert: USDCAD, M5: Super Indicator SELL @ 1.29136, TP 1.28836, SL 1.29286
第 1 步:保存 LogParser.mqh
有意义的地方。
//LogParser.mqh
#property strict
#include <stdlib.mqh>
#include <Arrays\ArrayString.mqh>
#include <Arrays\ArrayObj.mqh>
#import "kernel32.dll"
bool CopyFileW(string lpExistingFileName,
string lpNewFileName,
bool bFailIfExists);
#import
//+------------------------------------------------------------------+
//|
//+------------------------------------------------------------------+
class Signal : public CObject
{
public:
string symbol;
datetime signal_time;
int order_type;
double price_entry;
double price_sl;
double price_tp;
virtual int Compare(const CObject *node,const int mode=0) const override
{
const Signal *other=node;
if(this.signal_time>other.signal_time)
return 1;
if(this.signal_time<other.signal_time)
return -1;
return 0;
}
string to_string()
{
return StringFormat("%s - %s(%s) @ %.5f, SL=%.5f, TP=%.5f",
signal_time,
symbol,
order_type==OP_BUYLIMIT ? "BUY" : "SELL",
price_entry,
price_sl,
price_tp
);
}
};
//+------------------------------------------------------------------+
//|Vector-like collection
//+------------------------------------------------------------------+
class SignalList : public CArrayObj
{
public: Signal *operator[](int i){return this.At(i);}
};
//+------------------------------------------------------------------+
//|Abstract abse class: the parse method must be implemented in subclass
//+------------------------------------------------------------------+
class LogSignalParser : public CObject
{
protected:
CArrayString m_rows;
SignalList m_signals;
string m_log_file_name;
string m_ind_name;
public:
LogSignalParser(string indicator_name);
// parse method must be overridden!
virtual bool parse() = 0;
int Total();
Signal *operator[](int i);
protected:
bool _copy_log();
int _open_log();
bool _parse_rows();
};
//+------------------------------------------------------------------+
LogSignalParser::LogSignalParser(string indicator_name)
{
m_log_file_name="copy_log.log";
m_ind_name=indicator_name;
}
//+------------------------------------------------------------------+
bool LogSignalParser::_copy_log(void)
{
MqlDateTime t;
TimeLocal(t);
string data_path = TerminalInfoString(TERMINAL_DATA_PATH)+"\\MQL4";
string logs_path = data_path + "\\Logs\\";
string dest_file = data_path + "\\Files\\" + m_log_file_name;
string log_file=logs_path+StringFormat("%d%02d%02d.log",
t.year,t.mon,t.day);
return CopyFileW(log_file, dest_file, false);
}
//+------------------------------------------------------------------+
bool LogSignalParser::_parse_rows()
{
if(!this._copy_log())
return false;
int h= this._open_log();
if(h == INVALID_HANDLE)
return false;
m_rows.Clear();
while(!FileIsEnding(h)){
string row=FileReadString(h);
if(StringFind(row,"Alert:") >= 0 && StringFind(row,m_ind_name) >= 0)
m_rows.Add(row);
}
m_rows.Sort();
FileClose(h);
return true;
}
//+------------------------------------------------------------------+
int LogSignalParser::_open_log(void)
{
return FileOpen(m_log_file_name,
FILE_TXT|FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE);
}
//+------------------------------------------------------------------+
int LogSignalParser::Total(void)
{
return m_signals.Total();
}
//+------------------------------------------------------------------+
Signal* LogSignalParser::operator[](int i)
{
return m_signals.At(i);
}
LogSignalParser
类和覆盖 parse
//SuperIndicatorParser.mqh
#property strict
#include "LogParser.mqh"
//+------------------------------------------------------------------+
class SuperIndicatorParser : public LogSignalParser
{
public:
SuperIndicatorParser():LogSignalParser("SuperIndicator"){}
virtual bool parse() override;
};
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
bool SuperIndicatorParser::parse() override
{
if(!this._parse_rows())
return false;
m_signals.Clear();
MqlDateTime local;
TimeLocal(local);
for(int i=m_rows.Total()-1; i>=0; i--)
{
string row=m_rows[i];
MqlDateTime log_time;
TimeToStruct(StringToTime(StringSubstr(row, 2, 12)), log_time);
log_time.year = local.year;
log_time.mon = local.mon;
log_time.day = local.day;
datetime time = StructToTime(log_time);
row = StringSubstr(row, StringFind(row, m_ind_name) + StringLen(m_ind_name) + 1);
StringReplace(row, ",", " ");
string parts[];
StringSplit(row, ' ', parts);
int len = ArraySize(parts);
string debug = "";
for(int k=0;k<len;k++)
debug += "|" + parts[k];
if(len != 17)
continue;
Signal *s = new Signal();
s.signal_time = time;
s.symbol = parts[0];
s.order_type = parts[8] == "BUY" ? OP_BUYLIMIT : OP_SELLLIMIT;
s.price_entry = double(parts[10]);
s.price_tp = double(parts[13]);
s.price_sl = double(parts[16]);
m_signals.Add(s);
}
m_signals.Sort();
return true;
}
#property strict
#include "SuperIndicatorParser.mqh"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
SuperIndicatorParser parser;
if(parser.parse()){
for(int i=parser.Total()-1; i>=0; i--){
Signal *s = parser[i];
int ticket = OrderSend(
s.symbol, s.order_type, 0.1,
s.price_entry, 0, s.price_sl, s.price_tp
);
if(ticket < 0){
Print(_LastError);
}
}
}
}
关于mql4 - 我如何将 Metatrader 4 警报或电子邮件指标信号转换为 Expert Advisor 以进行交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52073899/
什么是 Metatrader 插件?我在一些促销事件和文章中看到过这个词。这些文章中描述的是一位物种专家,插入了其他语言(不是 MQL4/5)的库。 最佳答案 插件通常指的是在 MT 服务器中运行的
R 有一种从其他来源(例如雅虎财经等)收集数据的好方法 library(quantmod) getSymbols("YHOO",src="google") 有没有办法将 Metatrader 4 收集
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
假设我有一个基于报价级别(出价、报价)信息执行的 EA,有没有办法在 MetaTrader 终端的策略测试器中使用报价级别信息对其进行回测? 有两个问题: 一个。 MetaTrader 似乎只支持 1
这在某种程度上旨在(可能)成为(成为)MetaTrader 4/5 及其相应语言 MQL4 方面的指导性帖子,两者都设置为将数据发送到外部服务器的上下文。 在我的特殊情况下,我正在构建一个基于 Dja
由于我的测试平台和 MT4 之间的技术指标计算存在差异,我决定尝试通过与 MetaTrader 兼容的自定义指标 DLL 将开源 TA-LIB API 引入 MetaTrader。 我知道要使函数对
我想从我自己在 Metatrader 中导入的 DLL 中调用 MQL4 或 MQL5 函数。 是否可以? 最佳答案 森林, 就我在过去 2 年使用 MetaTrader 的经验而言,没有真正的方法可
我一直在使用指标进行交易。我没有开发指标,所以我只能访问 .ex4文件。我如何提取警报或电子邮件信号中的止盈、开仓交易和止损值以开仓交易?请参阅下面的电子邮件和警报信号示例。 最佳答案 这是一个工作示
我正在尝试使用 Python 中的 MT5 分析货币数据,但它不起作用。我不明白问题出在哪里?即使导入也不起作用 from MetaTrader5 import * from datetime imp
状态: 我已经用 C# 编写了一个 DLL,它可以从用 MQL4 编写的代码中调用/strong>(基本上是一种类似 C 的语言)并发回一些数据(从非托管到托管再返回)。 通常,DLL 将查询发送到
我的机器上安装了 MT4 客户端,可以成功检索提要。但是,我已经使用java编写了一个程序来使用FIX协议(protocol)提取数据。我想知道我的 java 程序如何提取我在 MT4 客户端上看到的
我正在构建一个基于 Node.JS 的系统,以连接 MetaTrader 并处理所有操作,如链接账户、打开、关闭交易订单... 但是我还没有找到如何在Nodejs中连接MetaTrader的方法。你能
我有以下功能 __declspec(dllexport) wchar_t* __stdcall __getJson(wchar_t * listN){ setlocale(LC_ALL, ""); /
我想要一个 EA 交易来开启由 Telegram 消息触发的交易。 我成功设置了一个 Hello-World 应用程序,使用 MQ4 作为服务器,Python/Telegram-bot 作为客户端。当
我学习了 C++,我需要通过编写 DLL 文件来开始为 MetaTrader Terminal 4 创建插件,但我不知道如何开始 MetaTrader Terminal 4 编程。 我也尝试寻找资源或
我正在构建桌面MEAN (MongoDB Express Angular NodeJS)堆栈应用程序,但我需要访问实时(检测到的变化更新)货币汇率。在 Excel 中,只要 MT4.exe 正在运行,
我有一些 CSV 数据,例如 2011.12.08,22:45,1.33434,1.33465,1.33415,1.33419,265 2011.12.08,23:00,1.33419,1.33542
我的计算机上运行着一个 Node.js 服务器,同时我还运行着一个 MT4.exe。 如果我可以通过此脚本将实时汇率导出到一个简单的 Excel 文件。 BID request: = MT
无法运行简单的智能交易系统。 Wnd.dll - 来自“bin”文件夹的文件,使用 VS2015 创建。 Wnd.dll 文件位于正确的“MQL4\Libraries\”文件夹中。 所以我尝试运行这个
我在 Mac (OS X 10.9.1) 上并希望结合 Metatrader 4 与 C++ 自己的数据处理程序。该程序将从我的 Metatrader 获取市场信息并为特定仪器发回信号。 我测试了 C
我是一名优秀的程序员,十分优秀!