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

 
lottamer :

İşe yaradı! dürüst olmak gerekirse, VE yerine VEYA yerine koymak gibi bir fikrim vardı .... ama ... :)))))))))))))))))))))))))

teşekkür etmek! şimdi mantık benim için açık, 15 tane kapalı saymama rağmen, kodu bir balon boyutuna şişirmek zorunda kalacağım!

Bütün bunları tek bir döngüye sığdırmak mümkün mü? ve sadece gerekli işlem sayısı parametresini N ?

Son kapatılan N siparişin biletlerini aramada olası seçeneklerden biri buradadır ve gerekli siparişler türe (AL, SAT) ve kârlılığa (kârsız, kârlı) göre filtrelenebilir:

 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция получает Ticket следующего перед fdt_Time закрытого ордера         |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_TicketLastClosePos ( int fi_Type = - 2 ,           // OrderType()
                             int fi_TypeProfit = 0 ,     // флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльные
                             datetime fdt_Time = 0 )     // Точка отсчёта времени
{
     datetime ldt_CloseTime = 0 , ldt_LastTime = 0 ;
     double    ld_Profit = 0 .;
     int       li_Ticket = 0 , li_Total = OrdersHistoryTotal();
//----
     for ( int li_ORD = li_Total - 1 ; li_ORD >= 0 ; li_ORD--)
    {
        // if (!fCheck_MyOrders (li_ORD, fi_Type, MODE_HISTORY)) continue ;
        // Здесь прописываете свою фильтрацию ордеров
        ldt_CloseTime = OrderCloseTime();
         //---- Пропускаем ордера, закрытые после указанной даты
         if (fdt_Time != 0 ) if (fdt_Time <= ldt_CloseTime) continue ;
         if (ldt_LastTime >= ldt_CloseTime) continue ;
        ld_Profit = OrderProfit();
         //---- Фильтруем ордера по профитности
         if (fi_TypeProfit > 0 ) if (ld_Profit < 0 .) continue ;
         if (fi_TypeProfit < 0 ) if (ld_Profit > 0 .) continue ;
        ldt_LastTime = ldt_CloseTime;
        li_Ticket = OrderTicket();
    }
//----
     return (li_Ticket);
}
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция получает Tickets N закрытых ордеров                                |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int fGet_TicketsLastCloseOrd ( int fi_NUM,                 // Количество искомых тикетов
                               int & ar_Tickets[],         // возвращаемый массив с тикетами
                               int fi_Type = - 2 ,           // OrderType()
                               int fi_TypeProfit = 0 )     // флаг профитности ордеров: 0 - все, -1 - убыточные, 1 - прибыльные
{
     int       li_cnt = 0 , li_Ticket;
     datetime ldt_Time = 0 ;
//----
     for ( int li_IND = 0 ; li_IND < fi_NUM; li_IND++)
    {
        li_Ticket = fGet_TicketLastClosePos (fi_Type, fi_TypeProfit, ldt_Time);
         if (li_Ticket > 0 )
        {
            li_cnt++;
             ArrayResize (ar_Tickets, li_cnt);
            ar_Tickets[li_cnt-1] = li_Ticket;
             OrderSelect (li_Ticket, SELECT_BY_TICKET);
            ldt_Time = OrderCloseTime();
        }
         else break ;
    }
//----
     return (li_cnt);
}

fGet_TicketsLastCloseOrd() işlevini çağırdıktan sonra, verilen parametreler tarafından bulunan bilet sayısını döndürür, verilen bilet sayısı (fi_NUM) ve işlev tarafından döndürülen değer ile bir kontrol yapabilirsiniz (yaparım). Toplanan tüm biletler, referans yoluyla işleve geçirilen dizide olacaktır.

Ve bu versiyonda, bu son biletlerin kaç tane aranacağı önemli değil. :)

Ve bu son kapatılan siparişlerde kâra ihtiyacınız varsa, o zaman daha da kolay:

 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Функция получает Profit N последних закрытых ордеров                       |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fGet_ProfitLastCloseOrd ( int fi_NUM,          // Количество просчитываемых ордеров
                                int fi_Type = - 2 )    // OrderType()
{
     int       li_Ticket;
     double    ld_Profit = 0 .;
     datetime ldt_Time = 0 ;
//----
     for ( int li_IND = 0 ; li_IND < fi_NUM; li_IND++)
    {
        li_Ticket = fGet_TicketLastClosePos (fi_Type, 0 , ldt_Time);
         if (li_Ticket > 0 )
        {
             OrderSelect (li_Ticket, SELECT_BY_TICKET);
            ldt_Time = OrderCloseTime();
            ld_Profit += (OrderProfit() + OrderSwap() + OrderCommission());
        }
         else break ;
    }
//----
     return (ld_Profit);
}
 
TarasBY :

Son kapatılan N siparişin biletlerini aramada olası seçeneklerden biri buradadır ve gerekli siparişler türe (AL, SAT) ve kârlılığa (kârsız, kârlı) göre filtrelenebilir:

fGet_TicketsLastCloseOrd() işlevini çağırdıktan sonra, verilen parametreler tarafından bulunan bilet sayısını döndürür, verilen bilet sayısı (fi_NUM) ve işlev tarafından döndürülen değer ile bir kontrol yapabilirsiniz (yaparım). Toplanan tüm biletler, referans yoluyla işleve geçirilen dizide olacaktır.

Ve bu seçenekte, bu son biletlerin kaç tane aranacağı önemli değil. :)

Ve bu son kapatılan siparişlerde kâra ihtiyacınız varsa, o zaman daha da kolay:



çok teşekkürler. Biraz ara vereceğim, neyin ne olduğunu bulmam lazım...
 
Merhaba, lütfen bu sorunu çözmeme yardım edin: Eurobucks, dolar endeksi ve euro endeksini tek bir göstergede görüntülemek istiyorum, mevcut değerleri birkaç büyüklük derecesinde farklılık gösteriyor. Onları aynı sıradaki değerlere nasıl getirebilirim? Sadece çarpanları ekleyin - bence bir şekilde Feng Shui'ye göre değil ...
 
tommy27 :
Merhaba, lütfen bu sorunu çözmeme yardım edin: Eurobucks, dolar endeksi ve euro endeksini tek bir göstergede görüntülemek istiyorum, mevcut değerleri birkaç büyüklük derecesinde farklılık gösteriyor. Onları aynı sıradaki değerlere nasıl getirebilirim? Sadece çarpanları ekleyin - bence bir şekilde Feng Shui'ye göre değil ...

dk. ve tüm göstergeler için maksimum değeri aynı olacak şekilde ayarlayın
 

Güzel gün! Profesyonellerin tavsiyesi: Sinyallerini bir danışmanda kullanmak istediğim bir gösterge yazdım . Hangisi daha hızlı çalışacak, gösterge işlevi mi yoksa taşınan gösterge mi?

teşekkür ederim

 
pako :

dk. ve tüm göstergeler için maksimum değeri aynı olacak şekilde ayarlayın

hepsi ... 3 droline tamponu için hepsinin tek bir gösterge ile gösterilmesini istiyorum.
 

tommy27 :

Onları aynı sıradaki değerlere nasıl getirebilirim?

ölçek aynı olmalıdır.
 
pako :
ölçek aynı olmalıdır.

Evet ve bunun için üç arabelleğin tüm değerlerini şu şekilde görüntülemeden önce dönüştürmek mantıklıdır:

Xn=(X-Xmin)/(Xmax-Xmin)

Aptalca yaparsanız, yatay bir çizgi gibi görünen bir şey elde edersiniz.

Eh, MQ'dan ölçeklemeyi kullanırsanız, her şey en iyi tip olacaktır.

 
Teşekkürler, deneyeceğim.
 
Zhunko :
Bu olursa, yakında değil, ama belki de asla.

Cevap için teşekkürler.

Ancak aynı şüpheli karşılaştırmayı uzun süredir diğer kodlarda kullanıyorum.

Ve başarılı bir şekilde çalışıyor.

 int start()                                                                                                                     
{                                                                                                                       
                                                                                                                        
 double Price=iOpen ( Symbol (), 0 , 0 );                                                                                                                             
 int last_order_bar = 0 ;                                                                                                                        
 int ot = OrdersTotal ();                                                                                                                        
                                                                                                                        
 if (ot> 0 ) //если есть ордера в рынке                                                                                                                   
 {                                                                                                                      
   if ( OrderSelect (ot- 1 ,SELECT_BY_POS))                                                                                                                        
       if (OrderType ()==OP_BUY || OrderType ()==OP_SELL )                                                                                                                       
         last_order_bar = iBarShift ( Symbol (), 0 ,OrderOpenTime ());                                                                                                             
 }                                                                                                                      
                                                                                                                        
 int last_hist_order_bar = 0 ;                                                                                                                   
 int oht = OrdersHistoryTotal();                                                                                                                        
                                                                                                                        
 if (oht> 0 )                                                                                                                     
 {                                                                                                                      
   if ( OrderSelect (oht- 1 ,SELECT_BY_POS, MODE_HISTORY))                                                                                                                         
       if (OrderType ()==OP_BUY || OrderType ()==OP_SELL)                                                                                                                        
         last_hist_order_bar = iBarShift ( Symbol (), 0 ,OrderOpenTime ());                                                                                                        
 }                                                                                                                      
                                                                                                                        
 if (ot== 0 || last_order_bar> 0 )                                                                                                                      
     if (oht== 0 || last_hist_order_bar> 0 ) 
//===============================================================
if (Bid==Price)
if ((Minute( ) == 45 )&&(Minute( ) < 50 ))
int Ticket= OrderSend ( Symbol (),OP_BUY, 0.1 ,Ask, 1 ,Bid- 1500 * Point ,Bid+ 150 * Point , "jfh" , 123 );        
                                                                                        
}                                                                                                                       
return ;
Anlamıyorum - bu durum neden ikinci durumda çalışmıyor. Bu kodlar arasında temel bir fark görmüyorum.