Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 153

 

Bilgi panelli sınıfları olan bir kodum var !!!
Ama bir sorun var!
Üzerinde etiketim var ve uzaktan ayarlar sayesinde tepki verebiliyorum .... yani ayarları 2-3 kez değiştirdiğinizde panelin kendisi farklı yönlerde hareket ediyor !!! ve zaman dilimini 2-3 kez değiştirdiğinizde!! ondan nasıl kurtulur???


Bazı ek bilgiler:
Dialog.mqh dosyasındaki satırları CAppDialog::Destroy(const int Reason) işlevinde yorumlarsanız buldum
if(m_deinit_reason!=WRONG_VALUE)
dönüş;
daha sonra panel normalde yok edilir ve zaman dilimleri değiştirilirken yeniden başlatılır.

Dosyalar:
TradePanel.mq4  15 kb
 

Merhaba. MT4 üzerinde sadece grafik nesnelerle çalışan ve aynı zamanda farklı bir periyotta çalışan aynı gösterge tarafından oluşturulan grafik nesnelerin konumunu izleyen bir gösterge yazıyorum. Eski dönemin dikey çizgisini manuel olarak hareket ettirirken, trend çizgileri yeni konum dikeyinden yeniden çizilir. çizgiler ve daha genç dönemin dikey çizgisi de yeniden çizilir. Bütün bunlar OnChartEvent olayında işlenir. Sorun şu ki, vert taşırken. daha yüksek periyottaki çizgiler bazen daha düşük periyodun nesneleri hemen yeniden çizilmez, ancak sadece köşeye çift tıkladığımda yeniden çizilir. daha yüksek dönemde çalışan göstergenin satırları. Ve daha güçlü başka bir bilgisayarda bu daha az sıklıkta olur. Kodda nesneleri yeniden çizdikten sonra ChartRedraw() işlevini kullanıyorum.

Bunun nedeni bilgisayar kaynaklarının eksikliği olabilir mi?

Göstergeleri farklı grafiklerde çalıştırmayı ve daha yüksek bir dönemde çalışan bir göstergeden ikinci göstergeye özel bir olay oluşturmak için EventChartCustom'u kullanmayı denemek istiyorum. Belki programı hızlandırır?

 

Bir yapının tüm öğeleri nasıl hızlı bir şekilde sıfırlanır (temizlenir)?


Yapı küreseldir. Belirli anlarda sıfırlanması ve ardından yeni verilerle doldurulması gerekir.

Her şeyi tek tek sıfıra eşitleyebileceğinizi anlıyorum. Başka bir yol var mı?


yapıABC{

int a1;

int a2;

int a3;

};

ABC a;

Böyle bir şeye ihtiyaç var

a = 0; //yapıdaki tüm elemanlar sıfır oldu

 
Sergey Likho :

Bir yapının tüm öğeleri nasıl hızlı bir şekilde sıfırlanır (temizlenir)?


Yapı küreseldir. Belirli anlarda sıfırlanması ve ardından yeni verilerle doldurulması gerekir.

Her şeyi tek tek sıfıra eşitleyebileceğinizi anlıyorum. Başka bir yol var mı?


yapıABC{

int a1;

int a2;

int a3;

};

ABC a;

Böyle bir şeye ihtiyaç var

a = 0; //yapıdaki tüm elemanlar sıfır oldu

 ZeroMemory ( a );
 
N puandan sonra çalışan ve ardından fiyatı takip eden takip eden bir iş parçacığı kimde?
Var ama N puandan sonra çalışıyor ve başabaş noktasında duruyor....
lütfen düzeltin, kafamı kırdım!!!
void TrailingSL()
{
int    er;
if(shagtrala==0) return;
for(int i = 0; i < OrdersTotal(); i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()==OP_BUY && NormalizeDouble(Ask-OrderOpenPrice(), Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(Ask-OrderStopLoss(), Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() + (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
         if(OrderType()==OP_SELL && NormalizeDouble(OrderOpenPrice()-Bid,Digits) >= NormalizeDouble(shagtrala, Digits) &&
         NormalizeDouble(OrderStopLoss()-Bid, Digits) > NormalizeDouble(lTrailingDistance, Digits))
           {
            er = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss() - (lTrailingDistance * _Point), OrderTakeProfit(),OrderExpiration(),0);
           }
        }
     }
  }
return;
}
 
ponochka :
N puandan sonra çalışan ve ardından fiyatı takip eden takip eden bir iş parçacığı kimde?
Var ama N puandan sonra çalışıyor ve başabaş noktasında duruyor....
lütfen düzeltin, kafamı kırdım!!!

işte benim trolüm çalışıyor, çalışıyor:

 //____________________________________________________________________________________
