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

 
hoz :



 double lastOrderCloseTime = - 1 ,                   // Время закрытия последнего ордера
        lastOrderOpenTime = - 1 ;                     // Время открытия последнего ордера
Eee ne??

Tür, int veya tarih saat
 
artmedia70 :
Bir keresinde mesajları boş bir gösterge penceresinde görüntüleyen bir fonksiyon yapmıştım. Çıktı satırlarının renklerini özelleştirebilirsiniz. O zaten ayarlandı. Eğer öyleyse, paylaşabilirim.


Artyom kodunuza memnuniyetle bir göz atacağım. Test için baskı en uygun seçenek değil ...
 

r772ra :

 double lastOrderCloseTime = - 1 ,                   // Время закрытия последнего ордера
        lastOrderOpenTime = - 1 ;                     // Время открытия последнего ордера

Eee ne??


Tür, int veya tarih saat

İşte tüm bu rezaletleri gönderdim ve şöyle çıktı:

 //+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
datetime GetLastOrderState()
{
   datetime lastOrderCloseTime = - 1 ,                   // Время закрытия последнего ордера
            lastOrderOpenTime = - 1 ;                     // Время открытия последнего ордера
   
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
  
       if (lastOrderOpenTime < OrderOpenTime())
      {
          lastOrderOpenTime = OrderOpenTime();
          lastOrderCloseTime = OrderCloseTime();
      }
   }
   Comment ( "Время закрытия последнего открытого ордера = " , lastOrderCloseTime);
   return (lastOrderCloseTime);
}

Nedense siparişler kapandığında bile son siparişin kapanma süresi olması gerekirken sırasıyla sıfır değildir .

Ve yorumlarda sürekli olarak şunları gösterir:

Время закрытия последнего открытого ордера = 0

Bu nedenle, sırasıyla koda göre benim için başka hiçbir şey çalışmıyor, çünkü bu fonksiyon çalışmıyor..

 
hoz :

Bütün bu rezaletleri buraya aktardı ve ortaya şöyle çıktı:

Nedense siparişler kapandığında bile son siparişin kapanma süresi olması gerekirken sırasıyla sıfır değildir .

Ve yorumlarda sürekli olarak şunları gösterir:

Bu nedenle, sırasıyla koda göre benim için başka hiçbir şey çalışmıyor, çünkü bu fonksiyon çalışmıyor..

Sizde var ve bekleyen siparişleri hesaba katın. Peki ve buna göre açık siparişlere bakar. Doğal olarak, sıfır kapanma süresi döndürür.

Kapanan siparişleri görüntülemek için kapatılanlar listesinde görüntülemeniz gerekir:

 for ( int i= OrdersHistoryTotal ()- 1 ; i>= 0 ; i--)

ve

 if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue ;

Ama ... iki işlev yapmanız gerekir - biri açık olanları arar, diğeri - kapalı olanları arar.

 
artmedia70 :

Sizde var ve bekleyen siparişleri hesaba katın. Peki ve buna göre açık siparişlere bakar. Doğal olarak, sıfır kapanma süresi döndürür.

Kapanan siparişleri görüntülemek için kapatılanlar listesinde görüntülemeniz gerekir:

ve

Ama ... iki işlev yapmanız gerekir - biri açık olanları arar, diğeri - kapalı olanları arar.


Artyom'a teşekkürler. Kesinlikle... Sırada kod optimizasyonu var . Kodun yapısı hakkında sorular var, AMA taze bir zihinle yazılması gerekecek.
 
hoz :

Artyom kodunuza memnuniyetle bir göz atacağım. Test için baskı en uygun seçenek değil ...

İşte özelliği test etmek için bir EA. İçinde, aslında, işlevin kendisi ve çağrısı. Aramadan önce, maksimum dört satırdan oluşabilen bir mesaj hazırlamanız gerekir. Her satırın uzunluğu, hafızam bana hizmet ediyorsa, 64 karakteri geçmemelidir. Bu yüzden bir mesajı birkaç satıra böldüm. Bir mesajın her satırı kendi renginde görüntülenebilir. Kodda her şey açık görünüyor - önce mesaj satırlarını hazırlıyoruz, sonra . Özellikle orada yorum yapmadım - uzun süre tek nefeste yazdım. Şimdi ne için olduğunu unuttum. Sorular varsa - hatırlayacağım, şimdi sadece en gerekli olanı hatırladım.

 //+------------------------------------------------------------------+
//|                                                Test iPrint().mq4 |
//|                             Copyright © 2013, Artyom A. Trishkin |
//|                                                skype: artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, Artyom A. Trishkin"
#property link       "skype: artmedia70"
//+------------------------------------------------------------------+
//| expert variables                                                 |
//+------------------------------------------------------------------+
int             a,b,c;
string          Exp_Name, Prefix, pref,
               message1, message2, message3, message4, 
               Mass_Name_Message[ 10 ];
//+----------------------------------------------------------------------------+
int init() {
   Exp_Name=WindowExpertName(); 
   pref= "_r" ;
   if (IsDemo()) pref= "_d" ;
   if (IsTesting()) pref= "_t" ;
   if (IsVisualMode()) pref= "_v" ;
   Prefix=Exp_Name+ "_" + Symbol ()+pref;  
//----------------------------
   return ;                                         // Выход из init() 
}
//+----------------------------------------------------------------------------+
int deinit() {
   if (!IsTesting()) {
       Comment ( "" );
// -------- Блок удаления всех объектов, построенных на графике --------
       string Name_Del[ 1 ]; 
       int Quant_Del= 0 ;                    
       int Quant_Objects= ObjectsTotal ();   
       int LenPref= StringLen (Prefix);
       ArrayResize (Name_Del,Quant_Objects);
       for ( int k= 0 ; k<Quant_Objects; k++) {
         string Obj_Name= ObjectName (k);   
         string Head= StringSubstr (Obj_Name, 0 ,LenPref);
         if (Head==Prefix) {                              
            Quant_Del+= 1 ;        
            Name_Del[Quant_Del- 1 ]=Obj_Name;
            }
        }
       for ( int i= 0 ; i<Quant_Del; i++)    
         ObjectDelete (Name_Del[i]); 
// ----- Конец блока удаления всех объектов, построенных на графике -----
      }
   return ;                                 // Выход из deinit()
}
//+----------------------------------------------------------------------------+
int start()
  {
//-------------------------------------------------------
// Подготавливаем первое сообщение
   message1= StringConcatenate ( "Первое сообщение из двух строк: Тик: " , GetTickCount (), " " );
   message2= StringConcatenate ( "Цена Bid: " , DoubleToStr(Bid, Digits ));
   iPrint( false , message1, message2, "" , "" , 9 , Aqua, DarkOrange);   // Выводим первое
   Sleep ( 3000 );
//-------------------------------------------------------
// Подготавливаем второе сообщение
   b= 4 ; c= 7 ;
   a=b+c;
   message1= StringConcatenate ( "Второе сообщение из трёх строк: a=" ,a, " " );
   message2= StringConcatenate ( "b=" ,b, " " );
   message3= StringConcatenate ( "c=" ,c);
   iPrint( false , message1, message2, message3, "" , 9 , Aqua, LimeGreen, DarkOrange); // Выводим второе
   Sleep ( 3000 );
//-------------------------------------------------------
// Подготавливаем третье сообщение
   message1= StringConcatenate ( "Третье сообщение из четырёх строк: Время: " , TimeToStr( TimeCurrent ()), " " );
   message2= StringConcatenate ( "Тик: " , GetTickCount (), " " );
   message3= StringConcatenate ( "Время бара: " ,TimeToStr(Time[ 0 ]), " " );
   message4= StringConcatenate ( "Цена Bid: " , DoubleToStr(Bid, Digits ));
   iPrint( false , message1, message2, message3, message4, 9 , Aqua, Aqua, Aqua, DarkOrange); // Выводим третье
   Sleep ( 3000 );
//-------------------------------------------------------
   return ( 0 );
  }
//+----------------------------------------------------------------------------+
// Если bool print = true или нет окна индикатора, то функция будет выводить сообщения в журнал
void iPrint( bool print, string mess1, string mess2= "" , string mess3= "" , string mess4= "" , 
             int sz= 9 , color cl1=Aqua, color cl2=Aqua, color cl3=Aqua, color cl4=Aqua) {
   string    NameGrafText, message, nm;
   int       i, y, k, LenStr, shift, Win_Num=- 1 , num= 0 ;
   color     cl;
   if (mess1== "" ) {
       Print ( "Func iPrint: Передана пустая строка, выходим" );
       return ;
      }
   Win_Num=WindowFind( "Win_Inform" );
   if (print || Win_Num< 0 ) {
      message=mess1+mess2+mess3+mess4;
       Print (message); 
       return ;
      }
   k= ArraySize (Mass_Name_Message)- 1 ;
   if ( StringLen (mess1)> 0 ) num++;
   if ( StringLen (mess2)> 0 ) num++;
   if ( StringLen (mess3)> 0 ) num++;
   if ( StringLen (mess4)> 0 ) num++;
   for (i=k; i>= 0 ; i--) {                             
      NameGrafText=Mass_Name_Message[i];           
       if ( StringLen (NameGrafText)> 0 )
       if ( ObjectFind (NameGrafText)==Win_Num) {
         if (i+num>k) {
             ObjectDelete (NameGrafText);  
            Mass_Name_Message[i]= "" ;
            }
         else if (i+num<=k) {             // Сдвигаем и перекрашиваем старые сообщения
            Mass_Name_Message[i+num]=Mass_Name_Message[i];
            y=ObjectGet(NameGrafText, OBJPROP_YDISTANCE );               // координата Y
            ObjectSet  (NameGrafText, OBJPROP_YDISTANCE , y+(sz+ 1 )*num); // координата Y
            ObjectSet  (NameGrafText, OBJPROP_COLOR , DimGray);           // цвет
            }
         }
      }
   shift=num;
   int v= GetTickCount ();
   for (i= 0 ; i<num; i++) {
      shift--;
      NameGrafText=Prefix+ "_Graf_Text_" +i+ "_" + Symbol ()+ "_" +v;   // Уникальное имя объекта
       int app= 0 ;
       while ( ObjectFind (NameGrafText)==Win_Num) {
         app++;
         NameGrafText=Prefix+ "_Graf_Text_" +i+ "_" + Symbol ()+ "_" +v+ "_" +app;
         }
      Mass_Name_Message[num- 1 -i]=NameGrafText;
       switch (i) {
         case 0 : message=mess1; cl=cl1; break ;
         case 1 : message=mess2; cl=cl2; break ;
         case 2 : message=mess3; cl=cl3; break ;
         case 3 : message=mess4; cl=cl4; break ;
         default :message=mess1; cl=cl1; break ;
         }
       ObjectCreate (NameGrafText, OBJ_LABEL , Win_Num, 0 , 0 );
      ObjectSetText(NameGrafText, message, sz, "Courier New" , cl);
      ObjectSet    (NameGrafText, OBJPROP_COLOR , cl);                   // цвет
      ObjectSet    (NameGrafText, OBJPROP_CORNER ,     2 );                 // угол
      ObjectSet    (NameGrafText, OBJPROP_XDISTANCE , 150 );               // координата Х
      ObjectSet    (NameGrafText, OBJPROP_YDISTANCE , 2 +(sz+ 1 )*shift);   // координата Y
      WindowRedraw();
      }
//---------------------------------      
   nm=Prefix+ "_Balance_txt" ;
   message= "Баланс :" ;
   cl=Yellow;
   SetText(message, cl, nm, 2 , 4 , 20 , "Arial" , 9 , Win_Num);
   nm=Prefix+ "_Balance" ;
   message=DoubleToStr(AccountBalance(), 2 );
   cl=DarkTurquoise;
   SetText(message, cl, nm, 2 , 70 , 20 , "Arial" , 9 , Win_Num);
//---------------------------------      
   nm=Prefix+ "_Equity_txt" ;
   message= "Средства :" ;
   cl=Yellow;
   SetText(message, cl, nm, 2 , 4 , 8 , "Arial" , 9 , Win_Num);
   nm=Prefix+ "_Equity" ;
   message=DoubleToStr(AccountEquity(), 2 );
   cl=DarkTurquoise;
   SetText(message, cl, nm, 2 , 70 , 8 , "Arial" , 9 , Win_Num);
//---------------------------------      
}
//+----------------------------------------------------------------------------+
void SetText( string Text, color cl, string nm, int angle, int x, int y, string font, int sz= 0 , int wnd= 0 ) {
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_LABEL , wnd, 0 , 0 );
   ObjectSet(nm, OBJPROP_CORNER    , angle);
   ObjectSet(nm, OBJPROP_XDISTANCE , x);
   ObjectSet(nm, OBJPROP_YDISTANCE , y);
   ObjectSet(nm, OBJPROP_WIDTH     , sz);
   ObjectSetText(nm, Text, sz, font, cl);
   }
//+----------------------------------------------------------------------------+

Peki, türkiye:

 //+------------------------------------------------------------------+
//|                                                   Win_Inform.mq4 |
//|                                Copyright © 2012, Artyom Trishkin |
//|                                                skype: artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Artyom Trishkin"
#property link       "skype: artmedia70"

#property indicator_separate_window
int start()
  {
  }
//+------------------------------------------------------------------+

Bunun gibi bir şey ... umarım anlarsın

Tabi ki hindi penceresini göstermek yerine arka plan yapıp ana grafikte gösterebilirsiniz ama ben çok tembelim... :)

 
artmedia70 :

İşte özelliği test etmek için bir EA. İçinde, aslında, işlevin kendisi ve çağrısı. Aramadan önce, maksimum dört satırdan oluşabilen bir mesaj hazırlamanız gerekir. Her satırın uzunluğu, hafızam bana hizmet ediyorsa, 64 karakteri geçmemelidir. Bu yüzden bir mesajı birkaç satıra böldüm. Bir mesajın her satırı kendi renginde görüntülenebilir. Kodda her şey açık görünüyor - önce mesaj satırlarını hazırlıyoruz, sonra fonksiyonu çağırıyoruz. Özellikle orada yorum yapmadım - uzun süre tek nefeste yazdım. Şimdi ne için olduğunu unuttum. Sorular varsa - hatırlayacağım, şimdi sadece en gerekli olanı hatırladım.

Peki, türkiye:

Bunun gibi bir şey ... umarım anlarsın

Tabi ki hindi penceresini göstermek yerine arka plan yapıp ana grafikte gösterebilirsiniz ama ben çok tembelim... :)


 

Kibar insanlar! Danışman yazdı, görünüşe göre gerçek hayatta her şey açıkça çalışıyor, tüm kurallar. Ve test cihazını kontrol ediyorum - buggy. Konu şu. Danışman, çizelgede atılan yatay çizgiler üzerinde emir açmalıdır. Ve test cihazında, hiç olmamasına rağmen, sanki çok fazla satır varmış gibi, onları herhangi bir seviyede sonsuzca açar! Sorunun ne olduğunu açıkla?

Satırlardan sorumlu kodun bir kısmı:

int Yeni_horizont()

{

int tip_o_buy;

int tip_o_sell;

int obj_total=NesnelerToplam();

// yeni satır yoksa çık

if(obj_total==0)

dönüş;

// eğer varsa...

if(obj_toplam!=0)

stringname=NesneAdı(0);

double pr=NormalizeDouble(ObjectGet(name,1),Digits);

ObjectDelete(isim); // kaldır ve tekrar ayarla

if(pr>Bid+(Stop_level+1)*Point) // siparişlerin türünü belirle

{

tip_o_sell=OP_SELLLIMIT;

tip_o_buy=OP_BUYSTOP;

}

if(pr<Teklif-(Stop_level+1)*Puan)

{

tip_o_sell=OP_SELLSTOP;

tip_o_buy=OP_BUYLIMIT;

}

// siparişleri ayarla

OrderSend(Symb,tip_o_sell,Value,pr,3,pr+StopLoss*Puan,pr-TakeProfit*Puan,"Sipariş verildi");

kanıt_hatası();

................................

}

Yani, obj_total==0 fikrine göre ve bu kadar. Ve nedense her şeyi sonsuza kadar kuruyor ve kuruyor.

 
Herkese selam.
Günlüğün bekleyen bir siparişin tetiklendiğini söylememesi normal mi? Bu, test cihazında olur.
Hesap gerçek.
 
Dozol :

Kibar insanlar! Bir danışman yazdım, görünüşe göre gerçek hayatta her şey net bir şekilde çalışıyor, her şey yolunda. Ve test cihazını kontrol ediyorum - buggy.


Bu EA'nın gerçek hayatta veya test cihazında çalışamayacağına inanmıyorum.