Çoklu para birimi danışmanı hakkında soru - sayfa 11

 
Vinin >> :

İki dizi oluşturuyoruz. Biri bilet numarasına göre, ikincisi fiyata göre. Ardından bilet numaralarını taşırken (bağlantıyı kesmeden) diziyi fiyata göre sıralıyoruz. Ardından dizinin bir ucundan en küçük fiyat, diğerinden en yüksek fiyat olacaktır. Aşırı emirlerinden birini değiştirmeye devam ediyor.

Sayesinde.
Pratik olarak henüz dizilerle çalışmadı.
Örneğin, 10 BYSTOP siparişim var. Kurulumları için fiyatları belirledim:

 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 байстоп



Daha sonra, 1. sıra şu anki değere en yakın olacak şekilde bir dizi kurulum fiyatı belirledim. fiyat

int Fiyat Dizisi = {fiyat1,fiyat2,fiyat3,fiyat4,fiyat5,fiyat6,fiyat7,fiyat8,fiyat9,fiyat10 }

Ve biletlerle nasıl bir dizi oluşturulacağı benim için net değil. Bilet siparişi nereden alabilirim?

 

benzer nedir

 // Функция возвращает номер тикета ордера с самой маленькой ценой или с самой большой
// По умолчанию сортировка по возрастанию
// Только вот что за цену брать, я возьму стоп (цену открытия мы менять не можем)
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 ) ;
}

   
Kod test edilmedi
 
Teşekkürler Vinin! içine dalacağım.
 

Görünüşe göre işlev şöyle çalışıyor:

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

Seçenekler:
lSymbol= - sembol adı ("" - herhangi bir sembol, NULL - geçerli sembol)

lOP=-1- işlem (-1 - herhangi bir sipariş, bizim özel durumumuzda -OP_BUYSTOP )
lMagic=-1 - MagicNumber (-1 - herhangi bir büyü)

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

Ancak "int reversi=0" ne anlama geliyor - tam olarak anlamıyorum!

İşlev normal şekilde çalıştı.Belki:

0 - en düşük fiyat

1 - en büyüğü?


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

Ve bir şey daha, neden fiyat için zararı durdurduk?

Ve neden açılış fiyatını değiştiremiyoruz?

OP_BUYSTOP - Sonuçta, bunlar bekleyen emirlerdir (ve hiç pozisyon değil) ve etkinliğin nihai sonucu, özel olarak seçilmiş bir emrin açılış (aktivasyon) fiyatını değiştirmektir.

 
rid писал(а) >>

Görünüşe göre işlev şöyle çalışıyor:

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

Seçenekler:
lSymbol= - sembol adı ("" - herhangi bir sembol, NULL - geçerli sembol)

lOP=-1- işlem (-1 - herhangi bir sipariş, bizim özel durumumuzda -OP_BUYSTOP )
lMagic=-1 - MagicNumber (-1 - herhangi bir büyü)

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

Ama "int reversi=0" ne anlama geliyor - tam olarak anlamıyorum!

İşlev normal şekilde çalıştı.Belki:

0 - en düşük fiyat

1 - en büyüğü?


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

Ve bir şey daha, neden fiyat için zararı durdurduk?

Ve neden açılış fiyatını değiştiremiyoruz?

OP_BUYSTOP - Sonuçta, bunlar bekleyen emirlerdir (ve hiç pozisyon değil) ve etkinliğin nihai sonucu, özel olarak seçilmiş bir emrin açılış (aktivasyon) fiyatını değiştirmektir.

O yüzden istediğiniz fiyatı alın. Erteleyenler için açılış fiyatı. Ben sadece örnek olarak yaptım.

 

Ve bence, iki boyutlu bir dizi ayarlamak ve ilk boyuta göre sıralamak daha kolay. Orada sırasıyla ihtiyacınız olanı sürün. Senin durumunda, fiyat.

 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 >> :

Ve bence, iki boyutlu bir dizi ayarlamak ve ilk boyuta göre sıralamak daha kolay. Orada sırasıyla ihtiyacınız olanı sürün. Senin durumunda, fiyat.

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

   double Price_Ticket [ ] [ 2 ] ;
   
   int size = 10 ;
   ArrayResize ( Price_Ticket , size ) ;
İnternette var. Hindi aptalca asılı kalıyor. Başlat işlevi boş, 220 oluşturun.
 
Vinin >> :

O yüzden istediğiniz fiyatı alın. Erteleyenler için açılış fiyatı. Ben sadece örnek olarak yaptım.

BURADA, diyelim ki 10 adet buystop siparişim var. Sırayla değil, sıra dışı olarak listelenirler.

Şu anda mevcut fiyattan en uzak olan siparişi silmem gerekiyor.

Bu siparişi bulmanın doğru yolu bu mu? -

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

ps

Fonksiyonu yoruma ekledim.

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

Ancak işlev her zaman "-1" döndürür. Grafikte 5 ila 10 sipariş olmasına rağmen.

bir yerde bir yanlışlık var...

 // Функция возвращает номер тикета ордера с  с самой
// малой или , 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 писал(а) >>

BURADA, diyelim ki 10 adet buystop siparişim var. Sırayla değil, sıra dışı olarak listelenirler.

Şu anda mevcut fiyattan en uzak olan siparişi silmem gerekiyor.

Bu siparişi bulmanın doğru yolu bu mu? -

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

ps

Fonksiyonu yoruma ekledim.

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

Ancak işlev her zaman "-1" döndürür. Grafikte 5 ila 10 sipariş olmasına rağmen.

bir yerde bir yanlışlık var...

Yorum( MiniMaxOrderPrice("", -1, OP_BUYSTOP, 1 )); // herhangi bir karakter

Yorum( MiniMaxOrderPrice(Symbol(), -1, OP_BUYSTOP, 1 )); // geçerli karakter

 

TAMAM! Teşekkürler Vinin!

Özellik çalışıyor gibi görünüyor! Şimdi daha fazla araştıracağım!

Neden: