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

 
enya :

.

içine yerleştirilmiş. döngü ile ilgili sorunlar ve döngüden çıktıktan sonra ilk değerleri geri yükleme

İşte son ticaretin karlı mı yoksa kârsız mı olduğunu cevaplayacak bir fonksiyon:

 double LastOrderProfit()
 {
   double Profit= 0 ;
   int ticket; 
   for ( int i= 0 ; i< OrdersHistoryTotal (); i++){
     if (! OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)) continue ;
       if ( OrderSymbol ()!= Symbol ()) continue ;
     if ( OrderMagicNumber ()!=Magic) continue ;
     if ( OrderType ()> 1 ) continue ;
     if (ticket< OrderTicket ()){
        ticket= OrderTicket ();
        Profit= OrderProfit ()+ OrderSwap ()+ OrderCommission ();
     } 
   }     
 return (Profit);
 } 

Ardından, cevabını sıfırla karşılaştırarak, TP / SL'yi aynı bırakmaya veya değiştirmeye karar veriyorsunuz.

 if (LastOrderProfit()> 0 ) newTPSL= false ; else   newTPSL= true ;
if(newTPSL) OrderModify(.......newSL,newTP...);
 

Merhaba. IN10TION NewsReader göstergesiyle ilgileniyor. Danışmana eklemek istiyorum.

Kırmızı çizgi(Market.TdOpen) ve Market.Price.DOWN(kırmızı) varsa sat

Kırmızı bir çizgi (Market.TdOpen) ve Market.Price.UP(yeşil) varsa, satın alın

Hangi işlemler yapılabilir? iCustom aracılığıyla ziyaret edilen çıkmıyor!


 extern bool Market.TdOpen = TRUE;
extern color Market.TdOpen.Color = Red ;
extern bool Market.TdFibo = TRUE;
extern color Market.TdFibo.Color = C'0x00,0x32,0x00' ;
extern color Market.Price.UP = Lime ;
extern color Market.Price.DOWN = Red ;
extern bool Market.Price.Guide = TRUE;

Ekli dosyalar:
_yIN10TIONfNewsReaderov09.99kblite.ex4 (115.59 KB) sil

 

Yöneticilerden kendimi tekrar ettiğim için özür dilerim, ancak yanıt olarak henüz kimse bana bir şey söylemedi. Buradaki fikir, günlüklere kaydedilen yorumlardaki mesajları görüntülemek, yani. IsConnected() işlevi tarafından doğru şekilde düzeltilemeyenler - bağlantı kopmaları, istekler. Aksi takdirde, danışmanın şu anda hiçbir şey yapmamasının nedeni net değildir.


Lütfen bana günlük dosyasını okumak için kodun aşağıda olduğunu söyleyin. Tarihe göre geçerli günlük dosyası otomatik olarak okunur ve yazdırılır.

