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

 
MarkTrade :


Bu böyle çalışır... Teşekkürler!

Sadece versiyonumun neden çalışmak istemediğini anlamak için ...

Farkı görmüyor musun? Yanlış karşılaştırma yapmışsın.

if (a && b < c) - bu mümkün değil

if (a<c && b<c) - böylece yapabilirsiniz

 
artmedia70 :

Farkı görmüyor musun? Yanlış karşılaştırma yapmışsın.

if (a && b < c) - bu mümkün değil

if (a<c && b<c) - böylece yapabilirsiniz



Hayır, bir fark fark ettim. Sadece, eğer (a && b < c)... :-) olduğuna kesin olarak inandım.

Şimdi biliyorum, teşekkürler!

 
MarkTrade :


Hayır, bir fark fark ettim. Sadece, eğer (a && b < c)... :-) olduğuna kesin olarak inandım.

Şimdi biliyorum, teşekkürler!

Belki böyle istediniz: if(a+b < c) ? O zaman mümkün!
 
skyjet :


Tekrar teşekkürler! Şimdi "işaretli" çubukların sayısını optimize etmeye çalıştım, ancak pencerede hiçbir sonuç yok. Baştan ve sondan saymaya çalıştım ama nafile.

 extern int number= 3 ;
//------------------------------------+
for ( int x=number; x> 1 ; x--) // x>1 ( а не x>=1 )
{
if (Open[x]==Open[x- 1 ]) continue ;
if (Open[x]<Open[x- 1 ])
   {
     //--- action 1
   }
else
   {
     //--- action 2
   }
}

"...pencerede hiçbir sonuç yok" ne anlama geliyor? Belki bir şekilde sonucu pencereye yanlış çıktı ve programda başka bir yerde bir hata var?

 

Sevgili yoldaşlar! Teknik analize dayalı programlama hatları hakkında herhangi bir literatür (ders kitabı) olup olmadığını söyleyin. fibo seviyeleri. Tercihen "aptallar için" kod örnekleriyle.

Veya size benzer bir açık kaynak danışmanını kim söyleyecek?

Şimdiden teşekkürler.

 
alexey1979621 :

Sevgili yoldaşlar! Teknik analize dayalı programlama hatları hakkında herhangi bir literatür (ders kitabı) olup olmadığını söyleyin. fibo seviyeleri. Tercihen "aptallar için" kod örnekleriyle.

Veya size benzer bir açık kaynak danışmanını kim söyleyecek.

Şimdiden teşekkürler.

Ve bu ders kitabı neden bir ders kitabı değil? İhtiyacınız olan her şey, öğrenin, pratik yapın! İyi şanlar!
 
artmedia70 :
Siparişlerle ilgili verilerle "doldurulduktan" hemen sonra dizinizde ne olduğunu anlıyor ve görüyor musunuz? Numara. Bilmiyorsun, sadece tahmin ediyorsun. Dizinin tüm hücrelerinin içeriğini, pr()'nizi değil, standart Print()'i UNPRINT yapın ve test günlüğüne bakma zahmetine girin ve dizinizde, her bir hücresinde, hemen ardından ne olduğunu görün. dolu. İşte o zaman, dizinin içeriğinin, içeriği hakkındaki fikirlerinize karşılık geldiğinden emin olduğunuzda, ardından pr () ile yazdırın. Size aynı sonuçları vermezse - içinde, pr'nizde (), veriler eşleşirse, bir sonraki aşamada hatayı daha fazla arayın.

Basılı diziler, ancak şu anda bu onlarla ilgili değil. Aşağıda ne düşündüğümü anlatacağım.

Bu arada. Tüm sonuçları standart bir baskıya aktardı. Durum aynı. +'da 4 pozisyonun kapandığı bir an var. Ve sonra, mantıksal olarak, isCloseByTakeLastOpenPos() işlevi, başlangıçtan itibaren şöyle çağırdığım başlangıçta çalışmalıdır:

 for ( int ord= OrdersTotal ()- 1 ; ord>= 0 ; ord--)
   {
       if (! OrderSelect (ord,SELECT_BY_POS)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderType() == 6 ) continue ;
        
      g_ticket = OrderTicket();
      g_type = OrderType();
              
       // Блок модификации ордеров       
       if (i_sl != 0 || i_tp != 0 )
      {
         if (OrderStopLoss() == 0 && OrderTakeProfit() == 0 )
         {
            OrdersModifyer(g_ticket);
         }
      }
       // Закрытие всех ордеров, если последний ордер закрыт
       if (isCloseByTakeLastOpenPos( 2 ))        // Наша функция, определяющая.. закрылся ли последний закрытый ордер в + или нет.
      {
         // if (g_type < 2)
          {
              ClosePosBySortLots();
          }
           //else
           if (g_type > 1 && g_type < 6 )
          {
              DeletePendingOrders(g_ticket);
          }
      }
   }

