初学者的问题 MQL4 MT4 MetaTrader 4 - 页 100 1...93949596979899100101102103104105106107...261 新评论 Vladim1203 2017.10.19 19:39 #991 大家好,能不能帮我找到EA代码中的一个错误,我想我已经看完了,代码中似乎都写得很正确,但程序不知道为什么不能正常交易!我想知道为什么?这个想法是这样的:顾问必须寻找两个相同方向的长蜡烛(蜡烛之间的长度在顾问中可以调整,即在两个最低或最高蜡烛之间,取决于方向),如果相反方向的价格突破了最后一根蜡烛的最低或最高值,交易应该打开(文件所附图表中的示例图片情况)。顾问应该在每个合适的情况下打开交易,但由于某些原因,它只在几天之间的交易窗口打开交易。情况是这样的,谁也不难从程序员的角度出发,请帮助,修复错误。EA代码见下文,以及附件中的文件。//+-----------------------------------------------------------------------------------------------+//|间隔_烛光。ǞǞǞ//|Copyright 2017, Vladim |//|vk.com/id229534564 |//|邮件。Vladim120385@yandex.ru |//+-----------------------------------------------------------------------------------------------+#property copyright "Copyright 2017, Vladim"#财产链接 "vk.com/id229534564"#财产版本 "1.00"#属性严格//---- EA参数extern string paramEA = ""; // Parameters EA外部双倍体积 = 0.01; // 体积外部双倍止损 = 5; // 止损。外部双倍的takeProfit = 1.5; // TakeProfitextern double maxSpacing = 150; // MaxSpacingextern double minSpacing = 30; // MinSpacing外来的双倍TrailingStop = 0; // TrailingStopextern int magic = 127; // Magic//--全局变量datetime newCandle;int提示。//+-----------------------------------------------------------------------------------------------+int OnInit(){return(INIT_SUCCEEDED)。}//+-----------------------------------------------------------------------------------------------+空白的OnDeinit(const int reason)。{}//+-----------------------------------------------------------------------------------------------+空白的OnTick(){if(newCandle != Time[0]) FindPattern();newCandle = Time[0];}//+-----------------------------------------------------------------------------------------------+void OpenOrder(int type) // 打开一个市场订单{if(type == OP_BUY) if(OrderSend(_Symbol, OP_BUY, volume, Ask, 0, 0, 0, "", magic, 0) )SetSLTP(OP_BUY)。if(type == OP_SELL) if(OrderSend(_Symbol, OP_SELL, volume, Bid, 0, 0, 0, 0, " ", magic, 0))SetSLTP(OP_SELL)。}//+-----------------------------------------------------------------------------------------------+void SetSLTP(int type) //设置止损单{double sl = 0;double tp = 0;如果(type == OP_BUY)for(int i = 0; i < OrdersTotal(); i++)如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))如果(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_BUY && OrderStopLoss() == 0){sl = NormalizeDouble(Low[1] - stopLoss * _Point, _Digits);tp = NormalizeDouble(OrderOpenPrice() + (OrderOpenPrice() - Low[1])* takeProfit, Digits)。如果(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) 返回。}如果(type == OP_SELL)for(int i = 0; i < OrdersTotal(); i++)如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))如果(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_SELL && OrderStopLoss() == 0){sl = NormalizeDouble(High[1] + stopLoss * _Point, _Digits);tp = NormalizeDouble(OrderOpenPrice() - (High[1] - OrderOpenPrice() )* takeProfit, Digits)。如果(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) 返回。}}//+-----------------------------------------------------------------------------------------------+void FindPattern() // 寻找烛台之间的长距离{如果(High[1] < High[2] && Bid > High[1] && Low[1] < Low[2]){double spacing = NormalizeDouble((High[2] - High[1]) / _Point, 0);如果(maxSpacing >= spacing && minSpacing <= spacing)OpenOrder(OP_BUY)。}如果(Low[1] > Low[2] && Bid < Low[1] && High[1] > High[2]){double spacing = NormalizeDouble((Low[1] - Low[2]) / _Point, 0);如果(maxSpacing >= spacing && minSpacing <= spacing)OpenOrder(OP_SELL)。}{如果(TrailingStop!=0) TrailingStop()。}}//+-----------------------------------------------------------------------------------------------+空白的 "尾随停止"(TrailingStop)。{双重StLo,OSL,OOP。bool error=true。for (int i=0; i<OrdersTotal(); i++){如果(OrderSelect(i, SELECT_BY_POS)){tip = OrderType()。如果(提示<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic){OSL = NormalizeDouble(OrderStopLoss(),Digits)。OOP = NormalizeDouble(OrderOpenPrice(),Digits)。如果(tip==0){StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits)。如果(StLo < OOP)继续。如果(StLo > OSL)error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White) 。}如果(提示==1){StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);如果(StLo > OOP)继续。如果(StLo < OSL || OSL==0 )error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White) 。}if (!error) Alert("Error TrailingStop",GetLastError()," ",Symbol()," SL ",StLo);}}}}//+-----------------------------------------------------------------------------------------------+ 附加的文件: BUY_SELL.jpg 41 kb Spacing_Candles.mq4 11 kb Questions from Beginners MQL4 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 完善顾问的战略 Vitaly Muzichenko 2017.10.19 19:48 #992 Vladim1203:大家好,能不能帮我找到EA代码中的一个错误,我想我已经全部看完了,代码中似乎写得很正确,但程序不知道为什么不能正常交易!我想知道为什么?这个想法是这样的:顾问必须寻找两个相同方向的长蜡烛(蜡烛之间的长度在顾问中可以调整,即在两个最低或最高蜡烛之间,取决于方向),如果相反方向的价格突破了最后一根蜡烛的最低或最高值,交易应该打开(文件所附图表中的示例图片情况)。顾问应该在每个合适的情况下打开交易,但由于某些原因,它只在几天之间的交易窗口打开交易。情况是这样的,谁也不难从程序员的角度出发,请帮助,修复错误。EA代码如下,也见于附件文件。也许已经够了,你在每个主题中都堆积了帖子,而自己却在创造自己的帖子。 Baruandreas 2017.10.19 19:49 #993 kuzhakov:你好。 你能告诉我如何按时间限制EA交易吗? 我尝试了论坛上的很多方法,但都没有用,我对写作一点都不了解。 如果你能直接指出要放什么,那就更好了。 启动后插入,eXpert将每天在终端上以特定的时间间隔进行交易。int val=Hour(); double min=Minute(); double Dl = val + min/100; double L = xxxx+xxxx/100; //час + минуты вместо хххх - это начало времени double P = xxxx+xxxx/100; //час + минуты вместо хххх - это конец времени if(Dl<L)return; if(Dl>P)return; Baruandreas 2017.10.20 06:14 #994 Vladim1203:大家好,能不能帮我找到EA代码中的一个错误,我想我已经看完了,代码中似乎都写得很正确,但是程序不知道为什么不能正常交易!我想知道为什么?这个想法是这样的:顾问必须寻找两个相同方向的长蜡烛(蜡烛之间的长度在顾问中可以调整,即在两个最低或最高蜡烛之间,取决于方向),如果相反方向的价格突破了最后一根蜡烛的最低或最高值,交易应该打开(文件所附图表中的示例图片情况)。顾问应该在每个合适的情况下打开交易,但由于某些原因,它只在几天之间的交易窗口打开交易。情况是这样的,谁也不难从程序员的角度出发,请帮助,修复错误。见下面的EA代码,也见附件文件。检查买入和卖出的条件 Konstantin Erin 2017.10.20 19:06 #995 Vladim1203:大家好,能不能帮我找到EA代码中的一个错误,我想我已经看完了,代码中似乎都写得很正确,但是程序不知道为什么不能正常交易!我想知道为什么?这个想法是这样的:顾问必须寻找两个相同方向的长蜡烛(蜡烛之间的长度在顾问中可以调整,即在两个最低或最高蜡烛之间,取决于方向),如果相反方向的价格突破了最后一根蜡烛的最低或最高值,交易应该打开(文件所附图表中的示例图片情况)。顾问应该在每个合适的情况下打开交易,但由于某些原因,它只在几天之间的交易窗口打开交易。情况是这样的,谁也不难从程序员的角度出发,请帮助,修复错误。请看下面的EA代码以及附件中的文件。最好先写出EA的部分内容,将发现的蜡烛标记在图表上,这样一切都会变得清晰。而下面这几行在你的情况下是不必要的。extern string paramEA = ""; // Parameters EA и //+-----------------------------------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+-----------------------------------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+-----------------------------------------------------------------------------------------------+ Mikhail Tkachev 2017.11.03 16:20 #996 请帮助社区... 从论坛上下载了卡尔曼滤波指标(源代码附后)。 图表上的一切都很好。 当我试图在专家顾问中读取它时,以下一行 iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);输出同样的大数字,显然与指标无关。会是什么呢? 附加的文件: Kalmanufilter.mq4 4 kb Alekseu Fedotov 2017.11.03 16:52 #997 MikeZv:来自社区的帮助... 从论坛上下载了卡尔曼滤波指标(源代码附后)。 图表上的一切都很好。 当我试图在专家顾问中读取它时,以下一行 iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);输出同样的大数字,显然与指标无关。这可能是什么?EMPTY_VALUE 指标缓冲区 中的空值2147483647 (0x7FFFFFFFF) Mikhail Tkachev 2017.11.03 16:54 #998 Alekseu Fedotov:EMPTY_VALUE 指标缓冲区 中的空值2147483647 (0x7FFFFFFFF):)我已经找到了... 为什么会出现? Nikolay Ivanov 2017.11.03 17:47 #999 MikeZv: :)我已经找到了... 但为什么会出现呢?该指标有2个数组,因为有2种颜色。当条形图上有第一种颜色的线时,第二种颜色的数组就等于EMPTY_VALUE。iValue=iCustom(NULL,timeframe, "Kalmanfilter", 4,1,1,0,1)。iValue = EMPTY_VALUE,那么1条杠上的线就是橙色。(因为数组blue = EMPTY_VALUE) Mikhail Tkachev 2017.11.03 19:00 #1000 Nikolay Ivanov: 该指标有2个数组,因为有2种颜色。当条形图上有第一种颜色的线时,第二种颜色的数组就等于EMPTY_VALUE。iValue=iCustom(NULL,timeframe, "Kalmanfilter", 4,1,1,0,1)。iValue = EMPTY_VALUE,那么1条杠上的线就是橙色。(因为蓝色数组 = EMPTY_VALUE)谢谢,尼古拉... 我从这两条线上取材。 然后我把它们合并成一个(留下一个缓冲区)。同样的结果。 我有这样一个问题。 该指标有一个变量draw_begin=500,即从结束时(从最新鲜的烛台开始)绘制图表的烛台数量。 而当我们使用iCustom()方法提取指标值时,这500个点是从哪个蜡烛图开始计算的? 为什么它很重要 - draw_begin不仅用于绘图,而且还参与指标的计算 ... 1...93949596979899100101102103104105106107...261 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
大家好,能不能帮我找到EA代码中的一个错误,我想我已经看完了,代码中似乎都写得很正确,但程序不知道为什么不能正常交易!我想知道为什么?这个想法是这样的:顾问必须寻找两个相同方向的长蜡烛(蜡烛之间的长度在顾问中可以调整,即在两个最低或最高蜡烛之间,取决于方向),如果相反方向的价格突破了最后一根蜡烛的最低或最高值,交易应该打开(文件所附图表中的示例图片情况)。顾问应该在每个合适的情况下打开交易,但由于某些原因,它只在几天之间的交易窗口打开交易。情况是这样的,谁也不难从程序员的角度出发,请帮助,修复错误。EA代码见下文,以及附件中的文件。
//+-----------------------------------------------------------------------------------------------+
//|间隔_烛光。ǞǞǞ
//|Copyright 2017, Vladim |
//|vk.com/id229534564 |
//|邮件。Vladim120385@yandex.ru |
//+-----------------------------------------------------------------------------------------------+
#property copyright "Copyright 2017, Vladim"
#财产链接 "vk.com/id229534564"
#财产版本 "1.00"
#属性严格
//---- EA参数
extern string paramEA = ""; // Parameters EA
外部双倍体积 = 0.01; // 体积
外部双倍止损 = 5; // 止损。
外部双倍的takeProfit = 1.5; // TakeProfit
extern double maxSpacing = 150; // MaxSpacing
extern double minSpacing = 30; // MinSpacing
外来的双倍TrailingStop = 0; // TrailingStop
extern int magic = 127; // Magic
//--全局变量
datetime newCandle;
int提示。
//+-----------------------------------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED)。
}
//+-----------------------------------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
}
//+-----------------------------------------------------------------------------------------------+
空白的OnTick()
{
if(newCandle != Time[0]) FindPattern();
newCandle = Time[0];
}
//+-----------------------------------------------------------------------------------------------+
void OpenOrder(int type) // 打开一个市场订单
{
if(type == OP_BUY) if(OrderSend(_Symbol, OP_BUY, volume, Ask, 0, 0, 0, "", magic, 0) )SetSLTP(OP_BUY)。
if(type == OP_SELL) if(OrderSend(_Symbol, OP_SELL, volume, Bid, 0, 0, 0, 0, " ", magic, 0))SetSLTP(OP_SELL)。
}
//+-----------------------------------------------------------------------------------------------+
void SetSLTP(int type) //设置止损单
{
double sl = 0;
double tp = 0;
如果(type == OP_BUY)
for(int i = 0; i < OrdersTotal(); i++)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
如果(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_BUY && OrderStopLoss() == 0)
{
sl = NormalizeDouble(Low[1] - stopLoss * _Point, _Digits);
tp = NormalizeDouble(OrderOpenPrice() + (OrderOpenPrice() - Low[1])* takeProfit, Digits)。
如果(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) 返回。
}
如果(type == OP_SELL)
for(int i = 0; i < OrdersTotal(); i++)
如果(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
如果(OrderSymbol() == _Symbol && OrderMagicNumber() == magic && OrderType() == OP_SELL && OrderStopLoss() == 0)
{
sl = NormalizeDouble(High[1] + stopLoss * _Point, _Digits);
tp = NormalizeDouble(OrderOpenPrice() - (High[1] - OrderOpenPrice() )* takeProfit, Digits)。
如果(OrderModify(OrderTicket(), OrderOpenPrice(), sl, tp, 0)) 返回。
}
}
//+-----------------------------------------------------------------------------------------------+
void FindPattern() // 寻找烛台之间的长距离
{
如果(High[1] < High[2] && Bid > High[1] && Low[1] < Low[2])
{
double spacing = NormalizeDouble((High[2] - High[1]) / _Point, 0);
如果(maxSpacing >= spacing && minSpacing <= spacing)
OpenOrder(OP_BUY)。
}
如果(Low[1] > Low[2] && Bid < Low[1] && High[1] > High[2])
{
double spacing = NormalizeDouble((Low[1] - Low[2]) / _Point, 0);
如果(maxSpacing >= spacing && minSpacing <= spacing)
OpenOrder(OP_SELL)。
}
{
如果(TrailingStop!=0) TrailingStop()。
}
}
//+-----------------------------------------------------------------------------------------------+
空白的 "尾随停止"(TrailingStop)。
{
双重StLo,OSL,OOP。
bool error=true。
for (int i=0; i<OrdersTotal(); i++)
{
如果(OrderSelect(i, SELECT_BY_POS))
{
tip = OrderType()。
如果(提示<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
OSL = NormalizeDouble(OrderStopLoss(),Digits)。
OOP = NormalizeDouble(OrderOpenPrice(),Digits)。
如果(tip==0)
{
StLo = NormalizeDouble(Bid - TrailingStop*Point,Digits)。
如果(StLo < OOP)继续。
如果(StLo > OSL)
error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White) 。
}
如果(提示==1)
{
StLo = NormalizeDouble(Ask + TrailingStop*Point,Digits);
如果(StLo > OOP)继续。
如果(StLo < OSL || OSL==0 )
error=OrderModify(OrderTicket(),OrderOpenPrice(),StLo,OrderTakeProfit(),0,White) 。
}
if (!error) Alert("Error TrailingStop",GetLastError()," ",Symbol()," SL ",StLo);
}
}
}
}
//+-----------------------------------------------------------------------------------------------+
大家好,能不能帮我找到EA代码中的一个错误,我想我已经全部看完了,代码中似乎写得很正确,但程序不知道为什么不能正常交易!我想知道为什么?这个想法是这样的:顾问必须寻找两个相同方向的长蜡烛(蜡烛之间的长度在顾问中可以调整,即在两个最低或最高蜡烛之间,取决于方向),如果相反方向的价格突破了最后一根蜡烛的最低或最高值,交易应该打开(文件所附图表中的示例图片情况)。顾问应该在每个合适的情况下打开交易,但由于某些原因,它只在几天之间的交易窗口打开交易。情况是这样的,谁也不难从程序员的角度出发,请帮助,修复错误。EA代码如下,也见于附件文件。
也许已经够了,你在每个主题中都堆积了帖子,而自己却在创造自己的帖子。
你好。
你能告诉我如何按时间限制EA交易吗?
我尝试了论坛上的很多方法,但都没有用,我对写作一点都不了解。
如果你能直接指出要放什么,那就更好了。
启动后插入,eXpert将每天在终端上以特定的时间间隔进行交易。
大家好,能不能帮我找到EA代码中的一个错误,我想我已经看完了,代码中似乎都写得很正确,但是程序不知道为什么不能正常交易!我想知道为什么?这个想法是这样的:顾问必须寻找两个相同方向的长蜡烛(蜡烛之间的长度在顾问中可以调整,即在两个最低或最高蜡烛之间,取决于方向),如果相反方向的价格突破了最后一根蜡烛的最低或最高值,交易应该打开(文件所附图表中的示例图片情况)。顾问应该在每个合适的情况下打开交易,但由于某些原因,它只在几天之间的交易窗口打开交易。情况是这样的,谁也不难从程序员的角度出发,请帮助,修复错误。见下面的EA代码,也见附件文件。
检查买入和卖出的条件
大家好,能不能帮我找到EA代码中的一个错误,我想我已经看完了,代码中似乎都写得很正确,但是程序不知道为什么不能正常交易!我想知道为什么?这个想法是这样的:顾问必须寻找两个相同方向的长蜡烛(蜡烛之间的长度在顾问中可以调整,即在两个最低或最高蜡烛之间,取决于方向),如果相反方向的价格突破了最后一根蜡烛的最低或最高值,交易应该打开(文件所附图表中的示例图片情况)。顾问应该在每个合适的情况下打开交易,但由于某些原因,它只在几天之间的交易窗口打开交易。情况是这样的,谁也不难从程序员的角度出发,请帮助,修复错误。请看下面的EA代码以及附件中的文件。
最好先写出EA的部分内容,将发现的蜡烛标记在图表上,这样一切都会变得清晰。而下面这几行在你的情况下是不必要的。
请帮助社区...
从论坛上下载了卡尔曼滤波指标(源代码附后)。
图表上的一切都很好。
当我试图在专家顾问中读取它时,以下一行
iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
输出同样的大数字,显然与指标无关。

会是什么呢?
来自社区的帮助...
从论坛上下载了卡尔曼滤波指标(源代码附后)。
图表上的一切都很好。
当我试图在专家顾问中读取它时,以下一行
iValue=iCustom(NULL,timeframe,"Kalmanfilter", 4,1,1 ,0,1);
输出同样的大数字,显然与指标无关。
这可能是什么?
EMPTY_VALUE
指标缓冲区 中的空值
2147483647 (0x7FFFFFFFF)
EMPTY_VALUE
指标缓冲区 中的空值
2147483647 (0x7FFFFFFFF)
:)我已经找到了...
为什么会出现?
:)我已经找到了...
但为什么会出现呢?
该指标有2个数组,因为有2种颜色。当条形图上有第一种颜色的线时,第二种颜色的数组就等于EMPTY_VALUE。
iValue=iCustom(NULL,timeframe, "Kalmanfilter", 4,1,1,0,1)。
iValue = EMPTY_VALUE,那么1条杠上的线就是橙色。(因为数组blue = EMPTY_VALUE)
该指标有2个数组,因为有2种颜色。当条形图上有第一种颜色的线时,第二种颜色的数组就等于EMPTY_VALUE。
iValue=iCustom(NULL,timeframe, "Kalmanfilter", 4,1,1,0,1)。
iValue = EMPTY_VALUE,那么1条杠上的线就是橙色。(因为蓝色数组 = EMPTY_VALUE)
谢谢,尼古拉...
我从这两条线上取材。
然后我把它们合并成一个(留下一个缓冲区)。同样的结果。
我有这样一个问题。
该指标有一个变量draw_begin=500,即从结束时(从最新鲜的烛台开始)绘制图表的烛台数量。
而当我们使用iCustom()方法提取指标值时,这500个点是从哪个蜡烛图开始计算的?
为什么它很重要 - draw_begin不仅用于绘图,而且还参与指标的计算 ...