Neresi:

 while (result> 0 ) {

dosya parçalardan birleştirilir. Ama tüm dosyaya ihtiyacım yok, sadece son satıra ihtiyacım var. Düzeltmeme yardım et lütfen.

 void ReadWrite() {
   string tekTime=TimeStr1(CurTime(), 1 );
   string path= TerminalPath ()+ "\\logs\\" +tekTime+ ".log" ;
   string title= "Чтение из файла" ;
   string msg;
   int result;
   int handle=_lopen(path, 4 );
   if (handle< 0 ) {
      msg= "Ошибка открытия файла" ;
      Print (msg);
       return ;
   }
   result=_llseek (handle, 0 , 0 );
   string buffer= "" ;
   //string char="x                      ";
   string char = "x                                                                                                                                                                                                                                                         " ;
   int count= 0 ;
   result=_lread (handle, char , 250 );
   while (result> 0 ) {
      buffer=buffer+ char ;
       char = "x                                                                                                                                                                                                                                                         " ;
      count++;
      result=_lread (handle, char , 250 );
   }
   result=_lclose (handle);
   msg= StringTrimRight (buffer);
   Print (msg);
}

//------------------расчет времени----------------
string TimeStr1( int taim, int tip)
{
   string sTaim;
   string sTaim1,sTaim2,sTaim3;
   if (tip== 1 ) 
   {
       int GD= TimeYear (taim);                  
       int MN= TimeMonth (taim);                  
       int DD= TimeDay (taim);  
      
      sTaim1 = DoubleToStr (GD, 0 );
       if (MN< 10 ) sTaim2 = StringConcatenate (sTaim2, "0" + DoubleToStr (MN, 0 ));
       else sTaim2 = StringConcatenate (sTaim2, DoubleToStr (MN, 0 ));
       if (DD< 10 ) sTaim3 = StringConcatenate ( "0" , DoubleToStr (DD, 0 ));
       else sTaim3 = DoubleToStr (DD, 0 );
      sTaim=sTaim1+sTaim2+sTaim3;
   }
   return (sTaim);
}
 

Danışmanı değiştirmek için yardıma ihtiyacınız var

EA ciro üzerinden işlem yapmalıdır.

Satış limitli alış emirleri yerine

ve satış emirlerinin satın alma limiti

Dosyalar:
tke.mq4  18 kb
 
mersi :

İşte son ticaretin karlı mı yoksa kârsız mı olduğunu cevaplayacak bir fonksiyon:

Ardından, cevabını sıfırla karşılaştırarak, TP / SL'yi aynı bırakmaya veya değiştirmeye karar veriyorsunuz.

İşleviniz son siparişi tam olarak döndürecek mi? Yoksa ilk tanışma kârsız değil mi? Neden bilet kontrolü var?

şöyle yapardım:

 //+----------------------------------------------------------------------------+
double LastOrderProfit() {
   double Profit= 0 ;
   datetime t;
   int i, j;
   for (i= 0 ; i< OrdersHistoryTotal (); i++) {
       if (! OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)) continue ;
       if ( OrderMagicNumber ()!=Magic)                   continue ;
       if ( OrderSymbol ()!= Symbol ())                     continue ;
       if ( OrderType ()> 1 )                               continue ;
       if (t< OrderCloseTime ()) {
         t= OrderCloseTime ();
         j=i;
         }
      }
   if ( OrderSelect (j,SELECT_BY_POS,MODE_HISTORY)
      Profit= OrderProfit ()+ OrderSwap ()+ OrderCommission ();
   return (Profit);
} 
//+----------------------------------------------------------------------------+

Bu, tam olarak son kapatılan siparişi bulmak için yeniden tasarlanmış işlevinizdir.

Bir dezavantajı var - hiç kapalı sipariş olmasaydı, sıfıra dönecektir. Bu nedenle, onu kullanarak, tarihte kapalı emirlerin varlığını veya yokluğunu doğru bir şekilde belirlemek imkansızdır. Sonuçta, döndürülen sıfır, hiç sipariş olmadığı anlamına gelmez, ancak sıfıra kapalıdır.

 

Lütfen bana söyle:

yalnızca son (geçerli) çubuk için gösterge değerini çizmekle ilgileniyor. Ancak yeni bir çubuk açıldığında eski değerler grafikte kalıyor.... Bu çöp nasıl zorla kaldırılabilir? [0] çubuğu için gösterge değerlerinin hesaplanması ve görüntülenmesi ve [1] ile [Bar-1] arasındaki çubuklar için bu değerlerin sıfıra ayarlanması koşulunu bir şekilde ayarlamak mümkün müdür?

 double Buffer [ 1 ];            

int init()
  {

   IndicatorBuffers ( 1 );
  
   SetIndexStyle ( 0 , DRAW_ARROW );
   .........
 
   return ( 0 );
  }

int deinit()
  {
   return ( 0 );
  }

int start()
  {
   int limit;
   int counted_bars= IndicatorCounted ();
   if (counted_bars< 0 ) counted_bars= 0 ;
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;
       for ( int i=limit;i>= 0 ;i--) 
     {
         Buffer [ 0 ] = ............;
     }
   return ( 0 );
  }        
 

artmedia70 :

Bir dezavantajı var - hiç kapalı sipariş olmasaydı, sıfıra dönecektir. Bu nedenle, onu kullanarak, tarihte kapalı emirlerin varlığını veya yokluğunu doğru bir şekilde belirlemek imkansızdır. Sonuçta, döndürülen sıfır, hiç sipariş olmadığı anlamına gelmez, ancak sıfıra kapalıdır.

Teşekkür ederim! Bana cevap vermemiş olsanız da, kârın doğru hesaplanmasıyla ilgili son soruma cevap verdiniz:

Profit= OrderProfit ()+ OrderSwap ()+ OrderCommission ();
 
Azerus :

Lütfen bana söyle:

yalnızca son (geçerli) çubuk için gösterge değerini çizmekle ilgileniyor. Ancak yeni bir çubuk açıldığında eski değerler grafikte kalıyor.... Bu çöp nasıl zorla kaldırılabilir? [0] çubuğu için gösterge değerlerinin hesaplanması ve görüntülenmesi ve [1] ile [Bar-1] arasındaki çubuklar için bu değerlerin sıfıra ayarlanması koşulunu bir şekilde ayarlamak mümkün müdür?

Start() başlangıcında, arabelleği EMPTY_VALUE olarak başlatın. Yani yeni bir çubuğun gelişiyle yapın, sıfırın açılış saatini kontrol edin ve çöp temizleme mantığınızı yapın.

 
artmedia70 :

İşleviniz son siparişi tam olarak döndürecek mi? Yoksa ilk tanışma kârsız değil mi? Neden bilet kontrolü var?

şöyle yapardım:

Bu, tam olarak son kapatılan siparişi bulmak için yeniden tasarlanmış işlevinizdir.

Bir dezavantajı var - hiç kapalı sipariş olmasaydı, sıfıra dönecektir. Bu nedenle, onu kullanarak, tarihte kapalı emirlerin varlığını veya yokluğunu doğru bir şekilde belirlemek imkansızdır. Sonuçta, döndürülen sıfır, hiç sipariş olmadığı anlamına gelmez, ancak sıfıra kapalıdır.

1. İşlev , tarihteki en büyük bilete sahip siparişi bulur , bu da son kapatılan sipariş anlamına gelir (tabii ki, maksimum kapanış süresi ile seçeneğinizin tercih edildiği istisnai bir durum almadıkça).

2. Müşterinin koşullarına göre, ilk sipariş belirtilen TP/SL ile açılır ve sadece ikincisi yeni TP/SL ile açılabilir ve bundan sonra fonksiyonun sadece ilk işlem gerçekleştiyse sıfır döndürebileceği sonucu çıkar. sıfır, ancak tarihte kapalı siparişlerin olmaması nedeniyle değil.

Ve sonuncusu. Sürümünüzde, işlevde j ve başka bir SELECT kullanmak aşırıya kaçıyor.

yeterli :

 if (t< OrderCloseTime ()) {
         t= OrderCloseTime ();
      Profit= OrderProfit ()+ OrderSwap ()+ OrderCommission ();
  }
   return (Profit);
 
snail09 :
Start()'ın başlangıcında, arabelleği EMPTY_VALUE olarak başlatın.


Neye benziyor? int init () den sonra gösterge satırının ayarlarında var

   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,165);                     
   SetIndexBuffer(0,Buffer);
   SetIndexEmptyValue(0,0.0);