H_line'ı son 36 tepenin en yükseğine çekmek - sayfa 2

 

Stok kapanışı umurumda değil, bu yüzden sadece mevcut %K yeterli.

kontrol nesneleri için kod:

 int i, ot= ObjectsTotal ()- 1 ;
string id= ObjectName (i);

for (i=ot;i>= 0 ;i--)
{
   if ( StringSubstr (id, 0 , 7 )== "tomato " )
      {
       if ( StringSubstr (id, 7 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
       if ( StringSubstr (id, 7 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
      }
   if ( StringSubstr (id, 0 , 6 )== "olive " )
      {
       if ( StringSubstr (id, 6 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
      }  
}

bu, 96 mumdan sonra kimlik satırını siler. ihtiyacım olduğu gibi

Şimdi yapmam gereken şey, bir domates çizgisi zaten çizelgedeyse, ea'nın yeni domates çizgileri çizmesini durdurmak.

eklemeyi düşünüyorum

 if ( StringSubstr (id, 7 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ..............
         }

......... = dur ve baştan (ancak yine de zeytin koşullarını okuyun)

şimdi kod:

 int start()
  {
/////////// K% over >75 or under <25 (no waiting for close)
double stoch;
stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );

double high_price,low_price;
int high_nr,low_nr;
high_nr= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 );  
high_price= High [high_nr];
low_nr= iLowest ( NULL , 0 , MODE_LOW , 34 , 2 );
low_price= Low [low_nr];
datetime H= Time [high_nr];
string Hdate = TimeToStr (H, TIME_DATE | TIME_MINUTES );
datetime L= Time [low_nr];
string Ldate = TimeToStr (L, TIME_DATE | TIME_MINUTES );


/////////////////////////////////////////////////////////////////////////////////
//---
 int i, ot= ObjectsTotal ()- 1 ;
string id= ObjectName (i);

for (i=ot;i>= 0 ;i--)
{
   if ( StringSubstr (id, 0 , 7 )== "tomato " )
      {
       if ( StringSubstr (id, 7 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
       if ( StringSubstr (id, 7 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
      }
   if ( StringSubstr (id, 0 , 6 )== "olive " )
      {
       if ( StringSubstr (id, 6 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
      }  
}
//---


////////////////////////////////////////////////////////////////////////////////

if ( Bid <high_price && High [ 0 ]<high_price && High [ 1 ]<high_price && stoch> 75 )
     {
       ObjectCreate ( "tomato " +Hdate, OBJ_TREND , 0 ,H,high_price, Time [ 0 ],high_price);
       ObjectSet ( "tomato " +Hdate, OBJPROP_COLOR ,Tomato);
       //Print ("tomato ON"+high_price);
     }
       

///////////////////////////////////////////////////////////////////////////////

if ( Bid >low_price && Low [ 0 ]>low_price && Low [ 1 ]>low_price && stoch< 25 )
   {
   ObjectCreate ( "olive " +Ldate, OBJ_TREND , 0 ,L,low_price, Time [ 0 ],low_price);
   ObjectSet ( "olive " +Ldate, OBJPROP_COLOR ,Olive);
   //Print ("olive ON"+low_price);
   }
 
   
   
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 

yeniden ifade etmek için:

grafikte en fazla bir domates hattına sahip olmak istiyorum.

bu satır OrderSend için kullanılacaksa, satırı silin.

süresi dolarsa (96), satırı silin.

zeytin için de öyle.

bu nedenle, domates çizgisi zaten grafikteyse, grafikte domates olmayana kadar domates çizgisi yok

yeniden ifade etmenin çözümü bulmaya yardımcı olacağını umuyordum :)

 
cichichan :

yeniden ifade etmek için:

grafikte en fazla bir domates hattına sahip olmak istiyorum.

bu satır OrderSend için kullanılacaksa, satırı silin.

süresi dolarsa (96), satırı silin.

zeytin için de öyle.

yani domates çizgisi zaten grafikteyse, grafikte domates olmayana kadar domates çizgisi yok

yeniden ifade etmenin çözümü bulmaya yardımcı olacağını umuyordum :)


 datetime L= Time [low_nr];
string Ldate = TimeToStr (L, TIME_DATE | TIME_MINUTES );

kendi çizgini yarattığın zaman bu mu ??? bu nasıl yapılır ??

 int i, ot= ObjectsTotal ()- 1 ;
string id= ObjectName (i);

for (i=ot;i>= 0 ;i--)
{
   if ( StringSubstr (id, 0 , 7 )== "tomato " )
      {
       //  line found
      }
}

Peki başka çizgiler çizmekten nasıl kaçınabilirsiniz....??

 

aynı isim sınırlaması nedeniyle betiğin satır çizmesini durdurmak için nesnenin adını ilk olarak değiştirmeyi düşünüyordum ... ama adı değiştirmek için hiçbir işlevim yok.

hmm.... anlamıyorum.

aklım takıldı! aptal ve sinirli hissediyorum

 
cichichan :

aynı isim sınırlaması nedeniyle betiğin satır çizmesini durdurmak için nesnenin adını ilk olarak değiştirmeyi düşünüyordum ... ama adı değiştirmek için hiçbir işlevim yok.

hmm.... anlamıyorum.

aklım takıldı! aptal ve sinirli hissediyorum

ne zaman yeni bir satır oluşturursunuz?

en yüksek veya en düşük bulduğunuz barda değil

ve yalnızca satır yoksa oluşturmanız gerekir

bu nedenle, yeni bir satır oluşturursanız Time[0] zamanını kullanın

nesnenizi bulursanız, adı ne? ==> string id= NesneAdı (i);

yani ne yapman gerekiyor ?? StringSubstr (id, 0 , 7 )== "tomato" olduğunda bu ismi al

 

İlk gönderinize geri dönün:

"bunu çalıştırdığımda domates ve zeytin için ilk kurulumu alıyorum tamam, o zaman dergide "domates AÇIK" farklı fiyat lvl alsam bile, grafikte yeni domates satırı almıyorum. Zeytin için aynı."

Eskisi zaten var olduğu için yeni bir satır alamazsınız. Silin ve yenisi çizilecek.

 

şimdilik şöyle yaptım:

ve olması gerektiği gibi çalışıyor, sadece bir satır ve 96 çubuk silindikten sonra, koşul yeniden göründüğünde yeniden çizim.

 int start()
  {
/////////// K% over >75 or under <25 (no waiting for close)
double stoch;
stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );

double high_price,low_price;
int high_nr,low_nr;
high_nr= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 );  
high_price= High [high_nr];
low_nr= iLowest ( NULL , 0 , MODE_LOW , 34 , 2 );
low_price= Low [low_nr];
datetime H= Time [high_nr];
string Hdate = TimeToStr (H, TIME_DATE | TIME_MINUTES );
datetime L= Time [low_nr];
string Ldate = TimeToStr (L, TIME_DATE | TIME_MINUTES );


/////////////////////////////////////////////////////////////////////////////////
//---
int i, ot= ObjectsTotal ()- 1 ;
string id= ObjectName (i);

for (i=ot;i>= 0 ;i--)
{
   if ( StringSubstr (id, 0 , 7 )== "tomato " )
      {
       if ( StringSubstr (id, 7 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
       if ( StringSubstr (id, 7 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         Print ( "tomato valid" );
         break ;
         }
      }
}

 if (ot==- 1 )
      {
       if ( Bid <high_price && High [ 0 ]<high_price && High [ 1 ]<high_price && stoch> 75 )
         {
         ObjectCreate ( "tomato " +Hdate, OBJ_TREND , 0 ,H,high_price, Time [ 0 ],high_price);
         ObjectSet ( "tomato " +Hdate, OBJPROP_COLOR ,Tomato);
         //Print ("tomato ON"+high_price);
         }
      }  
//---


////////////////////////////////////////////////////////////////////////////////
for (i=ot;i>= 0 ;i--)
{
 if ( StringSubstr (id, 0 , 6 )== "olive " )
      {
       if ( StringSubstr (id, 6 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         ObjectDelete (id);
         }
       if ( StringSubstr (id, 6 , 16 )> TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))
         {
         Print ( "olive valid" );
         break ;
         }   
      }  
 }      

///////////////////////////////////////////////////////////////////////////////
if (ot==- 1 )
{
if ( Bid >low_price && Low [ 0 ]>low_price && Low [ 1 ]>low_price && stoch< 25 )
   {
   ObjectCreate ( "olive " +Ldate, OBJ_TREND , 0 ,L,low_price, Time [ 0 ],low_price);
   ObjectSet ( "olive " +Ldate, OBJPROP_COLOR ,Olive);
   //Print ("olive ON"+low_price);
   }
}
   
   
//----
   
//----
   return ( 0 );
  }
 

Bu çalışıyor mu ?

 if ( StringSubstr (id, 7 , 16 )< TimeToStr ( Time [ 96 ], TIME_DATE | TIME_MINUTES ))

dizeler birbirine < veya > olabilir mi, bu bir soru, bilmiyorum.

Bunu karmaşıklaştırıyorsunuz, çünkü giol size birkaç satır istiyorsanız, satırlara farklı adlar vermeniz gerektiğini söylüyor. Ve o anda haklıydı.

Tek bir satır istediğini bilseydi, bunu söylemezdi. Birden çok satır olması durumunda devrilerin verdiği çözüm çok iyidir, sağolsun devrilere

Ancak, yalnızca bir satır istiyorsanız, "domates" veya "zeytin" olarak adlandırın, o zaman ObjectFind("domates") ObjectDelete ("domates") yapar, zaman sorunlarını Time[96] ve Time[0] depolandığında çözer. çizgi çekilir.

Bir sonraki problem, stok> 75 koşulunun 20 Bar veya 50 Bar sürebilmesidir, bu durumda, satırınızı sileceğiniz zaman, çizgiyi çekme koşulu hala geçerli olacaktır ve satır silinir silinmez , veya alınan bir sipariş, yeni bir çizgi çekilecektir. iyi şanslar, o kadar zor değil.

 

merhaba

İki haftalık kod okumam için nesne olayı karmaşık göründüğünden, satış ve satın alma için Seviye fiyatını belirlemeye karar verdim. bu süreçte bir sorunla karşılaşıyorum:

 void LevelSset()
{

stoch= iStochastic ( NULL , 0 ,Kperiod,Dperiod,Stochshift, MODE_SMA , 1 , MODE_MAIN , 0 );


high_bar= iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 );
string H= TimeToStr ( Time [high_bar], TIME_DATE | TIME_MINUTES );
LSell= High [ iHighest ( NULL , 0 , MODE_HIGH , 34 , 2 )];


if ( Bid <LSell && High [ 0 ]<LSell && High [ 1 ]<LSell && stoch> 75 && LevelSset== false )
         {
         ObjectCreate ( "tomato " +H, OBJ_ARROW , 0 , Time [high_bar],LSell+ Point * 20 );
         ObjectSet ( "tomato " +H, OBJPROP_ARROWCODE , 242 );
         ObjectSet ( "tomato " +H, OBJPROP_COLOR ,Tomato);
         LevelSset= true ;
         Print ( "LevelSset on " +LSell);
         }
if ( Close [ 2 ]>LSell && Close [ 1 ]>LSell && LevelSset== true )
   {
      LSell= 0 ;
      LevelSset= false ;
       Print ( "LSell" +LSell+ "expired due to close" );
   }
}

"if (Close[2]>LSell && Close[1]>LSell && LevelSset==true) çalışmıyor.

if (Close[2]>LSell && Close[1]>LSell) öğesini kaldırır ve bırakırsam (LevelSset==true) veya işlevi değiştirirsem (Close[2]<LSell && Close[1]<1) düzgün çalışıyor gibi görünüyor.

teşekkür ederim

 

bazı fikirler, yanlış olan ne... kimse?

teşekkür ederim