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

 
void CheckForClose()
  {
   double PriceHigh, PriceLow;
//---- go trading only for first tiks of new bar
   if (Volume[ 0 ]> 1 ) return ;
   
   PriceHigh = iCustom ( Symbol (), 0 , "ExtremeTMALine" , TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 1 , 0 ); 
   PriceLow = iCustom ( Symbol (), 0 , "ExtremeTMALine" , TimeFrame, HalfLength , Price, ATRMultiplier, ATRPeriod, Interpolate, TrendThreshold, Distances, 2 , 0 ); 
   
   
   for ( int i= 0 ;i< OrdersTotal ();i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)== false )         break ;
       if (OrderMagicNumber()!=Magic || OrderSymbol()!= Symbol ()) continue ;
       //---- check order type 
       if (OrderType()==OP_BUY)
        {
         if (Low[ 1 ]<=PriceHigh && Ask>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White);
         break ;
        }
       if (OrderType()==OP_SELL)
        {
         if (Ask<=PriceLow && High[ 1 ]>PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
         break ;
        }
     }
//----
  }

artmedia70

gösterge çizgisinin fiyatla kesiştiği noktada bir pozisyonun kapanmasıyla ilgili olarak koçlarıma geri dönüyorum. Bence hata bu fonksiyonda

if(Volume[0]>1) dönüşü;

Bir ders kitabında keneleri sayamayacağınızı, ancak çubuklar göründükten sonra bir anlaşma açabileceğinizi (kapatabileceğinizi) okudum. Mümkün mü? Evet ise, durumuma göre nasıl programlanacağına dair bir ipucu verebilirsiniz.

 
alexey1979621 :

artmedia70

Gösterge çizgisinin fiyatının kesiştiği noktada bir pozisyonun kapanması ile ilgili olarak koçlarıma dönüyorum. Bence hata bu fonksiyonda

if(Volume[0]>1) dönüşü;

Bir ders kitabında keneleri sayamayacağınızı, ancak çubuklar göründükten sonra bir anlaşma açabileceğinizi (kapatabileceğinizi) okudum. Mümkün mü? Evet ise, durumuma göre nasıl programlanacağına dair bir ipucu verebilirsiniz.

Belki bu yararlı olacaktır:

М15'te yeni bir çubuk göründüğünde işlev true değerini döndürür

 bool CheckOpenM15()
{
   static int PrevTime= 0 ;
   if (PrevTime==iTime( NULL , PERIOD_M15 , 0 )) return ( false );
   PrevTime=iTime( NULL , PERIOD_M15 , 0 );
   return ( true );
}
 
ex1m :

Lütfen bana söyle!!

Belli bir zamanda iki emrin açılışını beklemeye alarak yazıyorum.

{

Açılış zamanının belirlenmesi

}

if ((durum)==doğru)//
{
OrderSend ( OP_BUYSTOPP, parametreler);// bekleyen bir buystop emri açın
OrderSend ( OP_SELLSTOP, parametreler);// bekleyen bir sellstop emri aç
}

Zaman doğru yazılmış gibi görünüyor, onu belirliyor ama nedense ya bir sat stop ya da bir bystop açıyor, aynı anda iki açmıyor.. dört veya beş kopya. Ve aynı anda ve birer birer olmak üzere iki farklı türde geciktiriciyi (durdurma ve satış durdurma) açmaya çalışıyorum. Soru ilkel görünüyor, çaydanlığa yardım edin) Teşekkürler!)

Doğru kodu buraya eklemek için önce SRC'ye tıklayın ve ardından kodu buraya kopyalayın.

Sizi belirli bir zamanda doğru anlarsam, bir OP_BUYSTOP ve bir OP_SELLSTOP açmanız gerekir? Şu anda bekleyen başka emir olması mümkün mü? Örneğin. geciktiriciler var ama yenilerini açmadan önce eskileri silmeniz mi gerekiyor?

 
artmedia70 :
Bu hata, siparişler için değil, grafik nesneler için geçerlidir.

Bu kadar! Hata nesnelerle ilgilidir, ancak bu EA'da hiçbir nesnem yok...


borilunad :
İyi akşamlar Victor! Garip, bekleyen bir emir bir nesne değildir! Belki de silinmesi gereken bazı nesneleri silmediniz ama silinmedi!

