[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 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){}に変更すると直るはずです。

とにかく、ここが肝心なところです。ある専門家が私のExpert Advisorを修正したところ、問題なく動作するようになりました。私の仕事は、4つの異なるシグナルに対して1つの注文を出すことで、それぞれのシグナルは別々に生成・計算されました。Expert Advisorを直してくれたが、ロジックがめちゃくちゃになった。

私は彼のコードを解析し始めた。彼の文章は残酷だ、2日目から調べている。

以前はこんな感じでした。

を開始しました。

   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] の要素の値を返しているのはおかしな話です。

経験豊富なプログラマーはよく使うのでしょうかね?それとも、やりすぎ?

今、私はそのExpert Advisorに存在するトリックを見て、必要なものを書こうとしています。そこでは、アレイがないとやっていけないからです。

 
Тhoz:

とにかく、ここが肝心なところです。今まで問題なく使えていたExpert Advisorが、プロの手によって修正されました。私の仕事は、4つの異なるシグナルによって1つの注文を開くことであり、それぞれのシグナルは別々に生成され計算されました。Expert Advisorを直してくれたが、ロジックがめちゃくちゃになった。

私は彼のコードを解析し始めた。彼の文章は残酷だ、2日目から調べている。

以前はこんな感じでした。

を開始しました。

そして、何が何なのかを明確にするための機能がここにあります。

一般に、voidとしての 関数は定義上何も返さないはずなのに、それにもかかわらず配列signal[i] の要素の値を返しているのはおかしな話です。

経験豊富なプログラマーはよく 使うのでしょうかね?それとも、やりすぎ?

今、私はそのExpert Advisorに存在するトリックを見て、必要なものを書こうとしています。そこでは、アレイがないとやっていけないからです。

int& ,double&の 秘密、よく使われます。
 
Mislaid:
よく使われる、int& ,double&の 秘密。

それはもう、曲解しているとしか思えません。では、なぜvoid 関数を作るのでしょうか?論理的ではないのです。何かを返す必要がある...intdouble 型の関数で返す...。

 
プリンターのデバッグ時にエラーが発生しました。
2013.01.06 21:06:32     2011.11.28 00:20  Base150 EURUSD,M5: not enough stack for parameter

どうすればいいのか?

 
hoz:

それはもう、曲解しているとしか思えません。では、なぜvoid 関数を作るのでしょうか?論理的ではないのです。

論理的である。

この関数は何も返さず、渡された配列の要素に対して操作を行う。

 
hoz:

以下は、私の修正した保留注文の機能です。修正するときは、新しい価格と新しいストップロスを設定します。この関数は部分的に動作しますが、なぜかテスターではエラー1が発生します。

私の関数は正しく書かれていますか?

if((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)*ポイント

priceS < =Bid- MarketInfo(Symbol(),MODE_STOPLEVEL)*ポイント

 
PapaYozh:

これなら納得です。

この関数は何も返さず、渡された配列の要素に対して操作します。


そのため、double 型やint 型の関数に要素を渡すと、その関数も曲解することなく、同じ操作を行うことができる。なぜ人生を複雑にするのか?