bool trailingpos( int magic_, int trail_p){
   string sym= Symbol (); bool res = true ; double sl,slnew,tpips = trail_p* Point ; int i,k= OrdersTotal ();
   for (i= 0 ;i<k;i++){
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )){
         if ( OrderSymbol ()==sym && OrderMagicNumber ()==magic_){
             switch ( OrderType ()){
               case OP_BUY :
                           slnew = NormalizeDouble ( Ask - tpips, Digits );
                           sl = OrderStopLoss ();
                           if ( OrderOpenPrice () <slnew)
                               if ((sl < slnew) || (sl == 0.0 )){
                                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (),slnew, OrderTakeProfit (), OrderExpiration (), clrNONE ))
                                                   {res = false ; Print ( __FUNCTION__ , "OrderModify завершилась с ошибкой № " , GetLastError ());}
                           }
                           break ;
               case OP_SELL :
                           slnew = NormalizeDouble ( Bid + tpips, Digits );
                           sl = OrderStopLoss ();
                           if ( OrderOpenPrice ()> slnew)
                               if ((sl > slnew) || sl == 0.0 ){
                                     if (! OrderModify ( OrderTicket (), OrderOpenPrice (),slnew, OrderTakeProfit (), OrderExpiration (), clrNONE ))
                                                   {res = false ; Print ( __FUNCTION__ , "OrderModify завершилась с ошибкой № " , GetLastError ());}
                           }
                           break ;
              }
           }
        }
     }
return (res);}
//____________________________________________________________________________________

işlev çağrısı 2 parametre sihirli sayı ve pp trol

 
Sergey Likho :

Bir yapının tüm öğeleri nasıl hızlı bir şekilde sıfırlanır (temizlenir)?


Yapı küreseldir. Belirli anlarda sıfırlanması ve ardından yeni verilerle doldurulması gerekir.

Her şeyi tek tek sıfıra eşitleyebileceğinizi anlıyorum. Başka bir yol var mı?

 // Обнуляет любую простую структуру
template < typename T>
void SetNull( T &Value )
{
   static T NullValue = { 0 };
  
  Value = NullValue;
}
 

Merhaba! Bir günde tüm siparişler için toplam kazanç için bir kod var mı?

bende böyle var:

 double getProfitFromTime( datetime time)
  {
   double profit = 0 ;
   
   for ( int i = OrdersHistoryTotal () - 1 ; i >= 0 ; i--)
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderSymbol () == Symbol () && OrderMagicNumber () == magic)
        {
         if ( OrderCloseTime () < time)
             break ;
         
         profit += OrderProfit () + OrderCommission () + OrderSwap ();
        }
   
   return (profit);
  }

buna şu şekilde atıfta bulunmanız gerekir:

getProfitFromTime( iTime ( NULL , PERIOD_D1 , 0 );

Günde bir döviz çiftinin kârını ve tüm döviz çiftlerinin toplam kârını görebilmeniz için bir iş parçacığı olarak değiştirilebilir mi?

 
ponochka :

ve tüm döviz çiftleri için toplam?

Şu durumda OrderSymbol () == Symbol () öğesini kaldırın:

 if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY ) && OrderSymbol () == Symbol () && OrderMagicNumber () == magic)
o zaman kodun bu kısmı terminalin geçmişindeki tüm siparişleri sadece sihirli sayı ile sayacaktır, eğer farklı para birimleri için sihirli sayılar aynıysa, OrderMagicNumber () == magic'i kaldırırsanız, o zaman tüm siparişleri sayar. sihirli sayıyı dikkate alarak
 

Herkese selam. Bir acemi söyle. Yayılma davranışı hakkında biraz araştırma yapmak istiyorum. Toplam yayılmayı hesaplayan bir kod var. Her şey yazılı, her şey yolunda gidiyor.

 void ModifySpread()
{
   int Spread = ( Ask - Bid ) / Point ;
  
    
  Sumsp = SumSp + Spread;
  Vol++;
  
  PrevTime = Time [ 0 ];
  
   return ;
}

Spreadin herhangi bir hareket yapmadığı yani alış ve satışın değişmediği anları hesaplamadan çıkarmak istiyorum.
Bunu şöyle yapıyorum:

 void ModifySpread()
{
   int Spread = ( Ask - Bid ) / Point ;
   if ((prevsbid == Bid )) && (prevsask == Ask )) return ;
   
  SumSp = SumSp + Spread;
  Vol++;
  
  

  prevsask = Ask ;
  prevsbid = Bid ;
  PrevTime = Time [ 0 ];
   return ;
}

Ama hiçbir şey değişmiyor. ben nerdeyim aptal

Neden: