Meta Trader'da spread ticareti - sayfa 144

 
Scorp1978 >> :

teşekkürler iyi bir fikir (o zaman kenelerden vazgeçmeniz gerekecek), güçlü kârsız hareketlerden filtre "toplam kâr bir şeyden azsa, o zaman tüm pozisyonları kapatın" ......

Numara. Orijinal girdiyi kastettim - "/ if
//ilk mumun boyutu belirtilen değerden büyükse alım satım yasaktır..."

 
Hepinize iyi günler! Bu günü tatil olarak gören herkesi tebrik ederiz!
//--------------------------------------
Soru ortaya çıktı. Burada, çubukların son NBar'ları için araçlar arasındaki ortalama yayılmayı döndüren (hesaplayan) bir fonksiyon bulunmaktadır.
 double CalculateAvarageSpread( string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars)
{
   int k;
   double N = 0 ;
   double Sum = 0 ;
   for (k = 0 ; k < iBars(Symbol_1,Timeframe); k++)
   {
      if (N == NBars)
         break ;

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k), true );
      if (symb2Shift != - 1 )
      {
         Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return (avarageSpread);
}
Lütfen. nasıl soracağımı söyle
//------------
int k;
çift N = 0; çift Toplam = 0;
for(k = 0; k < iBars( Symbol_1 ,Zaman Çerçevesi); k++)
{
if(N == Nbar)
//---------------------------
böylece fonksiyon, çubukların tüm NBar'ları için değil, ortalama yayılma değerini döndürür,
ve sonuncusu hariç NBars çubukları için.
Başka bir deyişle, en sonuncusuna ihtiyacım var. bar hesaplamaya katılmadı! Veya en son verilen bir sayıya bile. çubuklar hesaplamaya dahil edilmedi.
Bunu "organize etmenin" bir yolu var mı?
(Karşılığında, 3 Mayıs Pazartesi günü iyi bir pazar girişi verebilirim, müteakip karlı bir kapanış olasılığı yüksek!)
 
double CalculateAvarageSpread( string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0 ;
   double Sum = 0 ;
   if (NBars > iBars(Symbol_1,Timeframe)) NBars=iBars(Symbol_1,Timeframe); // если н больше чем баров на графике то обрезаем
   if (NBarsSkip >= NBars) NBarsSkip=0; // если пропускаем баров больше/равно чем NBars, то ничего не пропускаем
   for (k = NBarsSkip; k < NBars; k++)
   {

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k), true );
      if (symb2Shift != - 1 )
      {
         Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
         N++;
      }
   }
   double avarageSpread = Sum / N;
   return (avarageSpread);
}
NBarsSkip, hesaplamaya dahil edilmeyecek atlanan çubukların sayısını ayarlar. hesaplamada NBarsSkip'ten NBars'a katılacak.
 
Teşekkürler NCI!
Şimdi size kişisel olarak umut verici bir giriş göndereceğim.
Bir soru daha.
Şimdi aklıma bir fikir geldi.
Ve eğer yapmak gerçekten kolaysa. Şu şekilde ayarlayın:
for(k = 0; k < iBars( Symbol_1 ,Timeframe); k++) yerine
sormak
for(k = M ; k < iBars(Symbol_1,Zaman Çerçevesi); k++),
burada M , hesaplamadan hariç tutulan çubukların sayısıdır.
Çalışacak mı?


 
Sadece k \u003d M değil, k \u003d M + 1 ... Bar M o zaman dikkate almayız
 
Sayesinde! Yani girişi gönderdi.
 
Dürüst olmak gerekirse, ilk başta NBar'ların yalnızca aynı anda iki enstrümanda bulunan çubuklar olarak sayılması gerektiğini fark etmemiştim, sonra gönderdiğim kod böyle bir mantığa karşılık gelmiyor. ve M ile yapılan yapı da yanlış olacaktır . bu durumda şunu yapabilirsiniz:
 double CalculateAvarageSpread( string Symbol_1, string Symbol_2,
                              int Timeframe, int NBars, int NBarsSkip)
{
   int k;
   double N = 0 ;
   int NReal = 0 ;
   double Sum = 0 ;
   for (k = 0 ; k < iBars(Symbol_1,Timeframe); k++)
   {
      if (N == NBars)
         break ;

      int symb2Shift = iBarShift(Symbol_2,Timeframe,iTime(Symbol_1,Timeframe,k), true );
      if (symb2Shift != - 1 )
      {
         N++;
         if (N>NBarsSkip)
         {
            Sum += iClose(Symbol_1,Timeframe,k) - iClose(Symbol_2,Timeframe,symb2Shift);
            NReal++;  // счетчик Н которые не пропущены и посчитаны
         }
      }
   }
   if (NReal== 0 ) return ( 0 ); // так как у нас не получилось рассчитать ни одного бара
   else
   {
      double avarageSpread = Sum / NReal;
      return (avarageSpread);
   }
}


 
Sayesinde. Nedense, ilk başta kod benim için derlenmedi, - bir hata döndürüldü (parantez)
ben katlanana kadar "...., int NBarsSkip " işlev adından
danışmanın dış parametrelerine
harici int NBarsSkip =2
Neden bir hata olduğunu anlamadım.
Ama hareket ettirdiğimde her şey normale döndü.
 

Konuyu baştan sona okudum - 145 sayfanın tamamı. Herkese saygılar: rid, leonid553, fduch, neoklasik, getch, forex-k, goldtrader, timbo, fortrader . Dofigischi bilgileri, hâlâ sindiriliyor. Kendim için ana sonuç şuydu: burayı kazmalısın, buna değer. Not: Genel olarak, mantıklı bir dal, neredeyse hiç sel olmadı. tekrar teşekkürler 2 kurtuldum

 

Sayesinde!

"Düşünce için Bilgi".

Pazartesiden itibaren ZM-ZL'yi yayın (un-tereyağı, 5:6)

!