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

 
Artyom Trishkin:

没有人说你是 "傻瓜",这不是真的。但是,同样是4-6行代码,你知道,会引起困惑--因为如果一个人学会了什么,他一定已经在尝试什么,他已经试着写了什么,并且清楚地看到在4-6行中,它不适合。

向我们展示你试图做的事情--让我们试着去理解。

我可以提供一个替代的、简化的变体--不通过ticks来寻找价格水平的跨越,而是通过MA(1)来寻找--那么条形图1的MA和条形图0的MA将被用作必要水平跨越的指标。


很抱歉长时间没有回应。我很高兴它变成了一个单纯的迷惑,我变得很慌张。至于我的问题,我设法写了一个代码,当它达到价格时,将打开一个正常的订单,并且在越过该价格后不会再打开。但我是这样做的。
双倍b=5。
int start()
{
双重出价=出价。
如果(bid==0.7777 &&b==5)
{
b=b+1。
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0)。
}

返回。

我已经明白,这是一个 "幼儿园 "的方法,不能使用,因为有太多的细微差别,根本不实用。你能告诉我在哪种情况下这段代码不能工作,或者你如何改变它以使其工作?P.s. "在MA(1)上寻找它--那么Bar 1上的MA和Bar 0上的MA将为你提供一个跨越你想要的水平的指标。"我真的不知道这是怎么回事,所以我可以暂时搁置,直到我研究了更多的材料。


 
maxon777:

很抱歉花了这么长时间来回复。我很高兴结果只是一个迷惑,我变得很慌张。至于我的问题,我设法写了一个代码,当它达到价格时,将打开一个正常的订单,在越过这个价格后,它将不再打开。但我是这样做的。
双倍b=5。
int start()
{
双重出价=出价。
如果(bid==0.7777 &&b==5)
{
b=b+1。
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 0,0,0)。
}

返回。

我已经明白,这是一个 "幼儿园 "的方法,不能使用,因为有太多的细微差别,根本不实用。你能告诉我在哪种情况下这段代码不能工作,或者你如何改变它以使其工作?P.s. "在MA(1)上寻找它--那么Bar 1上的MA和Bar 0上的MA将为你提供一个跨越你想要的水平的指标。"我真的不知道这是怎么回事,所以这可以暂时推迟,直到我学到更多的材料。



在两个数字相等的情况下进行比较,类型为双数,这不是一个好的操作。

比如,NormalizeDouble(A - B , 5)==0,我想。

 

大家晚上好!

请帮助,我找不到代码中的错误。

我需要确定我的交易对是否有利润,如果有,我不应该继续交易并关闭EA。

放置一个待定订单。

问题是,当我运行EA时,它立即将其删除,即ExpertRemove() 触发,尽管我还没有盈利。

下面是一些代码。

空白的OnTick()

{

如果(TakeProfit()>0)

{

ExpertRemove()。

}

如果(TakeProfit()<=0)

{

在这里,我们把停顿

}

}

//+------------------------------------------------------------------+

////////,看是否有任何交易在这里关闭,并获得利润!!!!!!!!。

int TakeProfit()。

{

int count = 0。

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

如果(OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderProfit() >0.0)

{

count ++;

}

}

返回(计数)。




 
yaaarik777:

大家晚上好!

请帮助,我找不到代码中的错误。

我需要确定我的交易对是否有利润,如果有,我不应该继续交易并关闭EA。

放置一个待定订单。

问题是,当我运行EA时,它立即将其删除,即ExpertRemove()触发,尽管我还没有盈利。

下面是代码的一部分。

////////寻找是否有...以利润关闭!!!!!!!!

int TakeProfit()。

{

int count = 0。

for(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

如果(OrderSelect (i,SELECT_BY_POS,MODE_HISTORY) == true && OrderMagicNumber() == Magic && OrderSymbol() == Symbol() && OrderProfit() >0.0)

{

count ++;

}

}

返回(计数)。

你要用这个代码寻找什么?

它看的是整个历史的利润,而不完全是一个平仓的 利润,如果整个历史是正数,那么你在任何情况下都会得到OrderProfit()>0的结果。

 
Vitaly Muzichenko:

你要用这个代码寻找什么?

它寻找的是整个历史的利润,而不是具体的平仓头寸,如果整个历史是正数,那么在任何情况下,你的输出都会得到OrderProfit()>0的结果。


我怎样才能使它不是通过整个历史,而是通过从顾问工作的那一刻起的封闭位置来搜索呢?

我不明白。

我不明白。

 
yaaarik777:


我怎样才能让它不是搜索整个EA,而是搜索从EA工作时起就关闭的那些?

我不明白。

谢谢你的帮助。

找到最后的平仓,即晚于EA启动时间的平仓,或这一天的最后平仓,并查看其利润:OrderProfit()+OrderComission()+OrderSwap()
 
yaaarik777:


我如何让它不搜索整个EA,而是从EA工作的那一刻起搜索关闭的EA?

我不明白。

谢谢你的帮助。


你如何确定EA何时在工作?

这是我的建议。

double TakeProfit ()
{
 datetime момент работы советника=0;
 double p=0;
  for(int i=OrdersHistoryTotal()-1; i>=0; i--){
    if (OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)){
       if (OrderMagicNumber() == Magic){
          if(OrderSymbol () == Symbol ()){
            if(момент работы советника<OrderCloseTime()){
               p+=OrderProfit()+OrderCommission()+OrderSwap();
            }
          }
        }
      }
    }
 return(p);
}
   
 
Artyom Trishkin:
找到最后一个平仓,这个平仓晚于EA开始的时间,或者是这一天的最后一个平仓,看看它的利润:OrderProfit()+OrderComission()+OrderSwap()。


为什么我需要它搜索所有晚于EA开始时间的关闭头寸?

我想让它从EA的开始搜索,而不是之前。

 
yaaarik777:


为什么要晚于EA的启动时间? 我已经让它寻找所有的平仓。

你需要它从EA的开始搜索,而不是之前。


如果你仔细想想,"从开始到结束 "是在EA的开始时间之后;)

不要懒得使用耳际风琴。

 

你好。

请帮助我将文件中的数据显示为柱状图。

在文件 "file.txt "中,一个日期对应着一个数字。

我从文件中接收数据并将其打印出来。
原因: