[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 605

 
VAM_ 08.06.2010 18:48编辑|删除

你如何将其静音?开车到了白色的膝盖处。有许多工具窗口(33)。没有EA。只有中间和Zup。我搞不清楚它是从哪里唱出来的。我恳请你帮忙。服务,事件已经。事件上的十字架并没有帮助。它还在唱歌,这个混蛋。

技术


椋鸟可以坐在火鸡里)))。

查看了代码--在任何地方都没有警报!该怎么做?
 
VAM_:

查看了代码--在任何地方都没有警报!该怎么做?

检查PlaySound()
 
我怎样才能使在执行过程中,当调用不同的函数时,给全局定义的变量分配不同的值,并且它可以保存这些值?

我需要为部分平仓的变量Part分配某些值,该变量是全局设置的,并将其作为参数传递给执行订单部分平仓的函数。这个变量是一个简单的除数。换句话说,如果该值最初设置为1,则该批交易被除以1,整个头寸被关闭。当交易条件发生变化时,这个变量会得到新的数值,可以等于比如1.5或2,然后持仓手数除以这个数字,并进行部分平仓。带有参数传递 的函数调用逐字看来是这样的。

// На глобальном уровне
double Part = 1;                           // на сколько разделить лот для частичного закрытия 
//..........

void ClosePartPosBySelect(double Part)    // Объявление функции
// ... тру-ля-ля ... тело функции ...
ll=NormalizeLot((OrderLots()/Part));      // рассчёт лота внутри функции
// ... дальнейший код ф-ции ...

//--------- Вызов функции частичного закрытия ---------
// Происходит из тела этой функции
void TrailingPositionsTLE(int MAGIC, int CloseMethod, double Part, int LastTrailing)
// таким образом:
if (CloseMethod==1)
            ClosePartPosBySelect(Part);

因此,尽管当函数被调用时 ...

TrailingPositionsTLE(561, 1, 2, 1);

...CloseMethod = 1(部分关闭)被设置,Part = 2 被明确指定,函数传递其初始值=1,这是全局设置的,而不是程序过程中指定的 Part 值(例如2)...

我怎样才能打败它呢?谢谢...

 
artmedia70: 当交易条件发生变化时,这个变量会得到新的数值,可以等于1.5或2,然后头寸的手数除以这个数字,进行部分平仓。


那么,当交易条件改变时,就改变你的部分变量。或者你把它们放在另一个EA中? 那么这个变量就必须一直被读取,即

int init()

{

.....

GlobalVariableSet("Part0",Part)。

.....

}

int start()

{

...

Part=StrToInteger(GlobalVariableGet("Part0"));

...

}

 
Roger:

那么,当交易条件改变时,就改变你的部分变量。或者你把它们放在另一个EA中? 那么这个变量就必须一直被读取,即

int init()

{

.....

GlobalVariableSet("Part0",Part)。

.....

}

int start()

{

...

Part=StrToInteger(GlobalVariableGet("Part0"));

...

}

不,该变量在同一个EA中。它是全局定义的,函数可以使用它,但它的值如果在函数内部改变,不会返回给外部函数。因此,这些函数看到它的值是最初设定的。如果我不在全局层面上设置它,那么函数就会在未设定的变量上交配......。
 

当你通过参数将一个变量传递给一个函数时,该变量是按值传递的,这意味着在函数中改变变量本身不会导致它被覆盖。
试着在参数名前插入"&",以引用的方式传递它。

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
VAM_:

查看了代码--在任何地方都没有警报!该怎么做?

在 "事件 "选项卡上,取消对 "允许 "的勾选。

 

亲爱的专业人士,你们好。

我真的想写一个EA,可以同时开出两个卖出和买入的订单。

然后在一定数量的点数(参数lim)之后,亏损的订单将被关闭。

而当价格跌破开仓以来的最高价时,盈利的订单将被关闭。

(一种虚拟的追踪止损)。

在痛苦中,我创造了这个,但它不起作用......。不起作用

请提出一些建议

int start()
  {
 
  double 
   max, min;                                            
  int b, s;
   if (Bid>max) max=Bid; 
    if (Ask<min) min=Ask;  
       if (OrdersTotal()>0)
       {                                   
           if ((max-Bid)>=lim*Point) 
           {                   
          OrderSelect(b,SELECT_BY_TICKET);                                  
          b=OrderClose(OrderTicket(),0.1,Bid,3,Blue);
          }
          
          
          if ((Ask-min)>=lim*Point)  
          {         
      OrderSelect(s,SELECT_BY_TICKET); 
      s=OrderClose(OrderTicket(),0.1,Ask,3,Red);
         }
}
else
{
  if (OrdersTotal()<1)
  {
 b=OrderSend(Symbol(),OP_BUY,0.1,Ask,5,0,0,"",5,0);
      
 s=OrderSend(Symbol(),OP_SELL,0.1,Bid,5,0,0,"",5,0); 
    }                           
   }
         return;

   return(0);
  }
 
artmedia70:
如何使其在运行时调用不同的函数时为全局定义的变量分配不同的值,并且它可以保存这些值?

两种方式

1. 在改变数值的函数中添加安培剂。

例如,void function( double& Part){}。

那么,当函数中的一个值被改变时,新的值将返回到调用的地方。

2.从函数的参数列表中删除该变量,因为该变量是全局定义的,它的值可以在代码的任何地方改变,而不需要把它作为一个参数传递...

但为了避免混淆,第1种变体更好,这样就不会想到这个变量是什么,因为这样的全局定义变量可能不止一个(而且在一个函数内)......


我浏览了一下帖子,答案已经给出了......

 
artmedia70:
但它的值,在函数内部改变,不会返回给外部函数。


显示函数本身。

如果是void ClosePartPosBySelect(double Part),则改成

空白的ClosePartPosBySelect()。

原因: