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

 
viktor :
MT4 1320 terminalinin sürümünü nereden indirebileceğinizi söyleyin
Alpari
 

MT5'teki OBV göstergesi, hesaplama fiyatının türünü seçme yeteneğine sahip değildir.

MT4 bu özelliğe sahiptir.

Niye ya?

Ve genel olarak, OBV, mumun aşağı olduğu tüm tarih boyunca tüm hacmin toplamı olarak hesaplanır, orada hacim "negatif" olur.
Peki, MT4'te böyle bir hesaplama ile göstergeyi hesaplamak için fiyat türünü seçme fırsatı nereden geliyor? hesaplamaya dahil değilse

 

Kodun ayrı bir sayıdaki alış ve satış emirlerini saymak için bir bölümü vardır. (b - emirleri al, s - emirleri sat)

Ardından, yeni bir siparişin açılması veya mevcut bir siparişin kapanması durumunda bir koşul yazmak istiyorum. Yani daha önce açılan emir sayısı ve sonraki değişikliklerde bir karşılaştırma yapmak gerekiyor ama bunu koda nasıl yazacağımı anlamadım. Sipariş sayısındaki değişiklikler nasıl kaydedilir? Lütfen yardım et.

çift LB=0,LS=0;
çift RaznSB=0, RaznBS=0;
int b=0,s=0;
int zmb=0, izms=0;
(int i=0; i<SiparişToplam(); i++) için
{
if (OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol())
{
int ipucu = OrderType();
if (ipucu==OP_BUY)
{
LB += OrderLots();
b++;
}
if (ipucu==OP_SELL)
{
LS += OrderLots();
s++;
}
}
}
}
if (izmb>b ||izmb<b || izms>s || izms<s) {
zmb=b;
izms=s
}
 
Roman Sharanov :

MT5'teki OBV göstergesi, hesaplama fiyatının türünü seçme yeteneğine sahip değildir.

MT4 bu özelliğe sahiptir.

Niye ya?

Ve genel olarak, OBV, mumun aşağı olduğu tüm tarih boyunca tüm hacmin toplamı olarak hesaplanır, orada hacim "negatif" olur.
Peki, MT4'te böyle bir hesaplama ile göstergeyi hesaplamak için fiyat türünü seçme fırsatı nereden geliyor? hesaplamaya dahil değilse

İyi hazırlanmış bir soru, cevabın yarısını içerir.

 
scomoroh :

Kodun ayrı bir sayıdaki alış ve satış emirlerini saymak için bir bölümü vardır.

Ve onu eklemek için bir yer var)

 
Artyom Trishkin :

İyi hazırlanmış bir soru, cevabın yarısını içerir.

Yani, mt4 c OBV'de fiyat tipi seçimi hiçbir şey ifade etmiyor ve hiçbir şeyi etkilemiyor mu?
 
MakarFX :

Ve onu eklemek için bir yer var)

O zaman soruyu tekrarlayacağım.

Kodun ayrı bir sayıdaki alış ve satış emirlerini saymak için bir bölümü vardır. (b - emirleri al, s - emirleri sat)

Ayrıca, yeni bir emir açılırsa veya mevcut bir emir kapanırsa, eylemin devam etmesi için bir koşul yazdım. Yani daha önce açılan emir sayısı ve sonraki değişikliklerde bir karşılaştırma yapmak gerekiyor ama bunu koda nasıl yazacağımı anlamadım.Sipariş sayısındaki değişiklikler nasıl kaydedilir? Lütfen yardım et.


    double LB= 0 ,LS= 0 ;
   int b= 0 ,s= 0 ;
   int izmb= 0 , izms= 0 ;
   
   for ( int i= 0 ; i< OrdersTotal (); i++)
   {    
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()== Symbol ())
         { 
             int tip = OrderType(); 
             if (tip==OP_BUY)             
             {  
               LB  += OrderLots();
               b++; 
             }                                         
             if (tip==OP_SELL)        
             {
               LS  += OrderLots();
               s++;
            } 
         }
     }     
   }
    if (izmb>b ||izmb<b || izms>s || izms<s){ //условие сравнения количества ордеров, изменилось или нет,
    izmb=b;                                   //если изменилось то присваиваем новое значение, как его сохранить? Ведь с новым тиком
    izms=s                                    // оно опять будет равно "0"???
     }
 
Vitaly Muzichenko :

Herhangi bir şey varsa, onu statik hale getirmeniz gerekir, aksi takdirde sıfırlanır

Genelde bayrakları global yaparım. Tabii ki, işlevin gövdesinde yeniden bildirilecek ve bir Statik gerekli. AMA neden kimse kaşlı ayraçların eksik olduğunu fark etmedi)))) print VE parantez içindeki atama olmalıdır)

Ve statik olmadan, elbette, her işlev çağrısına yazdıracaktır. printsimbol= "" NULL olacak ve sembol mevcut değerine ayarlanacak)

 static string symbol, printsimbol= "" ;
       long currChart= ChartFirst (); int i= 0 ;
       while (currChart>= 0 )
        {
         if ( ChartGetInteger (currChart, CHART_BRING_TO_TOP , 0 )== true ) 
           { 
             if ( ChartSymbol (currChart)!=symbol)
                {
                 symbol= ChartSymbol (currChart);
                 if (printsimbol!=symbol)
                   { Print (symbol);printsimbol=symbol;}
                }
           } 
         currChart= ChartNext (currChart);  i++;
        }
 
scomoroh :

O zaman soruyu tekrarlayacağım.

Kodun ayrı bir sayıdaki alış ve satış emirlerini saymak için bir bölümü vardır. (b - emirleri al, s - emirleri sat)

Ayrıca, yeni bir emir açılırsa veya mevcut bir emir kapanırsa, eylemin devam etmesi için bir koşul yazdım. Yani daha önce açılan emir sayısı ve sonraki değişikliklerde bir karşılaştırma yapmak gerekiyor ama bunu koda nasıl yazacağımı anlamadım.Sipariş sayısındaki değişiklikler nasıl kaydedilir? Lütfen yardım et.


bunu denerdim

 //+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
int izmb,izms;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- create timer
   EventSetMillisecondTimer ( 200 );

   izmb= 0 ; izms= 0 ;
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//--- destroy timer
   EventKillTimer ();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   if (CountOrders( 0 , 0 )!=izmb){izmb=CountOrders( 0 , 0 );}
   if (CountOrders( 0 , 1 )!=izms){izms=CountOrders( 0 , 1 );}
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
//|  0 - ордера типа BUY          1 - ордера типа SELL               |
//|  2 - ордера типа BUYLIMIT     3 - ордера типа SELLLIMIT          |
//|  4 - ордера типа BUYSTOP      5 - ордера типа SELLSTOP           |
//|  6 - ордера типа Balance     -1 - Все типы ордеров               |
//+------------------------------------------------------------------+
int CountOrders( string symb= "" , int or_ty=- 1 ) 
  {
   int cnt= 0 ;
   if (symb== "0" ) symb= _Symbol ;
   for ( int pos= OrdersTotal ()- 1 ;pos>= 0 ;pos--)
     {
       if ( OrderSelect (pos,SELECT_BY_POS)== true )
        {
         if (OrderSymbol()==symb || symb== "" )
           {
             if (or_ty< 0 || or_ty==OrderType()) cnt++;
           }
        }
     }
   return (cnt);
  }
//+------------------------------------------------------------------+
 
EA'nın neden test cihazında iyi çalıştığını kim bilir, sipariş verir, vb., ancak gerçek bir hesapta , robot aktif olmasına rağmen siparişler verilmez.