MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1248

 
jaffer wilson :

@ Artyom Trishkin @ Vladimir Pastushak

Benim durumumda çalışmıyor. Yeni bir pozisyon istemiyorum. Tek bir ticaret türü için marjı hesapladığını ve döndürdüğünü biliyorum. Ancak ticaret zaten açıksa işe yaramaz ve belirli bir sembolün bir ticareti tarafından tüketilen marjı bilmek istiyorum.

Bana yardım edebilir misiniz, lütfen? Durumumu anlamıyorsanız, lütfen bana bildirin.

Basit komut dosyası açıklaması:

Bu alanı ToolBox'ta görürsünüz:

Bu, semboller için marjdır: AUDJPY, EURUSD ve EURTRY.

AccountInfoDouble(ACCOUNT_MARGIN) ile bu değeri alabileceğimi biliyorum. Ama belirli bir karakterin değerini alamıyorum. Örneğin, EURUSD'nin ne kadar marj tükettiğini bilmek istiyorum. Hiçbir işlevi yerine getiremem. Bu nedenle, bunu nasıl hesaplayabileceğimi bilmek istiyorum.

Umarım bu açıklama mantıklı olmak için yeterlidir.

 //+------------------------------------------------------------------+
#include <Trade\PositionInfo.mqh> CPositionInfo     m_position;
//+------------------------------------------------------------------+
struct str__
  {
   string             symbol;
   double             margin;
  };
str__ symb[];
//+------------------------------------------------------------------+
void OnTick ()
  {

   int total = PositionsTotal (), c = 0 ;

   ArrayResize (symb, total);

   for ( int k = total - 1 ; k >= 0 ; k--)
       if (m_position.SelectByIndex(k))
        {
         symb[c].symbol = m_position. Symbol ();

         if (m_position.PositionType() == POSITION_TYPE_BUY )
            symb[c].margin = SymbolMargin(symb[c].symbol, ORDER_TYPE_BUY , m_position.Volume());

         if (m_position.PositionType() == POSITION_TYPE_SELL )
            symb[c].margin = SymbolMargin(symb[c].symbol, ORDER_TYPE_SELL , m_position.Volume());

         c++;
        }
        
         ArrayPrint (symb, 2 );
  }
//+------------------------------------------------------------------+
double   SymbolMargin( string aSymbol, ENUM_ORDER_TYPE aType, double aLot = 1.0 )
  {

   double margin = 0 ;

   MqlTick m_tick;
   if ( SymbolInfoTick (aSymbol, m_tick))
     {
       if (m_tick.ask != 0.0 )
         if ( OrderCalcMargin (aType, aSymbol, aLot, m_tick.ask, margin))
             return (margin * aLot);
       if (m_tick.bid != 0.0 )
         if ( OrderCalcMargin (aType, aSymbol, aLot, m_tick.bid, margin))
             return (margin * aLot);
     }

   return - 1 ;
  }
//+------------------------------------------------------------------+
 
Vladimir Pastushak :

@Vladimir Pastushak Deneyeceğim. Ama size bunun uygulanabilir bir çözüm olmadığını söylememe izin verin. OrderCalcMargin() işlevi tarafından ayarlanan değer her seferinde değişir. Ama marj değişmiyor. Herhangi bir anlaşmayı kapatırsam, marj anlaşmayı açtığım zamankiyle aynı olacaktır. Ama OrderCalcMargin()'i kullandığımda, aldığım değer değişiyor ve orijinaline hiç benzemiyor.

Bunu sizin tarafınızda da denediyseniz lütfen bana bildirin. İşe yaramayacağını biliyorum. Ancak, ısrar ettiğiniz gibi kullanacağım.

 
Vladimir Pastushak :

EURUSD'de 50 lot büyüklüğünde bir işlem açtım. İşlevini kullandıktan sonra ne aldığıma bak:

