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

 

Sorun şu ki, bu biletlerden birden fazla var. Belki 4, emin değilim. bu nedenle, orderselect'in saklamadığı bir bilet numarası ve diğer bilgilerin olacağı bir sınıf oluşturdum. Bu nedenle, erişimin altında olması arzu edilir. ancak şu ana kadar sadece sınıf nesneleri oluşturmak ve onları CarrayObj'a atmak ve ardından dizine göre almak, bileti karşılaştırmak ve daha fazla analiz etmek akla geliyor. ve sorun, neden sordu - hata işleme nedeniyle neyin kaybolduğunu. ama anladım, teşekkürler, başka yerde suçlayacağım. Beyler kötü canlı AlexeyVik - hızlı cevaplar için teşekkürler!

 

 
 
Merhaba! Lütfen strateji test cihazında neden işlem açmadığını yazın, logda bir hata yazıyor: (2015.07.13 00:22:39.218 TestGenerator: eşleşmeyen veri hatası (2013.07.11 05:00'da yüksek değer 1.31150'ye ulaşılamadı) en düşük zaman diliminden, yüksek fiyat 1.31140 uyumsuzluklarından) güncellenmiş alıntılar İşte EA kodu:
int ticket;
int init;

int start()
{

int bars0;
int bars1;
int bars2;
int bars3;
int    stoploss= 50 ; 
int    takeprofit= 30 ;
int        slipage= 2 ;

//-------------------------------------------------------------------+
  
   if ( OrdersTotal ()< 1 &&  Open[bars0]<Close[bars0] && Open[bars1]<Close[bars1] )
       if (  Open[bars2]>Close[bars2]&& Open[bars3]>Close[bars3] )
       if (V1()== true ) 
     
       ticket = OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask,slipage,Ask-stoploss* Point ,Ask+takeprofit* Point , "" , 123 , 0 ,Red);
     
//-------------------------------------------------------------------+ 
     if ( OrdersTotal ()< 1 &&  Open[bars0]>Close[bars0] && Open[bars1]>Close[bars1]&& Open[bars2]<Close[bars2])
     if (  Open[bars2]<Close[bars2]&& Open[bars3]<Close[bars3] )
       if (V2()== true ) 
     
       ticket = OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid,slipage,Bid+stoploss* Point ,Bid-takeprofit* Point , "" , 123 , 0 ,Red);
      
    
         
//-------------------------------------------------------------------+                    
 return ;}
//+------------------------------------------------------------------+
bool V1( ){
   int       i, k= OrdersTotal ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_BUY) {
       return ( false );
   }
  }    
 }
 return ( true ); 
}

bool V2( ){
   int       i, k= OrdersTotal ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
     if (OrderType()==OP_SELL) {
       return ( false );
   }
  }
 }
 return ( true ); 
}

)
 
rylay :
Merhaba! Lütfen strateji test cihazında neden işlem açmadığını yazın, logda bir hata yazıyor: (2015.07.13 00:22:39.218 TestGenerator: eşleşmeyen veri hatası (2013.07.11 05:00'da yüksek değer 1.31150'ye ulaşılamadı) en düşük zaman diliminden, yüksek fiyat 1.31140 uyumsuzluklarından) güncellenmiş alıntılar İşte EA kodu:
)

Bahsedilen test cihazının hatasına gelince, keneler üzerinde test yapılırken bu her zaman böyle olacaktır. MT4'teki alıntıların geçmişi kusurludur, her zaman tutarsızlıklar vardır.

Kod hatalarla dolu. Değişken çubukları* başlatılmamış, başlatma işlevinin ne döndürdüğü açık değil, ticaret işlevlerinin yürütülmesi için herhangi bir kontrol yok, lütfen düzeltin.

Kodun başına #property strict ekleyin.

Ve emir tipini belirlemek için zaten iki fonksiyon oluşturduğumuz için, neden her türden emir sayacını oraya gömüp if( OrdersTotal()<1...) yerine if ( OrdersBuy<1... ), eğer ( SiparişSat<1 ...)? Daha doğru olurdu.

 

Lütfen bana bir çubuğun koşullarında sadece bir anlaşmanın nasıl açılacağını söyleyin, anlaşma barın içinde gerçekleşirse, ancak anlaşmanın kapanması sırasında, açılış sinyali hemen aynı çubukta belirir.

Başka bir deyişle, bar bir emir açma sinyali verdi. Açıldı, kısa bir süre çalıştı. Anlaşma kapatıldı, ancak danışman, ilkini kapattıktan sonra, bu çubukta açılma koşulu hala orada olduğundan, ikincisini hemen aynı sırayla açar. Bir barda sadece bir anlaşma olsaydı buna ihtiyacım var. Ve bir sonraki işlemi açmak için başka bir çubuğun açılmasını bekliyoruz.

 
Poinson :

Lütfen bana bir çubuğun koşullarında sadece bir anlaşmanın nasıl açılacağını söyleyin, anlaşma barın içinde gerçekleşirse, ancak anlaşmanın kapanması sırasında, açılış sinyali hemen aynı çubukta görünür.

Başka bir deyişle, bar bir emir açma sinyali verdi. Açıldı, kısa bir süre çalıştı. Anlaşma kapatıldı, ancak danışman, ilkini kapattıktan sonra, bu çubukta açılma koşulu hala orada olduğundan, ikincisini hemen aynı sırayla açar. Bir barda sadece bir anlaşma olsaydı buna ihtiyacım var. Ve bir sonraki işlemi açmak için başka bir çubuğun açılmasını bekliyoruz.

bool _zaten açıldı = yanlış;

if (isNewBar()){ _zaten açıldı = false;}

if (! OrderSend (...) ) { /* hata işleme */; } başka { _ybe açıldı = doğru; }

isNewBar() - makalelerde olduğu gibi standart, statik tarihsaat kullanılarak tarih = Saat[0];

if (_zaten açıldı) { dönüş; // sipariş gönderme }

 
evillive :

Bahsedilen test cihazının hatasına gelince, keneler üzerinde test yapılırken bu her zaman böyle olacaktır. MT4'teki alıntıların geçmişi kusurludur, her zaman tutarsızlıklar vardır.

Kod hatalarla dolu. Değişken çubukları* başlatılmamış, başlatma işlevinin ne döndürdüğü açık değil, ticaret işlevlerinin yürütülmesi için herhangi bir kontrol yok, lütfen düzeltin.

Kodun başına #property strict ekleyin.

Ve emir tipini belirlemek için zaten iki fonksiyon oluşturduğumuz için, neden her türden emir sayacını oraya gömüp if( OrdersTotal()<1...) yerine if ( OrdersBuy<1... ), eğer ( SiparişSat<1 ...)? Daha doğru olurdu.

Teşekkür ederim. Düzelteceğim.. Tam durum bir iken:
 if ( OrdersTotal ()< 1 &&  Open[bars0]<Close[bars0]
   ticket = OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask,slipage,Ask-stoploss* Point ,Ask+takeprofit* Point , "" , 123 , 0 ,Red);
her şey tam olarak düzgün çalışmadı, bu yüzden sordum.
 
danik :

bool _zaten açıldı = yanlış;

if (isNewBar()){ _zaten açıldı = false;}

if (!OrderSend(...) ) { /* hata işleme */; } başka { _ybe açıldı = doğru; }

isNewBar() - makalelerde olduğu gibi standart, statik tarihsaat kullanılarak tarih = Saat[0];

if (_zaten açıldı) { dönüş; // sipariş gönderme }

'isNewBar' yazıyor - işlev tanımlı değil 2015

Ben gerçekten bir usta değilim. Mümkünse tam olarak kopyalayıp yapıştırmak istiyorum lütfen.

 
Poinson :

'isNewBar' yazıyor - işlev tanımlı değil 2015

Ben gerçekten bir usta değilim. Mümkünse tam olarak kopyalayıp yapıştırmak istiyorum lütfen.

forumda yeni bir çubuğun tanımı hakkında bir makale arayın, isNewBar() işlevini oraya kopyalayın, belki bunu anlarsınız, karmaşık bir şey yoktur - yeni bir çubuğun açılış zamanı karşılaştırılır (0 indeksi ile, yani. sonuncusu), eğer zaman öncekinden daha uzunsa - yani yeni bir çubuk belirdi. ve görünürse, başka koşullar varsa, zaten yeni bir anlaşma açabilirsiniz.
 
Poinson :

'isNewBar' yazıyor - işlev tanımlı değil 2015

Ben gerçekten bir usta değilim. Mümkünse tam olarak kopyalayıp yapıştırmak istiyorum lütfen.

Evet, kod tabanındaki herhangi bir Uzman Danışmanda bulabilirler!

 //в старте перед условиями входа:
       if (NewBar() == true )
      { 
//----------------------
   return ( 0 );
}
// и вне старта:
//----------------------------//  NewBar  \\----------------------------\\
bool NewBar() 
{
   static datetime lastbar = 0 ;
   datetime curbar = iTime( NULL ,15, 0 );
   if (lastbar != curbar) 
  {
    lastbar = curbar;
     return ( true );
  }
   else return ( false );
} 
 
borilunad :

Evet, kod tabanındaki herhangi bir Uzman Danışmanda bulabilirler!

Teşekkürler)) En güçlüsü basit! Her şey ilk kez çalıştı!

Herkese teşekkürler!