Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 126

 
hoz :

Dün sorduğum soruyu tekrar edeceğim. Ayrı bir şube yapmak istemiyorum. Bir şey net değilse, tüm soruları cevaplayacağım.

Gerekli pozisyonların kapanması ile burada bir stoperim var. İşin özü şu:

1. Pozisyonların kapanması takip edilir.

2. Son alım pozisyonu kapanır kapanmaz... tüm açık ve bekleyen pozisyonları aynı anda kapatmanız gerekir. Tümünü lotlara göre kapatır, yani. hemen büyük partiler ve ardından daha küçük partiler. Durum tamamen emirlerle deneyim kazanmak içindir.

Uygulama şu şekildedir:

start() içinde her kene üzerinde:

Piyasa emirlerini kapatmakla ilgilenmiyoruz, çünkü gerektiği gibi ertelenen kaldırılır. İşte sahip olduklarımız:

Bazı siparişler nedense kapatılmıyor. Neyin net olmadığı değil, ne zaman bazı bölümleri yazdırırım. Örneğin:

Yorumda, lastOOTHist = 01:30:00 olduğunu görebilirsiniz, ancak aslında bu doğru değildir. Sonuçta, son kapatılan siparişler, sonuç penceresinde silip süpürürseniz şunu göreceğiz:

kapanış saatleri farklı...

Burada sorun ne?

Bir şeyler atılıyor...

tam burada:

 for (i= 0 ; i<p; i++)
      {
         if ( OrderSelect (a[i][ 1 ], SELECT_BY_TICKET , MODE_TRADES )) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0 ) ClosePosBySelect();
         }
      }

Döngüden önce dizinin tüm hücrelerinin değerini yazdırın - orada ortalığı karıştıran bir köpek olabilir mi?

 
Forexman77 :
Bir anlaşmayı açarken yayılma boyutunu nasıl öğreneceğimi söyleyebilir misiniz, ancak bunun günlükte görüntülenmesi daha iyi olur mu?

Bir ticaret açtıktan hemen sonra:

ticket= OrderSend (......);
if (ticket>= 0 ) Print ( "ticket #" ,ticket, " Spread=" ,doubleToStr(Ask-Bid, Digits )); 
Günlükteki yayılmanız.
 
Sepulca :

Bir ticaret açtıktan hemen sonra:

Günlükteki yayılmanız.



Çok teşekkürler! Bir danışman yaptım, test cihazında kazanıyor, demoda daha kötü. Gerçekte, muhtemelen daha da kötü. Darbe sistemi hızlı sıçramaları yakalar, ancak büyük bir yayılma onu öldürür.

Formayı ne kadar görsel olarak izlersem izleyeyim, hiçbir zaman üç pipten fazlasını görmedim. Güçlü hareketlerin olduğu anlarda, hiç gösterilmediği veya fark etmek için zamanınızın olmadığı genişlediği varsayımı vardır.

Alpari'nin yayılımı düşük ama sanırım güçlü hareketlerle önemli ölçüde artıyor. DukasCopy'de, spread daha da küçüktür, ancak komisyonlar büyüktür, hesap birkaç milyon dolar ise küçülürler.

Dakikada 50 pip'in üzerindeki hareketlerle spread'in boyutu hakkında herhangi bir araştırma yaptınız mı? Bu hareketlerle spread ortalama olarak hangi değere yükseliyor?

Alpari'ye sordum, söylemediler.

 
FAQ :


Değere göre bir işleve bir değişken (dizi) aktarırken, işlevin içinde, başlıkta bildirdiğiniz yerel bir değişken oluşturulur: MyFunct(int my_var). Bu nedenle, bu değişkendeki değişiklikler fonksiyonun dışında görülemez. Ve bir dizi durumunda, derleyici size bunu hatırlatacaktır.

Bir değişkenin değerindeki değişikliklerin dışarıda (fonksiyonun dışında) görünmesini istiyorsanız, değişkenleri referansa göre iletin: MyFunct(int & my_var)


Evet olmasına rağmen. Sonuçta, geçerli dizi global olarak bildirilir. Ama bir fonksiyondaki değişim yereldir.Bu yüzden mikroyapılar gibi fonksiyonlar vardır. Mikro görevleri yerel olarak uygulamak için.
 

Tüm iyi kazançlar! Lütfen söyleyin - OrderOpenPrice()'ın fiyatı beş ondalık basamakla döndürmesini nasıl sağlayacağımı anlayamıyorum. Terminalde 4 karakter net bir şekilde dönerse, 5 ise, beşinciyi yuvarlayarak hala 4'ü döndürür.

 
ivan180976 :

