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

 
Maxim Kuznetsov :

sadece bir ekleme, terminalin yeterli geçmişe sahip olduğu ve oluşturacağı GARANTİ EDİLMEZ.

yukarıdaki örnekte tarihe referans yok

bu nedenle OrderSelect() sonucunun doğru olup olmayacağı garanti edilir

UPD: OrderSelect 4-ke'de çok iyi çalışıyor, bir kez test ettim - piyasa emirleri için, emir özelliklerine erişim zamanı .... saniyede gerçekten milyonlarca kez, arama yapmak istemiyorum, tartışıyormuşum gibi görünüyor moderatör Artem ile, ama burada dedikleri gibi, "tüm keçeli kalemlerin tadı farklıdır", isterseniz - kalsın

 

merhaba, her işlem için bir düşüş verisine ihtiyaç vardır.

Belki birisi bu tür istatistikleri toplayan ve bunu bir rapor olarak veren bir komut dosyasıyla karşılaştı?

Teşekkür ederim

 
законопослушный гражданин :

merhaba, her işlem için bir düşüş verisine ihtiyaç vardır.

Belki birisi bu tür istatistikleri toplayan ve bunu bir rapor olarak veren bir komut dosyasıyla karşılaştı?

Teşekkür ederim

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

"elle" yazılmış, kontrol edilmemiş, hatalarla dolu :-) ihtiyaçlarınıza ve kullanımınıza uyacak şekilde ince ayar yapın

 
Maxim Kuznetsov :

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

"elle" yazılmış, kontrol edilmemiş, hatalarla dolu :-) ihtiyaçlarınıza ve kullanımınıza uyacak şekilde ince ayar yapın

Teşekkürler, anlamaya çalışacağım!

 
@Igor Makanu , terminalde sipariş sıralama konusundaki cevaplarınız için çok teşekkür ederim. Muhtemelen onları bir dizi yapı olarak kaydedeceğim ve kendim sıralayacağım. Şüpheler, temel olarak, her kene üzerinde gerçekleştirilen bu tür eylemlerin performans üzerinde gözle görülür bir olumsuz etkisi olacağından korkmamdan kaynaklanıyordu.
 
Janis Ozols :
@Igor Makanu , terminalde sipariş sıralama konusundaki cevaplarınız için çok teşekkür ederim. Muhtemelen onları bir dizi yapı olarak kaydedeceğim ve kendim sıralayacağım. Şüpheler, temel olarak, her kene üzerinde gerçekleştirilen bu tür eylemlerin performans üzerinde gözle görülür bir olumsuz etkisi olacağından korkmamdan kaynaklanıyordu.

Öyleyse neden her keneyi sıralayasınız? Sadece kayıt sayısını değiştirirken veya listeyi tamamen değiştirirken yeterlidir ...

 
İyi günler Lütfen navigasyon cihazından yüklenen göstergenin neden tabloya sürüklenmediğini anlamama yardım edin. Katalogda var.
Dosyalar:
image002.jpg  38 kb
 
Tünaydın. Gösterge aracının piyasadan ticaret terminaline otomatik olarak yüklenmesi yoksa, sorun nedir?
 
Igor Makanu :

yukarıdaki örnekte tarihe referans yok

bu nedenle OrderSelect() sonucunun doğru olup olmayacağı garanti edilir

UPD: OrderSelect 4-ke'de çok iyi çalışıyor, bir kez test ettim - piyasa emirleri için, emir özelliklerine erişim zamanı .... saniyede gerçekten milyonlarca kez, arama yapmak istemiyorum, tartışıyormuşum gibi görünüyor moderatör Artem ile, ama burada dedikleri gibi, "tüm keçeli kalemlerin tadı farklıdır", isterseniz - kalsın

Moderatör Artem tartışmıyor. Moderatör Artem tartışıyor :)
 
void OnTick ()
  {
     if (isCrossing() == 1 )          
      
    ... 

     if (isCrossing() == 2 )
      
    ... 
  }

int isCrossing(){  
   double ma = iMA ( NULL , g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maApplietPrice, 0 );
   double low = iLow ( Symbol (), g_timeFrame, 0 );
   double high = iHigh ( Symbol (), g_timeFrame, 0 );

   if (g_barTime < iTime ( NULL ,g_timeFrame, 0 ) && high > ma && Bid <= ma){
    g_barTime = iTime ( NULL ,g_timeFrame, 0 );
     return 1 ;
  } 
  
   if (g_barTime < iTime ( NULL ,g_timeFrame, 0 ) && low < ma && Bid >= ma){
    g_barTime = iTime ( NULL ,g_timeFrame, 0 );
     return 2 ;
  }
   
   return 0 ;
}
isCrossing() neden 2 döndürmüyor ??? IsCrossing() 'in kendisinin ikinci if için bir girişi vardır, ancak OnTick() 'in isCrossing() == 2 olduğunda if öğesine bir girişi yoktur. Ne oluyor be...