[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 411

 
sergeev :

Numara


Buradaki sorun sadece döngü. numaralandırma 0'dan 2'ye kadar devam eder, ancak 2'den 0'a kadar gereklidir.



Bana bir örnek göster lütfen yaptım
 for (i = OrdersTotal (); i > 0 ; i--)
Yardım etmedi
 

ss2019 :



Bana bir örnek gösterin lütfen, yaptım yardımcı olmadı


şöyle bir script yaptım

 int orderstotal = OrdersTotal ();
         for (i = 0 ; i < orderstotal; i++ )
                {
                 if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES) == FALSE) break ;
                 if ( OrderSymbol () == Symbol () && OrderMagicNumber () == MagicNumber)
                        {
                         if ( OrderType () == OP_BUY)
                         if ( OrderClose ( OrderTicket (), OrderLots (),Bid,Slippage) == false)
                                {
                                 Print ( GetLastError ());
                                }
                         if ( OrderType () == OP_SELL)
                         if ( OrderClose ( OrderTicket (), OrderLots (),Ask,Slippage) == false)
                                {
                                 Print ( GetLastError ());
                                }
                         if ( OrderType () > 1 )
                         if ( OrderDelete ( OrderTicket ()) == false)
                                {
                                 Print ( GetLastError ());
                                }
                        }
                 Print (i, " " ,orderstotal);
                }

Sonuç olarak, Print aşağıdaki çıktıları verir

0 4

on dört

Ve işte bu, nedense döngü çıktı vermiyor

24

3 4

Döngüye I 0 yerine OrderSelect (i, SELECT_BY_POS, MODE_TRADES) eklendi yani ilk sipariş her zaman seçili olsun ve script çalışmaya başlasın. listede yalnızca iki sipariş olduğunda üçüncü sıra.

 
sss2019 :


şöyle bir script yaptım

Sonuçta...

Örnekler
 
sss2019 :

Bana bir örnek göster lütfen yaptım

 for (i = OrdersTotal (); i > 0 ; i--)

Yardım etmedi


çünkü düşünürün hala açılması gerekiyor

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

Bu ikilemi çözmeme yardım et

 int i;
    double maxrange,range;
     double Ma1 = iMA ( Symbol (), Period (),FastMaPeriod, 0 , MODE_EMA , PRICE_OPEN ,i);
     double Ma2 = iMA ( Symbol (), Period (),SlowMaPeriod, 0 , MODE_EMA , PRICE_OPEN ,i);
   
                    while (Ma1 > Ma2)
                        {
                        i++;
                        Ma1 = iMA ( Symbol (), Period (),FastMaPeriod, 0 , MODE_EMA , PRICE_OPEN ,i);
                        Ma2 = iMA ( Symbol (), Period (),SlowMaPeriod, 0 , MODE_EMA , PRICE_OPEN ,i);
                        range = (Ma1 - Ma2)/Point;
                         if (range > maxrange) maxrange = range;
                        }

Komut dosyası, satırlar arasındaki maksimum mesafeyi arar. Sonuçlara göre, tüm değerleri tüm çubuklarda görüntüledim, maksimum mesafe bir çubukta 1.6235 ve diğerinde 1.6208 olduğunda elde edilir.

Print'i (maxrange) görüntülemeye çalışıyorum; 0.086 gösteriyor, nedenini hiç anlamıyorum, Noktaya göre bölme yapıyorum

 
sss2019 :

Bu ikilemi çözmeme yardım et

Komut dosyası, satırlar arasındaki maksimum mesafeyi arar. Sonuçlara göre, tüm değerleri tüm çubuklarda görüntüledim, maksimum mesafe bir çubukta 1.6235 ve diğerinde 1.6208 olduğunda elde edilir.

Print(maxrange) yazdırmaya çalışıyorum; 0.086 gösteriyor, nedenini hiç anlamıyorum, Noktaya göre bölme yapıyorum


Bu bir ikilem değil. İkilem, iki çözümden hangisini seçmenin daha iyi olduğunu bilmemenizdir.

İlk olarak, iMA() işlevinin altı değil yedi parametresi vardır. İkinci olarak, int i dizesiyle bir değişken bildirdiniz. Ve sonra i değişkeni hiçbir yerde bir değerle başlatılmaz. Sonuç olarak, ya sıfırdır ya da önceki aktiviteden hücrelerde kalan gereksiz RAM hücreleri içerir. Üçüncüsü, while döngüsü doğru organize edilmemiştir. Diyelim ki başlatmadan sonraki i değişkeni sıfıra eşit. Ma1 > Ma2 ifadesinin de doğru olduğunu varsayalım. Sonuç olarak while(Ma1 > Ma2) satırı döngüyü çalıştıracaktır. Döngünün bir sonraki yinelemesinde, (Ma1 > Ma2) ifadesinin doğru olmadığı ve döngünün kesintiye uğrayacağı ortaya çıkıyor. MA1 ve MA2 değişkenleri maksimum olan mesafeyi içermeyecektir - maksimum bir kezdi. Bu koşul yalnızca MA1'in şimdi MA2'den küçük veya ona eşit olduğunu gösterecektir.

Ayrıca, maxrange değişkeni yalnızca satır aralığındaki değerle başlatılır = (Ma1 - Ma2)/Nokta; Peki, if(range > maxrange) koşulu hiçbir zaman yürütülmezse, çünkü kodun daha önceki hiçbir yerinde maxrange değişkenini bir değerle başlatmazsanız? Hesaplamaların sonucunu ve RAM hücrelerinin çöplerini karşılaştırdığınız ortaya çıktı. Burada kod yürütmenin bir sonucu olarak anlaşılmaz baskılarınız var.

 
Yani işin gerçeği şu ki döngüdeki tüm MA değerlerinin çıktısını yaptım ve tüm değerler doğru görüntüleniyor yani bu periyoda ait tüm MA değerleri sıralandı. Ama nedense bu yerde hesaplama yanlıştır = (Ma1 - Ma2)/Nokta;
if(aralık > maksimum aralık) maksimum aralık = aralık;
 
sss2019 :
Yani işin aslı şu ki döngüdeki tüm MA değerlerinin çıktısını yaptım ve tüm değerler doğru görüntüleniyor yani bu döneme ait tüm MA değerleri sıralandı. Ama nedense bu yerde hesaplama yanlıştır = (Ma1 - Ma2)/Nokta;
if(aralık > maksimum aralık) maksimum aralık = aralık;

*Nokta

aralık = (Ma1 - Ma2) *Nokta





 
pako :

*Nokta

aralık = (Ma1 - Ma2) *Nokta

MA1 = 0.6526, MA2 = 0.6516. MA1-MA2 = 0.6526-0.6516 = 0.0010. Puan = 0.0001. Çarparsanız, o zaman bir bilardo olacak. 0,0010 * 0,0001 = 0,0000001
 
sss2019 :
Yani işin gerçeği şu ki döngüdeki tüm MA değerlerinin çıktısını yaptım ve tüm değerler doğru görüntüleniyor yani bu periyoda ait tüm MA değerleri sıralandı. Ama nedense bu yerde hesaplama yanlıştır = (Ma1 - Ma2)/Nokta;
if(aralık > maksimum aralık) maksimum aralık = aralık;

Peki bu yüzden bir girdi üzerine gelen kontrol etmek gereklidir. Hesaplamalara dahil olan değişkenlerin değerleri tam olarak nedir?