マルチカレンシーアドバイザーに関する質問 - ページ 11

 
Vinin >> :

2つの配列を作成します。1つはチケット番号で、もう1つは値段で。次に、配列を価格順にソートし、同時にチケット番号を移動させます(接続を切断しないように)。そして、配列の一方の端には最低価格、もう一方の端には最高価格が表示されます。あとは、極端な注文を1つ変えるだけです。

>> ありがとうございました。
まだ実質的にアレイを扱ったことがないんです。
例えば、10個のBUYSTOP注文があるとします。私は、彼らの設定価格を設定しました。

double price1 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 1);//цена 1 байстоп
double price2 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 2);//цена 2 байстоп
double price3 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 3);//цена 3 байстоп
double price4 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 4);//цена 4 байстоп
double price5 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 5);//цена 5 байстоп
double price6 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 6);//цена 6 байстоп
double price7 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 7);//цена 7 байстоп
double price8 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 8);//цена 8 байстоп
double price9 = GetOrderOpenPrice(NULL,OP_BUYSTOP, 9);//цена 9 байстоп
double price10= GetOrderOpenPrice(NULL,OP_BUYSTOP, 10);//цена 10 байстоп



そして、現在の価格に最も近い価格を注文1とする設定価格の配列を設定しました。

int ArrayCents = { price1,price2,price3,price4,price5,price6,price7,price8,price9,price10 }.

また、チケットによる配列の作成方法がよくわからない。オーダーチケットはどこで手に入りますか?

 

このようなものは何ですか

// Функция возвращает номер тикета ордера с самой маленькой ценой или с самой большой
// По умолчанию сортировка по возрастанию
// Только вот что за цену брать, я возьму стоп (цену открытия мы менять не можем)
int MiniMaxOrderPrice(string lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0){
   double   ArrayPrice[];
   int      ArrayTicket[];
   int      Total=OrdersTotal();
   int      tmpTicket;
   double   tmpPrice;
   bool     bSort=true;
   
   ArrayResize( ArrayPrice, Total);
   ArrayResize( ArrayTicket, Total);
   int i, count=0;
   for ( i=0; i< Total; i++) {
      if (!OrderSelect( i, SELECT_BY_POS))             continue;
      if (!(OrderSymbol()== lSymbol || lSymbol==""))   continue;
      if (!(OrderMagicNumber()== lMagic || lMagic==-1))continue;
      if (!(OrderType()== lOP || lOP==-1))             continue;
      ArrayPrice[ count]=OrderStopLoss();
      ArrayTicket[ count]=OrderTicket();
      count++;
   }
   
   
   if ( count>0) {
      ArrayResize( ArrayPrice, count);
      ArrayResize( ArrayTicket, count);
      while ( bSort) {
         bSort=false;
         for ( i=1; i< count; i++) {
            if ( ArrayPrice[ i-1]> ArrayPrice[ i]) {
               tmpPrice= ArrayPrice[ i-1];
               ArrayPrice[ i-1]= ArrayPrice[ i];
               ArrayPrice[ i]= tmpPrice;
               tmpTicket= ArrayTicket[ i-1];
               ArrayTicket[ i-1]= ArrayTicket[ i];
               ArrayTicket[ i]= tmpTicket;
               bSort=true;
            }
         }
      }
      if ( reversi==0) return( ArrayTicket[0]); else return( ArrayTicket[ count-1]);
   }
   return(-1);
}

   
コードを確認しなかった。
 
Vininさん、ありがとうございました。調べてみるよ。
 

どうやら、このような機能があるようだ。

MiniMaxOrderPrice(string lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0)

Parameters:
lSymbol= - シンボル名 ("" - 任意のシンボル、NULL - 現在のシンボル )

lOP=-1 - 操作 (-1 - 任意の順序、ここでは -OP_BUYSTOP )
lMagic=-1 - MagicNumber (-1 - 任意のマジコン)

//---------------------------------------------------------------------------------------------

しかし、"int reversi=0 "は何を意味するのか、私にはよくわかりません !

関数は正常にコピーされました。

0 - 最安値

1 - 最大の?


//-------------------------------------------------------------------

また、「なぜストップロスを価格としたのでしょうか?

また、なぜ初値を変更できないのでしょうか?

OP_BUYSTOP - これらは保留中の注文(ポジションではない)であり、イベントの最終結果は特定の注文の開始(トリガー)価格を変更することだけであるため。

 
rid писал(а)>>

どうやら、このような機能があるようだ。

MiniMaxOrderPrice(string lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0)

パラメータ
lSymbol= - 測定器の名前(" - 任意のシンボル,NULL - 現在のシンボル).

lOP=-1-operation (-1 - 任意の順序、ここでは -OP_BUYSTOP )
lMagic=-1 - MagicNumber (-1 - 任意のマジック)

//---------------------------------------------------------------------------------------------

しかし、"int reversi=0 "は何を意味するのか、私にはよくわかりません !

関数は正常にコピーされました。

0 - 最小の価格

1 - 最大の?


//-------------------------------------------------------------------

また、「なぜストップロスを価格としたのでしょうか?

また、なぜ初値を変更できないのでしょうか?

OP_BUYSTOP-これらは保留中の注文(ポジションではない)であり、最終的に選択した注文の開始価格を変更する必要があることを意味します。

だから、必要な価格を取るんだ。保留中の注文の建値です。例としてやっただけです。

 

2次元配列を設定して、1次元目でソートする方が簡単だと思うのですが。そしてそこに、適宜、必要なものを収納することができるのです。あなたの場合は、価格ですね。

double Price_Ticket[][2]
int total=OrdersTotal();
ArrayResize( Price_Ticket, total);
for (int i=0; i< total; i++) if (OrderSelect( i, SELECT_BY_POS))
{
 Price_Ticket[ i][0]=OrderOpenPrice();
 Price_Ticket[ i][1]=OrderTicket();
}
ArraySort( Price_Ticket);
 
Xupypr >> :

2次元配列を設定して、1次元目でソートする方が簡単だと思うのですが。そして、そこには、それに応じて、必要なものを置くことができます。あなたの場合、それは価格です。

   SetIndexBuffer(0, Test);
   SetIndexStyle(0, DRAW_HISTOGRAM);
//---- indicators
//----

   double Price_Ticket[][2];
   
   int size = 10;
   ArrayResize( Price_Ticket, size);
イナテにあります。七面鳥が吊るされているところです。スタート関数は空、ビルド220。
 
Vinin >> :

だから、好きな値段でどうぞ。ペンダントの場合は、初値を取ってください。あくまで例としてですが。

仮に、10個のバイストップ注文が設定されているとします。順番に決まっているわけではなく、時間軸で区切られているのです。

現在、現在の価格から最も離れている注文を削除したいのですが。

この注文の探し方は正しいのでしょうか?-

//******************************

追伸

コメントで関数を挿入しています。

Comment( MiniMaxOrderPrice(NULL, -1, OP_BUYSTOP, 1 );

しかし、"-1 "が返され続けています。チャート上には5から10個のオーダーがありますが。

どこかが間違っているのでは...

// Функция возвращает номер тикета ордера с  с самой
// малой или , int reversi=0,большой ценой
// По умолчанию сортировка по возрастанию


int MiniMaxOrderPrice(string lSymbol="", int lMagic=-1, int lOP=-1, int reversi=0 ){
   double   ArrayPrice[];
   int      ArrayTicket[];
   int      Total=OrdersTotal();
   int      tmpTicket;
   double   tmpPrice;
   bool     bSort=true;
   
   ArrayResize( ArrayPrice, Total);
   ArrayResize( ArrayTicket, Total);
   int i, count=0;
   for ( i=0; i< Total; i++) {
      if (!OrderSelect( i, SELECT_BY_TICKET, MODE_TRADES))     continue;
      if (!(OrderSymbol()== lSymbol || lSymbol==""))   continue;
      if (!(OrderMagicNumber()== lMagic || lMagic==-1))continue;
      if (!(OrderType()== lOP || lOP==-1))             continue;
      ArrayPrice[ count]= OrderOpenPrice();
      ArrayTicket[ count]=OrderTicket();
      count++;
   }
   
   
   if ( count>0) {
      ArrayResize( ArrayPrice, count);
      ArrayResize( ArrayTicket, count);
      while ( bSort) {
         bSort=false;
         for ( i=1; i< count; i++) {
            if ( ArrayPrice[ i-1]> ArrayPrice[ i]) {
               tmpPrice= ArrayPrice[ i-1];
               ArrayPrice[ i-1]= ArrayPrice[ i];
               ArrayPrice[ i]= tmpPrice;
               tmpTicket= ArrayTicket[ i-1];
               ArrayTicket[ i-1]= ArrayTicket[ i];
               ArrayTicket[ i]= tmpTicket;
               bSort=true;
            }
         }
      }
      if ( reversi==0) return( ArrayTicket[0]); else return( ArrayTicket[ count-1]);
   }
   return(-1); }
 
rid писал(а)>>

仮に、10個のBystopオーダーが発注されたとします。順番に並べるのではなく、時間軸で区切っています。

現在、現在の価格から最も離れている注文を削除したいのですが。

この注文の探し方は正しいのでしょうか?-

//******************************

追伸

コメントに関数を入れました。

Comment( MiniMaxOrderPrice(NULL, -1, OP_BUYSTOP, 1 ));

しかし、この関数は常に"-1 "を返します。チャート上には5から10個のオーダーがありますが。

どこかにエラーがあるのでは...?

Comment( MiniMaxOrderPrice("", -1, OP_BUYSTOP, 1 )); // 任意のシンボル

Comment( MiniMaxOrderPrice(Symbol(), -1, OP_BUYSTOP, 1 )); // 現在のシンボル

 

よっしゃーVininさん、ありがとうございました。

機能が働いているようですさらに調べてみます!