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

 
costy_ :

Örneğin açılış saatinin bir dosyasına yazmak gibi birçok seçenek vardır, ancak açık siparişler arasında gezinmek ve kullanım süresini karşılaştırmak daha kolaydır.

Ve genel olarak, her bir pozisyon için (soruyu anladığım gibi) "belirli bir süre sonra tüm açık pozisyonları kapatmak gerekir" ifadesini yeniden ifade edin.

Teşekkür ederim! Cevabınızdaki "kolay" kelimesi anahtardır, dolayısıyla böyle bir yerleşik işlev yoktur. Ve her bir pozisyonu açıldıktan 2 saat sonra kapatmak istedim .
 
costy_ :

Betik, testçinin zamanını o kadar kolay bulamaz (ancak göstergeyi bulacaktır), başlangıca bir test danışmanı ekleyebilirsiniz.

hızlı ve güvenilir...

Teşekkür ederim. Bunu bir komut dosyasında yaptım:
     datetime time_start= GlobalVariableGet ( "Time_test" );
//    Alert(iBarShift(NULL,0,time_start)); 
    EndBar =   iBarShift ( NULL , 0 ,time_start);
Her şey çalışıyor.
 

Bir başlatıcı yazmaya çalışıyorum. Neden yeniden çizildiğini anlamıyorum. Ayrıca, yalnızca render üzerinde çizim yapar. Bana yardım et lütfen. Programlamada acemiyim.

#özellik göstergesi_chart_window
#özellik göstergesi_tamponları 2
#özellik göstergesi_color1 Macenta
#özellik göstergesi_renk2 Kırmızı
//---- giriş parametreleri
harici intN;
tarihsaat bazı_zaman=D'1971.01.11 00:00';
datetime some_time_1=D'1971.01.11 00:00';
//---- arabellekler
çift RLB_Buffer[];
çift RLB_Buffer_1[];
double Real_Line_Balance=0,x=0,last_high,last_low,RLB,Real_Line_Balance_1=0,x1=0,last_high_1,last_low_1,RLB_1;
bool dirlong, ilk;
int i,ii,bar_high,bar_low,first_t_bar,now_bar,first_t_bar_1,now_bar_1;
//+------------------------------------------- --------------------+
//| özel gösterge başlatma işlevi |
//+------------------------------------------- --------------------+
int init()
{
string kısa_adı;
//---- gösterge çizgisi
SetIndexStyle(0, DRAW_ARROW);
SetIndexArrow(0, 159);
SetIndexBuffer(0,RLB_Buffer);
//----;
SetIndexStyle(1, DRAW_ARROW);
SetIndexArrow(1, 159);
SetIndexBuffer(1,RLB_Buffer_1);
dönüş(0);
}
//+------------------------------------------- --------------------+
//| |
//+------------------------------------------- --------------------+
int başlangıç()
{
int counted_bars=IndicatorCounted();
Yorum(i," ",ii);
//----
if(çubuklar < 3)
dönüş(0);
//----------
first_t_bar=iBarShift(NULL,0,bir_zaman,yanlış); // yukarı trendin başlangıç çubuğu
now_bar=iBarShift(NULL,0,TimeCurrent(),false); //son çubuk, en sağdaki
i=counted_bars-first_t_bar+1;
//-----------
first_t_bar_1=iBarShift(NULL,0,some_time_1,false); // düşüş trendi başlatma çubuğu
now_bar_1=iBarShift(NULL,0,TimeCurrent(),false); //son çubuk, en sağdaki
ii=counted_bars-first_t_bar_1+1;
// if(IsVisualMode()==DOĞRU) i=first_t_bar-counted_bars-1; // görselleştirme varsa, trend başlatma çubuğu
if(sayılan_barlar == 0)
{
ilk = yanlış;
i=first_t_bar+1;
ii=first_t_bar_1+1;
}
//------------ //eksi hesaplanan çubuklar
dirlong=yanlış;
if(iMA(NULL,0,1,0,MODE_SMA,PRICE_MEDIAN,0)>iMA(NULL,0,2,0,MODE_SMA,PRICE_MEDIAN,0))dirlong = true;
if(dirlong == true) // trend yukarıysa
{
while(i>=0)
{
x++; // trendin başlangıcından itibaren bar sayacı
Real_Line_Balance=Kapat[i+5]; // trenddeki tümcelerin toplamının hesaplanması
RLB=Real_Line_Balance;
if(RLB<Düşük[1]) RLB_Buffer[i]=Real_Line_Balance; // satırı yalnızca fiyat en üstteyse göster
//-------
if(RLB>Kapat[i]&& x>50) //fiyat RLB'yi yukarıdan aşağıya geçerse
{
bar_high=iHighest(NULL,0,MODE_HIGH,first_t_bar,now_bar);//sonra arasında TOP'u tanımlarız
//son çubuk ve trend başlangıcı
some_time_1=Zaman[bar_high]; // düşüş trendinin yeni başlangıcı
x=0; // trendin başlangıcından itibaren bar sayacının sıfırlanması
Real_Line_Balance=0;
}
ben--;
}// süre
//-------
}//dirlong
//----------------------
//----------------------
if(dirlong == false) // trend aşağı ise
{
while(ii>=0)
{
x1++; // trendin başlangıcından itibaren bar sayacı
Real_Line_Balance_1=Kapat[ii+10]; // trenddeki tümcelerin toplamının hesaplanması
RLB_1=Real_Line_Balance_1;
if(RLB_1>Yüksek[1]) RLB_Buffer_1[ii]=Real_Line_Balance_1;
//-------
if(RLB_1<Close[ii]&& x1>50) //fiyat RLB'yi yukarıdan aşağıya geçerse
{
bar_low=iLowest(NULL,0,MODE_LOW,first_t_bar_1,now_bar_1);//sonra aradaki EN DÜŞÜK'ü belirleriz
//son çubuk ve trend başlangıcı
some_time=Zaman[bar_low]; // yükseliş trendinin yeni başlangıcı
x1=0; // trendin başlangıcından itibaren bar sayacının sıfırlanması
Real_Line_Balance_1=0;
}
ii--;
}// süre
//-------
}//dirlong
//----------------------
dönüş(0);
}
//+------------------------------------------- ------ ----------------------+

 

