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

 
artmedia70:

朋友们,我不明白为什么它不起作用。

如果在循环中发现一个带有魔法5100的位置,循环必须进入一个新的迭代。

...但这并没有发生,被选中的具有5100魔数的头寸开始作为损失最大的头寸参与进一步的计算......。

这是锁定的一个...然后,相应地,另一个锁定的人被设置在它上面......

帮助我了解这只狗藏在哪里...

就这些了,谢谢你,不需要。我自己找到了那条狗...
 

到目前为止,我一直在使用产生单一输出值的简单函数。

该函数能否输出几个变量的值?例如:Time_1, High_1, Low_1,Time_2, High_2, Low_2。

谢谢你!

 
chief2000:

一个函数可以输出几个变量的值吗?


一个函数只能返回一个参数,但没有人禁止一个函数与start()函数之外声明的变量(全局变量)一起工作。
 
DDFedor:

该函数只能返回一个参数,但没有人禁止该函数与start()函数之外声明的变量(全局变量)一起工作。


让我们举一个简单的例子 - 如果[MA_1>=Ma_2],你应该返回Time_1, High_1, Low_1的值。

为发生交叉的栏位。start()中的这个模块是

 
chief2000:


对吗?


但必须考虑到,这些变量的值在函数被再次调用之前是相关的。因此,这些变量必须在函数被调用 后立即使用。然后这些变量将包含这个函数调用的计算值。
 
DDFedor:

但必须考虑到,这些变量的值在函数被再次调用之前是相关的。因此,这些变量必须在函数被调用后立即使用。然后这些变量将包含这个函数调用的计算值。

是的,这是可以理解的。谢谢你!

 
chief2000:

到目前为止,我所做的是简单的函数,其结果是一个单一的输出值。

该函数能否输出几个变量的值?例如:Time_1, High_1, Low_1,Time_2, High_2, Low_2。

又是什么阻止了你在函数声明中使用参数通过引用 而不是通过值传递?例子(语言基本要素/变量/正式参数)。

可以通过引用来传递参数。在这种情况下,对这些参数的修改将影响到以引用方式传递的被调用函数中的相应变量。你不能通过引用传递数组的元素。参数只能在单个模块的范围内以引用方式传递,这种机会不提供给库函数。为了指定一个参数是通过引用传递的,必须在数据类型后面加上&修饰语。

例子。

void func(int& x, double& y, double& z[]) { double calculated_tp; ... for(int i=0; i<OrdersTotal(); i++) { if(i==ArraySize(z)) break; if(OrderSelect(i)==false) break; z[i]=OrderOpenPrice() ; } x=i; y=calculated_tp; }

数组也可以通过引用来传递,所有的变化都会反映在原来的数组中。与简单参数不同,数组也可以通过引用传递给库函数。

请注意,func()是无效类型的,但它的执行将改变它外面声明的所有三个参数,因为这三个参数都是用&修饰符提供的。包括,顺便说一下,z[]阵列完全改变了。
 
Mathemat:

又是什么阻止了你在函数声明中使用通过引用而不是通过值传递参数?例子(语言基本要素/变量/正式参数)。

请注意,func()函数的类型是void,但它的执行将改变它外面声明的所有三个参数,因为这三个参数都是用&修饰符提供的。包括,顺便说一下,z[]阵列完全改变了。

非常感谢您!

 
如何做到这一点!?如果最后一笔交易无利可图,你就需要换手,如果没有,你就不换)?
 
rovlent:
如何使如此!如果最后一笔交易是无利可图的,我们应该换手,如果不是--不是?)


例如,像这样

//=================================================
// Расчет размера позиции
//==================================================
double CalculateLots(){
   double Res=dLots;
   bool bProfit=true;
   int PrevTime=-1;
   double tmpLots;
   for (int i=0;i<OrdersHistoryTotal();i++){
      if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
      if (OrderSymbol()!=Symbol())                    continue;
      if (OrderMagicNumber()!=MAGIC)                  continue;
      if (OrderCloseTime()<PrevTime)                  continue;
      PrevTime=OrderCloseTime();
      if (OrderProfit()>0) bProfit=true; else bProfit=false;
      tmpLots=OrderLots();
   }
   double Lots_Step=MarketInfo(Symbol(), MODE_LOTSTEP);
   if (!bProfit) Res=tmpLots+Lots_Step;
   return(Res);
}

按DC设定的步骤增加。虽然变体可能不同

dLots - 默认位置大小

原因: