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

 
Heroix :
Ancak hızlısınız. Mesajı sildim çünkü. kendim buldum. Teşekkür ederim!

İyi ki abonelikten çıkmışsın yoksa bulamadığım eski bir gönderiye cevap vermişim sandım :)
 
tara :
Ve "Araçlar - Ayarlar" menüsünün "Etkinlikler" sekmesinde, ancak her şey çok kötü. Kullanmaya çalışmak :(

Katılıyorum, her şey kötü ... uyarı bir boşlukla kapatılmıyor, sadece manuel olarak ... "servis-ayarları-olaylar" da uyarı parametresini değiştirmek hiçbir şey vermiyor ...
 

Arkadaşlar lütfen söyleyin. Bu soruyu zaten sormuştum ama kodu aklıma getirmek mümkün olmadı.

Bir kez daha fikrin özünü anlatacağım. Awesom göstergesine göre, düşükten (0'ın altında) tepeye (0'ın üstünde) doğru, dalganın hacmi dikkate alınır (Hacim göstergesi).

Gösterge tablosunda dalga bazında hacim miktarını içeren bir metin etiketi görüntülenmeli ve tüm geçmiş üzerinden hesaplanmalıdır.

Bunu anladım:

pirinç4

Hata nerede?

 #property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Red
#property  indicator_color2  SteelBlue
#property  indicator_width1   2

//---- basic fan indicator parameters

extern bool Show_AOLine_2= true ;
extern int SlowEMA3= 34 ;
extern int EMA= 3 ;
extern bool Show_Volume= true ;
extern double coaf= 0.5 ;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];


     double VLUP, AO_up,AO_dn;
     double prhgh_e= 0 , prhgh_s, prlw_e= 0 , prlw_s;
     datetime tmhgh, tmlw;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   
   string name_ind = "Awesome_super_volumes" ;
   IndicatorShortName( "Awesome_super_volumes" );
   
   
//---- AO_fan line 2 (basic)
   if (Show_AOLine_2 == true ){Show_AOLine_2= DRAW_LINE ; }
   else 
    {Show_AOLine_2= DRAW_NONE ; }
   SetIndexBuffer ( 0 ,AOBuffer3);
   SetIndexStyle( 0 ,Show_AOLine_2);
   SetIndexLabel( 0 , "basic line" );   

   SetIndexBuffer ( 1 ,ExtMapBuffer1);
   SetIndexStyle( 1 , DRAW_HISTOGRAM );
   SetIndexLabel( 1 , "Volume" );
   
   //---- initialization done
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
int start()
  {
  
   int     limit;
   int     counted_bars=IndicatorCounted();
   double prev,current;
//---- last counted bar will be recounted
   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;

   for ( int i= 0 ; i<limit; i++)
   {
     
 //---- AO_fan + Volumes
     
AOBuffer3[i]= iMA ( NULL , 0 ,EMA, 0 , MODE_SMA , PRICE_MEDIAN ,i)- iMA ( NULL , 0 ,SlowEMA3, 0 , MODE_SMA , PRICE_MEDIAN ,i);
if (Show_Volume== true )
{
double nSum = Volume[i]* Point *coaf;
   if (AOBuffer3[i]<= 0 )ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]> 0 )ExtMapBuffer1[i] = -nSum;


double Vol_Arr[];
   if (AOBuffer3[i]<= 0 )Vol_Arr[i]=Volume[i]* Point *coaf;
   if (AOBuffer3[i]> 0 )Vol_Arr[i] = -Volume[i]* Point *coaf;
}
}

   //-- Поиск High & Time & Min_AO   
   if (AOBuffer3[i]> 0 )
  {
    
  AO_up = AOBuffer3[i]* 0.1 +AOBuffer3[i];
  prhgh_s = High[i];
   if (prhgh_s >= prhgh_e) {prhgh_e = prhgh_s; tmhgh = Time[i];}
   //SetText("Awesome_super_volumes"+Close[i], DoubleToStr(VLUP,0), tmhgh, AO_up, Black);
  }   
   
   //-- Поиск Low & Time & Max_AO 
   if (AOBuffer3[i]< 0 )
  {
  AO_dn = AOBuffer3[i]* 0.1 +AOBuffer3[i];
  prlw_s = Low[i];
   if (prlw_s > prlw_e) {prlw_e = prlw_s; tmlw = Time[i];}
   //SetText("Awesome_super_volumes"+Close[i], DoubleToStr(VLUP,0), tmlw, AO_dn, Black);
  } 
  
    // -- Пересчет баров от High до Low
  
   if (NewBar())
{ 
int colbr = iBarShift( NULL , 0 ,tmhgh)-iBarShift( NULL , 0 ,tmlw);     
int shift=iBarShift( NULL , 0 ,tmhgh);
 for (i= 0 ; i<=colbr; i++)
{VLUP += MathAbs (iVolume( NULL , 0 , shift+i));}
}


    
   Comment ( "Vol_" ,VLUP,prlw_e,prhgh_e); 
   for (i= 0 ; i<limit; i++)
   {     
SetText( "Awesome_super_volumes" +Close[i], DoubleToStr(VLUP, 0 ), tmlw, AO_dn, Black);     
 }
        
//---- done
   return ( 0 );
  }
//+------------------------------------------------------------------+
void SetText( string name, string Vl, datetime t1, double p1, color c)
 {
 // if (ObjectFind(name)!=-1) ObjectDelete(name);
   ObjectCreate (name, OBJ_TEXT ,WindowFind( "Awesome_super_volumes" ), 0 , 0 , 0 , 0 );
  ObjectSetText(name, Vl, 10 , "Times New Roman" , c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR , c); 
  }
  
   bool NewBar()
{
   static datetime lastbar = 0 ;
   datetime curbar = Time[ 0 ];
   if (lastbar!=curbar)
   {
      lastbar=curbar;
       return ( true );
   }
   else
   {
     return ( false );
   }}
 

Uzman Danışman, çizelgeye bir sipariş paketi atar.

İşlevim, açık piyasa emirlerinin, bekleyen alımların ve ödemelerin sayısını bulur. Bekleyen siparişlerin maksimum ve minimum fiyatlarının değerlerini bulan bir şeyi daha hızlı kontrol etmek için buraya başka bir yerleşik işlev ekledim.

Baskı sayesinde, zamanın belirli bir aşamasında değerlerin ihtiyacınız olan şey olmadığını görüyorum.

Mesele şu ki, bekleyen emirler zaten kapalıysa, atlanmaları gerekir, ancak bir nedenden dolayı fonksiyon onları atlamaz. İşte fonksiyon:

 //+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders()
{
   int total = OrdersTotal () - 1 ;
   
   amountOfCurrPendingBuys = 0 ;
   amountOfCurrPendingSells = 0 ;
   amountOfCurrMarketOrders = 0 ;
   
   priceMinOfBuy = 0 ;
   priceMaxOfSell = 0 ;

   for ( int i=total; i>= 0 ; i--)
   {
     if (! OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) continue ;
         if (OrderSymbol() != Symbol ()) continue ;
           if (OrderMagicNumber() != i_magic) continue ;
           if (OrderCloseTime() != 0 ) continue ;
           {
               if (OrderType() == OP_BUYSTOP)
              {
                 amountOfCurrPendingBuys++;

                 if (priceMaxOfBuy < OrderOpenPrice() || priceMaxOfBuy == 0 )
                 {
                     priceMaxOfBuy = OrderOpenPrice();
                 }
                 if (priceMinOfBuy > OrderOpenPrice() || priceMinOfBuy == 0 )
                 {
                     priceMinOfBuy = OrderOpenPrice();
                 }
              }
               if (OrderType() == OP_SELLSTOP)
              {
                 amountOfCurrPendingSells++;

                 if (priceMaxOfSell < OrderOpenPrice() || priceMaxOfSell == 0 )
                 {
                     priceMaxOfSell = OrderOpenPrice();
                 }
                 if (priceMinOfSell > OrderOpenPrice() || priceMinOfSell == 0 )
                 {
                     priceMinOfSell = OrderOpenPrice();
                 }
              }
              amountOfCurrMarketOrders++;
           }
   }
   Print ( "FindOrders() : priceMaxOfBuy " , priceMaxOfBuy);
   Print ( "FindOrders() : priceMinOfBuy " , priceMinOfBuy);
   Print ( "FindOrders() : priceMaxOfSell " , priceMaxOfSell);
   Print ( "FindOrders() : priceMinOfSell " , priceMinOfSell);
   
   Print ( "FindOrders() : amountOfCurrPendingBuys " , amountOfCurrPendingBuys);
   Print ( "FindOrders() : amountOfCurrPendingSells " , amountOfCurrPendingSells);
   Print ( "FindOrders() : amountOfCurrMarketOrders " , amountOfCurrMarketOrders);
}

Durum açıkça belirtilmiştir:

 if (OrderCloseTime() != 0 ) continue ;

Bu, emrin kapanış zamanı sıfır değilse, o zaman kapalıdır ve bu nedenle onu atlayacağız demektir.

Çıktıda, eksik olmadıklarını görüyorum. İşte grafik:

