[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 54

 

什么样的常数:MA_TALKING_LONG , MA_TALKING_SHORT ?

你是如何申报的?

 
Vinin:

考虑到变量和数组的可见性


我把它们设置为全局...同样的错误。

常见问题

什么样的常数:MA_TALKING_LONG , MA_TALKING_SHORT ?

你如何宣布它们?

#define MA_TALKING_LONG                         0                             // Машки расположены к покупке
#define MA_TALKING_SHORT                        1                             // Машки расположены к продаже
#define MA_TALKING_FLAT                        -1                             // Машки указывают на флет
 

显示这个函数GetStateMa()的标题(声明)--问题就在那里

把它改成GetStateMa(int signal){}应该可以解决这个问题。

 
FAQ:

显示这个函数GetStateMa()的标题(声明)--问题就在那里

把它改为GetStateMa(int signal){}应该可以解决这个问题。

好吧,大意是这样的。这里的一位专家已经纠正了我的专家顾问,它运行良好。我的任务是只通过一个订单打开4个不同的信号,并对每个信号进行单独计算。他修复了我的专家顾问,但弄乱了它的逻辑。

我开始分析他的代码。他的写作很残酷,我已经在第二天就开始研究了。

之前是这样的。

在开始的时候。

   int signal[4];
   CalcSignals(signal);

   if (!Trade(signal))
      return (0);

而这里的功能是为了让大家清楚什么是什么。

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на двух соседних барах                                        |
//+-------------------------------------------------------------------------------------+
double GetCurAndPrevMA(int maPeriod, double& prevMA)
{
   prevMA = iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 1);
   return (iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 0));
}
//+-------------------------------------------------------------------------------------+
//| Получение положения машек между собой                                               |
//+-------------------------------------------------------------------------------------+
void CalcSignals(int& signal[])
{
   double ema365_1;
   double ema365_0 = GetCurAndPrevMA(365, ema365_1);

   for (int i = 0; i < 4; i++)
   {
      double ema1;
      double ema0 = GetCurAndPrevMA(g_maPeriod[i], ema1);
      signal[i] = SIGNAL_NO;

      if (ema1 < ema365_1 && ema0 > ema365_0)
         signal[i] = SIGNAL_BUY;
      if (ema1 > ema365_1 && ema0 < ema365_0)
         signal[i] = SIGNAL_SELL;
   }
}

一般来说,一个函数作为void,按照定义不应该返回任何东西,但却返回了数组 signal[i] 的一个元素 的值,这是一件很有趣的事情。

我不知道有经验的程序员是否经常使用这个?还是太多?

现在我正试图写出我需要的东西,看到该专家顾问中存在的技巧。因为我们那里不能没有数组。

 
Тhoz:

总之,大意是这样的。我的专家顾问,对我来说一直工作得很好,已经被一个专家纠正了。我的任务是通过4个不同的信号只开一个订单,每个信号都是单独产生和计算的。他修复了我的专家顾问,但弄乱了它的逻辑。

我开始分析他的代码。他的写作很残酷,我已经在第二天就开始研究了。

之前是这样的。

在开始的时候。

而这里的功能是为了让大家清楚什么是什么。

一般来说,一个函数作为void,按照定义不应该返回任何东西,但却返回了数组signal[i] 的一个元素的值,这是一件很有趣的事情。

我不知道有经验的程序员是否经常 使用这个?还是太多?

现在我正试图写出我需要的东西,看到该专家顾问中存在的技巧。因为我们那里不能没有数组。

经常使用,秘密在int& ,double& 中。
 
Mislaid:
它经常被使用,在int& ,double& 中的秘密。

我已经想明白了,但我认为这已经是一种变态了。那为什么要做一个无效 函数呢?这是不符合逻辑的。你需要返回一些东西...通过intdouble 类型的函数返回...

 
调试打印机时发生了一个错误。
2013.01.06 21:06:32     2011.11.28 00:20  Base150 EURUSD,M5: not enough stack for parameter

该怎么做?

 
hoz:

我已经想明白了,但我认为这已经是一种变态了。那为什么要做一个无效 函数呢?这是不符合逻辑的。

这是符合逻辑的。

这个函数不返回任何东西,它对传递给它的数组元素进行操作。

 
hoz:

这里是我的修改挂单功能。修改时,我设置了一个新的价格和一个新的止损。该功能部分工作,但由于某些原因,测试人员得到的错误是1。

我的函数写得正确吗?

如果((b_mod)&&(priceB > Ask))OrderModify(b_ticket,priceB,priceS,0,0,Brown);
if((s_mod) && (priceS < Bid))OrderModify(s_ticket,priceS,priceB,0,0,Brown)。


这里我们应该考虑MarketInfo(Symbol(),MODE_STOPLEVEL),即

priceB >= Ask+ MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

priceS < =Bid- MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

 
PapaYozh:

这是有道理的。

这个函数不返回任何东西,它对传递给它的数组元素进行操作。


因此,如果你将元素传递给一个doubleint 类型的函数,它也可以进行同样的操作,但没有任何变态的情况。为什么要使你的生活复杂化?