bu da bize son kapatılan emrin al veya kar ile kapatıldığını söyleyecektir. İşlev burada:

 //+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos( int delta)
{
   datetime lastOrderCloseTime = - 1 ,               // Время закрытия последнего открытого ордера
            lastOOTHist = - 1 ;                     // Время открытия последнего открытого ордера из истории
   int j = - 1 ;
   Print ( "isCloseByTakeLastOpenPos: вошли в функцию" );
   
   for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderType() > 1 ) continue ;               // Все удалённые отложки нас не интересуют..
       Print ( "isCloseByTakeLastOpenPos: первоначальные условия выполнены!" );

       if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         j = i;
         Print ( "j = " + j + "   " + TimeToStr( TimeCurrent ()));
      }
   }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY))
   {
       if (OrderProfit() + OrderCommission() + OrderSwap() <= 0 ) return ( false );
//      pr ("OTP() = " + OrderTakeProfit() + "; OCP() " + OrderClosePrice() + "   " + TimeToStr(TimeCurrent()));
   //    pr ("OOP() = " + OrderOpenPrice() + "; OCP() " + OrderClosePrice() + "   " + TimeToStr(TimeCurrent()));
       if ( MathAbs (OrderTakeProfit() - OrderClosePrice()) > delta * pt) return ( false );
       else
      {
         lastOOTHist = OrderOpenTime();
         Comment ( "\n" , "FUNC isCloseByTakeLastOpenPos: " ,
                 "\n" , "j = " , j,
                 "\n" , "lastOOTHist = " , TimeToStr(lastOOTHist, TIME_SECONDS));
      }
   }
   else
   {
       Comment ( "\n" , "FUNC isCloseByTakeLastOpenPos: " ,
               "\n" , "j = " , j,
               "\n" , "не удалось выбрать ордер в истории" );
       return ( false );
   }
  
   for ( int h= OrdersTotal ()- 1 ; h>= 0 ; h--)
   {
       if ( OrderSelect (h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue ;
         if (OrderSymbol() != Symbol ())       continue ;
         if (OrderType() > 1 )                 continue ;
         if (lastOOTHist < OrderOpenTime()) return ( false );   // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
       else { Print ( "FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер" ); return ( false );}
   }
   Print ( "isCloseByTakeLastOpenPos: последняя закрытая позиция профитна!" );
   
   return ( true );
}

Durum ilginç. Her şey çalışıyor. Ve işte durum geliyor:

Kapalı 4'ün + almak için poz verdiği görülebilir. Teik üzerine kapandılar. Onlar. siparişleri kapatma işlevleri hiç çalışmadı. Yol boyunca sebep, kapatma koşulunun işe yaramadığı gerçeğinde yatmaktadır. Ve bu:

 if (isCloseByTakeLastOpenPos( 2 ))

Bu işleve bakıldığında ve her şeyi yazdırırken, şu anda bunun gerçekleşmediği anlaşılıyor. Nasıl yani? Sonuçta, + içindeki son 4 sipariş kapatıldı. Yukarıda fonksiyon kodunu verdim. İşte aynı anda günlükte ne var:

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:23 2013.08.15 12:35 Perevorot EURUSD.GI,M5: OpenPendingSell(): Ордер послать не удалось 0

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #104 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #102 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #100 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:04 2013.08.15 12:30 Tester: take profit #98 at 1.32731 (1.32722 / 1.32724)

2013.09.09 00:13:03 2013.08.15 12:30 Tester: order #104, sell 0.93 EURUSD.GI is opened at 1.32831

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: j = 74 2013.08.15 12:30

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: вошли в функцию

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!

2013.09.09 00:13:03 2013.08.15 12:30 Perevorot EURUSD.GI,M5: isCloseByTakeLastOpenPos: первоначальные условия выполнены!


Durumun işe yaramadığı görülebilir. Burada sorun ne?

 
Söyleyin, grafiğin tamamında yayılımı belirleyen bir gösterge var mı yoksa uygulamak mümkün mü? Yalnızca, bağlantı anından itibaren terminal açıkken yayılmayı kaydeden bir gösterge buldum.
 
paladin80 :

"...pencerede hiçbir sonuç yok" ne anlama geliyor? Belki bir şekilde sonucu pencereye yanlış çıktı ve programda başka bir yerde bir hata var?


Ama 3.2 ve 1 çubukları karşılaştırıyorum, yani hesaplama x >=1?

Ve devam etmek, aynı fiyata sahip çubukların dikkate alınmadığı, onlara atanmış numaralar olmadığı anlamına mı geliyor?

Optimizasyon parametrelerini ayarlayarak: başlangıç 1, adım 1, bitiş 4; H1 ve H4'te sonuçlar sekmesi boştur; D1'de karlılık, farklı sayıda analiz edilen çubukla aynıdır.

 if (Open[x]==Open[x- 1 ]) continue ;
 

Sensiz hiçbir yerde profesyonel.

Bir özellikle ilgili yardım. Bu, olumlu bir siparişten önce tarihteki son kaybedilen sipariş sayısını sayar.

yani, ekside son 3 siparişin geçmişinde, ardından artıda 1 ve ekside 2.

burada fonksiyon son üçü saymalıdır (artıya kadar)