(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589500.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589505.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589495.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589490.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589485.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589490.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589485.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589480.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589475.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589470.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589465.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589455.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589460.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589465.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589460.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589455.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589440.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589440.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589440.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589445.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589450.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589460.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589465.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589460.00 

Bak, marj sürekli değişiyor. Ancak önceden açılmış bir işlemin değeri değişmez. Şimdi ne yapacağımı söyle?

 
jaffer wilson :

EURUSD'de 50 lot büyüklüğünde bir işlem açtım. İşlevini kullandıktan sonra ne aldığıma bak:

Bak, marj sürekli değişiyor. Ancak önceden açılmış bir işlemin değeri değişmez. Şimdi ne yapacağımı söyle?

 //+------------------------------------------------------------------+
#include <Trade\PositionInfo.mqh> CPositionInfo     m_position;
//+------------------------------------------------------------------+
struct str__
  {
   string             symbol;
   double             margin;
  };
str__ symb[];
//+------------------------------------------------------------------+
void OnTick ()
  {

   int total = PositionsTotal (), c = 0 ;

   ArrayResize (symb, total);

   for ( int k = total - 1 ; k >= 0 ; k--)
       if (m_position.SelectByIndex(k))
        {
         symb[c].symbol = m_position. Symbol ();

         if (m_position.PositionType() == POSITION_TYPE_BUY )
            symb[c].margin = SymbolMargin(symb[c].symbol, ORDER_TYPE_BUY , m_position.Volume(), m_position.PriceOpen());

         if (m_position.PositionType() == POSITION_TYPE_SELL )
            symb[c].margin = SymbolMargin(symb[c].symbol, ORDER_TYPE_SELL , m_position.Volume(), m_position.PriceOpen());

         c++;
        }

   ArrayPrint (symb, 2 );
  }
//+------------------------------------------------------------------+
double   SymbolMargin( string aSymbol, ENUM_ORDER_TYPE aType, double aLot = 1.0 , double aOpenPrice = 0 )
  {

   double margin = 0 ;


   if (aOpenPrice != 0.0 )
       if ( OrderCalcMargin (aType, aSymbol, aLot, aOpenPrice, margin))
         return (margin * aLot);
   if (aOpenPrice != 0.0 )
       if ( OrderCalcMargin (aType, aSymbol, aLot, aOpenPrice, margin))
         return (margin * aLot);


   return - 1 ;
  }
//+------------------------------------------------------------------+
 
Vladimir Pastushak :

Yukarıdaki kodu denedim.

Bende var:

(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589100.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589100.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589100.00 
(EURUSD,M1)         [symbol]  [margin]
(EURUSD,M1)     [ 0 ] "EURUSD" 589100.00 

Ancak beklenen değer şuydu:


 
Vladimir Pastushak :

Diğer semboller için marj değeri hala değişmektedir. Bu nedenle OrderCalcMargin() bir çözüm değildir. Anlıyor musun. Önce kendi tarafında dene lütfen.

 
jaffer wilson :

Diğer semboller için marj değeri hala değişmektedir. Bu nedenle OrderCalcMargin() bir çözüm değildir. Anlıyor musun. Önce kendi tarafında dene, lütfen.

2 sipariş 5891 * 2 = 11782 Dizi karakterini karakter karakter işlemeniz gerekiyorsa... Sorun değil...

 
Vladimir Pastushak :

2 sipariş 5891 * 2 = 11782 Dizi karakterini karakter karakter işlemeniz gerekiyorsa... Sorun değil...

Ama EURUSD'de sadece bir işlem yaptım. Ve işlev diğer karakterlerle düzgün çalışmıyor.

 

Söyle bana, mql5 göstergesi için bir kanca var mı? İki görüntüleme özelliği ayarlayın.

 #property indicator_separate_window
#property indicator_chart_window

Ve her biri kendi görüntüleme özelliğine farklı bir çıktı nasıl bağlanır.

 
Roman :

Söyle bana, mql5 göstergesi için bir kanca var mı? İki görüntüleme özelliği ayarlayın.

Ve her biri kendi görüntüleme özelliğine farklı bir çıktı nasıl bağlanır.

Böyle kancalar yok. Ne sağ ne sol. Ne MQL5 ne de MQL4 için.

Alt penceredeki ana çizelgede kendi yapılarınızı kullanın.