Zero Divide (Sorunu buldum - ama neden?) - sayfa 3

 
double loss_for_1_lot = pips_to_bsl/ ts * tv ;

Bir div 0 ile sonuçlanan tv DEĞİLDİR. sadece ts olabilir. 5 basamaklı bir komisyoncuda ts sıfır (4 basamaklı) yazdırabilir

Bana öyle geliyor ki, geçmişi başka bir yerden indirmeden önce brokerinizden piyasa bilgisini almak için o çifti hiç açmadınız.

 

Sıfır bölünmenin yayınlanan kod tarafından oluşturulduğuna inanmakta zorlanıyorum.

DomGilberto bu betiği derleyin ve sıfır ticksize döndürdüğünü düşündüğünüz grafiğe ekleyin.

 int start()
  {
//----
   int i = Bars - 1 ;
   int cnt;
   int tscnt = 0 ;
   int tvcnt = 0 ;
   double ts = MarketInfo( Symbol (), MODE_TICKSIZE);
   double tv = MarketInfo( Symbol (), MODE_TICKVALUE);
   while (i >= 0 )
   { if (ts < 0.00001 ) tscnt++;
     if (tv < 0.00001 ) tvcnt++;
    i--;
   }
   Alert ( "TickSize returned an erroneous value " ,tscnt, " times." );
   Alert ( "TickValue returned an erroneous value " ,tvcnt, " times." );
//----
   return ( 0 );
  }
 
DomGilberto :

Yaptığım bu videonun (40 saniye kadar) neden bahsettiğimi gösterdiğini umuyorum (açıklayıp açıklamadığımdan emin değilim).

Video: http://screencast.com/t/uMHY5DpM

Senaryoyu canlı grafiğe (gerçek hesap) bıraktığımda ilk kısımda, tik değeri ve kene boyutunun lot penceresinde (birimler) gösterdiğim o "kavramsal hesap"ta "0" döndürdüğünü göreceksiniz.

İkinci kısım aynı broker ile ama lot bazlı feed'de ve bu sefer bir tick değeri ve tick boyutu döndürüyor. Yine lot kullanarak işlem yaptığınızı gösteriyorum....

Dolayısıyla strateji test cihazıyla ilgili olarak, neden çalıştığı ve bazen çalışmadığı hakkında hiçbir fikrim yok. Ben de geriye dönük testleri çalıştırırken hesap bağlandı (bir demo kavramsal beslenen hesapta (birimler)).

Bir sonraki sorum şu olurdu, eğer bu kavramsal federal hesaptan alacağım tipik yanıt buysa, bu durumda pozisyon boyutlandırma hesaplamamı nasıl düzeltebileceğimi önerebilir misiniz? Çok temelli bir besleme için mükemmel çalışıyor... Bunu biraz daha iyi açıklar mı?

"Test" kodunuzda farklı kod kullanıyorsanız, bu neyi kanıtlar?

TICKVALUE öğesinin şu andan itibaren geçerli değeri döndürdüğünün farkında mısınız? . . Strateji Testi çalışması sırasında bile? bu nedenle, temel para biriminin mevduat para birimi olmadığı herhangi bir çift için yanlış olacaktır ve lot hesaplamalarınız yanlış olacaktır. . .

 

Videonuzda ilk olarak GBPUSD ve ikinci olarak GBPJPY kullanıyorsunuz.

Senaryonuzu bir GBPUSD normal lot grafiğine eklemiş olsaydınız, tickvalue için bir değer alacağınızı düşünüyorum, ancak ticksize de sıfır olacaktır.

Bunun nedeni, komut dosyası uyarılarınızın çiftleri kullanması ve dolayısıyla 0.00001'in 0 olarak yazdırılmasıdır.

Bunun yerine DoubleToStr (MarketInfo(Symbol(),MODE_TICKVALUE),8) kullanın

 

Tamam, öncelikle herkesin yardımları için teşekkürler.

"Gumrai" ve "SDC" için ikinizin de benden ne yapmamı istediğinizi doğrulayan videosu burada. Komut dosyalarını, burada yayınladığınız kodunuza açıkça karşılık gelen MQL4 takma adlarınızla etiketledim. Video: http://screencast.com/t/kglCd2hCae

Aracı ve ilgili besleme, duraklama sırasında değiştirilmedi. Bu da kavramsal bir besleme hesabıdır (birimler).

@RaptorUK: Evet, TICKVALUE öğesinin şu andan itibaren geçerli değeri döndürdüğünü biliyordum. Sanırım şimdi baktığın ikinci kısım biraz mantıklı. Konum boyutlandırmanın doğru olduğundan emin olmak için kavramsal besleme hesabımın bir parçası olarak onay değerini nasıl kullanabileceğim konusunda kafam karışıyor...?

 
DomGilberto :

Tamam, öncelikle herkesin yardımları için teşekkürler.

"Gumrai" ve "SDC" için ikinizin de benden ne yapmamı istediğinizi doğrulayan videosu burada. Komut dosyalarını, burada yayınladığınız kodunuza açıkça karşılık gelen MQL4 takma adlarınızla etiketledim. Video: http://screencast.com/t/kglCd2hCae

Aracı ve ilgili besleme, duraklama sırasında değiştirilmedi. Bu da kavramsal bir besleme hesabıdır (birimler).

@RaptorUK: Evet, TICKVALUE öğesinin şu andan itibaren geçerli değeri döndürdüğünü biliyordum. Sanırım şimdi baktığın ikinci kısım biraz mantıklı. Konum boyutlandırmanın doğru olduğundan emin olmak için kavramsal besleme hesabımın bir parçası olarak onay değerini nasıl kullanabileceğim konusunda kafam karışıyor...?


Bu videolar baş belası, ekranım için çok büyük.

Neden sadece komut dosyası kodunu ve uyarı sonucunu göndermiyorsunuz?

Önerilen kodum olması gereken komut dosyasına ne koyduğunuzu bilmiyorum, ancak "08" ile sonuçlanmasının hiçbir yolu yok.

Kullanmak

 Alert ( "TICKVALUE= " ,DoubleToStr(MarketInfo( Symbol (),MODE_TICKVALUE), 8 ));
Alert ( "TICKSIZE= " ,DoubleToStr(MarketInfo( Symbol (),MODE_TICKSIZE), 8 ));
 
DomGilberto :


@RaptorUK: Evet, TICKVALUE öğesinin şu andan itibaren geçerli değeri döndürdüğünü biliyordum. Sanırım şimdi baktığın ikinci kısım biraz mantıklı. Konum boyutlandırmanın doğru olduğundan emin olmak için kavramsal besleme hesabımın bir parçası olarak onay değerini nasıl kullanabileceğim konusunda kafam karışıyor...?

Öncelikle, TICKVALUE öğesinin gerçekten de henüz yapmadığınız bir sıfır sonuç döndürdüğünü onaylamanız gerekir.
 
GumRai :


Bu videolar baş belası, ekranım için çok büyük.

Neden sadece komut dosyası kodunu ve uyarı sonucunu göndermiyorsunuz?

Önerilen kodum olması gereken komut dosyasına ne koyduğunuzu bilmiyorum, ancak "08" ile sonuçlanmasının hiçbir yolu yok.

Kullanmak


Üzgünüm - "DoubleToStr" kelimesini yazmayı unuttuğumu şimdi fark ettim!

OnayBoyutu = 0.00100000

Onay Değeri = 0.00001026

(GBPJPY kavramsal beslemesine düştü)

@SDC Kodunuzu buradan kopyaladım ve yeni bir komut dosyasına yerleştirdim. İşte iade edilen buydu.

 
Tamam yeni güncelleme, sıfır bölmenin gerçekleştiği kesin yeri tekrarlayarak onunla oynadım.

Kodumdaki bu alan, matematiği parçalamak için formülü yazdırıyor - Bunun gerçekleştiği yer, BEKLEMEDEKİ BİR SATIN ALMA SİPARİŞİNDE... henüz "pips_to_ssl" kodunun bu kısmı, SATIŞ durdurma kaybı için pip'tir... Hangisi bekleyen bir satın alma durdurma emri için KULLANILMAYACAKTIR....

 double loss_for_1_lot1 = pips_to_ssl/  ts * tv  ;
   if ( loss_for_1_lot1 == 0.0 )Print( " ERROR - loss_for_1_lot1 = 0.0 || The formula for this is: " , pips_to_ssl, "/" ,ts, "*" ,tv);


2013.10 . 02 11 : 57 : 19      2001.02 . 12 16 : 00   Trend Fishing - V1 - Notional Lots USDJPYnb,H1:  ERROR - loss_for_1_lot1 = 0.0 || The formula for this is : 0 / 0.001 * 0.0001

double pips_to_ssl=SellStopPrice-sellPrice;
   if(pips_to_ssl == 0)Print(" ERROR - pips_to_ssl = 0 || The formula for this is: ", SellStopPrice,"-",sellPrice); 

2013.10.02 12:08:01	2001.02.12 16:00  Trend Fishing - V1 - Notional Lots USDJPYnb,H1:  ERROR - pips_to_ssl = 0 || The formula for this is: 117.249-117.249

 
DomGilberto :
Tamam yeni güncelleme, sıfır bölmenin gerçekleştiği kesin yeri tekrarlayarak onunla oynadım.

Kodumdaki bu alan, matematiği parçalamak için formülü yazdırıyor - Bunun gerçekleştiği yer, BEKLEMEDEKİ BİR SATIN ALMA SİPARİŞİNDE... henüz "pips_to_ssl" kodunun bu kısmı, SATIŞ durdurma kaybı için pip'tir... Hangisi bekleyen bir satın alma durdurma emri için KULLANILMAZ....



seni önceki mesajıma yönlendiriyorum

"Bunu not et

 double loss_for_1_lot = pips_to_bsl/ ts * tv ; //<<<<<<<<<<<<<<<<<<<<<<<<<<< This is giving me a "0" randomly sometimes?

pips_to_bsl sıfırsa da sıfırla sonuçlanır. Mümkün mü?"

bsl veya ssl, aynı kodlama.