Erteleme fiyatı neden doğru değil? Görebildiğim kadarıyla kod doğru.

 
hoz :

Durum açıkça belirtilmiştir:

 if (OrderCloseTime() != 0 ) continue ;


Ve neden ertelenen için?
 
Vinin :

Ve neden ertelenen için?


Yani aktif olan mevduatlar için kapanış fiyatı mantıksal olarak sıfıra eşittir (çünkü kapalı değildir) ve zaten kapanmış mevduatlar için kapanış fiyatı sıfıra eşit değildir (kapanış fiyatı saatle aynı olacaktır) gittiğinde). Mantıken, bu kapanış zamanı mı?

Gecikmelerin kapatılmadığını, silindiğini anlıyorum, ancak bunu başka nasıl uygulayabilirim?

 
Neye ihtiyacınız olduğunu yazabilir misiniz - aşırı beklemede bulun?
 
//+-------------------------------------------------------------------------------------+
//| Поиск своих ордеров                                                                 |
//+-------------------------------------------------------------------------------------+
void FindOrders()
{
   int total = OrdersTotal() - 1;
   
   amountOfCurrPendingBuys = 0;
   amountOfCurrPendingSells = 0;
   amountOfCurrMarketOrders = 0;
   
   priceMinOfBuy = 0;
   priceMaxOfSell = 0;

   for (int i=total; i>=0; i--)
   {
     if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
        if (OrderSymbol() != Symbol()) continue;
           if (OrderMagicNumber() != i_magic) continue;
           if (OrderCloseTime() != 0) continue;
           {// к чему относятся эти скобки ??? уберите их и if (OrderCloseTime() != 0) continue; наконец то заработает
              if (OrderType() == OP_BUYSTOP)
              {
                 amountOfCurrPendingBuys++;

                 if (priceMaxOfBuy < OrderOpenPrice() || priceMaxOfBuy == 0)
                 {
                     priceMaxOfBuy = OrderOpenPrice();
                 }
                 if (priceMinOfBuy > OrderOpenPrice() || priceMinOfBuy == 0)
                 {
                     priceMinOfBuy = OrderOpenPrice();
                 }
              }
              if (OrderType() == OP_SELLSTOP)
              {
                 amountOfCurrPendingSells++;

                 if (priceMaxOfSell < OrderOpenPrice() || priceMaxOfSell == 0)
                 {
                     priceMaxOfSell = OrderOpenPrice();
                 }
                 if (priceMinOfSell > OrderOpenPrice() || priceMinOfSell == 0)
                 {
                     priceMinOfSell = OrderOpenPrice();
                 }
              }
              amountOfCurrMarketOrders++;
           }
   }
   Print("FindOrders() : priceMaxOfBuy ", priceMaxOfBuy);
   Print("FindOrders() : priceMinOfBuy ", priceMinOfBuy);
   Print("FindOrders() : priceMaxOfSell ", priceMaxOfSell);
   Print("FindOrders() : priceMinOfSell ", priceMinOfSell);
   
   Print("FindOrders() : amountOfCurrPendingBuys ", amountOfCurrPendingBuys);
   Print("FindOrders() : amountOfCurrPendingSells ", amountOfCurrPendingSells);
   Print("FindOrders() : amountOfCurrMarketOrders ", amountOfCurrMarketOrders);
}
 
int i, buy_ticket,sell_ticket;
double min = Close[0];
double max = Close[0];
for(i = OrdersHistoryTotal()-1;i>=0;i--){
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
      if(OrderSymbol()!=Symbol()){continue;}
      if(OrderMagicNumber()!=Magic){continue;}
      if(OrderType()==OP_BUYSTOP){
         if(OrderOpenPrice()>max){
            max = OrderOpenPrice();
            buy_ticket = OrderTicket();
         }
      }
      if(OrderType()==OP_SELLSTOP){
         if(OrderOpenPrice()<min){
            min = OrderOpenPrice();
            sell_ticket = OrderTicket();
         }
      }
   }
}
if(OrderSelect(buy_ticket,SELECT_BY_TICKET){
   if(OrderCloseTime()==0){OrderDelete(OrderTicket());}
}
if(OrderSelect(sell_ticket,SELECT_BY_TICKET){
   if(OrderCloseTime()==0){OrderDelete(OrderTicket());}
}
 
FAQ :
İşlevden neye ihtiyacınız olduğunu yazabilir misiniz - aşırı beklemede mi?

Aşırı mevduat fiyatlarını bulun. Uzak değil aktiftir. Onlar. Seçim sırasında kaldırılan mevduatların atlanmasını istiyorum.. Açıkça açıkladım, umarım?