KimIV'ten faydalı özellikler - sayfa 85

 

Sonuç olarak, kapanış bloğuna, "doğru" bir kapanışa yol açan özel bir konum sayısı eklendi, ancak günlüğünde birkaç kez " hata 131 " hala ortaya çıkıyor:

Bir sipariş kontrolünün halihazırda mevcut olması ve

131 hatasını önlemek için kodu düzeltebilir misiniz?

Çok teşekkürler.

Dosyalar:
codz2.mq4  5 kb
 
hope писал(а) >>

131 hatasından kaçınmak için kodu düzeltebilir misiniz?

Çok teşekkürler.

Ve bölünmeden sonra parti büyüklüğünü sizin için kim normalleştirecek? Bu nedenle hata.

 

Alex, lotu kapanış fonksiyonuna geçirmeden önce, NormalizeLot() fonksiyonu ile boyutunu normalize edin.

 

Teşekkürler Igor, İskender,

Nitekim SELLCLOSED_1= OrderClose ( OrderTicket(), Lot/3, Ask, 0, Red ); fonksiyonunda Parti/3 (Lot/2, Lot) 0.01 ile değiştirerek partileri kontrol ederek 131 hatasından kaçındım. ), ancak öncelikle Lot şeklinde kapatmak daha doğrudur. İkincisi, daha önce programda kullanıcı tanımlı fonksiyonlara ve onların çağrılarına rastlamamıştım ki bu oldukça ilginç geldi. Kodda her şey doğru bağlanmış gibi görünüyor ve her şey çalışıyor, ancak 131 hatası hala devam ediyor. Lütfen koda bir göz atın. Belki NormalizeLot'u çağırma işlevinde bir şey zordu.

Dosyalar:
cod3.mq4  6 kb
 

Üzgünüm. Orijinal kodda, satırda

yenileme hızları ();
BUYCLOSED_1=OrderClose( OrderTicket(), CloseLot, Bid, 0, Red );

duruma göre doğru LotClose maliyeti

Parti=SiparişLots(); // PARTİ SAYISI
LotKapat =NormalizeLot(Lot); // KAPANIŞ PARTİ NORMALİZE EDİLEN PARTİ DEĞERİNE ATANIR

yazarken hata yapmışım....

 
hope писал(а) >>

Lütfen koda bir göz atın. Belki NormalizeLot'u çağırma işlevinde bir şey zordu.

değiştirmeyi dene

   if ( ro ) l = MathCeil ( lo * k ) / k ; else l = MathFloor ( lo * k ) / k ;

üzerinde

   if ( ro ) l = NormalizeDouble ( MathCeil ( lo * k ) / k , 2 ) ; else l = NormalizeDouble ( MathFloor ( lo * k ) / k , 2 ) ;
 

Günaydın İskender

Ne yazık ki, ipucunuz yardımcı olmadı. Günlüğü analiz ettim ve hatanın, bir partinin bir bölümünün kapanmasının diğer bir partinin bir bölümünün kapanmasıyla neredeyse aynı zamana denk geldiği iki durumda meydana geldiğini buldum.

Zamanda herhangi bir tesadüf yoksa, partinin bir kısmı hatasız olarak kapatılır.

Bir alımı kapatmak için lotları ve bir satışı ayrı ayrı kapatmak için lotları normalleştirmeye çalıştım, ancak boşuna:

çift
Parti, // Miktar seçilen sırayla lotlar
Lot Kapat Satın Al,
lotKapatSatış,

................................................

Parti=SiparişLots();
LotCloseBuy =NormalizeLot(Lot);

LotKapatSat =NormalizeLot(Lot);

................................................

BUYCLOSED_3=OrderClose( OrderTicket(), LotCloseBuy, Bid, 0, Red );

......................

SELLCLOSED_3=OrderClose( OrderTicket(), LotCloseSell, Sor, 0, Red );

...................

Igor'un işlevi

NormalizeLot.........

Herhangi bir fikir var mı?

 

İşte ben bir koyunum! Uh - bu iğrenç....

Sipariş döngüsünde normalleştirilmiş partiler

//------------------------------------------------ --------------- 4 --
// Siparişler için muhasebe
Sembol=Sembol(); // fin.instr'nin adı.
Toplam Satın Al=0; // Satınalma siparişlerinin sayısı
SatışToplam=0; // Satış emirlerinin sayısı
for(int i=1; i<=OrdersTotal(); i++) // Sipariş üzerinden döngü
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa
{ // Siparişlerin analizi:
eğer (OrderSymbol()!=Symb)devam ederse; // Bizim Fincemiz değil. alet
if (OrderType()>1) // Beklemede
{
Alert(" Bekleyen bir sipariş algılandı. Expert Advisor çalışmıyor.");
dönüş; // başlangıçtan çık()
}
if (OrderType()==OP_BUY)
{
Toplam Satın Al++; // sipariş sayacı satın al
BuyOrdOpPrice=OrderOpenPrice(); // Emir açılış fiyatı al
}
if (OrderType()==OP_SEL)
{
Toplam Satış++; // Satış emirlerinin sayacı
SellOrdOpPrice=OrderOpenPrice(); // Satış emri açılış fiyatı
}
Bilet=SiparişTicket(); // Seçilen numara. ord.
Tip=SiparişTürü(); // Seçilen siparişin türü.
Parti=SiparişLots();

LotCloseBuy =NormalizeLot(Lot);

LotKapatSat =NormalizeLot(Lot);
}
}

....ama açık siparişleri muhasebeleştirmek için, olması gereken yerde, kendisi ayrı bir döngü yarattı!!! kapanış partilerini normalleştirmek

//------------------------------------------------ --------------- 6 --

// Açık siparişleri kontrol etme
int _GetLastError = 0, _OrdersTotal = OrdersTotal();
intz;


//---- tüm açık pozisyonlar arasında döngü
for ( z = _SiparişlerToplam-1 ; z >=0; z -- )
{
// for döngüsü başladı - tüm açık siparişler arasında sıralama
//---- pozisyon seçerken bir hata oluştuysa sonrakine geç
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Hata #", _GetLastError );
devam etmek;
}
//Tamamlanmış
// Para Birimi ve Büyüye Bağlama
//---- mevcut enstrüman için pozisyon açılmamışsa, atla
eğer ( OrderSymbol() != Symbol() ) devam ederse; //HATA
//Tamamlanmış

//---- MagicNumber Expert_ID'ye eşit değilse bu pozisyonu atlayın
eğer ( OrderMagicNumber() != Expert_ID ) devam ederse; //HATA
//Tamamlanmış
if (OrderType()==OP_BUY)
{
BuyClLot=OrderLots();
}
if (OrderType()==OP_SEL)
{
SellClLot=OrderLots();
}
OpenedLots=OrderLots();
LotCloseBuy =NormalizeLot(OpenedLots); // Parti sayısı
LotKapatSat =NormalizeLot(AçıkLotlar); // Parti sayısı

//Bir AL pozisyonunun açık olup olmadığı kontrol ediliyor,

................................................................

Teşekkürler Igor, İskender. Parti normalleştirme işlevi olmasaydı, hala çıkmazda olurdum....

 

İyi akşamlar,

Ve ilk hata:

2009.07.08 21:05:45 TestGenerator: eşleşmeyen veri hatası (2009.07.08'de 651 ses sınırı 19:00 aşıldı)
Kritik mi yoksa sadece bir testçi hatası mı?

Teşekkür ederim.

 
Igor - buraya bakın, lütfen 'Boşluk göstergesi'