新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 818

 
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()*,则根本不会设置)

 
yiduwi:

OK)一个箭头,但通过这个条件,在M15和更高的地方,箭头被设置在21:00。

而如果你只使用+PeriodSeconds(PERIOD_M1)而不使用Period()*,则完全没有设置)

阅读文件 :-)Period()只返回当前周期的ID--为什么你要乘以它?

而不是PERIOD_M1(作为一个例子给出),将其传递给PeriodSeconds( Period() )- 然后得到当前周期的1个条形图中的多少秒。

 
kopeyka2:

"百慕大平行四边形 "的难题就这么多了

这对我来说很有效 :)甚至试着打开/关闭终端。

PS: Artyom, 你把关于五的问题移到了四的话题上...偶然发现的。

 
kopeyka2:


EMA线20 23.04.2019 00:00

当打开MT5时,在没有在线连接的情况下,立即出现 "array out.... "的信息。

误差不同,但总是存在。可以在网上复制,但更多地是在MT开机时出现。


这就是 "百慕大平行四边形 "的神秘之处

错误信息 显示发生错误的行号。从那里开始挖掘
 
Igor Zakharov:

这对我来说很有效 :)甚至试着打开/关闭终端。

PS: Artyom, 你把关于五的问题移到了四的话题上...偶然发现的。

这是一个共同的主题--我们在这里不仅为MQL4提供帮助,而且还为迁移到MQL5提供帮助。所以它是在主题中。

 
请告知如何在概念上编写EA代码,从文本.csv文件中获取交易价格。为什么会出现这个问题:在每个tick上,EA会将当前价格与.csv文件中的价格进行比较,如果我理解正确的话,这完全是通过fileopen函数 的一个循环读取的。但该文件包含去年的5000多行,每一行都有工具名称、价格、交易类型(买入/卖出)、记录日期、订单取消日期。在测试时,专家顾问将在每一个刻度上循环浏览文件中的所有行,以了解是否是下单的时候?或者,为了测试,我们应该让我们的EA在初始化过程中一次性设置所有订单的取消日期,并在实际交易中的每一个刻度上按其到期日检查实际订单?也许,这根本不是我所期望的。 可能从资源的角度来看,这是正确的,或者有其他的变体(例如,我们应该制作图形对象,并与之比较当前的价格,但似乎是同一个周期);我不明白,请指示。
 

你好!


我下载了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

谢谢你,我会把你的信息添加到我的行李中。

 
WinProject:
你能告诉我如何从概念上编写EA代码,从.csv文件中获取交易价格吗?为什么会出现这个问题:在每一个刻度上,EA会将当前价格与.csv文件中的价格进行比较,如果我理解正确的话,该文件完全由fileopen函数 读取。但该文件包含去年的5000多行,每一行都有工具名称、价格、交易类型(买入/卖出)、记录日期、订单取消日期。在测试时,专家顾问会在每个tick上循环查看所有文件行,以了解是否是下单的时候?或者,为了测试,我们应该让我们的EA在初始化过程中一次性设置所有订单的取消日期,并在实际交易中的每一个刻度上按其到期日检查实际订单?也许,这根本不是我所期望的。 可能从资源的角度来看,这是正确的,或者有其他的变体(例如,我们应该制作图形对象,并与之比较当前的价格,但似乎是同一个周期);我不明白,请指示。

通常情况下,人们试图尽可能少地读(写)到该文件。

对于你的任务,最好是在加载时将数据读入一个数组(尽管可能更方便地读入一个结构),然后将当前的价格和时间值与数组的值进行比较。

SZY:在代码库中搜索 "文件 "或 "csv "曾经是这种现成的专家顾问 - 从文件中读取交易的数据

 
Igor Makanu:

通常情况下,人们试图尽可能少地读(写)到该文件。

对于你的任务,最好是在加载时将数据读入一个数组(尽管可能更方便地读入一个结构),然后将当前的价格和时间值与数组的值进行比较。

ZS:在代码库中搜索 "文件 "或 "csv "曾经是这种现成的EA--从文件中读取数据进行交易。

非常感谢你,得到了我想要的答案。