プログラミングの勉強を手伝ってください。

 

トレードに関する情報の収集と使用について教えてください。すべてのEAポジション、その量、利益、タイプ、開始価格に関する情報を収集する必要があります。そして、直近のポジション、つまり最大のポジションに関する情報を参照する。配列で書くのは難しいと感じています。

1.配列を扱う必要は全くないのでしょうか?

2.構造体の配列と異なる配列のどちらを使用するのが良いのか?

3.どうせメモリを確保するのであれば、なぜ動的配列が 必要なのでしょうか?静的配列の方が使いやすいのでは?それとも、逆引きできるから動的なものはなくてもいいのでしょうか?


oopなしのサンプルコード、この構成も書けなかったので、差し支えなければ、ありがとうございます。

 
pribludilsa:

トレードに関する情報の収集と使用について教えてください。すべてのEAポジション、その量、利益、タイプ、開始価格に関する情報を収集する必要があります。そして、直近のポジション、つまり最大のポジションに関する情報を参照する。配列で書くのは難しいと感じています。

1.配列を扱う必要は全くないのでしょうか?

2.構造体の配列と異なる配列のどちらを使用するのが良いのか?

3.どうせメモリを確保するのであれば、なぜ動的配列が 必要なのでしょうか?静的配列の方が使いやすいのでは?それとも、逆引きできるから動的なものはなくてもいいのでしょうか?


OOPなしのサンプルコード、この構築も書けなかったので、もしよろしければ、ありがとうございます。

なぜ、何も作らないのか?ポジションをループさせて情報を処理する必要があり、それを組み立てる必要はありません。同じ瞬間に収集したものは、陳腐化した情報です。

 

1.取引履歴を扱う場合、通常、配列は不要である。これは、おおよそ例のように、https://www.mql5.com/ru/docs/trading/historyselect。 リンク先の左側のコラムにあるすべての機能(とそこにあるすべての例)を調べる価値があります。

2.構造体の配列はとても便利です。しかし、多次元配列に適用できる組み込み関数 - ArraySort() など - は、この配列では動作しない。

3.最初に指定した配列サイズで十分であることが確認できれば、静的配列も使用できます。その大きさが妥当であれば。

 
Vladimir Karputov:

なぜ、何も収集しないのか?項目を循環させ、情報を処理する必要がある--収集する必要はないのです。同時に収集するものは、陳腐化した情報です。

ウープを使わないグリッドを書きたいのですがそこで、手始めに練習してみようと思ったのですが、どうも配列にエントリーを組み立てることができないのです。それとも、私には必要ないのかな?どうすればいいのでしょうか?まあ、ループで考えていたんですけどね。それが私の始まりです。
int OnInit()
{
ENUM_POSITIONS_TYPE ar [1000]; //проинициализирую нулем еще, просто я не копирую, а вручную всё пишу, и некоторые очевидные куски не пишу.
 return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{}
void OnTick()
{
for(int index=PositionsTotal()-1; index>=0; index--)
{
ulong ticket=PositionGetTicket(index);
PositionSelectByTicket(ticket); // И вот я готов вызывать функции для выуживания данных, только я не знаю //как их вписывать в массив. 
 
Dmitry Fedoseev:

1.取引履歴を扱う場合、通常、配列は不要である。これは、おおよそ例のように、https://www.mql5.com/ru/docs/trading/historyselect。 リンク先の左側のコラムにあるすべての機能(とそこにあるすべての例)を調べる価値があります。

2.構造体の配列はとても便利です。しかし、多次元配列に適用できる組み込み関数 - ArraySort() など - は、この配列では動作しない。

3.最初に指定した配列サイズで十分であることが確認できれば、静的配列も使用できます。その大きさが妥当であれば。

ネタがあるのは私ではなく、分析したいポジションが空いているのです。どうすればいいのでしょうか?
 
OOPのないグリッドを書いています。オープンポジションの うち、どれが一番大きいのか、また、買いか売りか、どのような取引なのかを調べたいのです。まずループ内の各位置からデータを集めて配列に書き込み、その配列を解析するか、逆引きで動的であれば直近の要素を取る必要があると理解しています。
 
pribludilsa:
歴史とではなく、オープンポジションを分析したい。どうすればもっとうまくいくのか?

ほぼ同じですが、HistorySelect()がありません。PositionToatal()関数から始めて、そのリンクからPositionで始まるすべての関数を探索します。

 
pribludilsa:
OOPを使わないでグリッドを書いています。オープンポジションの うち、どのポジションが一番大きいのか、それはどのような取引、買い、売りによってなのかを知る必要があります。まずループ内の各位置からデータを収集し、配列に書き込んでから、配列を解析するか、逆引数で動的であれば一番新しい要素を取ればよいと理解しているのですが。

ポジションを配列して、高値・安値を探しながら進める必要はない。

 
Dmitry Fedoseev:

配列を見ながら高低差を探す必要はない。


ありがとうございます。でも、簡単な例を教えてください。書き出して比較する必要がありますよね。そして、それを配列以外のどこに書き込むのか?書かずにどうすればいいのかがわからない。ループパス内の1つの位置を操作していますが、別のループパス内にある場合、どのように別の位置を比較すればよいのでしょうか?

 
pribludilsa:

ありがとうございます。簡単な例を挙げてください。比較するためには、書き出す必要がありますよね。そして、それをどこに書くかというと、配列に書くのです。書かずにどうすればいいのかがわからない。ループパス内の1つの位置を操作していますが、別のループパス内にある場合、どのように別の位置を比較すればよいのでしょうか?

int Magic=123;

double maxBuyPrice=0;
ulong maxBuyTicket=0;
double minSellPrice=DBL_MAX;
ulong minSellTicket=0;   

for(int i=0;i<PositionsTotal();i++){
   ulong ticket=PositionGetTicket(i);
   if(ticket!=0){
      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol()){
         long type=PositionGetInteger(POSITION_TYPE);
         if(type==POSITION_TYPE_BUY){
            if(PositionGetDouble(POSITION_PRICE_OPEN)>maxBuyPrice){
               maxBuyPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               maxBuyTicket=ticket; // тут можно и другие данные позиции запоминать в переменные
            }
         }
         else if(type==POSITION_TYPE_SELL){
            if(PositionGetDouble(POSITION_PRICE_OPEN)<minSellPrice){
               minSellPrice=PositionGetDouble(POSITION_PRICE_OPEN);
               minSellTicket=ticket; // и тут
            }      
         }
      }
   }
}

if(maxBuyTicket!=0){
   
}
if(minSellTicket!=0){

}
 
Dmitry Fedoseev:

その例には感謝します。

      long magic=PositionGetInteger(POSITION_MAGIC);
      string symbol=PositionGetString(POSITION_SYMBOL);
      if(magic==Magic && symbol==Symbol())

と書くより、そういう言い方を好むのは自分だけかと思った。

      if(PositionGetInteger(POSITION_MAGIC)==Magic && PositionGetString(POSITION_SYMBOL)==Symbol())

hzは「知りたい」という意味です...誤解のないように...。


ps; プログラムデバッグの際に、すべてを記録しておくのに役立ちます。

理由: