Meta Traderでのスプレッド取引 - ページ 144

 
Scorp1978 >>:

rid спасибо хорошая идея (от тиков придется тогда отказываться), фильтр от сильных убыточных движений ты имеешь ввиду "если сумарный профит меньше чего то, то закрыть все позиции".......

いいえ、最初のエントリである「/if」のことです。
//最初のローソクの大きさが設定値より大きい場合、取引不可..."

 
皆さん、こんにちは。日を休日と考えるすべての人に、ハッピーホリデーを!
//---------------------------------------
ある疑問が生じました。以下は、直近のNBarsの 商品間の平均スプレッドを出力する(計算する)関数です。
 double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars)
{
   int k;
   double N = 0;
   double Sum = 0;
   for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
   {
      if(N == NBars)
         break;

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k),true);
      if(symb2Shift != -1)
      {
         Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return(avarageSpread);
}

設定方法を教えてください //-------------
int k;
double N = 0; double Sum = 0;
for(k = 0; k < iBars(Symbol_1,Timeframe); k++)

{
if(N == NBars)
//------------------------
この関数は、すべてのNBarsのバーについてではなく、最後のバーを除くNBarsについて平均スプレッド値を返すようにすること。
つまり、最新のバーを計算から除外してほしいのです !あるいは、所定の数の直近のバーを計算に含めるべきではない。
これを「整理」する方法はあるのでしょうか?
その代わり、5月3日(月)のマーケットエントリーはしっかりあげられる)。その後の黒字決算の確率が高い!(笑)
 
double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0;
   double Sum = 0;
   if(NBars > iBars(Symbol_1,Timeframe)) NBars=iBars(Symbol_1,Timeframe); // если н больше чем баров на графике то обрезаем
   if(NBarsSkip >= NBars) NBarsSkip=0; // если пропускаем баров больше/равно чем NBars, то ничего не пропускаем
   for(k = NBarsSkip; k < NBars; k++)
   {

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k),true);
      if(symb2Shift != -1)
      {
         Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return(avarageSpread);
}
NBarsSkip は、計算に参加しないミスバーの数を設定します。 c NBarsSkip by NBars は計算に参加します。
 
NCI 、ありがとうございます。
すぐに応募の見込みを送ります。

もう1つ質問です。
ちょっと思いついたことがあるんです。
さらにシンプルにするのはどうだろう。
for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
の代わりに
for(k =M; k < iBars(Symbol_1,Timeframe); k++),
ここで Mは 計算から除外されるバーの数です。
うまくいくかな?


 
k=Mではなく、k=M+1だけ...。バーMは考慮されていません
 
ありがとうございました。私もエントリーを送りました。
 
正直なところ、NBarsは同時に2つの楽器に存在するバーしか考慮してはいけないということに最初は気づきませんでした。そうすると、私が投稿したコードはこの論理に合致しません。そして、Mによる構築も 正しくありません。この場合、次のようにすることができます:
double CalculateAvarageSpread(string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0;
   int NReal = 0;
   double Sum = 0;
   for(k = 0; k < iBars(Symbol_1,Timeframe); k++)
   {
      if(N == NBars)
         break;

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k),true);
      if(symb2Shift != -1)
      {
         N++;
         if(N>NBarsSkip)
         {
            Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
            NReal++;  // счетчик Н которые не пропущены и посчитаны
         }
      }
   }
   if(NReal==0) return(0); // так как у нас не получилось рассчитать ни одного бара
   else
   {
      double avarageSpread = Sum / NReal;
      return(avarageSpread);
   }
}


 
ありがとうございます。なぜか私のコードは最初コンパイルできず、エラー(ブラケット)を返しました。
関数名 "......, int NBarsSkip " から を移動させるまで。
をEAの外部パラメータに
extern int NBarsSkip =2
なぜエラーになったのかわかりません。
しかし、動かしてみると、すべてうまくいきました。
 

私はこのブランチを隅から隅まで読みました。いろいろな情報があって、まだ消化しきれていない。私の主な結論は、「ここを掘るしかない、その価値はある」というものです。追伸:臨機応変な良いスレッド、ほとんど浸水しない。2ridさん、ありがとうございました。

 

ありがとうございました。

"考える "ための情報

月曜日からZM-ZLスプレッド(小麦粉と油、5:6)

!

理由: