Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 762

 
Alexey Kozitsyn :
Ve pozisyonların değil, işlemlerin değil, siparişlerin sıralanması gerekiyor, çünkü. Önce emir, sonra anlaşma, sonra pozisyon gelir.

Neden sadece siparişler? Anlaşmanın bir pozisyon kimliği (bilet) yok mu?

 
Alexey Viktorov :

Neden sadece siparişler? Anlaşmanın bir pozisyon kimliği (bilet) yok mu?

Evet haklısın. Hem siparişlerin hem de anlaşmaların bir konum kimliği vardır. Ancak genel olarak pozisyona, anlaşmayı başlatan ilk emrin kimliğinin atandığını bilmeniz gerekir. Buna göre, bir pozisyon başlatan "varlık" bir anlaşma değil, bir emirdir. Anlaşmaları değil, siparişleri sıralamanız gerekir.

Belgelerden:

Pozisyon Kimliği, her yeni açılan pozisyona atanan ve kullanım ömrü boyunca değişmeyen benzersiz bir numaradır. Pozisyonu açan sipariş biletine karşılık gelir.

 

Pozisyon kimliği, onu açan, değiştiren veya kapatan her siparişte (ORDER_POSITION_ID) ve anlaşmada (DEAL_POSITION_ID) belirtilir. Bir pozisyonla ilişkili siparişleri ve anlaşmaları aramak için bu özelliği kullanın.

 
Alexey Kozitsyn :

Evet haklısın. Hem siparişlerin hem de anlaşmaların bir konum kimliği vardır. Ancak genel olarak pozisyona, anlaşmayı başlatan ilk emrin kimliğinin atandığını bilmeniz gerekir. Buna göre, bir pozisyon başlatan "kuruluş" bir anlaşma değil, bir emirdir. Anlaşmaları değil, siparişleri sıralamanız gerekir.

Belgelerden:

Tartışmayacağım, tam olarak belgelerde yazan şey bu. Ancak aynı belgelerin başka bir yerinde " Kural olarak ..." yazıyor, bu da farklılıklar olabileceği anlamına geliyor. Ve bir keresinde böyle bir "genellikle" karşılaştım ...

konum

Pozisyon bileti. Kesin tanımlama için bir pozisyon değiştirirken ve kapatırken doldurulmalıdır. Kural olarak, pozisyonun açılması sonucunda siparişin biletine karşılık gelir.

ya da belki sadece yanlış siparişten bir bilet kullanmaya çalıştım, hatırlamıyorum ve o zaman zorlukla anlamadım, okudum, düzelttim ve unuttum. Genel olarak, o zamandan beri buna daha dikkatli oldum.
 
Vitaly Muzichenko :
Bana ticaret sırasındaki tarihten nasıl bilet alacağımı söyle. Ekranda "63214735" yazıyor.

Burada İşlemler listesindeki Pozisyon numarasını arıyorsunuz, aksi halde yanlıştır.

İşte HistorySelectByPosition'ın ne verdiğini gösteren bir komut dosyası

 //--- input parameters
input int       Position;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{ ulong Ticket;
   if ( HistorySelectByPosition (Position) )
  { Print ( "Position = " + IntegerToString (Position));
     int o= HistoryOrdersTotal ()- 1 ;
     while ( o>= 0 )
    { Ticket= HistoryOrderGetTicket (o);
       Print ( "Order " + IntegerToString (o)+ " = " + IntegerToString (Ticket));
      o--;
    }
     int d= HistoryDealsTotal ()- 1 ;
     while ( d>= 0 )
    { Ticket= HistoryDealGetTicket (d);
       Print ( "Deal " + IntegerToString (d)+ " = " + IntegerToString (Ticket));
      d--;
    }
  }
}

Ve sonuç şöyle görünüyor:

Position = 65328142
Order 1 = 65347809
Order 0 = 65328142
Deal 1 = 4070777
Deal 0 = 4051254

0 = Açık Pozisyon

1 = Pozisyonu Kapat

Bir sonuç almazsanız = o zaman bir Pozisyon Bileti girmediniz

Bir Bilet Fırsatı ile başlarsanız benzer bir sonuç elde edilebilir:

HistoryDealGetInteger() işlevi için

ENUM_DEAL_PROPERTY_INTEGER

tanımlayıcı

Tanım

Tip

DEAL_TICKET

Fırsat bileti. Her işleme atanan benzersiz bir numara

uzun

DEAL_ORDER

Anlaşmanın esas alındığı emir

uzun

DEAL_TIME

işlem süresi

tarih saat

DEAL_TIME_MSC

01/01/1970 tarihinden itibaren milisaniye cinsinden işlem zamanı

uzun

DEAL_TYPE

Anlaşma türü

ENUM_DEAL_TYPE

DEAL_ENTRY

Ticaret yönü – piyasaya giriş, piyasadan çıkış veya geri dönüş

ENUM_DEAL_ENTRY

DEAL_MAGIC

Takas için sihirli sayı (bkz. ORDER_MAGIC )

uzun

DEAL_REASON

İşlemin nedeni veya kaynağı

ENUM_DEAL_REASON

DEAL_POSITION_ID

Bu anlaşma tarafından açılan, değiştirilen veya kapatılan Pozisyon Kimliği . Her pozisyonun, pozisyonun tüm ömrü boyunca enstrümanda yapılan tüm işlemlere atanan benzersiz bir tanımlayıcısı vardır.

uzun

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ivan Ivanov :

Teşekkür ederim!

Buna ihtiyacım vardı: HistoryOrderGetTicket

 
Vitaly Muzichenko :

Teşekkür ederim!

Buna ihtiyacım vardı: HistoryOrderGetTicket

Sipariş 1.0 lot olabilir. Ancak, örneğin lot 0.9 ile kısmen yürütülebilir - gerisi reddedilecektir (yürütme moduna bağlı olarak). O zaman anlaşma 0.9 lot olacak. Ve sıraya göre çok şey aramaya başladığınızda, tutarsızlıklar olacaktır.

 

Yardım istiyorum - OHLC ortamının değerini elde etmek için aklı başında bir koda ihtiyacım var - mevcut olanlar çok yavaş

seçenek 1

 //-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open ( int index)
  {
   double open= 0 ;
   ArraySetAsSeries ( Open , true );
   int copied= CopyOpen ( Symbol (), 0 , 0 , Bars ( Symbol (), 0 ), Open );
   if (copied> 0 && index<copied) open= Open [index];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low ( int index)
  {
   double low= 0 ;
   ArraySetAsSeries ( Low , true );
   int copied= CopyLow ( Symbol (), 0 , 0 , Bars ( Symbol (), 0 ), Low );
   if (copied> 0 && index<copied) low= Low [index];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High ( int index)
  {
   double high= 0 ;
   ArraySetAsSeries ( High , true );
   int copied= CopyHigh ( Symbol (), 0 , 0 , Bars ( Symbol (), 0 ), High );
   if (copied> 0 && index<copied) high= High [index];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close ( int index)
  {
   double close= 0 ;
   ArraySetAsSeries ( Close , true );
//   int copied=CopyHigh(Symbol(),0,0,Bars(Symbol(),0),Close);
   int copied= CopyClose ( Symbol (), 0 , 0 , Bars ( Symbol (), 0 ), Close );
   if (copied> 0 && index<copied) close= Close [index];
   return (close);
  }
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double open= 0 ;
   ArraySetAsSeries (OpenI, true );
   int copied= CopyOpen (symbol,timeframe, 0 , Bars (symbol,timeframe),OpenI);
   if (copied> 0 && index<copied) open=OpenI[index];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double low= 0 ;
   ArraySetAsSeries (LowI, true );
   int copied= CopyLow (symbol,timeframe, 0 , Bars (symbol,timeframe),LowI);
   if (copied> 0 && index<copied) low=LowI[index];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double high= 0 ;
   ArraySetAsSeries (HighI, true );
   int copied= CopyHigh (symbol,timeframe, 0 , Bars (symbol,timeframe),HighI);
   if (copied> 0 && index<copied) high=HighI[index];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double close= 0 ;
   ArraySetAsSeries (CloseI, true );
   int copied= CopyClose (symbol,timeframe, 0 , Bars (symbol,timeframe),CloseI);
   if (copied> 0 && index<copied) close=CloseI[index];
   return (close);
  }


seçenek 2

 //-------------------------------------------------------------------
//==MQL4toMQL5
//+------------------------------------------------------------------+ 
//| Получим Open для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Open ( int index)
  {
   double open= 0 ;
   int copied= CopyOpen ( Symbol (), 0 ,index, 1 , Open );
   if (copied> 0 ) open= Open [ 0 ];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим Low для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double Low ( int index)
  {
   double low= 0 ;
   int copied= CopyLow ( Symbol (), 0 ,index, 1 , Low );
   if (copied> 0 ) low= Low [ 0 ];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим High для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double High ( int index)
  {
   double high= 0 ;
   int copied= CopyHigh ( Symbol (), 0 ,index, 1 , High );
   if (copied> 0 ) high= High [ 0 ];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим Close для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double Close ( int index)
  {
   double close= 0 ;
   int copied= CopyClose ( Symbol (), 0 ,index, 1 , Close );
   if (copied> 0 ) close= Close [ 0 ];
   return (close);
  }


  
//+------------------------------------------------------------------+ 
//| Получим IOpen для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iOpen ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double open= 0 ;
   int copied= CopyOpen (symbol,timeframe,index, 1 ,OpenI);
   if (copied> 0 ) open=OpenI[ 0 ];
   return (open);
  }
//+------------------------------------------------------------------+ 
//| Получим iLow для заданного номера бара                            | 
//+------------------------------------------------------------------+ 
double iLow ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double low= 0 ;
   int copied= CopyLow (symbol,timeframe,index, 1 ,LowI);
   if (copied> 0 ) low=LowI[ 0 ];
   return (low);
  }
//+------------------------------------------------------------------+ 
//| Получим iHigh для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iHigh ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double high= 0 ;
   int copied= CopyHigh (symbol,timeframe,index, 1 ,HighI);
   if (copied> 0 ) high=HighI[ 0 ];
   return (high);
  }
//+------------------------------------------------------------------+ 
//| Получим iClose для заданного номера бара                           | 
//+------------------------------------------------------------------+ 
double iClose ( string symbol, ENUM_TIMEFRAMES timeframe, int index)
  {
   double close= 0 ;
   int copied= CopyClose (symbol,timeframe,index, 1 ,CloseI);
   if (copied> 0 ) close=CloseI[ 0 ];
   return (close);
  }
 
Aleksey Vyazmikin :

Yardım istiyorum - OHLC ortamının değerini elde etmek için aklı başında bir koda ihtiyacım var - mevcut olanlar çok yavaş

seçenek 1


seçenek 2

Onları nasıl kullandığınıza dair bir kod parçası yayınlayın
 
Vitaly Muzichenko :
Onları nasıl kullandığınıza dair bir kod parçası yayınlayın

Hangi parçanın yavaşladığını bilmiyorum - bunu döngüler de dahil olmak üzere farklı şekillerde kullanıyorum...


işte bir örnek


             for ( int X= 1 ;X<DonchianBarStart+ 1 ;X++)
              {
               PricePeresek=Donchianf( 0 ,X+ 1 );
               if (( Low (X)>PricePeresek && High (X)>PricePeresek) || 
                  ( Low (X)<PricePeresek && High (X)<PricePeresek))
                  calcBarPeresek++;
               else break ;
              }
 
Aleksey Vyazmikin :

Hangi parçanın yavaşladığını bilmiyorum - bunu döngüler de dahil olmak üzere farklı şekillerde kullanıyorum...

Döngülerde öyle görünüyor ve bir işlev olmadan yapabilirsiniz

             double LOW[ 1 ],HIGH[ 1 ];
             for ( int X= 1 ;X<DonchianBarStart+ 1 ;X++)
              {
               PricePeresek=Donchianf( 0 ,X+ 1 );
               CopyLow ( Symbol (), PERIOD_CURRENT ,X, 1 ,LOW);
               CopyHigh ( Symbol (), PERIOD_CURRENT ,X, 1 ,HIGH);
               if ((LOW[ 0 ]>PricePeresek && HIGH[ 0 ]>PricePeresek) || 
                  (LOW[ 0 ]<PricePeresek && HIGH[ 0 ]<PricePeresek))
                  calcBarPeresek++;
               else break ;
              }