初学者的问题 MQL5 MT5 MetaTrader 5 - 页 494

 
Nickolay72:
直到昨天,我的EA每次只开了一个订单,下一个订单在我下单前不会打开。 现在,如何使我的EA在前一个条形图在通道上方(下方)打开订单?
 if (CountTrades()==0) CheckForOpen();
   else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

如果你分析这个代码片段,那么,根据这段代码,如果CountTrades() 函数返回0,条件 if(CountTrades()==0) CheckForOpen()将被执行,函数CheckForOpen() 将被调用。在下一个交易日,如果订单已经打开,CountTrades()函数应该返回1,然后其他条件 得到满足。

....  
else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

如果出现CountTrades()<max_trades,CheckForOpen() 函数将被再次执行。根据代码, max_trades变量的值 等于3。因此,你将有4个订单开放。

如果EA不能正确开单,那么请检查逻辑,在函数CheckForOpen()中,你定义了开仓 的条件。而且还要检查时间条件,如果(CurrTime < EaStartTime || CurrTime >= EaEndTime)。如果我是你,我会使用函数 if (TimeHour(TimeCurrent())= 开始时间 && TimeMinute(TimeCurrent())= 开始分钟)。小时和分钟被设置在int或uint类型的变量中。

 
Artyom Trishkin:
如果公开栏1号高于/低于通道。
该死的,我刚刚看到我在通道下限 附近有一笔交易,我只是复制了订单,没有将底部修正为顶部,我将尝试修正后的版本)。
//-----Ставим ордер на покупку.
 if(PriceCurrentOpen<PriceLow&&PriceCurrentOpen<PriceCurrentClose&&SignalCurrent<MacdCurrent&&SignalMAPrevious<SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_BUY,Lots,Ask,slippage,0,0,"5",magic,0,Blue);
   if(ticket>0)
    return; 
 }
//-----Ставим ордер на продажу.
 if(PriceCurrentOpen>PriceLow&&PriceCurrentOpen>PriceCurrentClose&&SignalCurrent>MacdCurrent&&SignalMAPrevious>SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_SELL,Lots,Bid,slippage,0,0,"5",magic,0,Red);
   if(ticket>0)
    return;

	          
 
Vitalii Ananev:

因此,你将有4个订单开放。

如果EA不能正确打开订单,那么请检查逻辑,你在函数CheckForOpen()中指定必须打开头寸 的条件。而且还要检查时间条件,如果(CurrTime < EaStartTime || CurrTime >= EaEndTime)。如果我是你,我会使用函数 if (TimeHour(TimeCurrent())= 开始时间 && TimeMinute(TimeCurrent())= 开始分钟)。小时和分钟被设置在int或uint类型的变量中。

我想开3个订单,但这不是我的初衷;我想最多开3个,但每一个新栏都有一个订单。

时间上没有问题,它在严格规定的时间段内工作。

 
Nickolay72:

我希望最多有三个订单,但每个新的条形图都有一个订单。 有些时候,连续的几个条形图都会发出积极的信号。

时间上没有问题,它在严格规定的时间段内工作。

条件是:如果最后一次开仓的条形图不等于零,并且开仓 的数量少于允许的最大数量,那么就可以开一个新的仓位。
 

卡尔普托夫 2016.01.13_05:14am.你好,卡尔普托夫先生!我在MQL4中写道

.mq4文件,得到了.ex4文件。但它在策略测试器中不起作用。最后

是为MT4写一个EA。在MQL5中,我得到了.mq5和

.ex5文件。和.ex5文件打开的交易。第四个版本与

第四版与第五版有一些区别,我还不是一个好的MQL程序员,这就是为什么我得到的结果不好。

我现在还不明白是什么问题,测试器的日志文件已经保存了。Я

我将尝试翻译它。同时,我希望你能告诉我

程序代码有什么问题?在你回答的同时,我将尝试

来解决这个问题。
我很惊讶地发现,在我的第四个版本的编辑器中,有一个选项可以写入

我正准备写。但是我没有写。我在此附上

测试员的日志文件和一张截图。05:30 MSC。测试员的日志卡尔普托夫卡尔普托夫

附加的文件:
20160112.log  7 kb
 
Николай Никитюк:

莫斯科时间2016.01.13_05:14am。你好,卡尔普托夫先生!我已经在MQL4中写了

.mq4文件,我得到一个.ex4文件。但它在策略测试器中不起作用。

为什么你把代码贴成了图片?))谁会理解他们?
 
Николай Никитюк:


请在帖子中正确插入你的代码:在论坛中正确插入代码
 

我在哪里可以找到错误描述?

我不明白编译器不喜欢什么,为什么它警告我?

检查运算符的优先级是否可能出错;使用括号来澄清优先级


if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)
               calcBarX++;

和这里

表达没有效果


         for(calc_day;calc_day>0; calc_day--)
           {
            if(iLow(Symbol(),TF_3Day,calc_day)<iLow(Symbol(),TF_3Day,calc_day+1)) calc_day_OK++;
            else break;
           }

 
-Aleks-:

我在哪里可以找到错误描述?

我不明白编译器不喜欢什么,为什么它警告我?

实际上,除了错误文本,编译器还告诉你发生错误的代码行的编号和它在行中的位置。
 
Karputov Vladimir:
实际上,除了错误文本外,编译器还报告发现错误的代码行的编号以及它在该行中的位置。
这是这样的--在第一种情况下,在依次的比较符号上--显然在 "或 "之间你必须放一个括号,而在第二种情况下,它在写有逻辑表达式 的括号上发誓。