Saçmalık. Yerine

i=counted_bars-first_t_bar+1;

sayılan çubukları sayan bir tasarım koyun. HER ŞEY normal bir şekilde gitmeye başladı. GöstergeSayısı(); aksaklık ya da bir şeyi yakalayamıyorum ...

 

Bir değişkene kapalı bir siparişin durumu nasıl anlatılır?


avatar
2
vitaluxa 29.10.2011 21:26
Merhaba!

Diyelim ki danışman bir emir açtı, zararı durdur veya kar al ile kapatıldı, emrin tam olarak zararı durdur veya kar al ile kapatıldığı değişkene nasıl söylenir?
Şimdiden teşekkürler!
 
001 :

Saçmalık. Yerine

i=counted_bars-first_t_bar+1;

sayılan çubukları sayan bir tasarım koyun. HER ŞEY normal bir şekilde gitmeye başladı. GöstergeSayısı(); aksaklık ya da bir şeyi yakalayamıyorum ...

while(i>=0) kullanırsınız, yani yeni bir mum çubuğu göründüğünde, i=1 (elbette, önceki mum çubuğunun verileri bir kez sabit verilere göre hesaplanır).

Neden bazı_zaman=D'1971.01.11 00:00'; Bars kullan , IndicatorCounted benim için sorunlu değil (peki, hata muhtemelen bu first_t_bar yüzünden) .

Algoritmanız ve onu tedavi ediyorsunuz.

" Programlamada yeniyim. " 2007'den beri))).

 
sergeev :

Bir değişkene kapalı bir siparişin durumu nasıl anlatılır?


:)

+ ...

Vitalyukha için:

https://docs.mql4.com/ru/trading/OrderStopLoss

https://docs.mql4.com/ru/trading/OrderTakeProfit

 
İyi günler, lütfen bana bu yılın 10 Haziran'dan 22 Eylül'e kadar tekliflerin neden yüklenmeyebileceğini söyleyin? İki veya üç para birimi için bir geçmiş indirmesi yaptım ve hepsinde verilerde aynı boşluk var.
 
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Закрвает открытые позиции через 2 суток
void DelOldPositions()                                    
{   
   for (int trade = OrdersTotal() - 1; trade >= 0; trade--)
    {
      OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
        {
         if (OrderOpenTime()+2*24*60*60  > TimeCurrent())  
          {
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4 ),3,Red);
          }
        }
   }
}
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
Помогите поправить 2 последние строки, т.к. в тестере почему-то  мгновенно  закрывает все открытые позы. С уважением.
 

