新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 818 1...811812813814815816817818819820821822823824825...1953 新评论 yiduwi 2019.04.23 10:16 #8171 Maxim Kuznetsov: if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) { // время time[i] попало внутрь бара открытого в time_m1 } OK)一个箭头,但通过这个条件,在M15和更高的地方,箭头被设置在21:00。 if(time[i]>=StringToTime("2019.04.22 20:55:00") && time[i]<StringToTime("2019.04.22 20:55:00")+Period()*PeriodSeconds(PERIOD_M1)) 而如果你只用+PeriodSeconds(PERIOD_M1)而不用Period()*,则根本不会设置) Maxim Kuznetsov 2019.04.23 10:50 #8172 yiduwi:OK)一个箭头,但通过这个条件,在M15和更高的地方,箭头被设置在21:00。 而如果你只使用+PeriodSeconds(PERIOD_M1)而不使用Period()*,则完全没有设置)阅读文件 :-)Period()只返回当前周期的ID--为什么你要乘以它? 而不是PERIOD_M1(作为一个例子给出),将其传递给PeriodSeconds( Period() )- 然后得到当前周期的1个条形图中的多少秒。 Igor Zakharov 2019.04.23 12:03 #8173 kopeyka2: "百慕大平行四边形 "的难题就这么多了这对我来说很有效 :)甚至试着打开/关闭终端。 PS: Artyom, 你把关于五的问题移到了四的话题上...偶然发现的。 Maxim Kuznetsov 2019.04.23 12:08 #8174 kopeyka2: EMA线20 23.04.2019 00:00 当打开MT5时,在没有在线连接的情况下,立即出现 "array out.... "的信息。 误差不同,但总是存在。可以在网上复制,但更多地是在MT开机时出现。 这就是 "百慕大平行四边形 "的神秘之处错误信息 显示发生错误的行号。从那里开始挖掘 Artyom Trishkin 2019.04.23 12:10 #8175 Igor Zakharov:这对我来说很有效 :)甚至试着打开/关闭终端。 PS: Artyom, 你把关于五的问题移到了四的话题上...偶然发现的。这是一个共同的主题--我们在这里不仅为MQL4提供帮助,而且还为迁移到MQL5提供帮助。所以它是在主题中。 WinProject 2019.04.23 17:02 #8176 请告知如何在概念上编写EA代码,从文本.csv文件中获取交易价格。为什么会出现这个问题:在每个tick上,EA会将当前价格与.csv文件中的价格进行比较,如果我理解正确的话,这完全是通过fileopen函数 的一个循环读取的。但该文件包含去年的5000多行,每一行都有工具名称、价格、交易类型(买入/卖出)、记录日期、订单取消日期。在测试时,专家顾问将在每一个刻度上循环浏览文件中的所有行,以了解是否是下单的时候?或者,为了测试,我们应该让我们的EA在初始化过程中一次性设置所有订单的取消日期,并在实际交易中的每一个刻度上按其到期日检查实际订单?也许,这根本不是我所期望的。 可能从资源的角度来看,这是正确的,或者有其他的变体(例如,我们应该制作图形对象,并与之比较当前的价格,但似乎是同一个周期);我不明白,请指示。 Vladimir Starikov 2019.04.23 19:09 #8177 你好! 我下载了MQL4编程视频教程。 我根据课程内容创建了一个专家顾问。 但当我在交易时,它就不起作用了。 我在编译的时候没有任何错误。 由于我的旅程刚开始,到目前为止很难找到错误。 我请求帮助,如果有人能帮助我。 谢谢你! 代码。 /+----Входные параметры----------------+外部inttern BarCount=10。外部int int HourStart=14;外来的双倍Lots=0.1。外来的int StopLoss=120。外来int TakeProfit=300。外来的int Magic=1456。//+------------Глобальные переменные----------------+double minprice=999999,mp,maxprice=-99999,SL,TP;int票。//+------------------------------------------------------------------+//|专家初始化功能|//+------------------------------------------------------------------+int OnInit(){return(INIT_SUCCEEDED)。}//+------------------------------------------------------------------+//|专家去初始化函数|//+------------------------------------------------------------------+空白的OnDeinit(const int reason)。{}//+------------------------------------------------------------------+//|专家勾选功能|//+------------------------------------------------------------------+空白的OnTick(){GetMinPrice()。GetMaxPrice()。如果(TimeHour(TimeCurrent())==HourStart){如果(BuyLimitCount()&& BuyCount() ==0){SL=NormalizeDouble(minprice-StopLoss*Point,5)。TP=NormalizeDouble(minprice+TakeProfit*Point,5)。ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,minprice,5,SL,TP,"" ,Magic,0,Blue)。如果(ticket<0)Print("Failed to open buy limit");}如果(SellLimitCount()&& SellCount()==0){SL=NormalizeDouble(maxprice+StopLoss*Point,5)。TP=NormalizeDouble(maxpric-TakeProfit*Point,5)。ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,maxprice,5,SL,TP,"" ,Magic,0,Red);如果(ticket<0)Print("打开卖出限额失败")。}}Comment("MinPrice: "+DoubleToStr(minprice,5)+"/n "+"MaxPrice: "+DoubleToStr(maxprice,5))。}//+在barcount条数上定义最低价格的功能。空白的GetMinPrice()。{for(int i=0; i<BarCount; i++){mp=iLow(Symbol(),PERIOD_CURRENT,i)。如果(mp<minprice)minprice=mp。}返回。}//+确定最高价格的功能,在条形计数的基础上。空白的GetMaxPrice()。{for(int i=0; i<BarCount; i++){mp=iHigh(Symbol(),PERIOD_CURRENT,i)。如果(mp>maxprice)maxprice=mp。}返回。}//+买入的未平仓限价单数量的函数int BuyLimitCount(){int count=0。for(int i=OrdersTotal()-1; i>=0; i--){如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUYLIMIT){count++。}}return(count)。}//+-未平仓限价单数量的函数销量上限(SellLimitCount)。{int count=0。for(int i=OrdersTotal()-1; i>=0; i--){如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELLLIMIT){count++。}}return(count)。}//+公开市场预订订单 数量的函数int BuyCount(){int count=0。for(int i=OrdersTotal()-1; i>=0; i--){如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY){count++。}}return(count)。}//+-公开市场销售订单数量的函数int SellCount(){int count=0。for(int i=OrdersTotal()-1; i>=0; i--){如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL){count++。}}return(count)。}//+------------------------------------------------------------------+//+------------------------------------------------------------------+ Any questions from newcomers 初学者的问题 MQL4 MT4 MetaTrader 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. Roni Iron 2019.04.23 19:32 #8178 瑟里奇29 谢谢你,我会把你的信息添加到我的行李中。 Igor Makanu 2019.04.23 19:58 #8179 WinProject: 你能告诉我如何从概念上编写EA代码,从.csv文件中获取交易价格吗?为什么会出现这个问题:在每一个刻度上,EA会将当前价格与.csv文件中的价格进行比较,如果我理解正确的话,该文件完全由fileopen函数 读取。但该文件包含去年的5000多行,每一行都有工具名称、价格、交易类型(买入/卖出)、记录日期、订单取消日期。在测试时,专家顾问会在每个tick上循环查看所有文件行,以了解是否是下单的时候?或者,为了测试,我们应该让我们的EA在初始化过程中一次性设置所有订单的取消日期,并在实际交易中的每一个刻度上按其到期日检查实际订单?也许,这根本不是我所期望的。 可能从资源的角度来看,这是正确的,或者有其他的变体(例如,我们应该制作图形对象,并与之比较当前的价格,但似乎是同一个周期);我不明白,请指示。通常情况下,人们试图尽可能少地读(写)到该文件。 对于你的任务,最好是在加载时将数据读入一个数组(尽管可能更方便地读入一个结构),然后将当前的价格和时间值与数组的值进行比较。 SZY:在代码库中搜索 "文件 "或 "csv "曾经是这种现成的专家顾问 - 从文件中读取交易的数据 WinProject 2019.04.23 20:08 #8180 Igor Makanu:通常情况下,人们试图尽可能少地读(写)到该文件。 对于你的任务,最好是在加载时将数据读入一个数组(尽管可能更方便地读入一个结构),然后将当前的价格和时间值与数组的值进行比较。 ZS:在代码库中搜索 "文件 "或 "csv "曾经是这种现成的EA--从文件中读取数据进行交易。非常感谢你,得到了我想要的答案。 1...811812813814815816817818819820821822823824825...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
if (time[i]>=time_m1 && time[i]<time_m1+PeriodSeconds(PERIOD_M1) {
// время time[i] попало внутрь бара открытого в time_m1
}
OK)一个箭头,但通过这个条件,在M15和更高的地方,箭头被设置在21:00。
而如果你只用+PeriodSeconds(PERIOD_M1)而不用Period()*,则根本不会设置)
OK)一个箭头,但通过这个条件,在M15和更高的地方,箭头被设置在21:00。
而如果你只使用+PeriodSeconds(PERIOD_M1)而不使用Period()*,则完全没有设置)
阅读文件 :-)Period()只返回当前周期的ID--为什么你要乘以它?
而不是PERIOD_M1(作为一个例子给出),将其传递给PeriodSeconds( Period() )- 然后得到当前周期的1个条形图中的多少秒。
"百慕大平行四边形 "的难题就这么多了
这对我来说很有效 :)甚至试着打开/关闭终端。
PS: Artyom, 你把关于五的问题移到了四的话题上...偶然发现的。
EMA线20 23.04.2019 00:00
当打开MT5时,在没有在线连接的情况下,立即出现 "array out.... "的信息。
误差不同,但总是存在。可以在网上复制,但更多地是在MT开机时出现。
这就是 "百慕大平行四边形 "的神秘之处
这对我来说很有效 :)甚至试着打开/关闭终端。
PS: Artyom, 你把关于五的问题移到了四的话题上...偶然发现的。
这是一个共同的主题--我们在这里不仅为MQL4提供帮助,而且还为迁移到MQL5提供帮助。所以它是在主题中。
你好!
我下载了MQL4编程视频教程。
我根据课程内容创建了一个专家顾问。
但当我在交易时,它就不起作用了。
我在编译的时候没有任何错误。
由于我的旅程刚开始,到目前为止很难找到错误。
我请求帮助,如果有人能帮助我。
谢谢你!
代码。
/+----Входные параметры----------------+
外部inttern BarCount=10。
外部int int HourStart=14;
外来的双倍Lots=0.1。
外来的int StopLoss=120。
外来int TakeProfit=300。
外来的int Magic=1456。
//+------------Глобальные переменные----------------+
double minprice=999999,mp,
maxprice=-99999,SL,TP;
int票。
//+------------------------------------------------------------------+
//|专家初始化功能|
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED)。
}
//+------------------------------------------------------------------+
//|专家去初始化函数|
//+------------------------------------------------------------------+
空白的OnDeinit(const int reason)。
{
}
//+------------------------------------------------------------------+
//|专家勾选功能|
//+------------------------------------------------------------------+
空白的OnTick()
{
GetMinPrice()。
GetMaxPrice()。
如果(TimeHour(TimeCurrent())==HourStart)
{
如果(BuyLimitCount()&& BuyCount() ==0)
{
SL=NormalizeDouble(minprice-StopLoss*Point,5)。
TP=NormalizeDouble(minprice+TakeProfit*Point,5)。
ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,minprice,5,SL,TP,"" ,Magic,0,Blue)。
如果(ticket<0)
Print("Failed to open buy limit");
}
如果(SellLimitCount()&& SellCount()==0)
{
SL=NormalizeDouble(maxprice+StopLoss*Point,5)。
TP=NormalizeDouble(maxpric-TakeProfit*Point,5)。
ticket=OrderSend(Symbol(),OP_SELLLIMIT,Lots,maxprice,5,SL,TP,"" ,Magic,0,Red);
如果(ticket<0)
Print("打开卖出限额失败")。
}
}
Comment("MinPrice: "+DoubleToStr(minprice,5)+"/n "+"MaxPrice: "+DoubleToStr(maxprice,5))。
}
//+在barcount条数上定义最低价格的功能。
空白的GetMinPrice()。
{
for(int i=0; i<BarCount; i++)
{
mp=iLow(Symbol(),PERIOD_CURRENT,i)。
如果(mp<minprice)
minprice=mp。
}
返回。
}
//+确定最高价格的功能,在条形计数的基础上。
空白的GetMaxPrice()。
{
for(int i=0; i<BarCount; i++)
{
mp=iHigh(Symbol(),PERIOD_CURRENT,i)。
如果(mp>maxprice)
maxprice=mp。
}
返回。
}
//+买入的未平仓限价单数量的函数
int BuyLimitCount()
{
int count=0。
for(int i=OrdersTotal()-1; i>=0; i--)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUYLIMIT)
{
count++。
}
}
return(count)。
}
//+-未平仓限价单数量的函数
销量上限(SellLimitCount)。
{
int count=0。
for(int i=OrdersTotal()-1; i>=0; i--)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELLLIMIT)
{
count++。
}
}
return(count)。
}
//+公开市场预订订单 数量的函数
int BuyCount()
{
int count=0。
for(int i=OrdersTotal()-1; i>=0; i--)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
{
count++。
}
}
return(count)。
}
//+-公开市场销售订单数量的函数
int SellCount()
{
int count=0。
for(int i=OrdersTotal()-1; i>=0; i--)
{
如果(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
{
count++。
}
}
return(count)。
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
瑟里奇29
谢谢你,我会把你的信息添加到我的行李中。
你能告诉我如何从概念上编写EA代码,从.csv文件中获取交易价格吗?为什么会出现这个问题:在每一个刻度上,EA会将当前价格与.csv文件中的价格进行比较,如果我理解正确的话,该文件完全由fileopen函数 读取。但该文件包含去年的5000多行,每一行都有工具名称、价格、交易类型(买入/卖出)、记录日期、订单取消日期。在测试时,专家顾问会在每个tick上循环查看所有文件行,以了解是否是下单的时候?或者,为了测试,我们应该让我们的EA在初始化过程中一次性设置所有订单的取消日期,并在实际交易中的每一个刻度上按其到期日检查实际订单?也许,这根本不是我所期望的。 可能从资源的角度来看,这是正确的,或者有其他的变体(例如,我们应该制作图形对象,并与之比较当前的价格,但似乎是同一个周期);我不明白,请指示。
通常情况下,人们试图尽可能少地读(写)到该文件。
对于你的任务,最好是在加载时将数据读入一个数组(尽管可能更方便地读入一个结构),然后将当前的价格和时间值与数组的值进行比较。
SZY:在代码库中搜索 "文件 "或 "csv "曾经是这种现成的专家顾问 - 从文件中读取交易的数据
通常情况下,人们试图尽可能少地读(写)到该文件。
对于你的任务,最好是在加载时将数据读入一个数组(尽管可能更方便地读入一个结构),然后将当前的价格和时间值与数组的值进行比较。
ZS:在代码库中搜索 "文件 "或 "csv "曾经是这种现成的EA--从文件中读取数据进行交易。
非常感谢你,得到了我想要的答案。