İyi günler, Boris! Uzman nesneler yaratmaz. Ve bu hata, bekleyen sipariş verme işlevinden kaynaklanmaktadır. İşte fonksiyonun versiyonu (test cihazı için):

 bool OpenPendingBuy(double lot, double price)
{
   int g_ticket = -1;
   double OOP = price + i_distanceFromLastPos * pt;

   if (OOP > Ask)
   {
       fCheck_ValidPendingOOP(Symbol(), OP_BUYSTOP, OOP);
       
       g_ticket = OrderSend(Symbol(), OP_BUYSTOP, lot, ND(OOP), 30, 0, 0, NULL, i_magic, 0, CLR_NONE);
   }
   if (g_ticket > 0)
   {
       return (true);
   }
   else
       pr ("OpenPendingBuy(): Ордер послать не удалось " + GetLastError());
   
   return (false);
}

Sipariş verilmezse, blok tetiklenir:

 else
       pr ( "OpenPendingBuy(): Ордер послать не удалось " + GetLastError ());

Bir hata bildiriyor.


Mantığını anlayan var mı?

 
artmedia70 :

Sorunun cevabı olmadığı için, son verilen siparişin biletini döndürecek bir fonksiyon var:



Teşekkür ederim!! neye ihtiyacın var

 
hoz :
Bu kadar! Hata nesnelerle ilgilidir, ancak bu EA'da hiçbir nesnem yok...

İyi günler, Boris! Uzman nesneler yaratmaz. Ve bu hata, bekleyen bir sipariş veren fonksiyondan geliyor. İşte fonksiyonun versiyonu (test cihazı için):

Sipariş verilmezse, blok tetiklenir:

Bir hata bildiriyor.

Mantığını anlayan var mı?

Öyleyse, hata kontrolünüzde ne olduğunu kontrol edin? Orada yanlış bir şeyler olmalı!
 
borilunad :
Öyleyse, hata kontrolünüzde ne olduğunu kontrol edin? Orada yanlış bir şeyler olmalı!

Heh)) Ve Boris'i başarısızlığa uğratacak ne var? Her şey şeffaf...

pr - yazdırma işlevi. Ve hata zaten standart bir sabittir. Mantıken, böyle bir senaryoda olmak genellikle kabul edilemez. pr işlevi hakkında hala bir şüpheniz varsa, işte burada:

 //+-------------------------------------------------------------------------------------+
//| Распринтовка на экран                                                               |
//+-------------------------------------------------------------------------------------+
void pr ( string txt)
{
string info [];
ArrayResize (info, 20 );
string h,m,s,cm; int i;
h=DoubleToStr(Hour(), 0 );     if ( StringLen (h)< 2 ) h= "0" +h;
m=DoubleToStr(Minute(), 0 );   if ( StringLen (m)< 2 ) m= "0" +m;
s=DoubleToStr(Seconds(), 0 ); if ( StringLen (s)< 2 ) s= "0" +s;
txt=h+ ":" +m+ ":" +s+ " - " +txt;
for (i= 20 - 1 ; i>= 1 ; i--)
info[i]=info[i- 1 ];
info[ 0 ]=txt;
for (i= 20 - 1 ; i>= 0 ; i--)
if (info[i]!= "" ){
cm=info[i];
ObjectCreate ( "txtw" +i, OBJ_LABEL , 0 , 0 , 0 );
ObjectSet    ( "txtw" +i, OBJPROP_CORNER , 1 );
ObjectSet    ( "txtw" +i, OBJPROP_XDISTANCE , 10 );
ObjectSet    ( "txtw" +i, OBJPROP_YDISTANCE , 30 + 15 *i);
ObjectSetText( "txtw" +i,cm, 10 , "Times New Roman" , Green);}}
 

  • Mantığını anlayan var mı?


Çok normalleşti mi? Peki, fiyatı kontrol et.

i_magic, pt, i_distanceFromLastPos global mi?

 
splxgf :

i_magic, pt, i_distanceFromLastPos global mi?


Evet. i_ içeren değişkenler girdi değişkenleridir (kullanıcı tarafından değiştirilebilen input kelimesinden ..) ve pt de her yerde görülebilen global bir değişkendir ..
splxgf :


  • Mantığını anlayan var mı?


Çok normalleşti mi? Peki, fiyatı kontrol et.


Hayır, parti normalleşmedi. Bununla test cihazında hiç karşılaşmadım .. Ve nesneyle ne ilgisi var (hata 4200)?
 
hoz :

Zaman zaman, ancak her zaman değil, bekleyen sipariş ayarlama işlevi bana 4200 hatası veriyor. Belgelere göre, bu hata nesnenin zaten var olduğu anlamına geliyor:

ERR_OBJECT_ALREADY_EXISTS 4200 Объект уже существует

Bu tür bir emir, bekleyen emir gönderildiğinde piyasada zaten var mı?

Belki de danışmanın tepki verdiği aynı ada sahip bir grafik nesne oluşturan başka bir programınız vardır. Belki nesne adlarının değiştirilmesi gerekir.