Tüm iyi kazançlar! Lütfen söyleyin - OrderOpenPrice()'ın fiyatı beş ondalık basamakla döndürmesini nasıl sağlayacağımı anlayamıyorum. Terminalde 4 karakter net bir şekilde dönerse, 5 ise, beşinciyi yuvarlayarak hala 4'ü döndürür.


DoubleToStr(sayı; kesinlik)
 

Forexman77 :
Forexman77 :



Çok teşekkürler! Bir danışman yaptım, test cihazında kazanıyor, demoda daha kötü. Gerçekte, muhtemelen daha da kötü. Darbe sistemi hızlı sıçramaları yakalar, ancak büyük bir yayılma onu öldürür.

Formayı ne kadar görsel olarak izlersem izleyeyim, hiçbir zaman üç pipten fazlasını görmedim. Güçlü hareketlerin olduğu anlarda, hiç gösterilmediği veya fark etmek için zamanınızın olmadığı genişlediği varsayımı vardır.

Alpari'nin yayılımı düşük ama sanırım güçlü hareketlerle önemli ölçüde artıyor. DukasCopy'de, spread daha da küçüktür, ancak komisyonlar büyüktür, hesap birkaç milyon dolar ise küçülürler.

Dakikada 50 pips üzerinde hareket ederken spread'in boyutu hakkında herhangi bir araştırma yaptınız mı? Bu hareketlerle spread ortalama olarak hangi değere yükseliyor?

Alpari'ye sordum, söylemediler.


Yayılmaya gelince, bu arada, sadece Cuma günü Alpari'de analiz ettim:

İnce sarı - çubuk başına maksimum yayılma (kullanılan dakika). Koyu kırmızı - çubuk başına minimum yayılma. Gördüğünüz gibi, gün boyunca yayılma 5 ila 14 beş basamaklı nokta arasında dalgalanıyor. Fakat 21:00 server saatinden sonra spread 10 puanın altına düşmüyor ve gün sonunda genelde 52 puana çıkıyor. Fiyatta keskin bir değişiklik yapmadan önce ilginç bir an yakaladım, yayılma keskin bir şekilde artıyor:

 
artmedia70 :

Bir şeyler atılıyor...

tam burada:

 for (i= 0 ; i<p; i++)
      {
         if ( OrderSelect (a[i][ 1 ], SELECT_BY_TICKET, MODE_TRADES)) // выделенное красным лишнее, тут pool не имеет значения
         {
             if (OrderCloseTime() == 0 ) ClosePosBySelect();
         }
      }

Bunu sadece kolaylık olması için belirttim. Yazdığında ve evet, belirtmeye gerek yok. Ama o da karışmaz.

Bu nedenle, herhangi bir dizi değeri vermez:

artmedia70 :

Döngüden önce dizinin tüm hücrelerinin değerini yazdırın - orada ortalığı karıştıran bir köpek olabilir mi?



 //+-------------------------------------------------------------------------------------+
//| Закрытие ордеров, отсортированных по размеру лотов                                  |
//+-------------------------------------------------------------------------------------+
void ClosePosBySortLots()
{
   double a[][ 2 ];
   int p = 0 ;
   
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderType() < 2 )
      {
         p++;
         ArrayResize (a, p);
         a[p- 1 ][ 0 ] = OrderLots();
         a[p- 1 ][ 1 ] = OrderTicket();
      }
   }
//   pr ("ClosePosBySortLots(): " + "p = " + p);
   if (p > 0 )
   {
       ArraySort (a, WHOLE_ARRAY , 0 , MODE_DESCEND);
      
       for (i= 0 ; i<=p; i++)
      {
          pr( "a[i][1] = " + a[i][ 1 ]);
          i++;
      }
      
       for (i= 0 ; i<p; i++)
      {
         if ( OrderSelect (a[i][ 1 ], SELECT_BY_TICKET, MODE_TRADES))
         {
             if (OrderCloseTime() == 0 ) ClosePosBySelect();
         }
      }
   }
}

Çıktı tamamen boş.

 
hoz :

Bu nedenle, herhangi bir dizi değeri vermez:


Çıktı tamamen boş.

Peki, ne kadar boş? Hiç çıktı vermiyor mu, yoksa dizinin hücrelerinde hala sıfırlar var mı?
 

Döngünün gövdesinde neden i'yi artırıyorsunuz?

  for (i= 0 ; i<=p; i++)
      {
          pr( "a[i][1] = " + a[i][ 1 ]);
           i++;    // ??????????????????????????????????????
      }

ve bu: i<=p, neden "veya eşit"?