Sorun şudur - danışman siparişleri sürekli olarak yeniden açar, yani. satın almak için bir sinyal var - siparişi açar, sonra kârla kapatır ve koşullar hala korunur, tekrar açar. diğer sinyallerden sonra sadece açılması gerekir.

Alış ve takasların olağan sayacı yardımıyla ortadan kaldırılabileceğini düşündüm - eğer bir satın alma emri bir sayaç +1 açtıysa ve sayaç 0'dan büyükken yeni bir satın alma açılamıyorsa, sayaç sadece sıfırlanır. yerleştikten sonra. ama neden çalışmıyor nedenini çözemiyorum??? Mantığa bak, belki bir yerde yanılıyorum ?? mql metre tam olarak benzer bir sorunla karşı karşıya kaldı.

 extern double TakeProfit = 150 ;
extern double Sl = 150 ;
extern double Lots = 0.1 ;
extern int n = 9 ;     
        
//-----------------------------------------------------------

int start()
 {
   int cnt, ticket, total, i, Buy= 0 , Sell= 0 ;
   double x1= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_TENKANSEN, 0 );   //красная
   double x2= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_KIJUNSEN, 0 );     //синяя
   double x3= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_SENKOUSPANA, 0 ); //фиол пунктир
   double x4= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_SENKOUSPANB, 0 );   //кр пунктир
   double x5= iIchimoku ( NULL , 0 , 9 , 26 , 52 ,MODE_CHINKOUSPAN, 0 );   //зеленая
   double x6=Ask;
   double x61=Bid;
   double Lot= 0 ;  
  total= OrdersTotal ();
  
   for (i=total- 1 ;i>= 0 ;i--)   //счетчик выставленных ордеров
   { 
       if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) 
       {
         if ( OrderType ()==OP_BUY)
          { 
           Buy++;
            }  
           if ( OrderType ()==OP_SELL)
           { 
            Sell++;
             }  
        }
     }
   if (total< 1 ) //проверка количества ордеров 
   {
    
         if ( AccountFreeMargin ()<( 100 *Lots))
              {
     Print ( "Недостаточно средств = " , AccountFreeMargin ());
     return ( 0 );  
               }

         if (x6>x3 && x6>x4 && x1>x2 && x6>x2 && x6<(x2+ 60 ) && Buy== 0 ) //бай
               {
                   ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask, 3 ,Bid-Sl* Point ,Ask+TakeProfit* Point , 0 , 0 , 0 , Green ); Sell= 0 ; // ордер и обнуление счетчика
                       if (ticket> 0 )
                      {
                         if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "открыта позиция BUY : " , OrderOpenPrice ());
      
                         else Print ( "Ошибка при открытии BUY позиции : " , GetLastError ()); 
                        }
              }
   
         if (x6<x3 && x6<x4 && x1<x2 && x6<x2 && x6>(x2- 60 ) && Sell== 0 ) //селл 
                {
                   ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid, 3 ,Ask+Sl* Point ,Bid-TakeProfit* Point , 0 , 0 , 0 , Red ); Buy= 0 ; //сам по себе ордер и обнуление счетчика 
                     if (ticket> 0 )
                     {
                         if ( OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES)) Print ( "открыта позиция SELL : " , OrderOpenPrice ());
    
                         else Print ( "Ошибка при открытии SELL позиции : " , GetLastError ());
      
                      } 
    
                  }
  
  
  } 

   if (( OrderType ()== 0 && x61<x3 && x61<x4 && x1>x2 && x1>x3 && x1>x4) || ( OrderType ()== 1 && x61>x3 && x61>x4 && x1<x2 && x1<x3 && x1<x4)) //закрытиеи на развороте
      {
           bool    result;
           double price;
           int     cmd,error;
//----
           if ( OrderSelect ( 0 ,SELECT_BY_POS,MODE_TRADES))
              {
                  cmd= OrderType ();
                   if (cmd==OP_BUY || cmd==OP_SELL)
                    {
                       while (true)
                        {
                         if (cmd==OP_BUY) price=Bid;
                         else             price=Ask;
                         result= OrderClose ( OrderTicket (), OrderLots (),price, 3 , CLR_NONE );
                         if (result!=TRUE) { error= GetLastError (); Print ( "LastError = " ,error); }
                         else error= 0 ;
                         if (error== 135 ) RefreshRates ();
                         else break ;
                        }
                     }
               }
           else Print ( "Error when order select " , GetLastError ());
//----
          
      }
 
 }
 
 
Dosyalar: