[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 567

 
Catrock писал(а) >>

Yeni başlayanlardan bir soru daha.

Uzman Danışmanımda birkaç özel işlev kullanıyorum. Bu işlevleri bir kitaplıkta nasıl birleştirebilirsiniz ve bunları oradan EA'nın gövdesinde nasıl çağırabilirsiniz.

Bu konuda dilin sözdizimine aşina değil.

Lütfen dokümantasyon veya eğitim bölümüne gidin. Orada buna benzer bir şey bulunamadı.


https://book.mql4.com/ru/build/structure

https://www.mql5.com/ru/articles/1462

+ yığına... https://book.mql4.com/en/appendix/examples

 

Sıfır çubuğunda açık pozlar olup olmadığını veya olup olmadığını kontrol eden bir fonksiyon nasıl yazılır (bir zaman aralığı seçimine sahip olmak istenir. OpenPosLastBar(string sym="", int tf=0, int op=-1, int mn) =-1) veya bu fonksiyon anladığım kadarıyla şu an sadece açık pozlar ve eğer açıksa ve zaten kapalıysa -1 dönecek.

//+------------------------------------------- ------------------------------+
//| Son konum açık çubuğunun veya -1'in numarasını döndürür. |
//| Seçenekler: |
//| sym - enstrüman adı ("" - geçerli sembol) |
//| tf - zaman çerçevesi ( 0 - mevcut zaman çerçevesi) |
//| operasyon - operasyon (-1 - herhangi bir pozisyon) |
//| mn - MagicNumber (-1 - herhangi bir büyü) |
//+------------------------------------------- ------------------------------+
int NumberOfBarLastPos(string sym="", int tf=0, int op=-1, int mn=-1)
{
tarihsaat oot;
int i, k=SiparişToplam();

if(sym=="")
sym=Sembol();
for(i=0; ik; i++)
{
if( OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==sym)
{
if(OrderType()==OP_BUY || OrderType()==OP_SEL)
{
if(op0 || OrderType()==op)
{
if(mn0 || OrderMagicNumber()==dk)
{
if(ootOrderOpenTime()) oot=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}
//+------------------------------------------- ------------------------------+

 
İki döngü sürer. İlkinde, siparişlerin geçmişini , ikincisinde ise mevcut siparişleri inceliyoruz. Her iki durumda da, sipariş açılış süresi Süre[0]'den büyük veya buna eşitse, sipariş mevcut mumda açılmıştır. Bu, tüm zaman dilimleri için geçerlidir.
 
drknn >> :
Нужно два цикла. В первом проходим по истории ордеров, во втором - по текущим ордерам. В обоих случаях если время открытия ордера больше или равно Time[0], то ордер был открыт на текущей свече. Это справедливо для всех таймфреймов.

Bize ulaştığınız için teşekkürler. Bunu kod olarak sorabilir misiniz?
 
gince >> :

Спадибо, что аткликнулся. А можно попросить это в коде

İşte bir geçmiş geçiş örneği

 //=========== SchSellHist()  ===============================
//  Функция возвращает количество Sell-ордеров, лежащих в истории сегодняшних торгов
//  SchSell  - счётчик Sell ордеров
//-----------------------------------------------------------
int SchSellHist( int MAGIC){
  string SMB= Symbol ();
  int SchSell= 0 ;
  int i;
  for (i=OrdersHistoryTotal()- 1 ;i>= 0 ;i--){
    if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) { WriteError(i);}
    else {
      if (OrderSymbol()!=SMB || OrderMagicNumber()!=MAGIC){ continue ;} 
      if (OrderType()==OP_SELL){
        if (OrderOpenTime()>=Time_D0){ // сегодняшний ордер
          SchSell++;
        }
      }
    }
  }
 return (SchSell);     
}    
             
//==================================================================================================

Özellikle algoritma ve bitmiş örnek gözünüzün önünde olduğundan, kodu kendiniz bulmaya çalışın.
 
Merhaba insanlar! işlemlerden sonra kodu çözmeme yardım et, grafikte çok fazla çöp kalıyor, oklar, daireler, çizgiler, bunların nasıl kaldırılacağı veya böylece kendini silmesi burada kodun bir parçası
 
void seta(string a_name_0, int a_window_8, double a_datetime_12, double a_price_20, int ai_28, color a_color_32, int a_width_36) {
ObjectDelete(a_name_0);
ObjectCreate(a_name_0, OBJ_ARROW , a_window_8, a_datetime_12, a_price_20);
ObjectSet(a_name_0, OBJPROP_ARROWCODE, ai_28);
ObjectSet(a_name_0, OBJPROP_COLOR, a_color_32);
ObjectSet(a_name_0, OBJPROP_WIDTH, a_width_36);
}

geçersiz _setabuy(dize as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Teklif + 15.0 * Nokta, SYMBOL_ARROWUP, Mavi, 2);
gi_120++;
}

void _setasell(string as_0) {
g_str_concat_356 = StringConcatenate(as_0, gi_120);
seta(g_str_concat_356, 0, TimeCurrent(), Bid - 15.0 * Nokta, SYMBOL_ARROWDOWN, Kırmızı, 2);
gi_120++;
}
 
drknn >> :

İşte bir geçmiş geçiş örneği


Özellikle algoritma ve bitmiş örnek gözünüzün önünde olduğundan, kodu kendiniz bulmaya çalışın.

Teşekkür ederim. Deneyeceğim.
 
drknn >> :

İşte bir geçmiş geçiş örneği


Özellikle algoritma ve bitmiş örnek gözünüzün önünde olduğundan, kodu kendiniz bulmaya çalışın.

Veya mevcut çubukta pozların açılıp açılmadığını kontrol eden bir fonksiyon var (OrdersTotal() ve OrdersHistoryTotal() ile kontrol). Type siparişi açıldıysa true döndürür.

 bool CheckExists( int Type)                                  
 {
   bool Result = True;
   for ( int i = 0 ; i < OrdersTotal (); i++)
   if ( OrderSelect (i, SELECT_BY_POS))
     if (OrderType() == Type && OrderMagicNumber() == Magic && OrderSymbol() == Symbol ())
     if (OrderOpenTime() >= Time[ 0 ])
      Result = False;
   for (i = 0 ; i < OrdersHistoryTotal(); i++)
   {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY))
     if (OrderType() == Type && OrderOpenTime() >= Time[ 0 ]
        && OrderMagicNumber() == Magic && OrderSymbol() == Symbol ())
      Result = False;
    }

   return (Result);
  }
 

Lütfen bana koşulu nasıl uygulayacağımı söyle.-

Eğer ( bekleyen emirler varsa ) bunu ve şunu yaparız ;