どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 464

 

問題が解決しない、ダルくなってきた、ビールを飲んでも効かない。

持っています。

1 - 30のEAがチャートまたはシンボルで動作しており、すべてが異なるMedgic番号を持っています。

2- 各EAには3-5つの未決済注文がある ...

タスクは、チャート上のバー内のすべての数字と、それに対する総利益/損失を印刷することです...

掘れども掘れども埒があかない。

  #define  MagicN 0
#define  MagProf 1
 ArrayResize(mags,100,1000);ArrayInitialize(mags,0);  
   for(int f=OrdersTotal()-1; f>=0; f--)
      if(OrderSelect(f,SELECT_BY_POS))
              {
               for(int z=100-1; z>=0; z--)
                 {
                  if(mags[z][MagicN]==OrderMagicNumber())
                  mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();

                  if(mags[z][MagicN]!=OrderMagicNumber())
                    {
                     mags[z][MagicN]=OrderMagicNumber();
                     mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
                    }
                 }
              }

いい人はできる人を助ける!!!)))))))

 
VOLDEMAR:

問題が解決しない、ダルくなってきた、ビールを飲んでも効かない。

持っています。

1 - 30のEAがチャートまたはシンボルで動作しており、すべてが異なるMedgic番号を持っています。

2- 各EAには3-5つの未決済注文がある ...

タスクは、チャート上のバー内のすべての数字と、それに対する総利益/損失を印刷することです...

掘れども掘れども埒があかない。

いい人はできる人を助ける!!!)))))))


2次元の配列を作成します。1次元目には蓄積された利益、2次元目にはマジックを格納する。

注文を処理する際に、配列の中からマジックナンバーを探し、見つからなければ配列を増やし、見つかれば利益を増やす。

処理が完了したら、結果を画面に表示します

 
Vinin:


2次元の配列を作成します。1次元目には蓄積された利益を、2次元目にはメジを格納する。

注文を処理するときは、配列の中から注文を探し、見つからなければ配列を増やし、見つかれば利益を増やします。

処理完了後、結果を画面に表示する


ということを書いたのではありませんか?
 
VOLDEMAR:

ということではありませんか?

そうではありません。配列のサイズを 定義し、Magik上のインデックスを検索するところ。見てませんでした。
 
for(int f=OrdersTotal()-1; f>=0; f--) // オーダー検索
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// 配列の要素数で2回目のループを行います。
{
if(mags[z][MagicN]==OrderMagicNumber()) // MagicNumberがすでに存在する場合、利益を追加しよう。
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
}
else /マグがない場合
{
ArrayResize(mags,z,1000); // 配列を展開します。
mags[z][MagicN]=OrderMagicNumber(); // マグを格納する。
}
}

}

しかし、この構成では、ターミナルがテストされず、critical errorと 表示されます。

 
VOLDEMAR:
for(int f=OrdersTotal()-1; f>=0; f--) // オーダー検索
if(OrderSelect(f,SELECT_BY_POS))
{
for(int z=0; z<ArraySize(mags); z++)// 配列の要素数で2回目のループを行います。
{
if(mags[z][MagicN]==OrderMagicNumber()) // MagicNumberがすでに存在する場合、利益を追加しよう。
{
mags[z][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
}
else /マグがない場合
{
ArrayResize(mags,z,1000); // 配列を展開します。
mags[z][MagicN]=OrderMagicNumber(); // マグを格納する。
}
}

}

しかし、この構成では、ターミナルがテストされず、critical errorと表示されます。


MagicN 変数とは何か、どこが変わる のか?
 
はパラメータ0、MagProfは値1 です。
 
VOLDEMAR:
のパラメータは0、MagProfのパラメータは1 です。


お試しください

#define MagicN 0
#define MagProf 1
double mags[10][2];
int CountMagic=0;

void CalcMagic()
  {
   for(int f=OrdersTotal()-1; f>=0; f--) // перебор ордеров
      if(OrderSelect(f,SELECT_BY_POS))
        {
         mags[FindMaic(OrderMagicNumber())][MagProf]+=OrderProfit()+OrderCommission()+OrderSwap();
        }

  }
//+------------------------------------------------------------------+

int FindMaic(int Magic)
  {
   int Res=-1;
   for(int i=0;i<CountMagic;i++)
     {
      if(mags[i][MagicN]==Magic)
         Res=i;
      break;
     }
   if(Res==-1)
     {
      Res=CountMagic;
      CountMagic++;
      if(CountMagic>=ArrayRange(mags,0))
        {
         ArrayResize(mags,CountMagic+10);
        }

     }

   return(Res);
  }
//+------------------------------------------------------------------+

多次元配列では、ArrayRange()を用いて次元を定義することができる。

 
Marketinfoで取得できるStopLetterとFreeswellがありますが、同じような制限があり、それは有効期限の最短時間に関するもので、通常は15分です。 つまり、保留中の注文を 出した場合、トリガーされなければ、自己削除される最短時間は15分です。それが問題なのです。この限界をプログラムで知るにはどうしたらいいのでしょうか?
 
Desead:
Marketinfoで取得できるstoplayとfreezevelがあり、同じ制限がありますが、これは最小有効期限に関するもので、通常は15分です。つまり、保留中の注文を出した場合、トリガーされなければ自己削除される最小時間は15分です。それが問題なのです。この限界をプログラムで知るにはどうしたらいいのでしょうか?

ブローカーに聞く!有効期限を実行しないものもあります。

注文には入れず、条件に従って削除しています。